From 8286ac511144e4f17d34eac9affb97e50646344a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6rg=20Frings-F=C3=BCrst?= Date: Wed, 23 Jul 2014 15:25:44 +0200 Subject: Imported Upstream version 4.0.0 --- xsd/INSTALL | 29 +- xsd/NEWS | 143 +- xsd/README | 4 +- xsd/build/bootstrap.make | 44 +- xsd/build/configuration-dynamic.make | 3 +- xsd/build/configuration-rules.make | 3 +- xsd/build/configuration.make | 5 +- xsd/build/configure | 12 +- xsd/build/cxx/configuration-dynamic.make | 5 +- xsd/build/cxx/generic/configuration-dynamic.make | 16 + xsd/build/cxx/gnu/configuration-dynamic.make | 8 - xsd/build/import/cli/LICENSE | 21 + xsd/build/import/cli/cli-cxx.make | 48 + xsd/build/import/cli/configuration-dynamic.make | 3 + xsd/build/import/cli/configuration-rules.make | 14 + xsd/build/import/cli/configure | 54 + xsd/build/import/cli/stub.make | 29 + xsd/build/import/libace/configuration-rules.make | 1 - xsd/build/import/libace/configure | 1 - xsd/build/import/libace/rules.make | 1 - xsd/build/import/libace/stub.make | 1 - xsd/build/import/libbackend-elements/LICENSE | 340 - .../libbackend-elements/configuration-dynamic.make | 4 - .../libbackend-elements/configuration-rules.make | 15 - xsd/build/import/libbackend-elements/configure | 55 - xsd/build/import/libbackend-elements/stub.make | 32 - .../import/libboost/configuration-dynamic.make | 8 - xsd/build/import/libboost/configuration-rules.make | 3 +- xsd/build/import/libboost/configure | 3 +- xsd/build/import/libboost/date-time/rules.make | 3 +- xsd/build/import/libboost/date-time/stub.make | 3 +- xsd/build/import/libboost/filesystem/rules.make | 53 - xsd/build/import/libboost/filesystem/stub.make | 36 - xsd/build/import/libboost/regex/rules.make | 50 - xsd/build/import/libboost/regex/stub.make | 36 - xsd/build/import/libboost/serialization/rules.make | 3 +- xsd/build/import/libboost/serialization/stub.make | 3 +- xsd/build/import/libcult/LICENSE | 340 - .../import/libcult/configuration-dynamic.make | 4 - xsd/build/import/libcult/configuration-rules.make | 15 - xsd/build/import/libcult/configure | 55 - xsd/build/import/libcult/stub.make | 30 - xsd/build/import/libcutl/LICENSE | 24 + .../import/libcutl/configuration-dynamic.make | 8 + xsd/build/import/libcutl/configuration-rules.make | 14 + xsd/build/import/libcutl/configure | 54 + xsd/build/import/libcutl/stub.make | 29 + xsd/build/import/libdbxml/LICENSE | 340 - xsd/build/import/libdbxml/configuration-rules.make | 15 - xsd/build/import/libdbxml/configure | 58 - xsd/build/import/libdbxml/rules.make | 42 - xsd/build/import/libdbxml/stub.make | 32 - xsd/build/import/libdbxml/version | 1 - .../import/libxerces-c/configuration-rules.make | 1 - xsd/build/import/libxerces-c/configure | 1 - xsd/build/import/libxerces-c/rules.make | 1 - xsd/build/import/libxerces-c/stub.make | 1 - .../import/libxqilla/configuration-rules.make | 1 - xsd/build/import/libxqilla/configure | 1 - xsd/build/import/libxqilla/rules.make | 1 - xsd/build/import/libxqilla/stub.make | 1 - .../libxsd-frontend/configuration-rules.make | 3 +- xsd/build/import/libxsd-frontend/configure | 3 +- xsd/build/import/libxsd-frontend/stub.make | 5 +- xsd/build/import/libz/configuration-rules.make | 1 - xsd/build/import/libz/configure | 1 - xsd/build/import/libz/rules.make | 1 - xsd/build/import/libz/stub.make | 1 - xsd/build/xsd/parser/xsd-cxx.make | 5 +- xsd/build/xsd/tree/xsd-cxx.make | 5 +- xsd/dist/README-UNIX | 3 - xsd/dist/README-WINDOWS | 138 +- xsd/dist/etc/vc-10.0/xsd-cxx-parser.props | 33 - xsd/dist/etc/vc-10.0/xsd-cxx-parser.targets | 92 - xsd/dist/etc/vc-10.0/xsd-cxx-parser.xml | 284 - xsd/dist/etc/vc-10.0/xsd-cxx-tree.props | 45 - xsd/dist/etc/vc-10.0/xsd-cxx-tree.targets | 105 - xsd/dist/etc/vc-10.0/xsd-cxx-tree.xml | 390 - xsd/dist/etc/vc-1x.0/xsd-cxx-parser.props | 33 + xsd/dist/etc/vc-1x.0/xsd-cxx-parser.targets | 92 + xsd/dist/etc/vc-1x.0/xsd-cxx-parser.xml | 284 + xsd/dist/etc/vc-1x.0/xsd-cxx-tree.props | 47 + xsd/dist/etc/vc-1x.0/xsd-cxx-tree.targets | 107 + xsd/dist/etc/vc-1x.0/xsd-cxx-tree.xml | 411 + xsd/dist/examples/build/cxx/compilers.make | 23 +- xsd/dist/examples/build/cxx/rules.make | 21 +- xsd/dist/examples/build/xsd/common.make | 3 +- xsd/dist/examples/build/xsd/parser-rules.make | 3 +- xsd/dist/examples/build/xsd/tree-rules.make | 3 +- .../cxx/parser/generated/generated-10.0.vcxproj | 207 - .../generated/generated-10.0.vcxproj.filters | 44 - .../cxx/parser/generated/generated-7.1.vcproj | 168 - .../cxx/parser/generated/generated-8.0.vcproj | 427 - .../cxx/parser/generated/generated-9.0.vcproj | 424 - .../cxx/parser/generated/generated-vc10.vcxproj | 203 + .../generated/generated-vc10.vcxproj.filters | 44 + .../cxx/parser/generated/generated-vc11.vcxproj | 207 + .../generated/generated-vc11.vcxproj.filters | 44 + .../cxx/parser/generated/generated-vc12.vcxproj | 211 + .../generated/generated-vc12.vcxproj.filters | 44 + .../cxx/parser/generated/generated-vc8.vcproj | 427 + .../cxx/parser/generated/generated-vc9.vcproj | 424 + .../parser/generated/generated-xerces2-7.1.vcproj | 168 - .../parser/generated/generated-xerces2-8.0.vcproj | 427 - .../parser/generated/generated-xerces2-9.0.vcproj | 424 - .../examples/cxx/parser/hello/hello-10.0.vcxproj | 205 - .../cxx/parser/hello/hello-10.0.vcxproj.filters | 38 - .../examples/cxx/parser/hello/hello-7.1.vcproj | 162 - .../examples/cxx/parser/hello/hello-8.0.vcproj | 419 - .../examples/cxx/parser/hello/hello-9.0.vcproj | 416 - .../examples/cxx/parser/hello/hello-vc10.vcxproj | 201 + .../cxx/parser/hello/hello-vc10.vcxproj.filters | 38 + .../examples/cxx/parser/hello/hello-vc11.vcxproj | 205 + .../cxx/parser/hello/hello-vc11.vcxproj.filters | 38 + .../examples/cxx/parser/hello/hello-vc12.vcxproj | 209 + .../cxx/parser/hello/hello-vc12.vcxproj.filters | 38 + .../examples/cxx/parser/hello/hello-vc8.vcproj | 419 + .../examples/cxx/parser/hello/hello-vc9.vcproj | 416 + .../cxx/parser/hello/hello-xerces2-7.1.vcproj | 162 - .../cxx/parser/hello/hello-xerces2-8.0.vcproj | 419 - .../cxx/parser/hello/hello-xerces2-9.0.vcproj | 416 - .../cxx/parser/library/library-10.0.vcxproj | 209 - .../parser/library/library-10.0.vcxproj.filters | 54 - .../examples/cxx/parser/library/library-7.1.vcproj | 178 - .../examples/cxx/parser/library/library-8.0.vcproj | 440 - .../examples/cxx/parser/library/library-9.0.vcproj | 437 - .../cxx/parser/library/library-vc10.vcxproj | 205 + .../parser/library/library-vc10.vcxproj.filters | 54 + .../cxx/parser/library/library-vc11.vcxproj | 209 + .../parser/library/library-vc11.vcxproj.filters | 54 + .../cxx/parser/library/library-vc12.vcxproj | 213 + .../parser/library/library-vc12.vcxproj.filters | 54 + .../examples/cxx/parser/library/library-vc8.vcproj | 440 + .../examples/cxx/parser/library/library-vc9.vcproj | 437 + .../cxx/parser/library/library-xerces2-7.1.vcproj | 178 - .../cxx/parser/library/library-xerces2-8.0.vcproj | 440 - .../cxx/parser/library/library-xerces2-9.0.vcproj | 437 - .../examples/cxx/parser/mixed/mixed-10.0.vcxproj | 206 - .../cxx/parser/mixed/mixed-10.0.vcxproj.filters | 41 - .../examples/cxx/parser/mixed/mixed-7.1.vcproj | 165 - .../examples/cxx/parser/mixed/mixed-8.0.vcproj | 423 - .../examples/cxx/parser/mixed/mixed-9.0.vcproj | 420 - .../examples/cxx/parser/mixed/mixed-vc10.vcxproj | 202 + .../cxx/parser/mixed/mixed-vc10.vcxproj.filters | 41 + .../examples/cxx/parser/mixed/mixed-vc11.vcxproj | 206 + .../cxx/parser/mixed/mixed-vc11.vcxproj.filters | 41 + .../examples/cxx/parser/mixed/mixed-vc12.vcxproj | 210 + .../cxx/parser/mixed/mixed-vc12.vcxproj.filters | 41 + .../examples/cxx/parser/mixed/mixed-vc8.vcproj | 423 + .../examples/cxx/parser/mixed/mixed-vc9.vcproj | 420 + .../cxx/parser/mixed/mixed-xerces2-7.1.vcproj | 165 - .../cxx/parser/mixed/mixed-xerces2-8.0.vcproj | 423 - .../cxx/parser/mixed/mixed-xerces2-9.0.vcproj | 420 - .../examples/cxx/parser/mixin/mixin-10.0.vcxproj | 206 - .../cxx/parser/mixin/mixin-10.0.vcxproj.filters | 41 - .../examples/cxx/parser/mixin/mixin-7.1.vcproj | 165 - .../examples/cxx/parser/mixin/mixin-8.0.vcproj | 423 - .../examples/cxx/parser/mixin/mixin-9.0.vcproj | 420 - .../examples/cxx/parser/mixin/mixin-vc10.vcxproj | 202 + .../cxx/parser/mixin/mixin-vc10.vcxproj.filters | 41 + .../examples/cxx/parser/mixin/mixin-vc11.vcxproj | 206 + .../cxx/parser/mixin/mixin-vc11.vcxproj.filters | 41 + .../examples/cxx/parser/mixin/mixin-vc12.vcxproj | 210 + .../cxx/parser/mixin/mixin-vc12.vcxproj.filters | 41 + .../examples/cxx/parser/mixin/mixin-vc8.vcproj | 423 + .../examples/cxx/parser/mixin/mixin-vc9.vcproj | 420 + .../cxx/parser/mixin/mixin-xerces2-7.1.vcproj | 165 - .../cxx/parser/mixin/mixin-xerces2-8.0.vcproj | 423 - .../cxx/parser/mixin/mixin-xerces2-9.0.vcproj | 420 - .../cxx/parser/multiroot/multiroot-10.0.vcxproj | 212 - .../multiroot/multiroot-10.0.vcxproj.filters | 47 - .../cxx/parser/multiroot/multiroot-7.1.vcproj | 173 - .../cxx/parser/multiroot/multiroot-8.0.vcproj | 435 - .../cxx/parser/multiroot/multiroot-9.0.vcproj | 432 - .../cxx/parser/multiroot/multiroot-vc10.vcxproj | 208 + .../multiroot/multiroot-vc10.vcxproj.filters | 47 + .../cxx/parser/multiroot/multiroot-vc11.vcxproj | 212 + .../multiroot/multiroot-vc11.vcxproj.filters | 47 + .../cxx/parser/multiroot/multiroot-vc12.vcxproj | 216 + .../multiroot/multiroot-vc12.vcxproj.filters | 47 + .../cxx/parser/multiroot/multiroot-vc8.vcproj | 435 + .../cxx/parser/multiroot/multiroot-vc9.vcproj | 432 + .../parser/multiroot/multiroot-xerces2-7.1.vcproj | 173 - .../parser/multiroot/multiroot-xerces2-8.0.vcproj | 435 - .../parser/multiroot/multiroot-xerces2-9.0.vcproj | 432 - xsd/dist/examples/cxx/parser/parser-10.0.sln | 115 - xsd/dist/examples/cxx/parser/parser-7.1.sln | 93 - xsd/dist/examples/cxx/parser/parser-8.0.sln | 115 - xsd/dist/examples/cxx/parser/parser-9.0.sln | 115 - .../examples/cxx/parser/parser-xerces2-7.1.sln | 93 - .../examples/cxx/parser/parser-xerces2-8.0.sln | 115 - .../examples/cxx/parser/parser-xerces2-9.0.sln | 115 - .../parser/performance/performance-10.0.vcxproj | 207 - .../performance/performance-10.0.vcxproj.filters | 44 - .../cxx/parser/performance/performance-7.1.vcproj | 168 - .../cxx/parser/performance/performance-8.0.vcproj | 427 - .../cxx/parser/performance/performance-9.0.vcproj | 424 - .../parser/performance/performance-vc10.vcxproj | 203 + .../performance/performance-vc10.vcxproj.filters | 44 + .../parser/performance/performance-vc11.vcxproj | 207 + .../performance/performance-vc11.vcxproj.filters | 44 + .../parser/performance/performance-vc12.vcxproj | 211 + .../performance/performance-vc12.vcxproj.filters | 44 + .../cxx/parser/performance/performance-vc8.vcproj | 427 + .../cxx/parser/performance/performance-vc9.vcproj | 424 + .../performance/performance-xerces2-7.1.vcproj | 168 - .../performance/performance-xerces2-8.0.vcproj | 427 - .../performance/performance-xerces2-9.0.vcproj | 424 - .../parser/polymorphism/polymorphism-10.0.vcxproj | 211 - .../polymorphism/polymorphism-10.0.vcxproj.filters | 44 - .../parser/polymorphism/polymorphism-7.1.vcproj | 170 - .../parser/polymorphism/polymorphism-8.0.vcproj | 431 - .../parser/polymorphism/polymorphism-9.0.vcproj | 428 - .../parser/polymorphism/polymorphism-vc10.vcxproj | 207 + .../polymorphism/polymorphism-vc10.vcxproj.filters | 44 + .../parser/polymorphism/polymorphism-vc11.vcxproj | 211 + .../polymorphism/polymorphism-vc11.vcxproj.filters | 44 + .../parser/polymorphism/polymorphism-vc12.vcxproj | 215 + .../polymorphism/polymorphism-vc12.vcxproj.filters | 44 + .../parser/polymorphism/polymorphism-vc8.vcproj | 431 + .../parser/polymorphism/polymorphism-vc9.vcproj | 428 + .../polymorphism/polymorphism-xerces2-7.1.vcproj | 170 - .../polymorphism/polymorphism-xerces2-8.0.vcproj | 431 - .../polymorphism/polymorphism-xerces2-9.0.vcproj | 428 - .../cxx/parser/polyroot/polyroot-10.0.vcxproj | 211 - .../parser/polyroot/polyroot-10.0.vcxproj.filters | 44 - .../cxx/parser/polyroot/polyroot-7.1.vcproj | 170 - .../cxx/parser/polyroot/polyroot-8.0.vcproj | 431 - .../cxx/parser/polyroot/polyroot-9.0.vcproj | 428 - .../cxx/parser/polyroot/polyroot-vc10.vcxproj | 207 + .../parser/polyroot/polyroot-vc10.vcxproj.filters | 44 + .../cxx/parser/polyroot/polyroot-vc11.vcxproj | 211 + .../parser/polyroot/polyroot-vc11.vcxproj.filters | 44 + .../cxx/parser/polyroot/polyroot-vc12.vcxproj | 215 + .../parser/polyroot/polyroot-vc12.vcxproj.filters | 44 + .../cxx/parser/polyroot/polyroot-vc8.vcproj | 431 + .../cxx/parser/polyroot/polyroot-vc9.vcproj | 428 + .../parser/polyroot/polyroot-xerces2-7.1.vcproj | 170 - .../parser/polyroot/polyroot-xerces2-8.0.vcproj | 431 - .../parser/polyroot/polyroot-xerces2-9.0.vcproj | 428 - .../cxx/parser/wildcard/wildcard-10.0.vcxproj | 205 - .../parser/wildcard/wildcard-10.0.vcxproj.filters | 38 - .../cxx/parser/wildcard/wildcard-7.1.vcproj | 162 - .../cxx/parser/wildcard/wildcard-8.0.vcproj | 419 - .../cxx/parser/wildcard/wildcard-9.0.vcproj | 416 - .../cxx/parser/wildcard/wildcard-vc10.vcxproj | 201 + .../parser/wildcard/wildcard-vc10.vcxproj.filters | 38 + .../cxx/parser/wildcard/wildcard-vc11.vcxproj | 205 + .../parser/wildcard/wildcard-vc11.vcxproj.filters | 38 + .../cxx/parser/wildcard/wildcard-vc12.vcxproj | 209 + .../parser/wildcard/wildcard-vc12.vcxproj.filters | 38 + .../cxx/parser/wildcard/wildcard-vc8.vcproj | 419 + .../cxx/parser/wildcard/wildcard-vc9.vcproj | 416 + .../parser/wildcard/wildcard-xerces2-7.1.vcproj | 162 - .../parser/wildcard/wildcard-xerces2-8.0.vcproj | 419 - .../parser/wildcard/wildcard-xerces2-9.0.vcproj | 416 - .../examples/cxx/tree/binary/boost/boost-10.0.sln | 25 - .../cxx/tree/binary/boost/boost-10.0.vcxproj | 212 - .../tree/binary/boost/boost-10.0.vcxproj.filters | 47 - .../examples/cxx/tree/binary/boost/boost-7.1.sln | 21 - .../cxx/tree/binary/boost/boost-7.1.vcproj | 173 - .../examples/cxx/tree/binary/boost/boost-8.0.sln | 25 - .../cxx/tree/binary/boost/boost-8.0.vcproj | 435 - .../examples/cxx/tree/binary/boost/boost-9.0.sln | 25 - .../cxx/tree/binary/boost/boost-9.0.vcproj | 432 - .../cxx/tree/binary/boost/boost-vc10.vcxproj | 208 + .../tree/binary/boost/boost-vc10.vcxproj.filters | 47 + .../cxx/tree/binary/boost/boost-vc11.vcxproj | 212 + .../tree/binary/boost/boost-vc11.vcxproj.filters | 47 + .../cxx/tree/binary/boost/boost-vc12.vcxproj | 216 + .../tree/binary/boost/boost-vc12.vcxproj.filters | 47 + .../cxx/tree/binary/boost/boost-vc8.vcproj | 435 + .../cxx/tree/binary/boost/boost-vc9.vcproj | 432 + .../cxx/tree/binary/boost/boost-xerces2-7.1.sln | 21 - .../cxx/tree/binary/boost/boost-xerces2-7.1.vcproj | 173 - .../cxx/tree/binary/boost/boost-xerces2-8.0.sln | 25 - .../cxx/tree/binary/boost/boost-xerces2-8.0.vcproj | 435 - .../cxx/tree/binary/boost/boost-xerces2-9.0.sln | 25 - .../cxx/tree/binary/boost/boost-xerces2-9.0.vcproj | 432 - xsd/dist/examples/cxx/tree/binary/cdr/cdr-10.0.sln | 25 - .../examples/cxx/tree/binary/cdr/cdr-10.0.vcxproj | 209 - .../cxx/tree/binary/cdr/cdr-10.0.vcxproj.filters | 38 - xsd/dist/examples/cxx/tree/binary/cdr/cdr-7.1.sln | 21 - .../examples/cxx/tree/binary/cdr/cdr-7.1.vcproj | 164 - xsd/dist/examples/cxx/tree/binary/cdr/cdr-8.0.sln | 25 - .../examples/cxx/tree/binary/cdr/cdr-8.0.vcproj | 423 - xsd/dist/examples/cxx/tree/binary/cdr/cdr-9.0.sln | 25 - .../examples/cxx/tree/binary/cdr/cdr-9.0.vcproj | 420 - .../examples/cxx/tree/binary/cdr/cdr-vc10.vcxproj | 205 + .../cxx/tree/binary/cdr/cdr-vc10.vcxproj.filters | 38 + .../examples/cxx/tree/binary/cdr/cdr-vc11.vcxproj | 209 + .../cxx/tree/binary/cdr/cdr-vc11.vcxproj.filters | 38 + .../examples/cxx/tree/binary/cdr/cdr-vc12.vcxproj | 213 + .../cxx/tree/binary/cdr/cdr-vc12.vcxproj.filters | 38 + .../examples/cxx/tree/binary/cdr/cdr-vc8.vcproj | 423 + .../examples/cxx/tree/binary/cdr/cdr-vc9.vcproj | 420 + .../cxx/tree/binary/cdr/cdr-xerces2-7.1.sln | 21 - .../cxx/tree/binary/cdr/cdr-xerces2-7.1.vcproj | 164 - .../cxx/tree/binary/cdr/cdr-xerces2-8.0.sln | 25 - .../cxx/tree/binary/cdr/cdr-xerces2-8.0.vcproj | 423 - .../cxx/tree/binary/cdr/cdr-xerces2-9.0.sln | 25 - .../cxx/tree/binary/cdr/cdr-xerces2-9.0.vcproj | 420 - xsd/dist/examples/cxx/tree/binary/xdr/xdr-10.0.sln | 25 - .../examples/cxx/tree/binary/xdr/xdr-10.0.vcxproj | 209 - .../cxx/tree/binary/xdr/xdr-10.0.vcxproj.filters | 38 - xsd/dist/examples/cxx/tree/binary/xdr/xdr-7.1.sln | 21 - .../examples/cxx/tree/binary/xdr/xdr-7.1.vcproj | 164 - xsd/dist/examples/cxx/tree/binary/xdr/xdr-8.0.sln | 25 - .../examples/cxx/tree/binary/xdr/xdr-8.0.vcproj | 423 - xsd/dist/examples/cxx/tree/binary/xdr/xdr-9.0.sln | 25 - .../examples/cxx/tree/binary/xdr/xdr-9.0.vcproj | 420 - .../examples/cxx/tree/binary/xdr/xdr-vc10.vcxproj | 205 + .../cxx/tree/binary/xdr/xdr-vc10.vcxproj.filters | 38 + .../examples/cxx/tree/binary/xdr/xdr-vc11.vcxproj | 209 + .../cxx/tree/binary/xdr/xdr-vc11.vcxproj.filters | 38 + .../examples/cxx/tree/binary/xdr/xdr-vc12.vcxproj | 213 + .../cxx/tree/binary/xdr/xdr-vc12.vcxproj.filters | 38 + .../examples/cxx/tree/binary/xdr/xdr-vc8.vcproj | 423 + .../examples/cxx/tree/binary/xdr/xdr-vc9.vcproj | 420 + .../cxx/tree/binary/xdr/xdr-xerces2-7.1.sln | 21 - .../cxx/tree/binary/xdr/xdr-xerces2-7.1.vcproj | 164 - .../cxx/tree/binary/xdr/xdr-xerces2-8.0.sln | 25 - .../cxx/tree/binary/xdr/xdr-xerces2-8.0.vcproj | 423 - .../cxx/tree/binary/xdr/xdr-xerces2-9.0.sln | 25 - .../cxx/tree/binary/xdr/xdr-xerces2-9.0.vcproj | 420 - .../examples/cxx/tree/caching/caching-10.0.vcxproj | 209 - .../cxx/tree/caching/caching-10.0.vcxproj.filters | 38 - .../examples/cxx/tree/caching/caching-7.1.vcproj | 164 - .../examples/cxx/tree/caching/caching-8.0.vcproj | 423 - .../examples/cxx/tree/caching/caching-9.0.vcproj | 420 - .../examples/cxx/tree/caching/caching-vc10.vcxproj | 205 + .../cxx/tree/caching/caching-vc10.vcxproj.filters | 38 + .../examples/cxx/tree/caching/caching-vc11.vcxproj | 209 + .../cxx/tree/caching/caching-vc11.vcxproj.filters | 38 + .../examples/cxx/tree/caching/caching-vc12.vcxproj | 213 + .../cxx/tree/caching/caching-vc12.vcxproj.filters | 38 + .../examples/cxx/tree/caching/caching-vc8.vcproj | 423 + .../examples/cxx/tree/caching/caching-vc9.vcproj | 420 + .../cxx/tree/caching/caching-xerces2-7.1.vcproj | 164 - .../cxx/tree/caching/caching-xerces2-8.0.vcproj | 423 - .../cxx/tree/caching/caching-xerces2-9.0.vcproj | 420 - .../cxx/tree/compression/compression-10.0.sln | 25 - .../cxx/tree/compression/compression-10.0.vcxproj | 213 - .../compression/compression-10.0.vcxproj.filters | 50 - .../cxx/tree/compression/compression-7.1.sln | 21 - .../cxx/tree/compression/compression-7.1.vcproj | 176 - .../cxx/tree/compression/compression-8.0.sln | 25 - .../cxx/tree/compression/compression-8.0.vcproj | 435 - .../cxx/tree/compression/compression-9.0.sln | 25 - .../cxx/tree/compression/compression-9.0.vcproj | 432 - .../cxx/tree/compression/compression-vc10.vcxproj | 209 + .../compression/compression-vc10.vcxproj.filters | 50 + .../cxx/tree/compression/compression-vc11.vcxproj | 213 + .../compression/compression-vc11.vcxproj.filters | 50 + .../cxx/tree/compression/compression-vc12.vcxproj | 217 + .../compression/compression-vc12.vcxproj.filters | 50 + .../cxx/tree/compression/compression-vc8.vcproj | 435 + .../cxx/tree/compression/compression-vc9.vcproj | 432 + .../tree/compression/compression-xerces2-7.1.sln | 21 - .../compression/compression-xerces2-7.1.vcproj | 176 - .../tree/compression/compression-xerces2-8.0.sln | 25 - .../compression/compression-xerces2-8.0.vcproj | 435 - .../tree/compression/compression-xerces2-9.0.sln | 25 - .../compression/compression-xerces2-9.0.vcproj | 432 - .../cxx/tree/custom/calendar/calendar-10.0.sln | 25 - .../cxx/tree/custom/calendar/calendar-10.0.vcxproj | 233 - .../custom/calendar/calendar-10.0.vcxproj.filters | 54 - .../cxx/tree/custom/calendar/calendar-7.1.sln | 21 - .../cxx/tree/custom/calendar/calendar-7.1.vcproj | 186 - .../cxx/tree/custom/calendar/calendar-8.0.sln | 25 - .../cxx/tree/custom/calendar/calendar-8.0.vcproj | 456 - .../cxx/tree/custom/calendar/calendar-9.0.sln | 25 - .../cxx/tree/custom/calendar/calendar-9.0.vcproj | 453 - .../cxx/tree/custom/calendar/calendar-vc10.vcxproj | 229 + .../custom/calendar/calendar-vc10.vcxproj.filters | 54 + .../cxx/tree/custom/calendar/calendar-vc11.vcxproj | 233 + .../custom/calendar/calendar-vc11.vcxproj.filters | 54 + .../cxx/tree/custom/calendar/calendar-vc12.vcxproj | 237 + .../custom/calendar/calendar-vc12.vcxproj.filters | 54 + .../cxx/tree/custom/calendar/calendar-vc8.vcproj | 456 + .../cxx/tree/custom/calendar/calendar-vc9.vcproj | 453 + .../tree/custom/calendar/calendar-xerces2-7.1.sln | 21 - .../custom/calendar/calendar-xerces2-7.1.vcproj | 186 - .../tree/custom/calendar/calendar-xerces2-8.0.sln | 25 - .../custom/calendar/calendar-xerces2-8.0.vcproj | 456 - .../tree/custom/calendar/calendar-xerces2-9.0.sln | 25 - .../custom/calendar/calendar-xerces2-9.0.vcproj | 453 - .../cxx/tree/custom/comments/comments-10.0.vcxproj | 235 - .../custom/comments/comments-10.0.vcxproj.filters | 60 - .../cxx/tree/custom/comments/comments-7.1.vcproj | 192 - .../cxx/tree/custom/comments/comments-8.0.vcproj | 464 - .../cxx/tree/custom/comments/comments-9.0.vcproj | 461 - .../cxx/tree/custom/comments/comments-vc10.vcxproj | 231 + .../custom/comments/comments-vc10.vcxproj.filters | 60 + .../cxx/tree/custom/comments/comments-vc11.vcxproj | 235 + .../custom/comments/comments-vc11.vcxproj.filters | 60 + .../cxx/tree/custom/comments/comments-vc12.vcxproj | 239 + .../custom/comments/comments-vc12.vcxproj.filters | 60 + .../cxx/tree/custom/comments/comments-vc8.vcproj | 464 + .../cxx/tree/custom/comments/comments-vc9.vcproj | 461 + .../custom/comments/comments-xerces2-7.1.vcproj | 192 - .../custom/comments/comments-xerces2-8.0.vcproj | 464 - .../custom/comments/comments-xerces2-9.0.vcproj | 461 - .../examples/cxx/tree/custom/comments/makefile | 8 +- .../cxx/tree/custom/contacts/contacts-10.0.vcxproj | 212 - .../custom/contacts/contacts-10.0.vcxproj.filters | 51 - .../cxx/tree/custom/contacts/contacts-7.1.vcproj | 177 - .../cxx/tree/custom/contacts/contacts-8.0.vcproj | 440 - .../cxx/tree/custom/contacts/contacts-9.0.vcproj | 437 - .../cxx/tree/custom/contacts/contacts-vc10.vcxproj | 208 + .../custom/contacts/contacts-vc10.vcxproj.filters | 51 + .../cxx/tree/custom/contacts/contacts-vc11.vcxproj | 212 + .../custom/contacts/contacts-vc11.vcxproj.filters | 51 + .../cxx/tree/custom/contacts/contacts-vc12.vcxproj | 216 + .../custom/contacts/contacts-vc12.vcxproj.filters | 51 + .../cxx/tree/custom/contacts/contacts-vc8.vcproj | 440 + .../cxx/tree/custom/contacts/contacts-vc9.vcproj | 437 + .../custom/contacts/contacts-xerces2-7.1.vcproj | 177 - .../custom/contacts/contacts-xerces2-8.0.vcproj | 440 - .../custom/contacts/contacts-xerces2-9.0.vcproj | 437 - .../examples/cxx/tree/custom/contacts/makefile | 8 +- xsd/dist/examples/cxx/tree/custom/custom-10.0.sln | 75 - xsd/dist/examples/cxx/tree/custom/custom-7.1.sln | 61 - xsd/dist/examples/cxx/tree/custom/custom-8.0.sln | 75 - xsd/dist/examples/cxx/tree/custom/custom-9.0.sln | 75 - .../cxx/tree/custom/custom-xerces2-7.1.sln | 61 - .../cxx/tree/custom/custom-xerces2-8.0.sln | 75 - .../cxx/tree/custom/custom-xerces2-9.0.sln | 75 - .../cxx/tree/custom/double/double-10.0.vcxproj | 233 - .../tree/custom/double/double-10.0.vcxproj.filters | 54 - .../cxx/tree/custom/double/double-7.1.vcproj | 186 - .../cxx/tree/custom/double/double-8.0.vcproj | 456 - .../cxx/tree/custom/double/double-9.0.vcproj | 453 - .../cxx/tree/custom/double/double-vc10.vcxproj | 229 + .../tree/custom/double/double-vc10.vcxproj.filters | 54 + .../cxx/tree/custom/double/double-vc11.vcxproj | 233 + .../tree/custom/double/double-vc11.vcxproj.filters | 54 + .../cxx/tree/custom/double/double-vc12.vcxproj | 237 + .../tree/custom/double/double-vc12.vcxproj.filters | 54 + .../cxx/tree/custom/double/double-vc8.vcproj | 456 + .../cxx/tree/custom/double/double-vc9.vcproj | 453 + .../tree/custom/double/double-xerces2-7.1.vcproj | 186 - .../tree/custom/double/double-xerces2-8.0.vcproj | 456 - .../tree/custom/double/double-xerces2-9.0.vcproj | 453 - xsd/dist/examples/cxx/tree/custom/mixed/makefile | 9 +- .../cxx/tree/custom/mixed/mixed-10.0.vcxproj | 212 - .../tree/custom/mixed/mixed-10.0.vcxproj.filters | 51 - .../cxx/tree/custom/mixed/mixed-7.1.vcproj | 177 - .../cxx/tree/custom/mixed/mixed-8.0.vcproj | 440 - .../cxx/tree/custom/mixed/mixed-9.0.vcproj | 437 - .../cxx/tree/custom/mixed/mixed-vc10.vcxproj | 208 + .../tree/custom/mixed/mixed-vc10.vcxproj.filters | 51 + .../cxx/tree/custom/mixed/mixed-vc11.vcxproj | 212 + .../tree/custom/mixed/mixed-vc11.vcxproj.filters | 51 + .../cxx/tree/custom/mixed/mixed-vc12.vcxproj | 216 + .../tree/custom/mixed/mixed-vc12.vcxproj.filters | 51 + .../cxx/tree/custom/mixed/mixed-vc8.vcproj | 440 + .../cxx/tree/custom/mixed/mixed-vc9.vcproj | 437 + .../cxx/tree/custom/mixed/mixed-xerces2-7.1.vcproj | 177 - .../cxx/tree/custom/mixed/mixed-xerces2-8.0.vcproj | 440 - .../cxx/tree/custom/mixed/mixed-xerces2-9.0.vcproj | 437 - .../cxx/tree/custom/taxonomy/taxonomy-10.0.vcxproj | 214 - .../custom/taxonomy/taxonomy-10.0.vcxproj.filters | 57 - .../cxx/tree/custom/taxonomy/taxonomy-7.1.vcproj | 183 - .../cxx/tree/custom/taxonomy/taxonomy-8.0.vcproj | 448 - .../cxx/tree/custom/taxonomy/taxonomy-9.0.vcproj | 445 - .../cxx/tree/custom/taxonomy/taxonomy-vc10.vcxproj | 210 + .../custom/taxonomy/taxonomy-vc10.vcxproj.filters | 57 + .../cxx/tree/custom/taxonomy/taxonomy-vc11.vcxproj | 214 + .../custom/taxonomy/taxonomy-vc11.vcxproj.filters | 57 + .../cxx/tree/custom/taxonomy/taxonomy-vc12.vcxproj | 218 + .../custom/taxonomy/taxonomy-vc12.vcxproj.filters | 57 + .../cxx/tree/custom/taxonomy/taxonomy-vc8.vcproj | 448 + .../cxx/tree/custom/taxonomy/taxonomy-vc9.vcproj | 445 + .../custom/taxonomy/taxonomy-xerces2-7.1.vcproj | 183 - .../custom/taxonomy/taxonomy-xerces2-8.0.vcproj | 448 - .../custom/taxonomy/taxonomy-xerces2-9.0.vcproj | 445 - .../examples/cxx/tree/custom/wildcard/makefile | 10 +- .../cxx/tree/custom/wildcard/wildcard-10.0.vcxproj | 212 - .../custom/wildcard/wildcard-10.0.vcxproj.filters | 51 - .../cxx/tree/custom/wildcard/wildcard-7.1.vcproj | 177 - .../cxx/tree/custom/wildcard/wildcard-8.0.vcproj | 440 - .../cxx/tree/custom/wildcard/wildcard-9.0.vcproj | 437 - .../cxx/tree/custom/wildcard/wildcard-vc10.vcxproj | 208 + .../custom/wildcard/wildcard-vc10.vcxproj.filters | 51 + .../cxx/tree/custom/wildcard/wildcard-vc11.vcxproj | 212 + .../custom/wildcard/wildcard-vc11.vcxproj.filters | 51 + .../cxx/tree/custom/wildcard/wildcard-vc12.vcxproj | 216 + .../custom/wildcard/wildcard-vc12.vcxproj.filters | 51 + .../cxx/tree/custom/wildcard/wildcard-vc8.vcproj | 440 + .../cxx/tree/custom/wildcard/wildcard-vc9.vcproj | 437 + .../custom/wildcard/wildcard-xerces2-7.1.vcproj | 177 - .../custom/wildcard/wildcard-xerces2-8.0.vcproj | 440 - .../custom/wildcard/wildcard-xerces2-9.0.vcproj | 437 - xsd/dist/examples/cxx/tree/dbxml/dbxml-10.0.sln | 25 - .../examples/cxx/tree/dbxml/dbxml-10.0.vcxproj | 209 - .../cxx/tree/dbxml/dbxml-10.0.vcxproj.filters | 38 - xsd/dist/examples/cxx/tree/dbxml/dbxml-7.1.sln | 21 - xsd/dist/examples/cxx/tree/dbxml/dbxml-7.1.vcproj | 164 - xsd/dist/examples/cxx/tree/dbxml/dbxml-8.0.sln | 25 - xsd/dist/examples/cxx/tree/dbxml/dbxml-8.0.vcproj | 423 - xsd/dist/examples/cxx/tree/dbxml/dbxml-9.0.sln | 25 - xsd/dist/examples/cxx/tree/dbxml/dbxml-9.0.vcproj | 420 - xsd/dist/examples/cxx/tree/dbxml/makefile | 33 - .../examples/cxx/tree/embedded/embedded-10.0.sln | 35 - .../cxx/tree/embedded/embedded-10.0.vcxproj | 219 - .../tree/embedded/embedded-10.0.vcxproj.filters | 50 - .../examples/cxx/tree/embedded/embedded-7.1.sln | 30 - .../examples/cxx/tree/embedded/embedded-7.1.vcproj | 176 - .../examples/cxx/tree/embedded/embedded-8.0.sln | 38 - .../examples/cxx/tree/embedded/embedded-8.0.vcproj | 439 - .../examples/cxx/tree/embedded/embedded-9.0.sln | 38 - .../examples/cxx/tree/embedded/embedded-9.0.vcproj | 436 - .../examples/cxx/tree/embedded/embedded-vc10.sln | 38 + .../cxx/tree/embedded/embedded-vc10.vcxproj | 215 + .../tree/embedded/embedded-vc10.vcxproj.filters | 50 + .../examples/cxx/tree/embedded/embedded-vc11.sln | 38 + .../cxx/tree/embedded/embedded-vc11.vcxproj | 219 + .../tree/embedded/embedded-vc11.vcxproj.filters | 50 + .../examples/cxx/tree/embedded/embedded-vc12.sln | 40 + .../cxx/tree/embedded/embedded-vc12.vcxproj | 223 + .../tree/embedded/embedded-vc12.vcxproj.filters | 50 + .../examples/cxx/tree/embedded/embedded-vc8.sln | 41 + .../examples/cxx/tree/embedded/embedded-vc8.vcproj | 439 + .../examples/cxx/tree/embedded/embedded-vc9.sln | 41 + .../examples/cxx/tree/embedded/embedded-vc9.vcproj | 436 + .../cxx/tree/embedded/embedded-xerces2-7.1.sln | 30 - .../cxx/tree/embedded/embedded-xerces2-7.1.vcproj | 176 - .../cxx/tree/embedded/embedded-xerces2-8.0.sln | 38 - .../cxx/tree/embedded/embedded-xerces2-8.0.vcproj | 439 - .../cxx/tree/embedded/embedded-xerces2-9.0.sln | 38 - .../cxx/tree/embedded/embedded-xerces2-9.0.vcproj | 436 - .../examples/cxx/tree/embedded/xsdbin-10.0.vcxproj | 186 - .../cxx/tree/embedded/xsdbin-10.0.vcxproj.filters | 14 - .../examples/cxx/tree/embedded/xsdbin-7.1.vcproj | 127 - .../examples/cxx/tree/embedded/xsdbin-8.0.vcproj | 356 - .../examples/cxx/tree/embedded/xsdbin-9.0.vcproj | 353 - .../examples/cxx/tree/embedded/xsdbin-vc10.vcxproj | 182 + .../cxx/tree/embedded/xsdbin-vc10.vcxproj.filters | 14 + .../examples/cxx/tree/embedded/xsdbin-vc11.vcxproj | 186 + .../cxx/tree/embedded/xsdbin-vc11.vcxproj.filters | 14 + .../examples/cxx/tree/embedded/xsdbin-vc12.vcxproj | 190 + .../cxx/tree/embedded/xsdbin-vc12.vcxproj.filters | 14 + .../examples/cxx/tree/embedded/xsdbin-vc8.vcproj | 356 + .../examples/cxx/tree/embedded/xsdbin-vc9.vcproj | 353 + .../cxx/tree/embedded/xsdbin-xerces2-7.1.vcproj | 127 - .../cxx/tree/embedded/xsdbin-xerces2-8.0.vcproj | 356 - .../cxx/tree/embedded/xsdbin-xerces2-9.0.vcproj | 353 - .../examples/cxx/tree/hello/hello-10.0.vcxproj | 209 - .../cxx/tree/hello/hello-10.0.vcxproj.filters | 38 - xsd/dist/examples/cxx/tree/hello/hello-7.1.vcproj | 164 - xsd/dist/examples/cxx/tree/hello/hello-8.0.vcproj | 423 - xsd/dist/examples/cxx/tree/hello/hello-9.0.vcproj | 420 - .../examples/cxx/tree/hello/hello-vc10.vcxproj | 205 + .../cxx/tree/hello/hello-vc10.vcxproj.filters | 38 + .../examples/cxx/tree/hello/hello-vc11.vcxproj | 209 + .../cxx/tree/hello/hello-vc11.vcxproj.filters | 38 + .../examples/cxx/tree/hello/hello-vc12.vcxproj | 213 + .../cxx/tree/hello/hello-vc12.vcxproj.filters | 38 + xsd/dist/examples/cxx/tree/hello/hello-vc8.vcproj | 423 + xsd/dist/examples/cxx/tree/hello/hello-vc9.vcproj | 420 + .../cxx/tree/hello/hello-xerces2-7.1.vcproj | 164 - .../cxx/tree/hello/hello-xerces2-8.0.vcproj | 423 - .../cxx/tree/hello/hello-xerces2-9.0.vcproj | 420 - .../examples/cxx/tree/library/library-10.0.vcxproj | 210 - .../cxx/tree/library/library-10.0.vcxproj.filters | 45 - .../examples/cxx/tree/library/library-7.1.vcproj | 171 - .../examples/cxx/tree/library/library-8.0.vcproj | 432 - .../examples/cxx/tree/library/library-9.0.vcproj | 429 - .../examples/cxx/tree/library/library-vc10.vcxproj | 206 + .../cxx/tree/library/library-vc10.vcxproj.filters | 45 + .../examples/cxx/tree/library/library-vc11.vcxproj | 210 + .../cxx/tree/library/library-vc11.vcxproj.filters | 45 + .../examples/cxx/tree/library/library-vc12.vcxproj | 214 + .../cxx/tree/library/library-vc12.vcxproj.filters | 45 + .../examples/cxx/tree/library/library-vc8.vcproj | 432 + .../examples/cxx/tree/library/library-vc9.vcproj | 429 + .../cxx/tree/library/library-xerces2-7.1.vcproj | 171 - .../cxx/tree/library/library-xerces2-8.0.vcproj | 432 - .../cxx/tree/library/library-xerces2-9.0.vcproj | 429 - xsd/dist/examples/cxx/tree/makefile | 6 +- .../cxx/tree/messaging/messaging-10.0.vcxproj | 213 - .../tree/messaging/messaging-10.0.vcxproj.filters | 50 - .../cxx/tree/messaging/messaging-7.1.vcproj | 176 - .../cxx/tree/messaging/messaging-8.0.vcproj | 439 - .../cxx/tree/messaging/messaging-9.0.vcproj | 436 - .../cxx/tree/messaging/messaging-vc10.vcxproj | 209 + .../tree/messaging/messaging-vc10.vcxproj.filters | 50 + .../cxx/tree/messaging/messaging-vc11.vcxproj | 213 + .../tree/messaging/messaging-vc11.vcxproj.filters | 50 + .../cxx/tree/messaging/messaging-vc12.vcxproj | 217 + .../tree/messaging/messaging-vc12.vcxproj.filters | 50 + .../cxx/tree/messaging/messaging-vc8.vcproj | 439 + .../cxx/tree/messaging/messaging-vc9.vcproj | 436 + .../tree/messaging/messaging-xerces2-7.1.vcproj | 176 - .../tree/messaging/messaging-xerces2-8.0.vcproj | 439 - .../tree/messaging/messaging-xerces2-9.0.vcproj | 436 - .../examples/cxx/tree/mixed/mixed-10.0.vcxproj | 209 - .../cxx/tree/mixed/mixed-10.0.vcxproj.filters | 38 - xsd/dist/examples/cxx/tree/mixed/mixed-7.1.vcproj | 164 - xsd/dist/examples/cxx/tree/mixed/mixed-8.0.vcproj | 423 - xsd/dist/examples/cxx/tree/mixed/mixed-9.0.vcproj | 420 - .../examples/cxx/tree/mixed/mixed-vc10.vcxproj | 205 + .../cxx/tree/mixed/mixed-vc10.vcxproj.filters | 38 + .../examples/cxx/tree/mixed/mixed-vc11.vcxproj | 209 + .../cxx/tree/mixed/mixed-vc11.vcxproj.filters | 38 + .../examples/cxx/tree/mixed/mixed-vc12.vcxproj | 213 + .../cxx/tree/mixed/mixed-vc12.vcxproj.filters | 38 + xsd/dist/examples/cxx/tree/mixed/mixed-vc8.vcproj | 423 + xsd/dist/examples/cxx/tree/mixed/mixed-vc9.vcproj | 420 + .../cxx/tree/mixed/mixed-xerces2-7.1.vcproj | 164 - .../cxx/tree/mixed/mixed-xerces2-8.0.vcproj | 423 - .../cxx/tree/mixed/mixed-xerces2-9.0.vcproj | 420 - .../cxx/tree/multiroot/multiroot-10.0.vcxproj | 211 - .../tree/multiroot/multiroot-10.0.vcxproj.filters | 44 - .../cxx/tree/multiroot/multiroot-7.1.vcproj | 170 - .../cxx/tree/multiroot/multiroot-8.0.vcproj | 431 - .../cxx/tree/multiroot/multiroot-9.0.vcproj | 428 - .../cxx/tree/multiroot/multiroot-vc10.vcxproj | 207 + .../tree/multiroot/multiroot-vc10.vcxproj.filters | 44 + .../cxx/tree/multiroot/multiroot-vc11.vcxproj | 211 + .../tree/multiroot/multiroot-vc11.vcxproj.filters | 44 + .../cxx/tree/multiroot/multiroot-vc12.vcxproj | 215 + .../tree/multiroot/multiroot-vc12.vcxproj.filters | 44 + .../cxx/tree/multiroot/multiroot-vc8.vcproj | 431 + .../cxx/tree/multiroot/multiroot-vc9.vcproj | 428 + .../tree/multiroot/multiroot-xerces2-7.1.vcproj | 170 - .../tree/multiroot/multiroot-xerces2-8.0.vcproj | 431 - .../tree/multiroot/multiroot-xerces2-9.0.vcproj | 428 - xsd/dist/examples/cxx/tree/order/element/makefile | 31 + .../tree/order/element/order-element-vc10.vcxproj | 205 + .../element/order-element-vc10.vcxproj.filters | 38 + .../tree/order/element/order-element-vc11.vcxproj | 209 + .../element/order-element-vc11.vcxproj.filters | 38 + .../tree/order/element/order-element-vc12.vcxproj | 213 + .../element/order-element-vc12.vcxproj.filters | 38 + .../tree/order/element/order-element-vc8.vcproj | 423 + .../tree/order/element/order-element-vc9.vcproj | 420 + xsd/dist/examples/cxx/tree/order/makefile | 11 + xsd/dist/examples/cxx/tree/order/mixed/makefile | 32 + .../cxx/tree/order/mixed/order-mixed-vc10.vcxproj | 205 + .../order/mixed/order-mixed-vc10.vcxproj.filters | 38 + .../cxx/tree/order/mixed/order-mixed-vc11.vcxproj | 209 + .../order/mixed/order-mixed-vc11.vcxproj.filters | 38 + .../cxx/tree/order/mixed/order-mixed-vc12.vcxproj | 213 + .../order/mixed/order-mixed-vc12.vcxproj.filters | 38 + .../cxx/tree/order/mixed/order-mixed-vc8.vcproj | 423 + .../cxx/tree/order/mixed/order-mixed-vc9.vcproj | 420 + .../cxx/tree/performance/performance-10.0.vcxproj | 214 - .../performance/performance-10.0.vcxproj.filters | 57 - .../cxx/tree/performance/performance-7.1.vcproj | 183 - .../cxx/tree/performance/performance-8.0.vcproj | 445 - .../cxx/tree/performance/performance-9.0.vcproj | 442 - .../cxx/tree/performance/performance-vc10.vcxproj | 210 + .../performance/performance-vc10.vcxproj.filters | 57 + .../cxx/tree/performance/performance-vc11.vcxproj | 214 + .../performance/performance-vc11.vcxproj.filters | 57 + .../cxx/tree/performance/performance-vc12.vcxproj | 218 + .../performance/performance-vc12.vcxproj.filters | 57 + .../cxx/tree/performance/performance-vc8.vcproj | 445 + .../cxx/tree/performance/performance-vc9.vcproj | 442 + .../performance/performance-xerces2-7.1.vcproj | 183 - .../performance/performance-xerces2-8.0.vcproj | 445 - .../performance/performance-xerces2-9.0.vcproj | 442 - .../tree/polymorphism/polymorphism-10.0.vcxproj | 209 - .../polymorphism/polymorphism-10.0.vcxproj.filters | 38 - .../cxx/tree/polymorphism/polymorphism-7.1.vcproj | 164 - .../cxx/tree/polymorphism/polymorphism-8.0.vcproj | 423 - .../cxx/tree/polymorphism/polymorphism-9.0.vcproj | 420 - .../tree/polymorphism/polymorphism-vc10.vcxproj | 205 + .../polymorphism/polymorphism-vc10.vcxproj.filters | 38 + .../tree/polymorphism/polymorphism-vc11.vcxproj | 209 + .../polymorphism/polymorphism-vc11.vcxproj.filters | 38 + .../tree/polymorphism/polymorphism-vc12.vcxproj | 213 + .../polymorphism/polymorphism-vc12.vcxproj.filters | 38 + .../cxx/tree/polymorphism/polymorphism-vc8.vcproj | 423 + .../cxx/tree/polymorphism/polymorphism-vc9.vcproj | 420 + .../polymorphism/polymorphism-xerces2-7.1.vcproj | 164 - .../polymorphism/polymorphism-xerces2-8.0.vcproj | 423 - .../polymorphism/polymorphism-xerces2-9.0.vcproj | 420 - xsd/dist/examples/cxx/tree/streaming/makefile | 5 +- .../cxx/tree/streaming/streaming-10.0.vcxproj | 213 - .../tree/streaming/streaming-10.0.vcxproj.filters | 50 - .../cxx/tree/streaming/streaming-7.1.vcproj | 176 - .../cxx/tree/streaming/streaming-8.0.vcproj | 435 - .../cxx/tree/streaming/streaming-9.0.vcproj | 432 - .../cxx/tree/streaming/streaming-vc10.vcxproj | 211 + .../tree/streaming/streaming-vc10.vcxproj.filters | 56 + .../cxx/tree/streaming/streaming-vc11.vcxproj | 215 + .../tree/streaming/streaming-vc11.vcxproj.filters | 56 + .../cxx/tree/streaming/streaming-vc12.vcxproj | 219 + .../tree/streaming/streaming-vc12.vcxproj.filters | 56 + .../cxx/tree/streaming/streaming-vc8.vcproj | 441 + .../cxx/tree/streaming/streaming-vc9.vcproj | 438 + .../tree/streaming/streaming-xerces2-7.1.vcproj | 176 - .../tree/streaming/streaming-xerces2-8.0.vcproj | 435 - .../tree/streaming/streaming-xerces2-9.0.vcproj | 432 - xsd/dist/examples/cxx/tree/tree-10.0.sln | 115 - xsd/dist/examples/cxx/tree/tree-7.1.sln | 93 - xsd/dist/examples/cxx/tree/tree-8.0.sln | 115 - xsd/dist/examples/cxx/tree/tree-9.0.sln | 115 - xsd/dist/examples/cxx/tree/tree-xerces2-7.1.sln | 93 - xsd/dist/examples/cxx/tree/tree-xerces2-8.0.sln | 115 - xsd/dist/examples/cxx/tree/tree-xerces2-9.0.sln | 115 - .../cxx/tree/wildcard/wildcard-10.0.vcxproj | 210 - .../tree/wildcard/wildcard-10.0.vcxproj.filters | 45 - .../examples/cxx/tree/wildcard/wildcard-7.1.vcproj | 171 - .../examples/cxx/tree/wildcard/wildcard-8.0.vcproj | 432 - .../examples/cxx/tree/wildcard/wildcard-9.0.vcproj | 429 - .../cxx/tree/wildcard/wildcard-vc10.vcxproj | 206 + .../tree/wildcard/wildcard-vc10.vcxproj.filters | 45 + .../cxx/tree/wildcard/wildcard-vc11.vcxproj | 210 + .../tree/wildcard/wildcard-vc11.vcxproj.filters | 45 + .../cxx/tree/wildcard/wildcard-vc12.vcxproj | 214 + .../tree/wildcard/wildcard-vc12.vcxproj.filters | 45 + .../examples/cxx/tree/wildcard/wildcard-vc8.vcproj | 432 + .../examples/cxx/tree/wildcard/wildcard-vc9.vcproj | 429 + .../cxx/tree/wildcard/wildcard-xerces2-7.1.vcproj | 171 - .../cxx/tree/wildcard/wildcard-xerces2-8.0.vcproj | 432 - .../cxx/tree/wildcard/wildcard-xerces2-9.0.vcproj | 429 - xsd/dist/examples/cxx/tree/xpath/xpath-10.0.sln | 25 - .../examples/cxx/tree/xpath/xpath-10.0.vcxproj | 211 - .../cxx/tree/xpath/xpath-10.0.vcxproj.filters | 44 - xsd/dist/examples/cxx/tree/xpath/xpath-7.1.sln | 21 - xsd/dist/examples/cxx/tree/xpath/xpath-7.1.vcproj | 170 - xsd/dist/examples/cxx/tree/xpath/xpath-8.0.sln | 25 - xsd/dist/examples/cxx/tree/xpath/xpath-8.0.vcproj | 431 - xsd/dist/examples/cxx/tree/xpath/xpath-9.0.sln | 25 - xsd/dist/examples/cxx/tree/xpath/xpath-9.0.vcproj | 428 - .../examples/cxx/tree/xpath/xpath-vc10.vcxproj | 207 + .../cxx/tree/xpath/xpath-vc10.vcxproj.filters | 44 + .../examples/cxx/tree/xpath/xpath-vc11.vcxproj | 211 + .../cxx/tree/xpath/xpath-vc11.vcxproj.filters | 44 + .../examples/cxx/tree/xpath/xpath-vc12.vcxproj | 215 + .../cxx/tree/xpath/xpath-vc12.vcxproj.filters | 44 + xsd/dist/examples/cxx/tree/xpath/xpath-vc8.vcproj | 431 + xsd/dist/examples/cxx/tree/xpath/xpath-vc9.vcproj | 428 + .../examples/cxx/tree/xpath/xpath-xerces2-7.1.sln | 21 - .../cxx/tree/xpath/xpath-xerces2-7.1.vcproj | 170 - .../examples/cxx/tree/xpath/xpath-xerces2-8.0.sln | 25 - .../cxx/tree/xpath/xpath-xerces2-8.0.vcproj | 431 - .../examples/cxx/tree/xpath/xpath-xerces2-9.0.sln | 25 - .../cxx/tree/xpath/xpath-xerces2-9.0.vcproj | 428 - xsd/dist/examples/test.bat | 74 + xsd/dist/examples/tester.bat | 47 + xsd/dist/template-vc10.sln | 15 + xsd/dist/template-vc11.sln | 15 + xsd/dist/template-vc12.sln | 17 + xsd/dist/template-vc8.sln | 15 + xsd/dist/template-vc9.sln | 15 + xsd/doc/custom-literals.xsd | 48 + xsd/doc/cxx/makefile | 21 + xsd/doc/cxx/parser/guide/cxx-parser-guide.pdf | Bin 0 -> 151425 bytes xsd/doc/cxx/parser/guide/cxx-parser-guide.ps | 20731 +++++++++++++++++++ xsd/doc/cxx/parser/guide/figure-1.png | Bin 0 -> 34195 bytes xsd/doc/cxx/parser/guide/figure-1.svg | 373 + xsd/doc/cxx/parser/guide/guide.html2ps | 65 + xsd/doc/cxx/parser/guide/index.xhtml | 4158 ++++ xsd/doc/cxx/parser/guide/makefile | 56 + xsd/doc/cxx/parser/makefile | 21 + xsd/doc/cxx/tree/guide/cxx-tree-guide.pdf | Bin 0 -> 95081 bytes xsd/doc/cxx/tree/guide/cxx-tree-guide.ps | 3509 ++++ xsd/doc/cxx/tree/guide/guide.html2ps | 65 + xsd/doc/cxx/tree/guide/index.xhtml | 2732 +++ xsd/doc/cxx/tree/guide/makefile | 54 + xsd/doc/cxx/tree/makefile | 41 + xsd/doc/cxx/tree/manual/cxx-tree-manual.pdf | Bin 0 -> 221921 bytes xsd/doc/cxx/tree/manual/cxx-tree-manual.ps | 7382 +++++++ xsd/doc/cxx/tree/manual/index.xhtml | 6822 ++++++ xsd/doc/cxx/tree/manual/makefile | 54 + xsd/doc/cxx/tree/manual/manual.html2ps | 66 + xsd/doc/cxx/tree/reference/footer.html | 6 + xsd/doc/cxx/tree/reference/libxsd.doxygen | 1322 ++ xsd/doc/cxx/tree/reference/makefile | 18 + xsd/doc/default.css | 319 + xsd/doc/makefile | 143 + xsd/doc/xsd-epilogue.1 | 566 + xsd/doc/xsd-epilogue.xhtml | 422 + xsd/doc/xsd-parser-header.1 | 4 + xsd/doc/xsd-parser-header.xhtml | 1 + xsd/doc/xsd-prologue.1 | 119 + xsd/doc/xsd-prologue.xhtml | 120 + xsd/doc/xsd-tree-header.1 | 4 + xsd/doc/xsd-tree-header.xhtml | 1 + xsd/doc/xsd.1 | 1648 ++ xsd/doc/xsd.xhtml | 1555 ++ xsd/documentation/custom-literals.xsd | 49 - xsd/documentation/cxx/makefile | 22 - .../cxx/parser/guide/cxx-parser-guide.pdf | Bin 150322 -> 0 bytes .../cxx/parser/guide/cxx-parser-guide.ps | 20713 ------------------ xsd/documentation/cxx/parser/guide/figure-1.png | Bin 34195 -> 0 bytes xsd/documentation/cxx/parser/guide/figure-1.svg | 373 - xsd/documentation/cxx/parser/guide/guide.html2ps | 65 - xsd/documentation/cxx/parser/guide/index.xhtml | 4141 ---- xsd/documentation/cxx/parser/guide/makefile | 55 - xsd/documentation/cxx/parser/makefile | 22 - xsd/documentation/cxx/tree/dbxml/driver.cxx | 175 - xsd/documentation/cxx/tree/dbxml/index.xhtml | 348 - xsd/documentation/cxx/tree/dbxml/library.xsd | 75 - .../cxx/tree/guide/cxx-tree-guide.pdf | Bin 94183 -> 0 bytes xsd/documentation/cxx/tree/guide/cxx-tree-guide.ps | 3470 ---- xsd/documentation/cxx/tree/guide/guide.html2ps | 65 - xsd/documentation/cxx/tree/guide/index.xhtml | 2690 --- xsd/documentation/cxx/tree/guide/makefile | 53 - xsd/documentation/cxx/tree/makefile | 44 - .../cxx/tree/manual/cxx-tree-manual.pdf | Bin 198065 -> 0 bytes .../cxx/tree/manual/cxx-tree-manual.ps | 6630 ------ xsd/documentation/cxx/tree/manual/index.xhtml | 6032 ------ xsd/documentation/cxx/tree/manual/makefile | 53 - xsd/documentation/cxx/tree/manual/manual.html2ps | 66 - xsd/documentation/cxx/tree/reference/footer.html | 6 - .../cxx/tree/reference/libxsd.doxygen | 1316 -- xsd/documentation/cxx/tree/reference/makefile | 18 - xsd/documentation/default.css | 319 - xsd/documentation/future.xhtml | 103 - xsd/documentation/makefile | 47 - xsd/documentation/schema-authoring-guide.xhtml | 187 - xsd/documentation/xsd.1 | 1893 -- xsd/documentation/xsd.xhtml | 1600 -- xsd/examples/cxx/parser/generated/library.xml | 1 - xsd/examples/cxx/parser/generated/library.xsd | 1 - xsd/examples/cxx/parser/generated/makefile | 11 +- xsd/examples/cxx/parser/hello/driver.cxx | 1 - xsd/examples/cxx/parser/hello/hello.xml | 1 - xsd/examples/cxx/parser/hello/hello.xsd | 1 - xsd/examples/cxx/parser/hello/makefile | 9 +- xsd/examples/cxx/parser/library/driver.cxx | 1 - xsd/examples/cxx/parser/library/library-pimpl.cxx | 1 - xsd/examples/cxx/parser/library/library-pimpl.hxx | 1 - xsd/examples/cxx/parser/library/library.hxx | 1 - xsd/examples/cxx/parser/library/library.map | 1 - xsd/examples/cxx/parser/library/library.xml | 1 - xsd/examples/cxx/parser/library/library.xsd | 1 - xsd/examples/cxx/parser/library/makefile | 11 +- xsd/examples/cxx/parser/makefile | 20 +- xsd/examples/cxx/parser/mixed/anchor.hxx | 1 - xsd/examples/cxx/parser/mixed/driver.cxx | 1 - xsd/examples/cxx/parser/mixed/makefile | 11 +- xsd/examples/cxx/parser/mixed/text.map | 1 - xsd/examples/cxx/parser/mixed/text.xml | 1 - xsd/examples/cxx/parser/mixed/text.xsd | 1 - xsd/examples/cxx/parser/mixin/driver.cxx | 1 - xsd/examples/cxx/parser/mixin/instance.xml | 1 - xsd/examples/cxx/parser/mixin/makefile | 11 +- xsd/examples/cxx/parser/mixin/schema.map | 1 - xsd/examples/cxx/parser/mixin/schema.xsd | 1 - xsd/examples/cxx/parser/mixin/types.hxx | 1 - xsd/examples/cxx/parser/multiroot/balance.xml | 1 - xsd/examples/cxx/parser/multiroot/deposit.xml | 1 - xsd/examples/cxx/parser/multiroot/driver.cxx | 1 - xsd/examples/cxx/parser/multiroot/makefile | 11 +- .../cxx/parser/multiroot/protocol-pimpl.cxx | 1 - .../cxx/parser/multiroot/protocol-pimpl.hxx | 1 - xsd/examples/cxx/parser/multiroot/protocol.hxx | 1 - xsd/examples/cxx/parser/multiroot/protocol.map | 1 - xsd/examples/cxx/parser/multiroot/protocol.xsd | 1 - xsd/examples/cxx/parser/multiroot/withdraw.xml | 1 - xsd/examples/cxx/parser/performance/README | 6 +- xsd/examples/cxx/parser/performance/driver.cxx | 4 +- xsd/examples/cxx/parser/performance/makefile | 15 +- xsd/examples/cxx/parser/performance/test-500k.xml | 1 - xsd/examples/cxx/parser/performance/test-5k.xml | 1 - xsd/examples/cxx/parser/performance/test.xsd | 1 - xsd/examples/cxx/parser/performance/time.cxx | 3 +- xsd/examples/cxx/parser/performance/time.hxx | 1 - xsd/examples/cxx/parser/polymorphism/driver.cxx | 1 - xsd/examples/cxx/parser/polymorphism/makefile | 11 +- .../cxx/parser/polymorphism/supermen-pimpl.cxx | 1 - .../cxx/parser/polymorphism/supermen-pimpl.hxx | 1 - xsd/examples/cxx/parser/polymorphism/supermen.xml | 1 - xsd/examples/cxx/parser/polymorphism/supermen.xsd | 1 - xsd/examples/cxx/parser/polyroot/batman.xml | 1 - xsd/examples/cxx/parser/polyroot/driver.cxx | 1 - xsd/examples/cxx/parser/polyroot/makefile | 11 +- xsd/examples/cxx/parser/polyroot/person.xml | 1 - xsd/examples/cxx/parser/polyroot/superman.xml | 1 - .../cxx/parser/polyroot/supermen-pimpl.cxx | 1 - .../cxx/parser/polyroot/supermen-pimpl.hxx | 1 - xsd/examples/cxx/parser/polyroot/supermen.xsd | 1 - xsd/examples/cxx/parser/wildcard/driver.cxx | 1 - xsd/examples/cxx/parser/wildcard/email.xml | 1 - xsd/examples/cxx/parser/wildcard/email.xsd | 1 - xsd/examples/cxx/parser/wildcard/makefile | 9 +- xsd/examples/cxx/tree/README | 12 +- .../tree/binary/boost/boost-archive-extraction.hxx | 2 +- .../tree/binary/boost/boost-archive-insertion.hxx | 2 +- xsd/examples/cxx/tree/binary/boost/driver.cxx | 1 - xsd/examples/cxx/tree/binary/boost/library.xml | 1 - xsd/examples/cxx/tree/binary/boost/library.xsd | 1 - xsd/examples/cxx/tree/binary/boost/makefile | 27 +- xsd/examples/cxx/tree/binary/cdr/driver.cxx | 1 - xsd/examples/cxx/tree/binary/cdr/library.xml | 1 - xsd/examples/cxx/tree/binary/cdr/library.xsd | 1 - xsd/examples/cxx/tree/binary/cdr/makefile | 25 +- xsd/examples/cxx/tree/binary/makefile | 5 +- xsd/examples/cxx/tree/binary/xdr/driver.cxx | 1 - xsd/examples/cxx/tree/binary/xdr/library.xml | 1 - xsd/examples/cxx/tree/binary/xdr/library.xsd | 1 - xsd/examples/cxx/tree/binary/xdr/makefile | 27 +- xsd/examples/cxx/tree/caching/driver.cxx | 44 - xsd/examples/cxx/tree/caching/library.xml | 1 - xsd/examples/cxx/tree/caching/library.xsd | 1 - xsd/examples/cxx/tree/caching/makefile | 10 +- .../tree/compression/compressed-format-target.cxx | 5 - .../tree/compression/compressed-format-target.hxx | 5 - .../tree/compression/compressed-input-source.cxx | 20 - .../tree/compression/compressed-input-source.hxx | 11 - xsd/examples/cxx/tree/compression/driver.cxx | 3 +- xsd/examples/cxx/tree/compression/library.xsd | 1 - xsd/examples/cxx/tree/compression/makefile | 25 +- xsd/examples/cxx/tree/custom/calendar/calendar.xml | 1 - xsd/examples/cxx/tree/custom/calendar/calendar.xsd | 1 - xsd/examples/cxx/tree/custom/calendar/driver.cxx | 1 - xsd/examples/cxx/tree/custom/calendar/makefile | 32 +- .../cxx/tree/custom/calendar/xml-schema-custom.cxx | 1 - .../cxx/tree/custom/calendar/xml-schema-custom.hxx | 1 - .../cxx/tree/custom/comments/dom-parse.cxx | 36 +- .../cxx/tree/custom/comments/dom-parse.hxx | 1 - xsd/examples/cxx/tree/custom/comments/driver.cxx | 1 - xsd/examples/cxx/tree/custom/comments/makefile | 14 +- xsd/examples/cxx/tree/custom/comments/people.xml | 1 - xsd/examples/cxx/tree/custom/comments/people.xsd | 1 - .../cxx/tree/custom/comments/xml-schema-custom.cxx | 1 - .../cxx/tree/custom/comments/xml-schema-custom.hxx | 1 - .../cxx/tree/custom/contacts/contacts-custom.cxx | 1 - .../cxx/tree/custom/contacts/contacts-custom.hxx | 1 - xsd/examples/cxx/tree/custom/contacts/contacts.xml | 1 - xsd/examples/cxx/tree/custom/contacts/contacts.xsd | 1 - xsd/examples/cxx/tree/custom/contacts/driver.cxx | 1 - xsd/examples/cxx/tree/custom/contacts/makefile | 13 +- .../cxx/tree/custom/double/double-custom.cxx | 1 - .../cxx/tree/custom/double/double-custom.hxx | 1 - xsd/examples/cxx/tree/custom/double/driver.cxx | 1 - xsd/examples/cxx/tree/custom/double/makefile | 16 +- xsd/examples/cxx/tree/custom/double/order.xsd | 1 - xsd/examples/cxx/tree/custom/makefile | 17 +- xsd/examples/cxx/tree/custom/mixed/driver.cxx | 1 - xsd/examples/cxx/tree/custom/mixed/makefile | 13 +- .../cxx/tree/custom/mixed/people-custom.cxx | 1 - .../cxx/tree/custom/mixed/people-custom.hxx | 1 - xsd/examples/cxx/tree/custom/mixed/people.xml | 1 - xsd/examples/cxx/tree/custom/mixed/people.xsd | 1 - xsd/examples/cxx/tree/custom/taxonomy/driver.cxx | 1 - xsd/examples/cxx/tree/custom/taxonomy/makefile | 15 +- .../cxx/tree/custom/taxonomy/people-custom-fwd.hxx | 1 - .../cxx/tree/custom/taxonomy/people-custom.cxx | 1 - .../cxx/tree/custom/taxonomy/people-custom.hxx | 1 - xsd/examples/cxx/tree/custom/taxonomy/people.xml | 1 - xsd/examples/cxx/tree/custom/taxonomy/people.xsd | 1 - xsd/examples/cxx/tree/custom/wildcard/driver.cxx | 1 - xsd/examples/cxx/tree/custom/wildcard/makefile | 13 +- .../cxx/tree/custom/wildcard/wildcard-custom.cxx | 1 - .../cxx/tree/custom/wildcard/wildcard-custom.hxx | 1 - xsd/examples/cxx/tree/custom/wildcard/wildcard.xml | 1 - xsd/examples/cxx/tree/custom/wildcard/wildcard.xsd | 1 - xsd/examples/cxx/tree/dbxml/README | 45 - xsd/examples/cxx/tree/dbxml/driver.cxx | 175 - xsd/examples/cxx/tree/dbxml/library.xsd | 75 - xsd/examples/cxx/tree/dbxml/makefile | 107 - xsd/examples/cxx/tree/embedded/driver.cxx | 41 +- .../cxx/tree/embedded/grammar-input-stream.cxx | 20 - .../cxx/tree/embedded/grammar-input-stream.hxx | 13 - xsd/examples/cxx/tree/embedded/library.xml | 1 - xsd/examples/cxx/tree/embedded/library.xsd | 1 - xsd/examples/cxx/tree/embedded/makefile | 16 +- xsd/examples/cxx/tree/embedded/xsdbin.cxx | 61 +- xsd/examples/cxx/tree/hello/driver.cxx | 1 - xsd/examples/cxx/tree/hello/hello.xml | 1 - xsd/examples/cxx/tree/hello/hello.xsd | 1 - xsd/examples/cxx/tree/hello/makefile | 10 +- xsd/examples/cxx/tree/library/driver.cxx | 1 - xsd/examples/cxx/tree/library/library.xml | 1 - xsd/examples/cxx/tree/library/library.xsd | 1 - xsd/examples/cxx/tree/library/makefile | 11 +- xsd/examples/cxx/tree/makefile | 30 +- xsd/examples/cxx/tree/messaging/balance.xml | 1 - xsd/examples/cxx/tree/messaging/deposit.xml | 1 - xsd/examples/cxx/tree/messaging/dom-parse.cxx | 32 - xsd/examples/cxx/tree/messaging/dom-parse.hxx | 1 - xsd/examples/cxx/tree/messaging/dom-serialize.cxx | 27 +- xsd/examples/cxx/tree/messaging/dom-serialize.hxx | 1 - xsd/examples/cxx/tree/messaging/driver.cxx | 1 - xsd/examples/cxx/tree/messaging/makefile | 13 +- xsd/examples/cxx/tree/messaging/protocol.xsd | 1 - xsd/examples/cxx/tree/messaging/withdraw.xml | 1 - xsd/examples/cxx/tree/mixed/README | 6 +- xsd/examples/cxx/tree/mixed/driver.cxx | 9 +- xsd/examples/cxx/tree/mixed/makefile | 10 +- xsd/examples/cxx/tree/mixed/text.xml | 3 +- xsd/examples/cxx/tree/mixed/text.xsd | 1 - xsd/examples/cxx/tree/multiroot/balance.xml | 1 - xsd/examples/cxx/tree/multiroot/deposit.xml | 1 - xsd/examples/cxx/tree/multiroot/dom-parse.cxx | 32 - xsd/examples/cxx/tree/multiroot/dom-parse.hxx | 1 - xsd/examples/cxx/tree/multiroot/driver.cxx | 1 - xsd/examples/cxx/tree/multiroot/makefile | 11 +- xsd/examples/cxx/tree/multiroot/protocol.xsd | 1 - xsd/examples/cxx/tree/multiroot/withdraw.xml | 1 - xsd/examples/cxx/tree/order/README | 11 + xsd/examples/cxx/tree/order/element/README | 35 + xsd/examples/cxx/tree/order/element/driver.cxx | 147 + xsd/examples/cxx/tree/order/element/makefile | 100 + .../cxx/tree/order/element/transactions.xml | 32 + .../cxx/tree/order/element/transactions.xsd | 58 + xsd/examples/cxx/tree/order/makefile | 44 + xsd/examples/cxx/tree/order/mixed/README | 45 + xsd/examples/cxx/tree/order/mixed/driver.cxx | 89 + xsd/examples/cxx/tree/order/mixed/makefile | 99 + xsd/examples/cxx/tree/order/mixed/text.xml | 17 + xsd/examples/cxx/tree/order/mixed/text.xsd | 28 + xsd/examples/cxx/tree/performance/README | 6 +- xsd/examples/cxx/tree/performance/driver.cxx | 1 - xsd/examples/cxx/tree/performance/makefile | 15 +- xsd/examples/cxx/tree/performance/parsing.cxx | 55 +- .../cxx/tree/performance/serialization.cxx | 23 +- xsd/examples/cxx/tree/performance/test-500k.xml | 1 - xsd/examples/cxx/tree/performance/test-5k.xml | 1 - xsd/examples/cxx/tree/performance/test.xsd | 1 - xsd/examples/cxx/tree/performance/time.cxx | 3 +- xsd/examples/cxx/tree/performance/time.hxx | 1 - xsd/examples/cxx/tree/polymorphism/driver.cxx | 1 - xsd/examples/cxx/tree/polymorphism/makefile | 11 +- xsd/examples/cxx/tree/polymorphism/supermen.xml | 1 - xsd/examples/cxx/tree/polymorphism/supermen.xsd | 1 - xsd/examples/cxx/tree/streaming/README | 23 +- xsd/examples/cxx/tree/streaming/driver.cxx | 167 +- .../cxx/tree/streaming/grammar-input-stream.cxx | 96 + .../cxx/tree/streaming/grammar-input-stream.hxx | 41 + xsd/examples/cxx/tree/streaming/makefile | 17 +- xsd/examples/cxx/tree/streaming/parser.cxx | 218 +- xsd/examples/cxx/tree/streaming/parser.hxx | 47 +- xsd/examples/cxx/tree/streaming/position.xml | 1 - xsd/examples/cxx/tree/streaming/position.xsd | 1 - xsd/examples/cxx/tree/streaming/serializer.cxx | 532 +- xsd/examples/cxx/tree/streaming/serializer.hxx | 138 +- xsd/examples/cxx/tree/wildcard/driver.cxx | 1 - xsd/examples/cxx/tree/wildcard/email.xml | 1 - xsd/examples/cxx/tree/wildcard/email.xsd | 1 - xsd/examples/cxx/tree/wildcard/makefile | 11 +- xsd/examples/cxx/tree/xpath/README | 18 +- xsd/examples/cxx/tree/xpath/dom-parse.cxx | 32 - xsd/examples/cxx/tree/xpath/dom-parse.hxx | 1 - xsd/examples/cxx/tree/xpath/driver-2.cxx | 139 - xsd/examples/cxx/tree/xpath/driver.cxx | 1 - xsd/examples/cxx/tree/xpath/makefile | 28 +- xsd/examples/cxx/tree/xpath/people.xml | 1 - xsd/examples/cxx/tree/xpath/people.xsd | 1 - xsd/examples/makefile | 3 +- xsd/libxsd/INSTALL | 2 +- xsd/libxsd/makefile | 11 +- xsd/libxsd/xsd/cxx/auto-array.hxx | 25 +- xsd/libxsd/xsd/cxx/compilers/vc-7/post.hxx | 6 - xsd/libxsd/xsd/cxx/compilers/vc-7/pre.hxx | 36 - xsd/libxsd/xsd/cxx/compilers/vc-8/post.hxx | 3 +- xsd/libxsd/xsd/cxx/compilers/vc-8/pre.hxx | 3 +- xsd/libxsd/xsd/cxx/config.hxx | 38 +- xsd/libxsd/xsd/cxx/exceptions.hxx | 3 +- xsd/libxsd/xsd/cxx/parser/document.hxx | 3 +- xsd/libxsd/xsd/cxx/parser/document.txx | 3 +- xsd/libxsd/xsd/cxx/parser/elements.hxx | 3 +- xsd/libxsd/xsd/cxx/parser/elements.txx | 3 +- xsd/libxsd/xsd/cxx/parser/error-handler.hxx | 3 +- xsd/libxsd/xsd/cxx/parser/error-handler.txx | 3 +- xsd/libxsd/xsd/cxx/parser/exceptions.hxx | 3 +- xsd/libxsd/xsd/cxx/parser/exceptions.ixx | 3 +- xsd/libxsd/xsd/cxx/parser/exceptions.txx | 3 +- xsd/libxsd/xsd/cxx/parser/expat/elements.hxx | 30 +- xsd/libxsd/xsd/cxx/parser/expat/elements.txx | 11 +- xsd/libxsd/xsd/cxx/parser/map.hxx | 3 +- xsd/libxsd/xsd/cxx/parser/map.ixx | 3 +- xsd/libxsd/xsd/cxx/parser/map.txx | 3 +- .../xsd/cxx/parser/non-validating/parser.hxx | 3 +- .../xsd/cxx/parser/non-validating/parser.txx | 3 +- .../cxx/parser/non-validating/xml-schema-pimpl.hxx | 9 +- .../cxx/parser/non-validating/xml-schema-pimpl.ixx | 3 +- .../cxx/parser/non-validating/xml-schema-pimpl.txx | 11 +- .../cxx/parser/non-validating/xml-schema-pskel.hxx | 11 +- .../cxx/parser/non-validating/xml-schema-pskel.ixx | 3 +- .../cxx/parser/non-validating/xml-schema-pskel.txx | 3 +- xsd/libxsd/xsd/cxx/parser/schema-exceptions.hxx | 3 +- xsd/libxsd/xsd/cxx/parser/schema-exceptions.ixx | 3 +- xsd/libxsd/xsd/cxx/parser/schema-exceptions.txx | 3 +- xsd/libxsd/xsd/cxx/parser/substitution-map.hxx | 3 +- xsd/libxsd/xsd/cxx/parser/substitution-map.txx | 3 +- .../xsd/cxx/parser/validating/exceptions.hxx | 3 +- .../xsd/cxx/parser/validating/exceptions.ixx | 3 +- .../xsd/cxx/parser/validating/exceptions.txx | 3 +- .../xsd/cxx/parser/validating/inheritance-map.hxx | 3 +- .../xsd/cxx/parser/validating/inheritance-map.txx | 3 +- xsd/libxsd/xsd/cxx/parser/validating/parser.hxx | 3 +- xsd/libxsd/xsd/cxx/parser/validating/parser.txx | 3 +- .../xsd/cxx/parser/validating/xml-schema-pimpl.hxx | 13 +- .../xsd/cxx/parser/validating/xml-schema-pimpl.ixx | 3 +- .../xsd/cxx/parser/validating/xml-schema-pimpl.txx | 19 +- .../xsd/cxx/parser/validating/xml-schema-pskel.hxx | 11 +- .../xsd/cxx/parser/validating/xml-schema-pskel.ixx | 3 +- .../xsd/cxx/parser/validating/xml-schema-pskel.txx | 3 +- xsd/libxsd/xsd/cxx/parser/xerces/elements.hxx | 26 +- xsd/libxsd/xsd/cxx/parser/xerces/elements.txx | 73 +- xsd/libxsd/xsd/cxx/parser/xml-schema.hxx | 3 +- xsd/libxsd/xsd/cxx/parser/xml-schema.ixx | 3 +- xsd/libxsd/xsd/cxx/parser/xml-schema.txx | 3 +- xsd/libxsd/xsd/cxx/post.hxx | 6 +- xsd/libxsd/xsd/cxx/pre.hxx | 8 +- xsd/libxsd/xsd/cxx/ro-string.hxx | 3 +- xsd/libxsd/xsd/cxx/ro-string.txx | 3 +- xsd/libxsd/xsd/cxx/tree/ace-cdr-stream-common.hxx | 3 +- .../xsd/cxx/tree/ace-cdr-stream-extraction.hxx | 41 +- .../xsd/cxx/tree/ace-cdr-stream-insertion.hxx | 3 +- xsd/libxsd/xsd/cxx/tree/bits/literals.hxx | 3 +- xsd/libxsd/xsd/cxx/tree/bits/literals.ixx | 3 +- xsd/libxsd/xsd/cxx/tree/buffer.hxx | 3 +- xsd/libxsd/xsd/cxx/tree/buffer.txx | 3 +- xsd/libxsd/xsd/cxx/tree/comparison-map.hxx | 5 +- xsd/libxsd/xsd/cxx/tree/comparison-map.txx | 26 +- xsd/libxsd/xsd/cxx/tree/containers-wildcard.hxx | 7 +- xsd/libxsd/xsd/cxx/tree/containers.hxx | 374 +- xsd/libxsd/xsd/cxx/tree/containers.txx | 62 +- xsd/libxsd/xsd/cxx/tree/date-time-extraction.txx | 3 +- xsd/libxsd/xsd/cxx/tree/date-time-insertion.txx | 3 +- xsd/libxsd/xsd/cxx/tree/date-time-ostream.txx | 3 +- xsd/libxsd/xsd/cxx/tree/date-time.hxx | 3 +- xsd/libxsd/xsd/cxx/tree/date-time.ixx | 3 +- xsd/libxsd/xsd/cxx/tree/date-time.txx | 3 +- xsd/libxsd/xsd/cxx/tree/element-map.hxx | 13 +- xsd/libxsd/xsd/cxx/tree/element-map.txx | 3 +- xsd/libxsd/xsd/cxx/tree/elements.hxx | 596 +- xsd/libxsd/xsd/cxx/tree/elements.ixx | 253 +- xsd/libxsd/xsd/cxx/tree/elements.txx | 11 +- xsd/libxsd/xsd/cxx/tree/error-handler.hxx | 3 +- xsd/libxsd/xsd/cxx/tree/error-handler.txx | 3 +- xsd/libxsd/xsd/cxx/tree/exceptions.hxx | 3 +- xsd/libxsd/xsd/cxx/tree/exceptions.txx | 3 +- xsd/libxsd/xsd/cxx/tree/facet.hxx | 3 +- xsd/libxsd/xsd/cxx/tree/istream-fwd.hxx | 3 +- xsd/libxsd/xsd/cxx/tree/istream.hxx | 200 +- xsd/libxsd/xsd/cxx/tree/iterator-adapter.hxx | 270 + xsd/libxsd/xsd/cxx/tree/list.hxx | 28 +- xsd/libxsd/xsd/cxx/tree/ostream.hxx | 52 +- xsd/libxsd/xsd/cxx/tree/parsing.hxx | 3 +- xsd/libxsd/xsd/cxx/tree/parsing.txx | 125 +- xsd/libxsd/xsd/cxx/tree/parsing/boolean.hxx | 5 +- xsd/libxsd/xsd/cxx/tree/parsing/byte.hxx | 5 +- xsd/libxsd/xsd/cxx/tree/parsing/date-time.txx | 21 +- xsd/libxsd/xsd/cxx/tree/parsing/decimal.hxx | 5 +- xsd/libxsd/xsd/cxx/tree/parsing/double.hxx | 5 +- xsd/libxsd/xsd/cxx/tree/parsing/element-map.txx | 9 +- xsd/libxsd/xsd/cxx/tree/parsing/float.hxx | 5 +- xsd/libxsd/xsd/cxx/tree/parsing/int.hxx | 5 +- xsd/libxsd/xsd/cxx/tree/parsing/long.hxx | 5 +- xsd/libxsd/xsd/cxx/tree/parsing/short.hxx | 5 +- xsd/libxsd/xsd/cxx/tree/parsing/unsigned-byte.hxx | 5 +- xsd/libxsd/xsd/cxx/tree/parsing/unsigned-int.hxx | 5 +- xsd/libxsd/xsd/cxx/tree/parsing/unsigned-long.hxx | 5 +- xsd/libxsd/xsd/cxx/tree/parsing/unsigned-short.hxx | 5 +- xsd/libxsd/xsd/cxx/tree/serialization.hxx | 3 +- xsd/libxsd/xsd/cxx/tree/serialization.txx | 44 +- xsd/libxsd/xsd/cxx/tree/serialization/boolean.hxx | 3 +- xsd/libxsd/xsd/cxx/tree/serialization/byte.hxx | 3 +- .../xsd/cxx/tree/serialization/date-time.txx | 3 +- xsd/libxsd/xsd/cxx/tree/serialization/decimal.hxx | 3 +- xsd/libxsd/xsd/cxx/tree/serialization/double.hxx | 3 +- .../xsd/cxx/tree/serialization/element-map.txx | 3 +- xsd/libxsd/xsd/cxx/tree/serialization/float.hxx | 3 +- xsd/libxsd/xsd/cxx/tree/serialization/int.hxx | 3 +- xsd/libxsd/xsd/cxx/tree/serialization/long.hxx | 3 +- xsd/libxsd/xsd/cxx/tree/serialization/short.hxx | 3 +- .../xsd/cxx/tree/serialization/unsigned-byte.hxx | 3 +- .../xsd/cxx/tree/serialization/unsigned-int.hxx | 3 +- .../xsd/cxx/tree/serialization/unsigned-long.hxx | 3 +- .../xsd/cxx/tree/serialization/unsigned-short.hxx | 3 +- xsd/libxsd/xsd/cxx/tree/std-ostream-map.hxx | 5 +- xsd/libxsd/xsd/cxx/tree/std-ostream-map.txx | 9 +- xsd/libxsd/xsd/cxx/tree/std-ostream-operators.hxx | 9 +- xsd/libxsd/xsd/cxx/tree/stream-extraction-map.hxx | 15 +- xsd/libxsd/xsd/cxx/tree/stream-extraction-map.txx | 42 +- xsd/libxsd/xsd/cxx/tree/stream-extraction.hxx | 26 +- xsd/libxsd/xsd/cxx/tree/stream-insertion-map.hxx | 5 +- xsd/libxsd/xsd/cxx/tree/stream-insertion-map.txx | 28 +- xsd/libxsd/xsd/cxx/tree/stream-insertion.hxx | 11 +- xsd/libxsd/xsd/cxx/tree/text.hxx | 3 +- xsd/libxsd/xsd/cxx/tree/text.txx | 17 +- xsd/libxsd/xsd/cxx/tree/type-factory-map.hxx | 21 +- xsd/libxsd/xsd/cxx/tree/type-factory-map.txx | 22 +- xsd/libxsd/xsd/cxx/tree/type-serializer-map.hxx | 8 +- xsd/libxsd/xsd/cxx/tree/type-serializer-map.txx | 13 +- xsd/libxsd/xsd/cxx/tree/types.hxx | 190 +- xsd/libxsd/xsd/cxx/tree/types.txx | 114 +- xsd/libxsd/xsd/cxx/tree/xdr-stream-common.hxx | 3 +- xsd/libxsd/xsd/cxx/tree/xdr-stream-extraction.hxx | 18 +- xsd/libxsd/xsd/cxx/tree/xdr-stream-insertion.hxx | 16 +- xsd/libxsd/xsd/cxx/version.hxx | 7 +- xsd/libxsd/xsd/cxx/xml/bits/literals.hxx | 3 +- xsd/libxsd/xsd/cxx/xml/bits/literals.ixx | 3 +- xsd/libxsd/xsd/cxx/xml/char-iso8859-1.hxx | 3 +- xsd/libxsd/xsd/cxx/xml/char-iso8859-1.txx | 18 +- xsd/libxsd/xsd/cxx/xml/char-lcp.hxx | 3 +- xsd/libxsd/xsd/cxx/xml/char-lcp.txx | 27 +- xsd/libxsd/xsd/cxx/xml/char-utf8.hxx | 3 +- xsd/libxsd/xsd/cxx/xml/char-utf8.txx | 18 +- xsd/libxsd/xsd/cxx/xml/dom/auto-ptr.hxx | 83 +- .../xsd/cxx/xml/dom/bits/error-handler-proxy.hxx | 3 +- .../xsd/cxx/xml/dom/bits/error-handler-proxy.txx | 15 +- xsd/libxsd/xsd/cxx/xml/dom/elements.hxx | 3 +- xsd/libxsd/xsd/cxx/xml/dom/elements.txx | 3 +- xsd/libxsd/xsd/cxx/xml/dom/parsing-header.hxx | 3 +- xsd/libxsd/xsd/cxx/xml/dom/parsing-source.hxx | 45 +- xsd/libxsd/xsd/cxx/xml/dom/parsing-source.txx | 226 +- .../xsd/cxx/xml/dom/serialization-header.hxx | 3 +- .../xsd/cxx/xml/dom/serialization-header.txx | 17 +- .../xsd/cxx/xml/dom/serialization-source.hxx | 21 +- .../xsd/cxx/xml/dom/serialization-source.txx | 189 +- xsd/libxsd/xsd/cxx/xml/dom/wildcard-source.hxx | 5 +- xsd/libxsd/xsd/cxx/xml/dom/wildcard-source.txx | 7 +- xsd/libxsd/xsd/cxx/xml/elements.hxx | 8 +- xsd/libxsd/xsd/cxx/xml/elements.txx | 3 +- xsd/libxsd/xsd/cxx/xml/error-handler.hxx | 3 +- xsd/libxsd/xsd/cxx/xml/exceptions.hxx | 3 +- xsd/libxsd/xsd/cxx/xml/qualified-name.hxx | 3 +- .../xsd/cxx/xml/sax/bits/error-handler-proxy.hxx | 3 +- .../xsd/cxx/xml/sax/bits/error-handler-proxy.txx | 14 +- xsd/libxsd/xsd/cxx/xml/sax/std-input-source.hxx | 32 +- xsd/libxsd/xsd/cxx/xml/std-memory-manager.hxx | 20 +- xsd/libxsd/xsd/cxx/xml/string.hxx | 39 +- xsd/libxsd/xsd/cxx/xml/string.ixx | 3 +- xsd/libxsd/xsd/cxx/xml/string.txx | 19 +- xsd/libxsd/xsd/cxx/zc-istream.hxx | 3 +- xsd/libxsd/xsd/cxx/zc-istream.txx | 3 +- xsd/makefile | 47 +- xsd/tests/cxx/makefile | 3 +- xsd/tests/cxx/parser/built-in/driver.cxx | 9 +- xsd/tests/cxx/parser/built-in/makefile | 12 +- xsd/tests/cxx/parser/enumeration/driver.cxx | 3 +- xsd/tests/cxx/parser/enumeration/gender.hxx | 3 +- xsd/tests/cxx/parser/enumeration/makefile | 14 +- xsd/tests/cxx/parser/generated-impl/makefile | 14 +- xsd/tests/cxx/parser/list/driver.cxx | 3 +- xsd/tests/cxx/parser/list/makefile | 12 +- xsd/tests/cxx/parser/makefile | 3 +- .../cxx/parser/name-clash/inheritance/driver.cxx | 3 +- .../cxx/parser/name-clash/inheritance/makefile | 14 +- xsd/tests/cxx/parser/polymorphism/makefile | 5 +- .../cxx/parser/polymorphism/recursive/driver.cxx | 69 + .../cxx/parser/polymorphism/recursive/makefile | 84 + xsd/tests/cxx/parser/polymorphism/recursive/output | 22 + .../parser/polymorphism/recursive/test-pimpl.cxx | 148 + .../parser/polymorphism/recursive/test-pimpl.hxx | 95 + .../cxx/parser/polymorphism/recursive/test.xml | 15 + .../cxx/parser/polymorphism/recursive/test.xsd | 53 + .../cxx/parser/polymorphism/same-type/driver.cxx | 5 +- .../cxx/parser/polymorphism/same-type/makefile | 14 +- xsd/tests/cxx/parser/recursive/driver.cxx | 3 +- xsd/tests/cxx/parser/recursive/makefile | 14 +- xsd/tests/cxx/parser/test-template/driver.cxx | 3 +- xsd/tests/cxx/parser/test-template/makefile | 12 +- xsd/tests/cxx/parser/union/driver.cxx | 3 +- xsd/tests/cxx/parser/union/makefile | 12 +- xsd/tests/cxx/parser/validation/all/driver.cxx | 3 +- xsd/tests/cxx/parser/validation/all/makefile | 14 +- xsd/tests/cxx/parser/validation/any/driver.cxx | 3 +- xsd/tests/cxx/parser/validation/any/makefile | 14 +- .../cxx/parser/validation/attribute/driver.cxx | 3 +- xsd/tests/cxx/parser/validation/attribute/makefile | 14 +- .../parser/validation/built-in/any-type/driver.cxx | 3 +- .../parser/validation/built-in/any-type/makefile | 14 +- .../parser/validation/built-in/binary/driver.cxx | 3 +- .../cxx/parser/validation/built-in/binary/makefile | 14 +- .../parser/validation/built-in/boolean/driver.cxx | 3 +- .../parser/validation/built-in/boolean/makefile | 14 +- .../cxx/parser/validation/built-in/byte/driver.cxx | 3 +- .../cxx/parser/validation/built-in/byte/makefile | 14 +- .../validation/built-in/date-time/driver.cxx | 3 +- .../parser/validation/built-in/date-time/makefile | 14 +- .../parser/validation/built-in/float/driver.cxx | 3 +- .../cxx/parser/validation/built-in/float/makefile | 14 +- .../cxx/parser/validation/built-in/int/driver.cxx | 3 +- .../cxx/parser/validation/built-in/int/makefile | 14 +- .../parser/validation/built-in/integer/driver.cxx | 3 +- .../parser/validation/built-in/integer/makefile | 14 +- .../cxx/parser/validation/built-in/long/driver.cxx | 3 +- .../cxx/parser/validation/built-in/long/makefile | 14 +- xsd/tests/cxx/parser/validation/built-in/makefile | 3 +- .../parser/validation/built-in/qname/driver.cxx | 3 +- .../cxx/parser/validation/built-in/qname/makefile | 14 +- .../parser/validation/built-in/short/driver.cxx | 3 +- .../cxx/parser/validation/built-in/short/makefile | 14 +- .../parser/validation/built-in/string/driver.cxx | 3 +- .../cxx/parser/validation/built-in/string/makefile | 14 +- .../cxx/parser/validation/built-in/uri/driver.cxx | 3 +- .../cxx/parser/validation/built-in/uri/makefile | 14 +- xsd/tests/cxx/parser/validation/choice/driver.cxx | 3 +- xsd/tests/cxx/parser/validation/choice/makefile | 14 +- xsd/tests/cxx/parser/validation/makefile | 3 +- .../cxx/parser/validation/restriction/driver.cxx | 3 +- .../cxx/parser/validation/restriction/makefile | 14 +- .../cxx/parser/validation/sequence/driver.cxx | 3 +- xsd/tests/cxx/parser/validation/sequence/makefile | 14 +- xsd/tests/cxx/tree/any-type/driver.cxx | 145 + xsd/tests/cxx/tree/any-type/makefile | 87 + xsd/tests/cxx/tree/any-type/output | 73 + xsd/tests/cxx/tree/any-type/test.xml | 26 + xsd/tests/cxx/tree/any-type/test.xsd | 19 + xsd/tests/cxx/tree/binary/cdr/driver.cxx | 17 +- xsd/tests/cxx/tree/binary/cdr/makefile | 16 +- xsd/tests/cxx/tree/binary/cdr/test.xml | 4 +- xsd/tests/cxx/tree/binary/cdr/test.xsd | 3 + xsd/tests/cxx/tree/binary/makefile | 3 +- xsd/tests/cxx/tree/binary/polymorphic/driver.cxx | 24 +- xsd/tests/cxx/tree/binary/polymorphic/makefile | 17 +- xsd/tests/cxx/tree/binary/xdr/driver.cxx | 29 +- xsd/tests/cxx/tree/binary/xdr/makefile | 15 +- xsd/tests/cxx/tree/binary/xdr/test.xml | 4 +- xsd/tests/cxx/tree/binary/xdr/test.xsd | 3 + xsd/tests/cxx/tree/built-in/driver.cxx | 22 +- xsd/tests/cxx/tree/built-in/makefile | 17 +- xsd/tests/cxx/tree/chameleon/driver.cxx | 7 +- xsd/tests/cxx/tree/chameleon/makefile | 14 +- xsd/tests/cxx/tree/comparison/driver.cxx | 7 +- xsd/tests/cxx/tree/comparison/makefile | 14 +- xsd/tests/cxx/tree/compilation/driver.cxx | 6 +- xsd/tests/cxx/tree/compilation/makefile | 14 +- xsd/tests/cxx/tree/complex/ctor/driver.cxx | 53 +- xsd/tests/cxx/tree/complex/ctor/makefile | 15 +- xsd/tests/cxx/tree/complex/makefile | 3 +- xsd/tests/cxx/tree/containment/driver.cxx | 48 +- xsd/tests/cxx/tree/containment/makefile | 14 +- xsd/tests/cxx/tree/default/general/driver.cxx | 7 +- xsd/tests/cxx/tree/default/general/makefile | 14 +- xsd/tests/cxx/tree/default/general/output | 13 - xsd/tests/cxx/tree/default/makefile | 3 +- xsd/tests/cxx/tree/default/omit/driver.cxx | 7 +- xsd/tests/cxx/tree/default/omit/makefile | 14 +- xsd/tests/cxx/tree/default/omit/output | 2 - xsd/tests/cxx/tree/detach/driver.cxx | 26 +- xsd/tests/cxx/tree/detach/makefile | 14 +- xsd/tests/cxx/tree/dom-association/dom-parse.cxx | 96 + xsd/tests/cxx/tree/dom-association/dom-parse.hxx | 24 + xsd/tests/cxx/tree/dom-association/driver.cxx | 72 + xsd/tests/cxx/tree/dom-association/makefile | 92 + xsd/tests/cxx/tree/dom-association/output | 0 xsd/tests/cxx/tree/dom-association/test.xml | 7 + xsd/tests/cxx/tree/dom-association/test.xsd | 12 + .../cxx/tree/encoding/char/iso-8859-1/driver.cxx | 7 +- .../cxx/tree/encoding/char/iso-8859-1/makefile | 14 +- .../cxx/tree/encoding/char/iso-8859-1/test.std | 8 - xsd/tests/cxx/tree/encoding/char/lcp/driver.cxx | 7 +- xsd/tests/cxx/tree/encoding/char/lcp/makefile | 14 +- xsd/tests/cxx/tree/encoding/char/lcp/test.std | 2 - xsd/tests/cxx/tree/encoding/char/makefile | 3 +- xsd/tests/cxx/tree/encoding/char/utf-8/driver.cxx | 9 +- xsd/tests/cxx/tree/encoding/char/utf-8/makefile | 14 +- xsd/tests/cxx/tree/encoding/char/utf-8/test.std | Bin 796 -> 230 bytes xsd/tests/cxx/tree/encoding/makefile | 3 +- xsd/tests/cxx/tree/encoding/wchar/driver.cxx | 9 +- xsd/tests/cxx/tree/encoding/wchar/makefile | 14 +- xsd/tests/cxx/tree/encoding/wchar/test.std | Bin 768 -> 261 bytes xsd/tests/cxx/tree/enumeration/ctor/driver.cxx | 3 +- xsd/tests/cxx/tree/enumeration/ctor/makefile | 14 +- .../cxx/tree/enumeration/inheritance/driver.cxx | 13 +- .../cxx/tree/enumeration/inheritance/makefile | 14 +- xsd/tests/cxx/tree/enumeration/makefile | 3 +- xsd/tests/cxx/tree/float/driver.cxx | 7 +- xsd/tests/cxx/tree/float/makefile | 14 +- xsd/tests/cxx/tree/float/test.std | 33 - xsd/tests/cxx/tree/list/ctor/driver.cxx | 3 +- xsd/tests/cxx/tree/list/ctor/makefile | 14 +- xsd/tests/cxx/tree/list/makefile | 3 +- xsd/tests/cxx/tree/makefile | 46 +- .../cxx/tree/name-clash/inheritance/driver.cxx | 7 +- xsd/tests/cxx/tree/name-clash/inheritance/makefile | 14 +- xsd/tests/cxx/tree/name-clash/makefile | 3 +- xsd/tests/cxx/tree/naming/camel/driver.cxx | 16 +- xsd/tests/cxx/tree/naming/camel/makefile | 14 +- xsd/tests/cxx/tree/naming/java/driver.cxx | 15 +- xsd/tests/cxx/tree/naming/java/makefile | 14 +- xsd/tests/cxx/tree/naming/knr/driver.cxx | 16 +- xsd/tests/cxx/tree/naming/knr/makefile | 14 +- xsd/tests/cxx/tree/naming/makefile | 3 +- xsd/tests/cxx/tree/order/driver.cxx | 65 + xsd/tests/cxx/tree/order/makefile | 94 + xsd/tests/cxx/tree/order/output | 92 + xsd/tests/cxx/tree/order/test.xml | 71 + xsd/tests/cxx/tree/order/test.xsd | 130 + .../cxx/tree/polymorphism/comparison/driver.cxx | 7 +- .../cxx/tree/polymorphism/comparison/makefile | 14 +- xsd/tests/cxx/tree/polymorphism/makefile | 3 +- xsd/tests/cxx/tree/polymorphism/ostream/driver.cxx | 7 +- xsd/tests/cxx/tree/polymorphism/ostream/makefile | 16 +- xsd/tests/cxx/tree/polymorphism/ostream/output | 5 + xsd/tests/cxx/tree/polymorphism/ostream/test.xml | 13 +- xsd/tests/cxx/tree/polymorphism/ostream/test.xsd | 18 +- .../cxx/tree/polymorphism/same-type/driver.cxx | 7 +- xsd/tests/cxx/tree/polymorphism/same-type/makefile | 14 +- xsd/tests/cxx/tree/prefix/driver.cxx | 7 +- xsd/tests/cxx/tree/prefix/makefile | 16 +- xsd/tests/cxx/tree/prefix/output | 4 - xsd/tests/cxx/tree/test-template/driver.cxx | 7 +- xsd/tests/cxx/tree/test-template/makefile | 14 +- xsd/tests/cxx/tree/types-only/driver.cxx | 4 +- xsd/tests/cxx/tree/types-only/makefile | 14 +- xsd/tests/cxx/tree/union/ctor/driver.cxx | 3 +- xsd/tests/cxx/tree/union/ctor/makefile | 14 +- xsd/tests/cxx/tree/union/makefile | 3 +- xsd/tests/cxx/tree/wildcard/driver.cxx | 16 +- xsd/tests/cxx/tree/wildcard/makefile | 14 +- xsd/tests/makefile | 3 +- xsd/version | 2 +- xsd/xsd/cxx/elements.cxx | 237 +- xsd/xsd/cxx/elements.hxx | 208 +- xsd/xsd/cxx/literal-map.cxx | 80 +- xsd/xsd/cxx/literal-map.hxx | 13 +- xsd/xsd/cxx/option-types.cxx | 48 + xsd/xsd/cxx/option-types.hxx | 35 + xsd/xsd/cxx/options.cli | 551 + xsd/xsd/cxx/options.cxx | 638 + xsd/xsd/cxx/options.hxx | 440 + xsd/xsd/cxx/options.ixx | 601 + xsd/xsd/cxx/parser/attribute-validation-source.cxx | 45 +- xsd/xsd/cxx/parser/attribute-validation-source.hxx | 5 +- .../cxx/parser/characters-validation-source.cxx | 9 +- .../cxx/parser/characters-validation-source.hxx | 5 +- xsd/xsd/cxx/parser/cli.hxx | 154 - xsd/xsd/cxx/parser/driver-source.cxx | 164 +- xsd/xsd/cxx/parser/driver-source.hxx | 5 +- xsd/xsd/cxx/parser/element-validation-source.cxx | 213 +- xsd/xsd/cxx/parser/element-validation-source.hxx | 5 +- xsd/xsd/cxx/parser/elements.cxx | 113 +- xsd/xsd/cxx/parser/elements.hxx | 74 +- xsd/xsd/cxx/parser/generator.cxx | 890 +- xsd/xsd/cxx/parser/generator.hxx | 28 +- xsd/xsd/cxx/parser/impl-header.cxx | 17 +- xsd/xsd/cxx/parser/impl-header.hxx | 5 +- xsd/xsd/cxx/parser/impl-source.cxx | 31 +- xsd/xsd/cxx/parser/impl-source.hxx | 5 +- xsd/xsd/cxx/parser/name-processor.cxx | 197 +- xsd/xsd/cxx/parser/name-processor.hxx | 15 +- xsd/xsd/cxx/parser/options.cli | 148 + xsd/xsd/cxx/parser/options.cxx | 581 + xsd/xsd/cxx/parser/options.hxx | 183 + xsd/xsd/cxx/parser/options.ixx | 160 + xsd/xsd/cxx/parser/parser-forward.cxx | 15 +- xsd/xsd/cxx/parser/parser-forward.hxx | 5 +- xsd/xsd/cxx/parser/parser-header.cxx | 175 +- xsd/xsd/cxx/parser/parser-header.hxx | 7 +- xsd/xsd/cxx/parser/parser-inline.cxx | 46 +- xsd/xsd/cxx/parser/parser-inline.hxx | 5 +- xsd/xsd/cxx/parser/parser-source.cxx | 139 +- xsd/xsd/cxx/parser/parser-source.hxx | 5 +- xsd/xsd/cxx/parser/print-impl-common.hxx | 89 +- xsd/xsd/cxx/parser/state-processor.cxx | 70 +- xsd/xsd/cxx/parser/state-processor.hxx | 10 +- xsd/xsd/cxx/parser/type-processor.cxx | 86 +- xsd/xsd/cxx/parser/type-processor.hxx | 19 +- xsd/xsd/cxx/parser/validator.cxx | 140 +- xsd/xsd/cxx/parser/validator.hxx | 20 +- xsd/xsd/cxx/tree/cli.hxx | 228 - xsd/xsd/cxx/tree/counter.cxx | 64 +- xsd/xsd/cxx/tree/counter.hxx | 9 +- xsd/xsd/cxx/tree/default-value.cxx | 266 +- xsd/xsd/cxx/tree/default-value.hxx | 135 +- xsd/xsd/cxx/tree/elements.cxx | 428 +- xsd/xsd/cxx/tree/elements.hxx | 632 +- xsd/xsd/cxx/tree/fundamental-header.hxx | 160 +- xsd/xsd/cxx/tree/generator.cxx | 1470 +- xsd/xsd/cxx/tree/generator.hxx | 21 +- xsd/xsd/cxx/tree/name-processor.cxx | 622 +- xsd/xsd/cxx/tree/name-processor.hxx | 14 +- xsd/xsd/cxx/tree/options.cli | 480 + xsd/xsd/cxx/tree/options.cxx | 1149 + xsd/xsd/cxx/tree/options.hxx | 411 + xsd/xsd/cxx/tree/options.ixx | 502 + xsd/xsd/cxx/tree/order-processor.cxx | 244 + xsd/xsd/cxx/tree/order-processor.hxx | 30 + xsd/xsd/cxx/tree/parser-header.cxx | 39 +- xsd/xsd/cxx/tree/parser-header.hxx | 5 +- xsd/xsd/cxx/tree/parser-source.cxx | 151 +- xsd/xsd/cxx/tree/parser-source.hxx | 7 +- xsd/xsd/cxx/tree/polymorphism-processor.cxx | 216 +- xsd/xsd/cxx/tree/polymorphism-processor.hxx | 16 +- xsd/xsd/cxx/tree/serialization-header.cxx | 23 +- xsd/xsd/cxx/tree/serialization-header.hxx | 5 +- xsd/xsd/cxx/tree/serialization-source.cxx | 370 +- xsd/xsd/cxx/tree/serialization-source.hxx | 9 +- xsd/xsd/cxx/tree/stream-extraction-source.cxx | 231 +- xsd/xsd/cxx/tree/stream-extraction-source.hxx | 5 +- xsd/xsd/cxx/tree/stream-header.cxx | 19 +- xsd/xsd/cxx/tree/stream-header.hxx | 5 +- xsd/xsd/cxx/tree/stream-insertion-header.cxx | 37 +- xsd/xsd/cxx/tree/stream-insertion-header.hxx | 5 +- xsd/xsd/cxx/tree/stream-insertion-source.cxx | 173 +- xsd/xsd/cxx/tree/stream-insertion-source.hxx | 5 +- xsd/xsd/cxx/tree/stream-source.cxx | 89 +- xsd/xsd/cxx/tree/stream-source.hxx | 9 +- xsd/xsd/cxx/tree/tree-forward.cxx | 49 +- xsd/xsd/cxx/tree/tree-forward.hxx | 5 +- xsd/xsd/cxx/tree/tree-header.cxx | 689 +- xsd/xsd/cxx/tree/tree-header.hxx | 5 +- xsd/xsd/cxx/tree/tree-inline.cxx | 172 +- xsd/xsd/cxx/tree/tree-inline.hxx | 7 +- xsd/xsd/cxx/tree/tree-source.cxx | 1100 +- xsd/xsd/cxx/tree/tree-source.hxx | 7 +- xsd/xsd/cxx/tree/validator.cxx | 124 +- xsd/xsd/cxx/tree/validator.hxx | 11 +- xsd/xsd/elements.hxx | 30 +- xsd/xsd/makefile | 90 +- xsd/xsd/options-parser.hxx | 30 + xsd/xsd/options.cli | 313 + xsd/xsd/options.cxx | 976 + xsd/xsd/options.hxx | 575 + xsd/xsd/options.ixx | 462 + xsd/xsd/processing/cardinality/processor.cxx | 105 +- xsd/xsd/processing/cardinality/processor.hxx | 11 +- xsd/xsd/processing/inheritance/processor.cxx | 95 +- xsd/xsd/processing/inheritance/processor.hxx | 11 +- xsd/xsd/type-map/lexer.cxx | 5 +- xsd/xsd/type-map/lexer.hxx | 19 +- xsd/xsd/type-map/parser.cxx | 21 +- xsd/xsd/type-map/parser.hxx | 16 +- xsd/xsd/type-map/type-map.hxx | 57 +- xsd/xsd/types.hxx | 20 + xsd/xsd/usage.hxx | 226 - xsd/xsd/xsd.cxx | 681 +- xsd/xsd/xsd.hxx | 81 +- 1523 files changed, 134748 insertions(+), 147431 deletions(-) create mode 100644 xsd/build/cxx/generic/configuration-dynamic.make delete mode 100644 xsd/build/cxx/gnu/configuration-dynamic.make create mode 100644 xsd/build/import/cli/LICENSE create mode 100644 xsd/build/import/cli/cli-cxx.make create mode 100644 xsd/build/import/cli/configuration-dynamic.make create mode 100644 xsd/build/import/cli/configuration-rules.make create mode 100755 xsd/build/import/cli/configure create mode 100644 xsd/build/import/cli/stub.make delete mode 100644 xsd/build/import/libbackend-elements/LICENSE delete mode 100644 xsd/build/import/libbackend-elements/configuration-dynamic.make delete mode 100644 xsd/build/import/libbackend-elements/configuration-rules.make delete mode 100755 xsd/build/import/libbackend-elements/configure delete mode 100644 xsd/build/import/libbackend-elements/stub.make delete mode 100644 xsd/build/import/libboost/configuration-dynamic.make delete mode 100644 xsd/build/import/libboost/filesystem/rules.make delete mode 100644 xsd/build/import/libboost/filesystem/stub.make delete mode 100644 xsd/build/import/libboost/regex/rules.make delete mode 100644 xsd/build/import/libboost/regex/stub.make delete mode 100644 xsd/build/import/libcult/LICENSE delete mode 100644 xsd/build/import/libcult/configuration-dynamic.make delete mode 100644 xsd/build/import/libcult/configuration-rules.make delete mode 100755 xsd/build/import/libcult/configure delete mode 100644 xsd/build/import/libcult/stub.make create mode 100644 xsd/build/import/libcutl/LICENSE create mode 100644 xsd/build/import/libcutl/configuration-dynamic.make create mode 100644 xsd/build/import/libcutl/configuration-rules.make create mode 100755 xsd/build/import/libcutl/configure create mode 100644 xsd/build/import/libcutl/stub.make delete mode 100644 xsd/build/import/libdbxml/LICENSE delete mode 100644 xsd/build/import/libdbxml/configuration-rules.make delete mode 100755 xsd/build/import/libdbxml/configure delete mode 100644 xsd/build/import/libdbxml/rules.make delete mode 100644 xsd/build/import/libdbxml/stub.make delete mode 100644 xsd/build/import/libdbxml/version delete mode 100644 xsd/dist/etc/vc-10.0/xsd-cxx-parser.props delete mode 100644 xsd/dist/etc/vc-10.0/xsd-cxx-parser.targets delete mode 100644 xsd/dist/etc/vc-10.0/xsd-cxx-parser.xml delete mode 100644 xsd/dist/etc/vc-10.0/xsd-cxx-tree.props delete mode 100644 xsd/dist/etc/vc-10.0/xsd-cxx-tree.targets delete mode 100644 xsd/dist/etc/vc-10.0/xsd-cxx-tree.xml create mode 100644 xsd/dist/etc/vc-1x.0/xsd-cxx-parser.props create mode 100644 xsd/dist/etc/vc-1x.0/xsd-cxx-parser.targets create mode 100644 xsd/dist/etc/vc-1x.0/xsd-cxx-parser.xml create mode 100644 xsd/dist/etc/vc-1x.0/xsd-cxx-tree.props create mode 100644 xsd/dist/etc/vc-1x.0/xsd-cxx-tree.targets create mode 100644 xsd/dist/etc/vc-1x.0/xsd-cxx-tree.xml delete mode 100644 xsd/dist/examples/cxx/parser/generated/generated-10.0.vcxproj delete mode 100644 xsd/dist/examples/cxx/parser/generated/generated-10.0.vcxproj.filters delete mode 100644 xsd/dist/examples/cxx/parser/generated/generated-7.1.vcproj delete mode 100644 xsd/dist/examples/cxx/parser/generated/generated-8.0.vcproj delete mode 100644 xsd/dist/examples/cxx/parser/generated/generated-9.0.vcproj create mode 100644 xsd/dist/examples/cxx/parser/generated/generated-vc10.vcxproj create mode 100644 xsd/dist/examples/cxx/parser/generated/generated-vc10.vcxproj.filters create mode 100644 xsd/dist/examples/cxx/parser/generated/generated-vc11.vcxproj create mode 100644 xsd/dist/examples/cxx/parser/generated/generated-vc11.vcxproj.filters create mode 100644 xsd/dist/examples/cxx/parser/generated/generated-vc12.vcxproj create mode 100644 xsd/dist/examples/cxx/parser/generated/generated-vc12.vcxproj.filters create mode 100644 xsd/dist/examples/cxx/parser/generated/generated-vc8.vcproj create mode 100644 xsd/dist/examples/cxx/parser/generated/generated-vc9.vcproj delete mode 100644 xsd/dist/examples/cxx/parser/generated/generated-xerces2-7.1.vcproj delete mode 100644 xsd/dist/examples/cxx/parser/generated/generated-xerces2-8.0.vcproj delete mode 100644 xsd/dist/examples/cxx/parser/generated/generated-xerces2-9.0.vcproj delete mode 100644 xsd/dist/examples/cxx/parser/hello/hello-10.0.vcxproj delete mode 100644 xsd/dist/examples/cxx/parser/hello/hello-10.0.vcxproj.filters delete mode 100644 xsd/dist/examples/cxx/parser/hello/hello-7.1.vcproj delete mode 100644 xsd/dist/examples/cxx/parser/hello/hello-8.0.vcproj delete mode 100644 xsd/dist/examples/cxx/parser/hello/hello-9.0.vcproj create mode 100644 xsd/dist/examples/cxx/parser/hello/hello-vc10.vcxproj create mode 100644 xsd/dist/examples/cxx/parser/hello/hello-vc10.vcxproj.filters create mode 100644 xsd/dist/examples/cxx/parser/hello/hello-vc11.vcxproj create mode 100644 xsd/dist/examples/cxx/parser/hello/hello-vc11.vcxproj.filters create mode 100644 xsd/dist/examples/cxx/parser/hello/hello-vc12.vcxproj create mode 100644 xsd/dist/examples/cxx/parser/hello/hello-vc12.vcxproj.filters create mode 100644 xsd/dist/examples/cxx/parser/hello/hello-vc8.vcproj create mode 100644 xsd/dist/examples/cxx/parser/hello/hello-vc9.vcproj delete mode 100644 xsd/dist/examples/cxx/parser/hello/hello-xerces2-7.1.vcproj delete mode 100644 xsd/dist/examples/cxx/parser/hello/hello-xerces2-8.0.vcproj delete mode 100644 xsd/dist/examples/cxx/parser/hello/hello-xerces2-9.0.vcproj delete mode 100644 xsd/dist/examples/cxx/parser/library/library-10.0.vcxproj delete mode 100644 xsd/dist/examples/cxx/parser/library/library-10.0.vcxproj.filters delete mode 100644 xsd/dist/examples/cxx/parser/library/library-7.1.vcproj delete mode 100644 xsd/dist/examples/cxx/parser/library/library-8.0.vcproj delete mode 100644 xsd/dist/examples/cxx/parser/library/library-9.0.vcproj create mode 100644 xsd/dist/examples/cxx/parser/library/library-vc10.vcxproj create mode 100644 xsd/dist/examples/cxx/parser/library/library-vc10.vcxproj.filters create mode 100644 xsd/dist/examples/cxx/parser/library/library-vc11.vcxproj create mode 100644 xsd/dist/examples/cxx/parser/library/library-vc11.vcxproj.filters create mode 100644 xsd/dist/examples/cxx/parser/library/library-vc12.vcxproj create mode 100644 xsd/dist/examples/cxx/parser/library/library-vc12.vcxproj.filters create mode 100644 xsd/dist/examples/cxx/parser/library/library-vc8.vcproj create mode 100644 xsd/dist/examples/cxx/parser/library/library-vc9.vcproj delete mode 100644 xsd/dist/examples/cxx/parser/library/library-xerces2-7.1.vcproj delete mode 100644 xsd/dist/examples/cxx/parser/library/library-xerces2-8.0.vcproj delete mode 100644 xsd/dist/examples/cxx/parser/library/library-xerces2-9.0.vcproj delete mode 100644 xsd/dist/examples/cxx/parser/mixed/mixed-10.0.vcxproj delete mode 100644 xsd/dist/examples/cxx/parser/mixed/mixed-10.0.vcxproj.filters delete mode 100644 xsd/dist/examples/cxx/parser/mixed/mixed-7.1.vcproj delete mode 100644 xsd/dist/examples/cxx/parser/mixed/mixed-8.0.vcproj delete mode 100644 xsd/dist/examples/cxx/parser/mixed/mixed-9.0.vcproj create mode 100644 xsd/dist/examples/cxx/parser/mixed/mixed-vc10.vcxproj create mode 100644 xsd/dist/examples/cxx/parser/mixed/mixed-vc10.vcxproj.filters create mode 100644 xsd/dist/examples/cxx/parser/mixed/mixed-vc11.vcxproj create mode 100644 xsd/dist/examples/cxx/parser/mixed/mixed-vc11.vcxproj.filters create mode 100644 xsd/dist/examples/cxx/parser/mixed/mixed-vc12.vcxproj create mode 100644 xsd/dist/examples/cxx/parser/mixed/mixed-vc12.vcxproj.filters create mode 100644 xsd/dist/examples/cxx/parser/mixed/mixed-vc8.vcproj create mode 100644 xsd/dist/examples/cxx/parser/mixed/mixed-vc9.vcproj delete mode 100644 xsd/dist/examples/cxx/parser/mixed/mixed-xerces2-7.1.vcproj delete mode 100644 xsd/dist/examples/cxx/parser/mixed/mixed-xerces2-8.0.vcproj delete mode 100644 xsd/dist/examples/cxx/parser/mixed/mixed-xerces2-9.0.vcproj delete mode 100644 xsd/dist/examples/cxx/parser/mixin/mixin-10.0.vcxproj delete mode 100644 xsd/dist/examples/cxx/parser/mixin/mixin-10.0.vcxproj.filters delete mode 100644 xsd/dist/examples/cxx/parser/mixin/mixin-7.1.vcproj delete mode 100644 xsd/dist/examples/cxx/parser/mixin/mixin-8.0.vcproj delete mode 100644 xsd/dist/examples/cxx/parser/mixin/mixin-9.0.vcproj create mode 100644 xsd/dist/examples/cxx/parser/mixin/mixin-vc10.vcxproj create mode 100644 xsd/dist/examples/cxx/parser/mixin/mixin-vc10.vcxproj.filters create mode 100644 xsd/dist/examples/cxx/parser/mixin/mixin-vc11.vcxproj create mode 100644 xsd/dist/examples/cxx/parser/mixin/mixin-vc11.vcxproj.filters create mode 100644 xsd/dist/examples/cxx/parser/mixin/mixin-vc12.vcxproj create mode 100644 xsd/dist/examples/cxx/parser/mixin/mixin-vc12.vcxproj.filters create mode 100644 xsd/dist/examples/cxx/parser/mixin/mixin-vc8.vcproj create mode 100644 xsd/dist/examples/cxx/parser/mixin/mixin-vc9.vcproj delete mode 100644 xsd/dist/examples/cxx/parser/mixin/mixin-xerces2-7.1.vcproj delete mode 100644 xsd/dist/examples/cxx/parser/mixin/mixin-xerces2-8.0.vcproj delete mode 100644 xsd/dist/examples/cxx/parser/mixin/mixin-xerces2-9.0.vcproj delete mode 100644 xsd/dist/examples/cxx/parser/multiroot/multiroot-10.0.vcxproj delete mode 100644 xsd/dist/examples/cxx/parser/multiroot/multiroot-10.0.vcxproj.filters delete mode 100644 xsd/dist/examples/cxx/parser/multiroot/multiroot-7.1.vcproj delete mode 100644 xsd/dist/examples/cxx/parser/multiroot/multiroot-8.0.vcproj delete mode 100644 xsd/dist/examples/cxx/parser/multiroot/multiroot-9.0.vcproj create mode 100644 xsd/dist/examples/cxx/parser/multiroot/multiroot-vc10.vcxproj create mode 100644 xsd/dist/examples/cxx/parser/multiroot/multiroot-vc10.vcxproj.filters create mode 100644 xsd/dist/examples/cxx/parser/multiroot/multiroot-vc11.vcxproj create mode 100644 xsd/dist/examples/cxx/parser/multiroot/multiroot-vc11.vcxproj.filters create mode 100644 xsd/dist/examples/cxx/parser/multiroot/multiroot-vc12.vcxproj create mode 100644 xsd/dist/examples/cxx/parser/multiroot/multiroot-vc12.vcxproj.filters create mode 100644 xsd/dist/examples/cxx/parser/multiroot/multiroot-vc8.vcproj create mode 100644 xsd/dist/examples/cxx/parser/multiroot/multiroot-vc9.vcproj delete mode 100644 xsd/dist/examples/cxx/parser/multiroot/multiroot-xerces2-7.1.vcproj delete mode 100644 xsd/dist/examples/cxx/parser/multiroot/multiroot-xerces2-8.0.vcproj delete mode 100644 xsd/dist/examples/cxx/parser/multiroot/multiroot-xerces2-9.0.vcproj delete mode 100644 xsd/dist/examples/cxx/parser/parser-10.0.sln delete mode 100644 xsd/dist/examples/cxx/parser/parser-7.1.sln delete mode 100644 xsd/dist/examples/cxx/parser/parser-8.0.sln delete mode 100644 xsd/dist/examples/cxx/parser/parser-9.0.sln delete mode 100644 xsd/dist/examples/cxx/parser/parser-xerces2-7.1.sln delete mode 100644 xsd/dist/examples/cxx/parser/parser-xerces2-8.0.sln delete mode 100644 xsd/dist/examples/cxx/parser/parser-xerces2-9.0.sln delete mode 100644 xsd/dist/examples/cxx/parser/performance/performance-10.0.vcxproj delete mode 100644 xsd/dist/examples/cxx/parser/performance/performance-10.0.vcxproj.filters delete mode 100644 xsd/dist/examples/cxx/parser/performance/performance-7.1.vcproj delete mode 100644 xsd/dist/examples/cxx/parser/performance/performance-8.0.vcproj delete mode 100644 xsd/dist/examples/cxx/parser/performance/performance-9.0.vcproj create mode 100644 xsd/dist/examples/cxx/parser/performance/performance-vc10.vcxproj create mode 100644 xsd/dist/examples/cxx/parser/performance/performance-vc10.vcxproj.filters create mode 100644 xsd/dist/examples/cxx/parser/performance/performance-vc11.vcxproj create mode 100644 xsd/dist/examples/cxx/parser/performance/performance-vc11.vcxproj.filters create mode 100644 xsd/dist/examples/cxx/parser/performance/performance-vc12.vcxproj create mode 100644 xsd/dist/examples/cxx/parser/performance/performance-vc12.vcxproj.filters create mode 100644 xsd/dist/examples/cxx/parser/performance/performance-vc8.vcproj create mode 100644 xsd/dist/examples/cxx/parser/performance/performance-vc9.vcproj delete mode 100644 xsd/dist/examples/cxx/parser/performance/performance-xerces2-7.1.vcproj delete mode 100644 xsd/dist/examples/cxx/parser/performance/performance-xerces2-8.0.vcproj delete mode 100644 xsd/dist/examples/cxx/parser/performance/performance-xerces2-9.0.vcproj delete mode 100644 xsd/dist/examples/cxx/parser/polymorphism/polymorphism-10.0.vcxproj delete mode 100644 xsd/dist/examples/cxx/parser/polymorphism/polymorphism-10.0.vcxproj.filters delete mode 100644 xsd/dist/examples/cxx/parser/polymorphism/polymorphism-7.1.vcproj delete mode 100644 xsd/dist/examples/cxx/parser/polymorphism/polymorphism-8.0.vcproj delete mode 100644 xsd/dist/examples/cxx/parser/polymorphism/polymorphism-9.0.vcproj create mode 100644 xsd/dist/examples/cxx/parser/polymorphism/polymorphism-vc10.vcxproj create mode 100644 xsd/dist/examples/cxx/parser/polymorphism/polymorphism-vc10.vcxproj.filters create mode 100644 xsd/dist/examples/cxx/parser/polymorphism/polymorphism-vc11.vcxproj create mode 100644 xsd/dist/examples/cxx/parser/polymorphism/polymorphism-vc11.vcxproj.filters create mode 100644 xsd/dist/examples/cxx/parser/polymorphism/polymorphism-vc12.vcxproj create mode 100644 xsd/dist/examples/cxx/parser/polymorphism/polymorphism-vc12.vcxproj.filters create mode 100644 xsd/dist/examples/cxx/parser/polymorphism/polymorphism-vc8.vcproj create mode 100644 xsd/dist/examples/cxx/parser/polymorphism/polymorphism-vc9.vcproj delete mode 100644 xsd/dist/examples/cxx/parser/polymorphism/polymorphism-xerces2-7.1.vcproj delete mode 100644 xsd/dist/examples/cxx/parser/polymorphism/polymorphism-xerces2-8.0.vcproj delete mode 100644 xsd/dist/examples/cxx/parser/polymorphism/polymorphism-xerces2-9.0.vcproj delete mode 100644 xsd/dist/examples/cxx/parser/polyroot/polyroot-10.0.vcxproj delete mode 100644 xsd/dist/examples/cxx/parser/polyroot/polyroot-10.0.vcxproj.filters delete mode 100644 xsd/dist/examples/cxx/parser/polyroot/polyroot-7.1.vcproj delete mode 100644 xsd/dist/examples/cxx/parser/polyroot/polyroot-8.0.vcproj delete mode 100644 xsd/dist/examples/cxx/parser/polyroot/polyroot-9.0.vcproj create mode 100644 xsd/dist/examples/cxx/parser/polyroot/polyroot-vc10.vcxproj create mode 100644 xsd/dist/examples/cxx/parser/polyroot/polyroot-vc10.vcxproj.filters create mode 100644 xsd/dist/examples/cxx/parser/polyroot/polyroot-vc11.vcxproj create mode 100644 xsd/dist/examples/cxx/parser/polyroot/polyroot-vc11.vcxproj.filters create mode 100644 xsd/dist/examples/cxx/parser/polyroot/polyroot-vc12.vcxproj create mode 100644 xsd/dist/examples/cxx/parser/polyroot/polyroot-vc12.vcxproj.filters create mode 100644 xsd/dist/examples/cxx/parser/polyroot/polyroot-vc8.vcproj create mode 100644 xsd/dist/examples/cxx/parser/polyroot/polyroot-vc9.vcproj delete mode 100644 xsd/dist/examples/cxx/parser/polyroot/polyroot-xerces2-7.1.vcproj delete mode 100644 xsd/dist/examples/cxx/parser/polyroot/polyroot-xerces2-8.0.vcproj delete mode 100644 xsd/dist/examples/cxx/parser/polyroot/polyroot-xerces2-9.0.vcproj delete mode 100644 xsd/dist/examples/cxx/parser/wildcard/wildcard-10.0.vcxproj delete mode 100644 xsd/dist/examples/cxx/parser/wildcard/wildcard-10.0.vcxproj.filters delete mode 100644 xsd/dist/examples/cxx/parser/wildcard/wildcard-7.1.vcproj delete mode 100644 xsd/dist/examples/cxx/parser/wildcard/wildcard-8.0.vcproj delete mode 100644 xsd/dist/examples/cxx/parser/wildcard/wildcard-9.0.vcproj create mode 100644 xsd/dist/examples/cxx/parser/wildcard/wildcard-vc10.vcxproj create mode 100644 xsd/dist/examples/cxx/parser/wildcard/wildcard-vc10.vcxproj.filters create mode 100644 xsd/dist/examples/cxx/parser/wildcard/wildcard-vc11.vcxproj create mode 100644 xsd/dist/examples/cxx/parser/wildcard/wildcard-vc11.vcxproj.filters create mode 100644 xsd/dist/examples/cxx/parser/wildcard/wildcard-vc12.vcxproj create mode 100644 xsd/dist/examples/cxx/parser/wildcard/wildcard-vc12.vcxproj.filters create mode 100644 xsd/dist/examples/cxx/parser/wildcard/wildcard-vc8.vcproj create mode 100644 xsd/dist/examples/cxx/parser/wildcard/wildcard-vc9.vcproj delete mode 100644 xsd/dist/examples/cxx/parser/wildcard/wildcard-xerces2-7.1.vcproj delete mode 100644 xsd/dist/examples/cxx/parser/wildcard/wildcard-xerces2-8.0.vcproj delete mode 100644 xsd/dist/examples/cxx/parser/wildcard/wildcard-xerces2-9.0.vcproj delete mode 100644 xsd/dist/examples/cxx/tree/binary/boost/boost-10.0.sln delete mode 100644 xsd/dist/examples/cxx/tree/binary/boost/boost-10.0.vcxproj delete mode 100644 xsd/dist/examples/cxx/tree/binary/boost/boost-10.0.vcxproj.filters delete mode 100644 xsd/dist/examples/cxx/tree/binary/boost/boost-7.1.sln delete mode 100644 xsd/dist/examples/cxx/tree/binary/boost/boost-7.1.vcproj delete mode 100644 xsd/dist/examples/cxx/tree/binary/boost/boost-8.0.sln delete mode 100644 xsd/dist/examples/cxx/tree/binary/boost/boost-8.0.vcproj delete mode 100644 xsd/dist/examples/cxx/tree/binary/boost/boost-9.0.sln delete mode 100644 xsd/dist/examples/cxx/tree/binary/boost/boost-9.0.vcproj create mode 100644 xsd/dist/examples/cxx/tree/binary/boost/boost-vc10.vcxproj create mode 100644 xsd/dist/examples/cxx/tree/binary/boost/boost-vc10.vcxproj.filters create mode 100644 xsd/dist/examples/cxx/tree/binary/boost/boost-vc11.vcxproj create mode 100644 xsd/dist/examples/cxx/tree/binary/boost/boost-vc11.vcxproj.filters create mode 100644 xsd/dist/examples/cxx/tree/binary/boost/boost-vc12.vcxproj create mode 100644 xsd/dist/examples/cxx/tree/binary/boost/boost-vc12.vcxproj.filters create mode 100644 xsd/dist/examples/cxx/tree/binary/boost/boost-vc8.vcproj create mode 100644 xsd/dist/examples/cxx/tree/binary/boost/boost-vc9.vcproj delete mode 100644 xsd/dist/examples/cxx/tree/binary/boost/boost-xerces2-7.1.sln delete mode 100644 xsd/dist/examples/cxx/tree/binary/boost/boost-xerces2-7.1.vcproj delete mode 100644 xsd/dist/examples/cxx/tree/binary/boost/boost-xerces2-8.0.sln delete mode 100644 xsd/dist/examples/cxx/tree/binary/boost/boost-xerces2-8.0.vcproj delete mode 100644 xsd/dist/examples/cxx/tree/binary/boost/boost-xerces2-9.0.sln delete mode 100644 xsd/dist/examples/cxx/tree/binary/boost/boost-xerces2-9.0.vcproj delete mode 100644 xsd/dist/examples/cxx/tree/binary/cdr/cdr-10.0.sln delete mode 100644 xsd/dist/examples/cxx/tree/binary/cdr/cdr-10.0.vcxproj delete mode 100644 xsd/dist/examples/cxx/tree/binary/cdr/cdr-10.0.vcxproj.filters delete mode 100644 xsd/dist/examples/cxx/tree/binary/cdr/cdr-7.1.sln delete mode 100644 xsd/dist/examples/cxx/tree/binary/cdr/cdr-7.1.vcproj delete mode 100644 xsd/dist/examples/cxx/tree/binary/cdr/cdr-8.0.sln delete mode 100644 xsd/dist/examples/cxx/tree/binary/cdr/cdr-8.0.vcproj delete mode 100644 xsd/dist/examples/cxx/tree/binary/cdr/cdr-9.0.sln delete mode 100644 xsd/dist/examples/cxx/tree/binary/cdr/cdr-9.0.vcproj create mode 100644 xsd/dist/examples/cxx/tree/binary/cdr/cdr-vc10.vcxproj create mode 100644 xsd/dist/examples/cxx/tree/binary/cdr/cdr-vc10.vcxproj.filters create mode 100644 xsd/dist/examples/cxx/tree/binary/cdr/cdr-vc11.vcxproj create mode 100644 xsd/dist/examples/cxx/tree/binary/cdr/cdr-vc11.vcxproj.filters create mode 100644 xsd/dist/examples/cxx/tree/binary/cdr/cdr-vc12.vcxproj create mode 100644 xsd/dist/examples/cxx/tree/binary/cdr/cdr-vc12.vcxproj.filters create mode 100644 xsd/dist/examples/cxx/tree/binary/cdr/cdr-vc8.vcproj create mode 100644 xsd/dist/examples/cxx/tree/binary/cdr/cdr-vc9.vcproj delete mode 100644 xsd/dist/examples/cxx/tree/binary/cdr/cdr-xerces2-7.1.sln delete mode 100644 xsd/dist/examples/cxx/tree/binary/cdr/cdr-xerces2-7.1.vcproj delete mode 100644 xsd/dist/examples/cxx/tree/binary/cdr/cdr-xerces2-8.0.sln delete mode 100644 xsd/dist/examples/cxx/tree/binary/cdr/cdr-xerces2-8.0.vcproj delete mode 100644 xsd/dist/examples/cxx/tree/binary/cdr/cdr-xerces2-9.0.sln delete mode 100644 xsd/dist/examples/cxx/tree/binary/cdr/cdr-xerces2-9.0.vcproj delete mode 100644 xsd/dist/examples/cxx/tree/binary/xdr/xdr-10.0.sln delete mode 100644 xsd/dist/examples/cxx/tree/binary/xdr/xdr-10.0.vcxproj delete mode 100644 xsd/dist/examples/cxx/tree/binary/xdr/xdr-10.0.vcxproj.filters delete mode 100644 xsd/dist/examples/cxx/tree/binary/xdr/xdr-7.1.sln delete mode 100644 xsd/dist/examples/cxx/tree/binary/xdr/xdr-7.1.vcproj delete mode 100644 xsd/dist/examples/cxx/tree/binary/xdr/xdr-8.0.sln delete mode 100644 xsd/dist/examples/cxx/tree/binary/xdr/xdr-8.0.vcproj delete mode 100644 xsd/dist/examples/cxx/tree/binary/xdr/xdr-9.0.sln delete mode 100644 xsd/dist/examples/cxx/tree/binary/xdr/xdr-9.0.vcproj create mode 100644 xsd/dist/examples/cxx/tree/binary/xdr/xdr-vc10.vcxproj create mode 100644 xsd/dist/examples/cxx/tree/binary/xdr/xdr-vc10.vcxproj.filters create mode 100644 xsd/dist/examples/cxx/tree/binary/xdr/xdr-vc11.vcxproj create mode 100644 xsd/dist/examples/cxx/tree/binary/xdr/xdr-vc11.vcxproj.filters create mode 100644 xsd/dist/examples/cxx/tree/binary/xdr/xdr-vc12.vcxproj create mode 100644 xsd/dist/examples/cxx/tree/binary/xdr/xdr-vc12.vcxproj.filters create mode 100644 xsd/dist/examples/cxx/tree/binary/xdr/xdr-vc8.vcproj create mode 100644 xsd/dist/examples/cxx/tree/binary/xdr/xdr-vc9.vcproj delete mode 100644 xsd/dist/examples/cxx/tree/binary/xdr/xdr-xerces2-7.1.sln delete mode 100644 xsd/dist/examples/cxx/tree/binary/xdr/xdr-xerces2-7.1.vcproj delete mode 100644 xsd/dist/examples/cxx/tree/binary/xdr/xdr-xerces2-8.0.sln delete mode 100644 xsd/dist/examples/cxx/tree/binary/xdr/xdr-xerces2-8.0.vcproj delete mode 100644 xsd/dist/examples/cxx/tree/binary/xdr/xdr-xerces2-9.0.sln delete mode 100644 xsd/dist/examples/cxx/tree/binary/xdr/xdr-xerces2-9.0.vcproj delete mode 100644 xsd/dist/examples/cxx/tree/caching/caching-10.0.vcxproj delete mode 100644 xsd/dist/examples/cxx/tree/caching/caching-10.0.vcxproj.filters delete mode 100644 xsd/dist/examples/cxx/tree/caching/caching-7.1.vcproj delete mode 100644 xsd/dist/examples/cxx/tree/caching/caching-8.0.vcproj delete mode 100644 xsd/dist/examples/cxx/tree/caching/caching-9.0.vcproj create mode 100644 xsd/dist/examples/cxx/tree/caching/caching-vc10.vcxproj create mode 100644 xsd/dist/examples/cxx/tree/caching/caching-vc10.vcxproj.filters create mode 100644 xsd/dist/examples/cxx/tree/caching/caching-vc11.vcxproj create mode 100644 xsd/dist/examples/cxx/tree/caching/caching-vc11.vcxproj.filters create mode 100644 xsd/dist/examples/cxx/tree/caching/caching-vc12.vcxproj create mode 100644 xsd/dist/examples/cxx/tree/caching/caching-vc12.vcxproj.filters create mode 100644 xsd/dist/examples/cxx/tree/caching/caching-vc8.vcproj create mode 100644 xsd/dist/examples/cxx/tree/caching/caching-vc9.vcproj delete mode 100644 xsd/dist/examples/cxx/tree/caching/caching-xerces2-7.1.vcproj delete mode 100644 xsd/dist/examples/cxx/tree/caching/caching-xerces2-8.0.vcproj delete mode 100644 xsd/dist/examples/cxx/tree/caching/caching-xerces2-9.0.vcproj delete mode 100644 xsd/dist/examples/cxx/tree/compression/compression-10.0.sln delete mode 100644 xsd/dist/examples/cxx/tree/compression/compression-10.0.vcxproj delete mode 100644 xsd/dist/examples/cxx/tree/compression/compression-10.0.vcxproj.filters delete mode 100644 xsd/dist/examples/cxx/tree/compression/compression-7.1.sln delete mode 100644 xsd/dist/examples/cxx/tree/compression/compression-7.1.vcproj delete mode 100644 xsd/dist/examples/cxx/tree/compression/compression-8.0.sln delete mode 100644 xsd/dist/examples/cxx/tree/compression/compression-8.0.vcproj delete mode 100644 xsd/dist/examples/cxx/tree/compression/compression-9.0.sln delete mode 100644 xsd/dist/examples/cxx/tree/compression/compression-9.0.vcproj create mode 100644 xsd/dist/examples/cxx/tree/compression/compression-vc10.vcxproj create mode 100644 xsd/dist/examples/cxx/tree/compression/compression-vc10.vcxproj.filters create mode 100644 xsd/dist/examples/cxx/tree/compression/compression-vc11.vcxproj create mode 100644 xsd/dist/examples/cxx/tree/compression/compression-vc11.vcxproj.filters create mode 100644 xsd/dist/examples/cxx/tree/compression/compression-vc12.vcxproj create mode 100644 xsd/dist/examples/cxx/tree/compression/compression-vc12.vcxproj.filters create mode 100644 xsd/dist/examples/cxx/tree/compression/compression-vc8.vcproj create mode 100644 xsd/dist/examples/cxx/tree/compression/compression-vc9.vcproj delete mode 100644 xsd/dist/examples/cxx/tree/compression/compression-xerces2-7.1.sln delete mode 100644 xsd/dist/examples/cxx/tree/compression/compression-xerces2-7.1.vcproj delete mode 100644 xsd/dist/examples/cxx/tree/compression/compression-xerces2-8.0.sln delete mode 100644 xsd/dist/examples/cxx/tree/compression/compression-xerces2-8.0.vcproj delete mode 100644 xsd/dist/examples/cxx/tree/compression/compression-xerces2-9.0.sln delete mode 100644 xsd/dist/examples/cxx/tree/compression/compression-xerces2-9.0.vcproj delete mode 100644 xsd/dist/examples/cxx/tree/custom/calendar/calendar-10.0.sln delete mode 100644 xsd/dist/examples/cxx/tree/custom/calendar/calendar-10.0.vcxproj delete mode 100644 xsd/dist/examples/cxx/tree/custom/calendar/calendar-10.0.vcxproj.filters delete mode 100644 xsd/dist/examples/cxx/tree/custom/calendar/calendar-7.1.sln delete mode 100644 xsd/dist/examples/cxx/tree/custom/calendar/calendar-7.1.vcproj delete mode 100644 xsd/dist/examples/cxx/tree/custom/calendar/calendar-8.0.sln delete mode 100644 xsd/dist/examples/cxx/tree/custom/calendar/calendar-8.0.vcproj delete mode 100644 xsd/dist/examples/cxx/tree/custom/calendar/calendar-9.0.sln delete mode 100644 xsd/dist/examples/cxx/tree/custom/calendar/calendar-9.0.vcproj create mode 100644 xsd/dist/examples/cxx/tree/custom/calendar/calendar-vc10.vcxproj create mode 100644 xsd/dist/examples/cxx/tree/custom/calendar/calendar-vc10.vcxproj.filters create mode 100644 xsd/dist/examples/cxx/tree/custom/calendar/calendar-vc11.vcxproj create mode 100644 xsd/dist/examples/cxx/tree/custom/calendar/calendar-vc11.vcxproj.filters create mode 100644 xsd/dist/examples/cxx/tree/custom/calendar/calendar-vc12.vcxproj create mode 100644 xsd/dist/examples/cxx/tree/custom/calendar/calendar-vc12.vcxproj.filters create mode 100644 xsd/dist/examples/cxx/tree/custom/calendar/calendar-vc8.vcproj create mode 100644 xsd/dist/examples/cxx/tree/custom/calendar/calendar-vc9.vcproj delete mode 100644 xsd/dist/examples/cxx/tree/custom/calendar/calendar-xerces2-7.1.sln delete mode 100644 xsd/dist/examples/cxx/tree/custom/calendar/calendar-xerces2-7.1.vcproj delete mode 100644 xsd/dist/examples/cxx/tree/custom/calendar/calendar-xerces2-8.0.sln delete mode 100644 xsd/dist/examples/cxx/tree/custom/calendar/calendar-xerces2-8.0.vcproj delete mode 100644 xsd/dist/examples/cxx/tree/custom/calendar/calendar-xerces2-9.0.sln delete mode 100644 xsd/dist/examples/cxx/tree/custom/calendar/calendar-xerces2-9.0.vcproj delete mode 100644 xsd/dist/examples/cxx/tree/custom/comments/comments-10.0.vcxproj delete mode 100644 xsd/dist/examples/cxx/tree/custom/comments/comments-10.0.vcxproj.filters delete mode 100644 xsd/dist/examples/cxx/tree/custom/comments/comments-7.1.vcproj delete mode 100644 xsd/dist/examples/cxx/tree/custom/comments/comments-8.0.vcproj delete mode 100644 xsd/dist/examples/cxx/tree/custom/comments/comments-9.0.vcproj create mode 100644 xsd/dist/examples/cxx/tree/custom/comments/comments-vc10.vcxproj create mode 100644 xsd/dist/examples/cxx/tree/custom/comments/comments-vc10.vcxproj.filters create mode 100644 xsd/dist/examples/cxx/tree/custom/comments/comments-vc11.vcxproj create mode 100644 xsd/dist/examples/cxx/tree/custom/comments/comments-vc11.vcxproj.filters create mode 100644 xsd/dist/examples/cxx/tree/custom/comments/comments-vc12.vcxproj create mode 100644 xsd/dist/examples/cxx/tree/custom/comments/comments-vc12.vcxproj.filters create mode 100644 xsd/dist/examples/cxx/tree/custom/comments/comments-vc8.vcproj create mode 100644 xsd/dist/examples/cxx/tree/custom/comments/comments-vc9.vcproj delete mode 100644 xsd/dist/examples/cxx/tree/custom/comments/comments-xerces2-7.1.vcproj delete mode 100644 xsd/dist/examples/cxx/tree/custom/comments/comments-xerces2-8.0.vcproj delete mode 100644 xsd/dist/examples/cxx/tree/custom/comments/comments-xerces2-9.0.vcproj delete mode 100644 xsd/dist/examples/cxx/tree/custom/contacts/contacts-10.0.vcxproj delete mode 100644 xsd/dist/examples/cxx/tree/custom/contacts/contacts-10.0.vcxproj.filters delete mode 100644 xsd/dist/examples/cxx/tree/custom/contacts/contacts-7.1.vcproj delete mode 100644 xsd/dist/examples/cxx/tree/custom/contacts/contacts-8.0.vcproj delete mode 100644 xsd/dist/examples/cxx/tree/custom/contacts/contacts-9.0.vcproj create mode 100644 xsd/dist/examples/cxx/tree/custom/contacts/contacts-vc10.vcxproj create mode 100644 xsd/dist/examples/cxx/tree/custom/contacts/contacts-vc10.vcxproj.filters create mode 100644 xsd/dist/examples/cxx/tree/custom/contacts/contacts-vc11.vcxproj create mode 100644 xsd/dist/examples/cxx/tree/custom/contacts/contacts-vc11.vcxproj.filters create mode 100644 xsd/dist/examples/cxx/tree/custom/contacts/contacts-vc12.vcxproj create mode 100644 xsd/dist/examples/cxx/tree/custom/contacts/contacts-vc12.vcxproj.filters create mode 100644 xsd/dist/examples/cxx/tree/custom/contacts/contacts-vc8.vcproj create mode 100644 xsd/dist/examples/cxx/tree/custom/contacts/contacts-vc9.vcproj delete mode 100644 xsd/dist/examples/cxx/tree/custom/contacts/contacts-xerces2-7.1.vcproj delete mode 100644 xsd/dist/examples/cxx/tree/custom/contacts/contacts-xerces2-8.0.vcproj delete mode 100644 xsd/dist/examples/cxx/tree/custom/contacts/contacts-xerces2-9.0.vcproj delete mode 100644 xsd/dist/examples/cxx/tree/custom/custom-10.0.sln delete mode 100644 xsd/dist/examples/cxx/tree/custom/custom-7.1.sln delete mode 100644 xsd/dist/examples/cxx/tree/custom/custom-8.0.sln delete mode 100644 xsd/dist/examples/cxx/tree/custom/custom-9.0.sln delete mode 100644 xsd/dist/examples/cxx/tree/custom/custom-xerces2-7.1.sln delete mode 100644 xsd/dist/examples/cxx/tree/custom/custom-xerces2-8.0.sln delete mode 100644 xsd/dist/examples/cxx/tree/custom/custom-xerces2-9.0.sln delete mode 100644 xsd/dist/examples/cxx/tree/custom/double/double-10.0.vcxproj delete mode 100644 xsd/dist/examples/cxx/tree/custom/double/double-10.0.vcxproj.filters delete mode 100644 xsd/dist/examples/cxx/tree/custom/double/double-7.1.vcproj delete mode 100644 xsd/dist/examples/cxx/tree/custom/double/double-8.0.vcproj delete mode 100644 xsd/dist/examples/cxx/tree/custom/double/double-9.0.vcproj create mode 100644 xsd/dist/examples/cxx/tree/custom/double/double-vc10.vcxproj create mode 100644 xsd/dist/examples/cxx/tree/custom/double/double-vc10.vcxproj.filters create mode 100644 xsd/dist/examples/cxx/tree/custom/double/double-vc11.vcxproj create mode 100644 xsd/dist/examples/cxx/tree/custom/double/double-vc11.vcxproj.filters create mode 100644 xsd/dist/examples/cxx/tree/custom/double/double-vc12.vcxproj create mode 100644 xsd/dist/examples/cxx/tree/custom/double/double-vc12.vcxproj.filters create mode 100644 xsd/dist/examples/cxx/tree/custom/double/double-vc8.vcproj create mode 100644 xsd/dist/examples/cxx/tree/custom/double/double-vc9.vcproj delete mode 100644 xsd/dist/examples/cxx/tree/custom/double/double-xerces2-7.1.vcproj delete mode 100644 xsd/dist/examples/cxx/tree/custom/double/double-xerces2-8.0.vcproj delete mode 100644 xsd/dist/examples/cxx/tree/custom/double/double-xerces2-9.0.vcproj delete mode 100644 xsd/dist/examples/cxx/tree/custom/mixed/mixed-10.0.vcxproj delete mode 100644 xsd/dist/examples/cxx/tree/custom/mixed/mixed-10.0.vcxproj.filters delete mode 100644 xsd/dist/examples/cxx/tree/custom/mixed/mixed-7.1.vcproj delete mode 100644 xsd/dist/examples/cxx/tree/custom/mixed/mixed-8.0.vcproj delete mode 100644 xsd/dist/examples/cxx/tree/custom/mixed/mixed-9.0.vcproj create mode 100644 xsd/dist/examples/cxx/tree/custom/mixed/mixed-vc10.vcxproj create mode 100644 xsd/dist/examples/cxx/tree/custom/mixed/mixed-vc10.vcxproj.filters create mode 100644 xsd/dist/examples/cxx/tree/custom/mixed/mixed-vc11.vcxproj create mode 100644 xsd/dist/examples/cxx/tree/custom/mixed/mixed-vc11.vcxproj.filters create mode 100644 xsd/dist/examples/cxx/tree/custom/mixed/mixed-vc12.vcxproj create mode 100644 xsd/dist/examples/cxx/tree/custom/mixed/mixed-vc12.vcxproj.filters create mode 100644 xsd/dist/examples/cxx/tree/custom/mixed/mixed-vc8.vcproj create mode 100644 xsd/dist/examples/cxx/tree/custom/mixed/mixed-vc9.vcproj delete mode 100644 xsd/dist/examples/cxx/tree/custom/mixed/mixed-xerces2-7.1.vcproj delete mode 100644 xsd/dist/examples/cxx/tree/custom/mixed/mixed-xerces2-8.0.vcproj delete mode 100644 xsd/dist/examples/cxx/tree/custom/mixed/mixed-xerces2-9.0.vcproj delete mode 100644 xsd/dist/examples/cxx/tree/custom/taxonomy/taxonomy-10.0.vcxproj delete mode 100644 xsd/dist/examples/cxx/tree/custom/taxonomy/taxonomy-10.0.vcxproj.filters delete mode 100644 xsd/dist/examples/cxx/tree/custom/taxonomy/taxonomy-7.1.vcproj delete mode 100644 xsd/dist/examples/cxx/tree/custom/taxonomy/taxonomy-8.0.vcproj delete mode 100644 xsd/dist/examples/cxx/tree/custom/taxonomy/taxonomy-9.0.vcproj create mode 100644 xsd/dist/examples/cxx/tree/custom/taxonomy/taxonomy-vc10.vcxproj create mode 100644 xsd/dist/examples/cxx/tree/custom/taxonomy/taxonomy-vc10.vcxproj.filters create mode 100644 xsd/dist/examples/cxx/tree/custom/taxonomy/taxonomy-vc11.vcxproj create mode 100644 xsd/dist/examples/cxx/tree/custom/taxonomy/taxonomy-vc11.vcxproj.filters create mode 100644 xsd/dist/examples/cxx/tree/custom/taxonomy/taxonomy-vc12.vcxproj create mode 100644 xsd/dist/examples/cxx/tree/custom/taxonomy/taxonomy-vc12.vcxproj.filters create mode 100644 xsd/dist/examples/cxx/tree/custom/taxonomy/taxonomy-vc8.vcproj create mode 100644 xsd/dist/examples/cxx/tree/custom/taxonomy/taxonomy-vc9.vcproj delete mode 100644 xsd/dist/examples/cxx/tree/custom/taxonomy/taxonomy-xerces2-7.1.vcproj delete mode 100644 xsd/dist/examples/cxx/tree/custom/taxonomy/taxonomy-xerces2-8.0.vcproj delete mode 100644 xsd/dist/examples/cxx/tree/custom/taxonomy/taxonomy-xerces2-9.0.vcproj delete mode 100644 xsd/dist/examples/cxx/tree/custom/wildcard/wildcard-10.0.vcxproj delete mode 100644 xsd/dist/examples/cxx/tree/custom/wildcard/wildcard-10.0.vcxproj.filters delete mode 100644 xsd/dist/examples/cxx/tree/custom/wildcard/wildcard-7.1.vcproj delete mode 100644 xsd/dist/examples/cxx/tree/custom/wildcard/wildcard-8.0.vcproj delete mode 100644 xsd/dist/examples/cxx/tree/custom/wildcard/wildcard-9.0.vcproj create mode 100644 xsd/dist/examples/cxx/tree/custom/wildcard/wildcard-vc10.vcxproj create mode 100644 xsd/dist/examples/cxx/tree/custom/wildcard/wildcard-vc10.vcxproj.filters create mode 100644 xsd/dist/examples/cxx/tree/custom/wildcard/wildcard-vc11.vcxproj create mode 100644 xsd/dist/examples/cxx/tree/custom/wildcard/wildcard-vc11.vcxproj.filters create mode 100644 xsd/dist/examples/cxx/tree/custom/wildcard/wildcard-vc12.vcxproj create mode 100644 xsd/dist/examples/cxx/tree/custom/wildcard/wildcard-vc12.vcxproj.filters create mode 100644 xsd/dist/examples/cxx/tree/custom/wildcard/wildcard-vc8.vcproj create mode 100644 xsd/dist/examples/cxx/tree/custom/wildcard/wildcard-vc9.vcproj delete mode 100644 xsd/dist/examples/cxx/tree/custom/wildcard/wildcard-xerces2-7.1.vcproj delete mode 100644 xsd/dist/examples/cxx/tree/custom/wildcard/wildcard-xerces2-8.0.vcproj delete mode 100644 xsd/dist/examples/cxx/tree/custom/wildcard/wildcard-xerces2-9.0.vcproj delete mode 100644 xsd/dist/examples/cxx/tree/dbxml/dbxml-10.0.sln delete mode 100644 xsd/dist/examples/cxx/tree/dbxml/dbxml-10.0.vcxproj delete mode 100644 xsd/dist/examples/cxx/tree/dbxml/dbxml-10.0.vcxproj.filters delete mode 100644 xsd/dist/examples/cxx/tree/dbxml/dbxml-7.1.sln delete mode 100644 xsd/dist/examples/cxx/tree/dbxml/dbxml-7.1.vcproj delete mode 100644 xsd/dist/examples/cxx/tree/dbxml/dbxml-8.0.sln delete mode 100644 xsd/dist/examples/cxx/tree/dbxml/dbxml-8.0.vcproj delete mode 100644 xsd/dist/examples/cxx/tree/dbxml/dbxml-9.0.sln delete mode 100644 xsd/dist/examples/cxx/tree/dbxml/dbxml-9.0.vcproj delete mode 100644 xsd/dist/examples/cxx/tree/dbxml/makefile delete mode 100644 xsd/dist/examples/cxx/tree/embedded/embedded-10.0.sln delete mode 100644 xsd/dist/examples/cxx/tree/embedded/embedded-10.0.vcxproj delete mode 100644 xsd/dist/examples/cxx/tree/embedded/embedded-10.0.vcxproj.filters delete mode 100644 xsd/dist/examples/cxx/tree/embedded/embedded-7.1.sln delete mode 100644 xsd/dist/examples/cxx/tree/embedded/embedded-7.1.vcproj delete mode 100644 xsd/dist/examples/cxx/tree/embedded/embedded-8.0.sln delete mode 100644 xsd/dist/examples/cxx/tree/embedded/embedded-8.0.vcproj delete mode 100644 xsd/dist/examples/cxx/tree/embedded/embedded-9.0.sln delete mode 100644 xsd/dist/examples/cxx/tree/embedded/embedded-9.0.vcproj create mode 100644 xsd/dist/examples/cxx/tree/embedded/embedded-vc10.sln create mode 100644 xsd/dist/examples/cxx/tree/embedded/embedded-vc10.vcxproj create mode 100644 xsd/dist/examples/cxx/tree/embedded/embedded-vc10.vcxproj.filters create mode 100644 xsd/dist/examples/cxx/tree/embedded/embedded-vc11.sln create mode 100644 xsd/dist/examples/cxx/tree/embedded/embedded-vc11.vcxproj create mode 100644 xsd/dist/examples/cxx/tree/embedded/embedded-vc11.vcxproj.filters create mode 100644 xsd/dist/examples/cxx/tree/embedded/embedded-vc12.sln create mode 100644 xsd/dist/examples/cxx/tree/embedded/embedded-vc12.vcxproj create mode 100644 xsd/dist/examples/cxx/tree/embedded/embedded-vc12.vcxproj.filters create mode 100644 xsd/dist/examples/cxx/tree/embedded/embedded-vc8.sln create mode 100644 xsd/dist/examples/cxx/tree/embedded/embedded-vc8.vcproj create mode 100644 xsd/dist/examples/cxx/tree/embedded/embedded-vc9.sln create mode 100644 xsd/dist/examples/cxx/tree/embedded/embedded-vc9.vcproj delete mode 100644 xsd/dist/examples/cxx/tree/embedded/embedded-xerces2-7.1.sln delete mode 100644 xsd/dist/examples/cxx/tree/embedded/embedded-xerces2-7.1.vcproj delete mode 100644 xsd/dist/examples/cxx/tree/embedded/embedded-xerces2-8.0.sln delete mode 100644 xsd/dist/examples/cxx/tree/embedded/embedded-xerces2-8.0.vcproj delete mode 100644 xsd/dist/examples/cxx/tree/embedded/embedded-xerces2-9.0.sln delete mode 100644 xsd/dist/examples/cxx/tree/embedded/embedded-xerces2-9.0.vcproj delete mode 100644 xsd/dist/examples/cxx/tree/embedded/xsdbin-10.0.vcxproj delete mode 100644 xsd/dist/examples/cxx/tree/embedded/xsdbin-10.0.vcxproj.filters delete mode 100644 xsd/dist/examples/cxx/tree/embedded/xsdbin-7.1.vcproj delete mode 100644 xsd/dist/examples/cxx/tree/embedded/xsdbin-8.0.vcproj delete mode 100644 xsd/dist/examples/cxx/tree/embedded/xsdbin-9.0.vcproj create mode 100644 xsd/dist/examples/cxx/tree/embedded/xsdbin-vc10.vcxproj create mode 100644 xsd/dist/examples/cxx/tree/embedded/xsdbin-vc10.vcxproj.filters create mode 100644 xsd/dist/examples/cxx/tree/embedded/xsdbin-vc11.vcxproj create mode 100644 xsd/dist/examples/cxx/tree/embedded/xsdbin-vc11.vcxproj.filters create mode 100644 xsd/dist/examples/cxx/tree/embedded/xsdbin-vc12.vcxproj create mode 100644 xsd/dist/examples/cxx/tree/embedded/xsdbin-vc12.vcxproj.filters create mode 100644 xsd/dist/examples/cxx/tree/embedded/xsdbin-vc8.vcproj create mode 100644 xsd/dist/examples/cxx/tree/embedded/xsdbin-vc9.vcproj delete mode 100644 xsd/dist/examples/cxx/tree/embedded/xsdbin-xerces2-7.1.vcproj delete mode 100644 xsd/dist/examples/cxx/tree/embedded/xsdbin-xerces2-8.0.vcproj delete mode 100644 xsd/dist/examples/cxx/tree/embedded/xsdbin-xerces2-9.0.vcproj delete mode 100644 xsd/dist/examples/cxx/tree/hello/hello-10.0.vcxproj delete mode 100644 xsd/dist/examples/cxx/tree/hello/hello-10.0.vcxproj.filters delete mode 100644 xsd/dist/examples/cxx/tree/hello/hello-7.1.vcproj delete mode 100644 xsd/dist/examples/cxx/tree/hello/hello-8.0.vcproj delete mode 100644 xsd/dist/examples/cxx/tree/hello/hello-9.0.vcproj create mode 100644 xsd/dist/examples/cxx/tree/hello/hello-vc10.vcxproj create mode 100644 xsd/dist/examples/cxx/tree/hello/hello-vc10.vcxproj.filters create mode 100644 xsd/dist/examples/cxx/tree/hello/hello-vc11.vcxproj create mode 100644 xsd/dist/examples/cxx/tree/hello/hello-vc11.vcxproj.filters create mode 100644 xsd/dist/examples/cxx/tree/hello/hello-vc12.vcxproj create mode 100644 xsd/dist/examples/cxx/tree/hello/hello-vc12.vcxproj.filters create mode 100644 xsd/dist/examples/cxx/tree/hello/hello-vc8.vcproj create mode 100644 xsd/dist/examples/cxx/tree/hello/hello-vc9.vcproj delete mode 100644 xsd/dist/examples/cxx/tree/hello/hello-xerces2-7.1.vcproj delete mode 100644 xsd/dist/examples/cxx/tree/hello/hello-xerces2-8.0.vcproj delete mode 100644 xsd/dist/examples/cxx/tree/hello/hello-xerces2-9.0.vcproj delete mode 100644 xsd/dist/examples/cxx/tree/library/library-10.0.vcxproj delete mode 100644 xsd/dist/examples/cxx/tree/library/library-10.0.vcxproj.filters delete mode 100644 xsd/dist/examples/cxx/tree/library/library-7.1.vcproj delete mode 100644 xsd/dist/examples/cxx/tree/library/library-8.0.vcproj delete mode 100644 xsd/dist/examples/cxx/tree/library/library-9.0.vcproj create mode 100644 xsd/dist/examples/cxx/tree/library/library-vc10.vcxproj create mode 100644 xsd/dist/examples/cxx/tree/library/library-vc10.vcxproj.filters create mode 100644 xsd/dist/examples/cxx/tree/library/library-vc11.vcxproj create mode 100644 xsd/dist/examples/cxx/tree/library/library-vc11.vcxproj.filters create mode 100644 xsd/dist/examples/cxx/tree/library/library-vc12.vcxproj create mode 100644 xsd/dist/examples/cxx/tree/library/library-vc12.vcxproj.filters create mode 100644 xsd/dist/examples/cxx/tree/library/library-vc8.vcproj create mode 100644 xsd/dist/examples/cxx/tree/library/library-vc9.vcproj delete mode 100644 xsd/dist/examples/cxx/tree/library/library-xerces2-7.1.vcproj delete mode 100644 xsd/dist/examples/cxx/tree/library/library-xerces2-8.0.vcproj delete mode 100644 xsd/dist/examples/cxx/tree/library/library-xerces2-9.0.vcproj delete mode 100644 xsd/dist/examples/cxx/tree/messaging/messaging-10.0.vcxproj delete mode 100644 xsd/dist/examples/cxx/tree/messaging/messaging-10.0.vcxproj.filters delete mode 100644 xsd/dist/examples/cxx/tree/messaging/messaging-7.1.vcproj delete mode 100644 xsd/dist/examples/cxx/tree/messaging/messaging-8.0.vcproj delete mode 100644 xsd/dist/examples/cxx/tree/messaging/messaging-9.0.vcproj create mode 100644 xsd/dist/examples/cxx/tree/messaging/messaging-vc10.vcxproj create mode 100644 xsd/dist/examples/cxx/tree/messaging/messaging-vc10.vcxproj.filters create mode 100644 xsd/dist/examples/cxx/tree/messaging/messaging-vc11.vcxproj create mode 100644 xsd/dist/examples/cxx/tree/messaging/messaging-vc11.vcxproj.filters create mode 100644 xsd/dist/examples/cxx/tree/messaging/messaging-vc12.vcxproj create mode 100644 xsd/dist/examples/cxx/tree/messaging/messaging-vc12.vcxproj.filters create mode 100644 xsd/dist/examples/cxx/tree/messaging/messaging-vc8.vcproj create mode 100644 xsd/dist/examples/cxx/tree/messaging/messaging-vc9.vcproj delete mode 100644 xsd/dist/examples/cxx/tree/messaging/messaging-xerces2-7.1.vcproj delete mode 100644 xsd/dist/examples/cxx/tree/messaging/messaging-xerces2-8.0.vcproj delete mode 100644 xsd/dist/examples/cxx/tree/messaging/messaging-xerces2-9.0.vcproj delete mode 100644 xsd/dist/examples/cxx/tree/mixed/mixed-10.0.vcxproj delete mode 100644 xsd/dist/examples/cxx/tree/mixed/mixed-10.0.vcxproj.filters delete mode 100644 xsd/dist/examples/cxx/tree/mixed/mixed-7.1.vcproj delete mode 100644 xsd/dist/examples/cxx/tree/mixed/mixed-8.0.vcproj delete mode 100644 xsd/dist/examples/cxx/tree/mixed/mixed-9.0.vcproj create mode 100644 xsd/dist/examples/cxx/tree/mixed/mixed-vc10.vcxproj create mode 100644 xsd/dist/examples/cxx/tree/mixed/mixed-vc10.vcxproj.filters create mode 100644 xsd/dist/examples/cxx/tree/mixed/mixed-vc11.vcxproj create mode 100644 xsd/dist/examples/cxx/tree/mixed/mixed-vc11.vcxproj.filters create mode 100644 xsd/dist/examples/cxx/tree/mixed/mixed-vc12.vcxproj create mode 100644 xsd/dist/examples/cxx/tree/mixed/mixed-vc12.vcxproj.filters create mode 100644 xsd/dist/examples/cxx/tree/mixed/mixed-vc8.vcproj create mode 100644 xsd/dist/examples/cxx/tree/mixed/mixed-vc9.vcproj delete mode 100644 xsd/dist/examples/cxx/tree/mixed/mixed-xerces2-7.1.vcproj delete mode 100644 xsd/dist/examples/cxx/tree/mixed/mixed-xerces2-8.0.vcproj delete mode 100644 xsd/dist/examples/cxx/tree/mixed/mixed-xerces2-9.0.vcproj delete mode 100644 xsd/dist/examples/cxx/tree/multiroot/multiroot-10.0.vcxproj delete mode 100644 xsd/dist/examples/cxx/tree/multiroot/multiroot-10.0.vcxproj.filters delete mode 100644 xsd/dist/examples/cxx/tree/multiroot/multiroot-7.1.vcproj delete mode 100644 xsd/dist/examples/cxx/tree/multiroot/multiroot-8.0.vcproj delete mode 100644 xsd/dist/examples/cxx/tree/multiroot/multiroot-9.0.vcproj create mode 100644 xsd/dist/examples/cxx/tree/multiroot/multiroot-vc10.vcxproj create mode 100644 xsd/dist/examples/cxx/tree/multiroot/multiroot-vc10.vcxproj.filters create mode 100644 xsd/dist/examples/cxx/tree/multiroot/multiroot-vc11.vcxproj create mode 100644 xsd/dist/examples/cxx/tree/multiroot/multiroot-vc11.vcxproj.filters create mode 100644 xsd/dist/examples/cxx/tree/multiroot/multiroot-vc12.vcxproj create mode 100644 xsd/dist/examples/cxx/tree/multiroot/multiroot-vc12.vcxproj.filters create mode 100644 xsd/dist/examples/cxx/tree/multiroot/multiroot-vc8.vcproj create mode 100644 xsd/dist/examples/cxx/tree/multiroot/multiroot-vc9.vcproj delete mode 100644 xsd/dist/examples/cxx/tree/multiroot/multiroot-xerces2-7.1.vcproj delete mode 100644 xsd/dist/examples/cxx/tree/multiroot/multiroot-xerces2-8.0.vcproj delete mode 100644 xsd/dist/examples/cxx/tree/multiroot/multiroot-xerces2-9.0.vcproj create mode 100644 xsd/dist/examples/cxx/tree/order/element/makefile create mode 100644 xsd/dist/examples/cxx/tree/order/element/order-element-vc10.vcxproj create mode 100644 xsd/dist/examples/cxx/tree/order/element/order-element-vc10.vcxproj.filters create mode 100644 xsd/dist/examples/cxx/tree/order/element/order-element-vc11.vcxproj create mode 100644 xsd/dist/examples/cxx/tree/order/element/order-element-vc11.vcxproj.filters create mode 100644 xsd/dist/examples/cxx/tree/order/element/order-element-vc12.vcxproj create mode 100644 xsd/dist/examples/cxx/tree/order/element/order-element-vc12.vcxproj.filters create mode 100644 xsd/dist/examples/cxx/tree/order/element/order-element-vc8.vcproj create mode 100644 xsd/dist/examples/cxx/tree/order/element/order-element-vc9.vcproj create mode 100644 xsd/dist/examples/cxx/tree/order/makefile create mode 100644 xsd/dist/examples/cxx/tree/order/mixed/makefile create mode 100644 xsd/dist/examples/cxx/tree/order/mixed/order-mixed-vc10.vcxproj create mode 100644 xsd/dist/examples/cxx/tree/order/mixed/order-mixed-vc10.vcxproj.filters create mode 100644 xsd/dist/examples/cxx/tree/order/mixed/order-mixed-vc11.vcxproj create mode 100644 xsd/dist/examples/cxx/tree/order/mixed/order-mixed-vc11.vcxproj.filters create mode 100644 xsd/dist/examples/cxx/tree/order/mixed/order-mixed-vc12.vcxproj create mode 100644 xsd/dist/examples/cxx/tree/order/mixed/order-mixed-vc12.vcxproj.filters create mode 100644 xsd/dist/examples/cxx/tree/order/mixed/order-mixed-vc8.vcproj create mode 100644 xsd/dist/examples/cxx/tree/order/mixed/order-mixed-vc9.vcproj delete mode 100644 xsd/dist/examples/cxx/tree/performance/performance-10.0.vcxproj delete mode 100644 xsd/dist/examples/cxx/tree/performance/performance-10.0.vcxproj.filters delete mode 100644 xsd/dist/examples/cxx/tree/performance/performance-7.1.vcproj delete mode 100644 xsd/dist/examples/cxx/tree/performance/performance-8.0.vcproj delete mode 100644 xsd/dist/examples/cxx/tree/performance/performance-9.0.vcproj create mode 100644 xsd/dist/examples/cxx/tree/performance/performance-vc10.vcxproj create mode 100644 xsd/dist/examples/cxx/tree/performance/performance-vc10.vcxproj.filters create mode 100644 xsd/dist/examples/cxx/tree/performance/performance-vc11.vcxproj create mode 100644 xsd/dist/examples/cxx/tree/performance/performance-vc11.vcxproj.filters create mode 100644 xsd/dist/examples/cxx/tree/performance/performance-vc12.vcxproj create mode 100644 xsd/dist/examples/cxx/tree/performance/performance-vc12.vcxproj.filters create mode 100644 xsd/dist/examples/cxx/tree/performance/performance-vc8.vcproj create mode 100644 xsd/dist/examples/cxx/tree/performance/performance-vc9.vcproj delete mode 100644 xsd/dist/examples/cxx/tree/performance/performance-xerces2-7.1.vcproj delete mode 100644 xsd/dist/examples/cxx/tree/performance/performance-xerces2-8.0.vcproj delete mode 100644 xsd/dist/examples/cxx/tree/performance/performance-xerces2-9.0.vcproj delete mode 100644 xsd/dist/examples/cxx/tree/polymorphism/polymorphism-10.0.vcxproj delete mode 100644 xsd/dist/examples/cxx/tree/polymorphism/polymorphism-10.0.vcxproj.filters delete mode 100644 xsd/dist/examples/cxx/tree/polymorphism/polymorphism-7.1.vcproj delete mode 100644 xsd/dist/examples/cxx/tree/polymorphism/polymorphism-8.0.vcproj delete mode 100644 xsd/dist/examples/cxx/tree/polymorphism/polymorphism-9.0.vcproj create mode 100644 xsd/dist/examples/cxx/tree/polymorphism/polymorphism-vc10.vcxproj create mode 100644 xsd/dist/examples/cxx/tree/polymorphism/polymorphism-vc10.vcxproj.filters create mode 100644 xsd/dist/examples/cxx/tree/polymorphism/polymorphism-vc11.vcxproj create mode 100644 xsd/dist/examples/cxx/tree/polymorphism/polymorphism-vc11.vcxproj.filters create mode 100644 xsd/dist/examples/cxx/tree/polymorphism/polymorphism-vc12.vcxproj create mode 100644 xsd/dist/examples/cxx/tree/polymorphism/polymorphism-vc12.vcxproj.filters create mode 100644 xsd/dist/examples/cxx/tree/polymorphism/polymorphism-vc8.vcproj create mode 100644 xsd/dist/examples/cxx/tree/polymorphism/polymorphism-vc9.vcproj delete mode 100644 xsd/dist/examples/cxx/tree/polymorphism/polymorphism-xerces2-7.1.vcproj delete mode 100644 xsd/dist/examples/cxx/tree/polymorphism/polymorphism-xerces2-8.0.vcproj delete mode 100644 xsd/dist/examples/cxx/tree/polymorphism/polymorphism-xerces2-9.0.vcproj delete mode 100644 xsd/dist/examples/cxx/tree/streaming/streaming-10.0.vcxproj delete mode 100644 xsd/dist/examples/cxx/tree/streaming/streaming-10.0.vcxproj.filters delete mode 100644 xsd/dist/examples/cxx/tree/streaming/streaming-7.1.vcproj delete mode 100644 xsd/dist/examples/cxx/tree/streaming/streaming-8.0.vcproj delete mode 100644 xsd/dist/examples/cxx/tree/streaming/streaming-9.0.vcproj create mode 100644 xsd/dist/examples/cxx/tree/streaming/streaming-vc10.vcxproj create mode 100644 xsd/dist/examples/cxx/tree/streaming/streaming-vc10.vcxproj.filters create mode 100644 xsd/dist/examples/cxx/tree/streaming/streaming-vc11.vcxproj create mode 100644 xsd/dist/examples/cxx/tree/streaming/streaming-vc11.vcxproj.filters create mode 100644 xsd/dist/examples/cxx/tree/streaming/streaming-vc12.vcxproj create mode 100644 xsd/dist/examples/cxx/tree/streaming/streaming-vc12.vcxproj.filters create mode 100644 xsd/dist/examples/cxx/tree/streaming/streaming-vc8.vcproj create mode 100644 xsd/dist/examples/cxx/tree/streaming/streaming-vc9.vcproj delete mode 100644 xsd/dist/examples/cxx/tree/streaming/streaming-xerces2-7.1.vcproj delete mode 100644 xsd/dist/examples/cxx/tree/streaming/streaming-xerces2-8.0.vcproj delete mode 100644 xsd/dist/examples/cxx/tree/streaming/streaming-xerces2-9.0.vcproj delete mode 100644 xsd/dist/examples/cxx/tree/tree-10.0.sln delete mode 100644 xsd/dist/examples/cxx/tree/tree-7.1.sln delete mode 100644 xsd/dist/examples/cxx/tree/tree-8.0.sln delete mode 100644 xsd/dist/examples/cxx/tree/tree-9.0.sln delete mode 100644 xsd/dist/examples/cxx/tree/tree-xerces2-7.1.sln delete mode 100644 xsd/dist/examples/cxx/tree/tree-xerces2-8.0.sln delete mode 100644 xsd/dist/examples/cxx/tree/tree-xerces2-9.0.sln delete mode 100644 xsd/dist/examples/cxx/tree/wildcard/wildcard-10.0.vcxproj delete mode 100644 xsd/dist/examples/cxx/tree/wildcard/wildcard-10.0.vcxproj.filters delete mode 100644 xsd/dist/examples/cxx/tree/wildcard/wildcard-7.1.vcproj delete mode 100644 xsd/dist/examples/cxx/tree/wildcard/wildcard-8.0.vcproj delete mode 100644 xsd/dist/examples/cxx/tree/wildcard/wildcard-9.0.vcproj create mode 100644 xsd/dist/examples/cxx/tree/wildcard/wildcard-vc10.vcxproj create mode 100644 xsd/dist/examples/cxx/tree/wildcard/wildcard-vc10.vcxproj.filters create mode 100644 xsd/dist/examples/cxx/tree/wildcard/wildcard-vc11.vcxproj create mode 100644 xsd/dist/examples/cxx/tree/wildcard/wildcard-vc11.vcxproj.filters create mode 100644 xsd/dist/examples/cxx/tree/wildcard/wildcard-vc12.vcxproj create mode 100644 xsd/dist/examples/cxx/tree/wildcard/wildcard-vc12.vcxproj.filters create mode 100644 xsd/dist/examples/cxx/tree/wildcard/wildcard-vc8.vcproj create mode 100644 xsd/dist/examples/cxx/tree/wildcard/wildcard-vc9.vcproj delete mode 100644 xsd/dist/examples/cxx/tree/wildcard/wildcard-xerces2-7.1.vcproj delete mode 100644 xsd/dist/examples/cxx/tree/wildcard/wildcard-xerces2-8.0.vcproj delete mode 100644 xsd/dist/examples/cxx/tree/wildcard/wildcard-xerces2-9.0.vcproj delete mode 100644 xsd/dist/examples/cxx/tree/xpath/xpath-10.0.sln delete mode 100644 xsd/dist/examples/cxx/tree/xpath/xpath-10.0.vcxproj delete mode 100644 xsd/dist/examples/cxx/tree/xpath/xpath-10.0.vcxproj.filters delete mode 100644 xsd/dist/examples/cxx/tree/xpath/xpath-7.1.sln delete mode 100644 xsd/dist/examples/cxx/tree/xpath/xpath-7.1.vcproj delete mode 100644 xsd/dist/examples/cxx/tree/xpath/xpath-8.0.sln delete mode 100644 xsd/dist/examples/cxx/tree/xpath/xpath-8.0.vcproj delete mode 100644 xsd/dist/examples/cxx/tree/xpath/xpath-9.0.sln delete mode 100644 xsd/dist/examples/cxx/tree/xpath/xpath-9.0.vcproj create mode 100644 xsd/dist/examples/cxx/tree/xpath/xpath-vc10.vcxproj create mode 100644 xsd/dist/examples/cxx/tree/xpath/xpath-vc10.vcxproj.filters create mode 100644 xsd/dist/examples/cxx/tree/xpath/xpath-vc11.vcxproj create mode 100644 xsd/dist/examples/cxx/tree/xpath/xpath-vc11.vcxproj.filters create mode 100644 xsd/dist/examples/cxx/tree/xpath/xpath-vc12.vcxproj create mode 100644 xsd/dist/examples/cxx/tree/xpath/xpath-vc12.vcxproj.filters create mode 100644 xsd/dist/examples/cxx/tree/xpath/xpath-vc8.vcproj create mode 100644 xsd/dist/examples/cxx/tree/xpath/xpath-vc9.vcproj delete mode 100644 xsd/dist/examples/cxx/tree/xpath/xpath-xerces2-7.1.sln delete mode 100644 xsd/dist/examples/cxx/tree/xpath/xpath-xerces2-7.1.vcproj delete mode 100644 xsd/dist/examples/cxx/tree/xpath/xpath-xerces2-8.0.sln delete mode 100644 xsd/dist/examples/cxx/tree/xpath/xpath-xerces2-8.0.vcproj delete mode 100644 xsd/dist/examples/cxx/tree/xpath/xpath-xerces2-9.0.sln delete mode 100644 xsd/dist/examples/cxx/tree/xpath/xpath-xerces2-9.0.vcproj create mode 100644 xsd/dist/examples/test.bat create mode 100644 xsd/dist/examples/tester.bat create mode 100644 xsd/dist/template-vc10.sln create mode 100644 xsd/dist/template-vc11.sln create mode 100644 xsd/dist/template-vc12.sln create mode 100644 xsd/dist/template-vc8.sln create mode 100644 xsd/dist/template-vc9.sln create mode 100644 xsd/doc/custom-literals.xsd create mode 100644 xsd/doc/cxx/makefile create mode 100644 xsd/doc/cxx/parser/guide/cxx-parser-guide.pdf create mode 100644 xsd/doc/cxx/parser/guide/cxx-parser-guide.ps create mode 100644 xsd/doc/cxx/parser/guide/figure-1.png create mode 100644 xsd/doc/cxx/parser/guide/figure-1.svg create mode 100644 xsd/doc/cxx/parser/guide/guide.html2ps create mode 100644 xsd/doc/cxx/parser/guide/index.xhtml create mode 100644 xsd/doc/cxx/parser/guide/makefile create mode 100644 xsd/doc/cxx/parser/makefile create mode 100644 xsd/doc/cxx/tree/guide/cxx-tree-guide.pdf create mode 100644 xsd/doc/cxx/tree/guide/cxx-tree-guide.ps create mode 100644 xsd/doc/cxx/tree/guide/guide.html2ps create mode 100644 xsd/doc/cxx/tree/guide/index.xhtml create mode 100644 xsd/doc/cxx/tree/guide/makefile create mode 100644 xsd/doc/cxx/tree/makefile create mode 100644 xsd/doc/cxx/tree/manual/cxx-tree-manual.pdf create mode 100644 xsd/doc/cxx/tree/manual/cxx-tree-manual.ps create mode 100644 xsd/doc/cxx/tree/manual/index.xhtml create mode 100644 xsd/doc/cxx/tree/manual/makefile create mode 100644 xsd/doc/cxx/tree/manual/manual.html2ps create mode 100644 xsd/doc/cxx/tree/reference/footer.html create mode 100644 xsd/doc/cxx/tree/reference/libxsd.doxygen create mode 100644 xsd/doc/cxx/tree/reference/makefile create mode 100644 xsd/doc/default.css create mode 100644 xsd/doc/makefile create mode 100644 xsd/doc/xsd-epilogue.1 create mode 100644 xsd/doc/xsd-epilogue.xhtml create mode 100644 xsd/doc/xsd-parser-header.1 create mode 100644 xsd/doc/xsd-parser-header.xhtml create mode 100644 xsd/doc/xsd-prologue.1 create mode 100644 xsd/doc/xsd-prologue.xhtml create mode 100644 xsd/doc/xsd-tree-header.1 create mode 100644 xsd/doc/xsd-tree-header.xhtml create mode 100644 xsd/doc/xsd.1 create mode 100644 xsd/doc/xsd.xhtml delete mode 100644 xsd/documentation/custom-literals.xsd delete mode 100644 xsd/documentation/cxx/makefile delete mode 100644 xsd/documentation/cxx/parser/guide/cxx-parser-guide.pdf delete mode 100644 xsd/documentation/cxx/parser/guide/cxx-parser-guide.ps delete mode 100644 xsd/documentation/cxx/parser/guide/figure-1.png delete mode 100644 xsd/documentation/cxx/parser/guide/figure-1.svg delete mode 100644 xsd/documentation/cxx/parser/guide/guide.html2ps delete mode 100644 xsd/documentation/cxx/parser/guide/index.xhtml delete mode 100644 xsd/documentation/cxx/parser/guide/makefile delete mode 100644 xsd/documentation/cxx/parser/makefile delete mode 100644 xsd/documentation/cxx/tree/dbxml/driver.cxx delete mode 100644 xsd/documentation/cxx/tree/dbxml/index.xhtml delete mode 100644 xsd/documentation/cxx/tree/dbxml/library.xsd delete mode 100644 xsd/documentation/cxx/tree/guide/cxx-tree-guide.pdf delete mode 100644 xsd/documentation/cxx/tree/guide/cxx-tree-guide.ps delete mode 100644 xsd/documentation/cxx/tree/guide/guide.html2ps delete mode 100644 xsd/documentation/cxx/tree/guide/index.xhtml delete mode 100644 xsd/documentation/cxx/tree/guide/makefile delete mode 100644 xsd/documentation/cxx/tree/makefile delete mode 100644 xsd/documentation/cxx/tree/manual/cxx-tree-manual.pdf delete mode 100644 xsd/documentation/cxx/tree/manual/cxx-tree-manual.ps delete mode 100644 xsd/documentation/cxx/tree/manual/index.xhtml delete mode 100644 xsd/documentation/cxx/tree/manual/makefile delete mode 100644 xsd/documentation/cxx/tree/manual/manual.html2ps delete mode 100644 xsd/documentation/cxx/tree/reference/footer.html delete mode 100644 xsd/documentation/cxx/tree/reference/libxsd.doxygen delete mode 100644 xsd/documentation/cxx/tree/reference/makefile delete mode 100644 xsd/documentation/default.css delete mode 100644 xsd/documentation/future.xhtml delete mode 100644 xsd/documentation/makefile delete mode 100644 xsd/documentation/schema-authoring-guide.xhtml delete mode 100644 xsd/documentation/xsd.1 delete mode 100644 xsd/documentation/xsd.xhtml delete mode 100644 xsd/examples/cxx/parser/performance/test-500k.xml delete mode 100644 xsd/examples/cxx/parser/performance/test-5k.xml delete mode 100644 xsd/examples/cxx/tree/dbxml/README delete mode 100644 xsd/examples/cxx/tree/dbxml/driver.cxx delete mode 100644 xsd/examples/cxx/tree/dbxml/library.xsd delete mode 100644 xsd/examples/cxx/tree/dbxml/makefile create mode 100644 xsd/examples/cxx/tree/order/README create mode 100644 xsd/examples/cxx/tree/order/element/README create mode 100644 xsd/examples/cxx/tree/order/element/driver.cxx create mode 100644 xsd/examples/cxx/tree/order/element/makefile create mode 100644 xsd/examples/cxx/tree/order/element/transactions.xml create mode 100644 xsd/examples/cxx/tree/order/element/transactions.xsd create mode 100644 xsd/examples/cxx/tree/order/makefile create mode 100644 xsd/examples/cxx/tree/order/mixed/README create mode 100644 xsd/examples/cxx/tree/order/mixed/driver.cxx create mode 100644 xsd/examples/cxx/tree/order/mixed/makefile create mode 100644 xsd/examples/cxx/tree/order/mixed/text.xml create mode 100644 xsd/examples/cxx/tree/order/mixed/text.xsd delete mode 100644 xsd/examples/cxx/tree/performance/test-500k.xml delete mode 100644 xsd/examples/cxx/tree/performance/test-5k.xml create mode 100644 xsd/examples/cxx/tree/streaming/grammar-input-stream.cxx create mode 100644 xsd/examples/cxx/tree/streaming/grammar-input-stream.hxx delete mode 100644 xsd/examples/cxx/tree/xpath/driver-2.cxx delete mode 100644 xsd/libxsd/xsd/cxx/compilers/vc-7/post.hxx delete mode 100644 xsd/libxsd/xsd/cxx/compilers/vc-7/pre.hxx create mode 100644 xsd/libxsd/xsd/cxx/tree/iterator-adapter.hxx create mode 100644 xsd/tests/cxx/parser/polymorphism/recursive/driver.cxx create mode 100644 xsd/tests/cxx/parser/polymorphism/recursive/makefile create mode 100644 xsd/tests/cxx/parser/polymorphism/recursive/output create mode 100644 xsd/tests/cxx/parser/polymorphism/recursive/test-pimpl.cxx create mode 100644 xsd/tests/cxx/parser/polymorphism/recursive/test-pimpl.hxx create mode 100644 xsd/tests/cxx/parser/polymorphism/recursive/test.xml create mode 100644 xsd/tests/cxx/parser/polymorphism/recursive/test.xsd create mode 100644 xsd/tests/cxx/tree/any-type/driver.cxx create mode 100644 xsd/tests/cxx/tree/any-type/makefile create mode 100644 xsd/tests/cxx/tree/any-type/output create mode 100644 xsd/tests/cxx/tree/any-type/test.xml create mode 100644 xsd/tests/cxx/tree/any-type/test.xsd create mode 100644 xsd/tests/cxx/tree/dom-association/dom-parse.cxx create mode 100644 xsd/tests/cxx/tree/dom-association/dom-parse.hxx create mode 100644 xsd/tests/cxx/tree/dom-association/driver.cxx create mode 100644 xsd/tests/cxx/tree/dom-association/makefile create mode 100644 xsd/tests/cxx/tree/dom-association/output create mode 100644 xsd/tests/cxx/tree/dom-association/test.xml create mode 100644 xsd/tests/cxx/tree/dom-association/test.xsd create mode 100644 xsd/tests/cxx/tree/order/driver.cxx create mode 100644 xsd/tests/cxx/tree/order/makefile create mode 100644 xsd/tests/cxx/tree/order/output create mode 100644 xsd/tests/cxx/tree/order/test.xml create mode 100644 xsd/tests/cxx/tree/order/test.xsd create mode 100644 xsd/xsd/cxx/option-types.cxx create mode 100644 xsd/xsd/cxx/option-types.hxx create mode 100644 xsd/xsd/cxx/options.cli create mode 100644 xsd/xsd/cxx/options.cxx create mode 100644 xsd/xsd/cxx/options.hxx create mode 100644 xsd/xsd/cxx/options.ixx delete mode 100644 xsd/xsd/cxx/parser/cli.hxx create mode 100644 xsd/xsd/cxx/parser/options.cli create mode 100644 xsd/xsd/cxx/parser/options.cxx create mode 100644 xsd/xsd/cxx/parser/options.hxx create mode 100644 xsd/xsd/cxx/parser/options.ixx delete mode 100644 xsd/xsd/cxx/tree/cli.hxx create mode 100644 xsd/xsd/cxx/tree/options.cli create mode 100644 xsd/xsd/cxx/tree/options.cxx create mode 100644 xsd/xsd/cxx/tree/options.hxx create mode 100644 xsd/xsd/cxx/tree/options.ixx create mode 100644 xsd/xsd/cxx/tree/order-processor.cxx create mode 100644 xsd/xsd/cxx/tree/order-processor.hxx create mode 100644 xsd/xsd/options-parser.hxx create mode 100644 xsd/xsd/options.cli create mode 100644 xsd/xsd/options.cxx create mode 100644 xsd/xsd/options.hxx create mode 100644 xsd/xsd/options.ixx create mode 100644 xsd/xsd/types.hxx delete mode 100644 xsd/xsd/usage.hxx (limited to 'xsd') diff --git a/xsd/INSTALL b/xsd/INSTALL index 366cda1..96e63f9 100644 --- a/xsd/INSTALL +++ b/xsd/INSTALL @@ -2,17 +2,16 @@ Compiler Prerequisites build-time: - - build >= 0.3.7 http://www.codesynthesis.com/projects/build/ - - g++ >= 3.4.3 http://gcc.gnu.org + - g++ >= 3.4.3 http://gcc.gnu.org + - build >= 0.3.10 http://www.codesynthesis.com/projects/build/ + - cli >= 1.2.0 http://www.codesynthesis.com/projects/cli/ run-time: - - libxsd-frontend >= 1.17.0 http://www.codesynthesis.com/projects/libxsd-frontend/ - - libbackend-elements >= 1.7.2 http://kolpackov.net/projects/libbackend-elements/ - - libcult >= 1.4.6 http://kolpackov.net/projects/libcult/ - - libxerces-c >= 2.6.0 http://xerces.apache.org/xerces-c/ - - libboost_filesystem >= 1.33.1 http://boost.org - - libboost_regex >= 1.33.1 http://boost.org + - libxerces-c >= 3.0.0 http://xerces.apache.org/xerces-c/ + - libcutl >= 1.8.0 http://www.codesynthesis.com/projects/libcutl/ + - libxsd-frontend >= 2.0.0 http://www.codesynthesis.com/projects/libxsd-frontend/ + Generated Code Prerequisites @@ -22,7 +21,7 @@ Generated Code Prerequisites run-time: - - libxerces-c >= 2.5.0 (C++/Tree and C++/Parser mappings) + - libxerces-c >= 3.0.0 (C++/Tree and C++/Parser mappings) http://xerces.apache.org/xerces-c/ - libexpat >= 1.95.8 (C++/Parser mapping, alternative to libxerces-c) @@ -31,8 +30,14 @@ Generated Code Prerequisites Building XSD - To build in the source directory simply run 'make'. You can also - build in a separate directory, e.g., + First build (and optionally install) all the prerequisites listed above. + Alternatively, you can use the xsd+dep package that includes all the + prerequisites (except g++ and libxerces-c) and can be built with a + single 'make' invocation. + + Once the prerequisites are ready, to build the XSD compiler in source + directory simply run 'make'. You can also build in a separate directory, + for example: $ mkdir xsd-i686-pc-linux-gnu $ cd xsd-i686-pc-linux-gnu @@ -43,7 +48,7 @@ Installing XSD To install XSD, run 'make install'. Use the install_prefix command line variable to specify installation location (default is /usr/local), - e.g., + for example: $ make install_prefix=/usr install diff --git a/xsd/NEWS b/xsd/NEWS index b999efb..5bb59d7 100644 --- a/xsd/NEWS +++ b/xsd/NEWS @@ -1,17 +1,94 @@ +Version 4.0.0 + + * Xerces-C++ 2-series (2.8.0 and earlier) is no longer supported. + + * Visual Studio 2003 (7.1) is no longer supported. + + * HP aCC3 (HP-UX/PA-RISC) is no longer supported. + + * Oracle/Berkeley DB XML support has been removed since it no longer + supports the Xerces-C++-based document access. + + * New option, --std, specifies the C++ standard that the generated code + should conform to. Valid values are c++98 (default) and c++11. + + The C++ standard affects various aspects of the generated code that are + discussed in more detail in mapping-specific documentation (guides and + manuals). Overall, when C++11 is selected, the generated code relies on + the move semantics and uses std::unique_ptr instead of deprecated + std::auto_ptr. See also the documentation for the --std option in the + XSD compiler command line manual (man pages). + + * New option, --fat-type-file, triggers the placement of code corresponding + to global elements into type files instead of schema files in the file- + per-type mode. This option is primarily useful when trying to minimize + the amount of object code that is linked to an executable by packaging + compiled generated code into a static (archive) library. + +C++/Tree + + * Support for ordered types. C++/Tree flattens nested compositors which + sometimes can result in the loss of element ordering information that + could be significant to the application. Ordered types address this + problem. For more information, refer to Section 2.8.4, "Element Order" + in the C++/Tree Mapping User Manual. + + * Support for mixed content in ordered types. For more information, refer + to Section 2.13, "Mapping for Mixed Content Models" in the C++/Tree + Mapping User Manual. + + * xml_schema::type represents anyType content as a DOM fragment, similar + to wildcards. For more information, refer to Section 2.5.2, "Mapping + for anyType" in the C++/Tree Mapping User Manual. + + * xml_schema::simple_type represents anySimpleType content as a text + string. For more information, refer to Section 2.5.3, "Mapping for + anySimpleType" in the C++/Tree Mapping User Manual. + + * New option, --generate-dep, triggers the generation of the make + dependency files (.d) for the generated C++ files. Other options + controlling dependency generation are: --generate-dep-only, + --dep-phony, --dep-target, --dep-suffix, and --dep-regex. For + details on this functionality, refer to the XSD compiler command + line manual (man pages). + + * New option, --suppress-assignment, suppresses the generation of copy + assignment operators for complex types. If this option is specified, + the copy assignment operators for such types are declared private and + left unimplemented. + + * Binary representation now stores string-based enumerations as integer + values corresponding to C++ enumerators instead of string literals. + + * Binary representation now pools polymorphic type-id strings in an + implicit string pool. The string pool support can also be used to + pool strings in other situations. For example, you can implement + string insertion/extraction operators for your stream to pool all + strings. This can be useful if your documents contain a large number + of repetitive strings. + + * New option, --polymorphic-plate, allows the creation of multiple + polymorphic map plates in the same application. For details, refer + to the XSD compiler command line manual (man pages). + + * To get the DOM association in the copy of an object model tree one + now needs to explicitly pass the xml_schema::flags::keep_dom flag as + the second argument to the copy constructor or clone() function. + Version 3.3.0 * New option, --char-encoding, allows you to specify the character encoding that should be used in the generated code. Valid values for the 'char' character type are 'utf8' (default), 'iso8859-1' (new), 'lcp' (Xerces-C++ - local code page), and 'custom' (provides support for custom encodings). - Note that if you use a non-default character encoding and include some - libxsd headers (e.g., xsd/cxx/xml/string.hxx) directly, then you will - need to first include the correct xsd/cxx/xml/char-.hxx header, - where is iso8859-1, lcp, etc. This mechanism replaces the + local code page), and 'custom' (provides support for custom encodings). + Note that if you use a non-default character encoding and include some + libxsd headers (e.g., xsd/cxx/xml/string.hxx) directly, then you will + need to first include the correct xsd/cxx/xml/char-.hxx header, + where is iso8859-1, lcp, etc. This mechanism replaces the XSD_USE_LCP macro. - For the wchar_t character type the only valid value for this option is - 'auto' and the encoding is automatically selected between UTF-16 and + For the wchar_t character type the only valid value for this option is + 'auto' and the encoding is automatically selected between UTF-16 and UTF-32, depending on the wchar_t type size. * When the XSD compiler is built with Xerces-C++ 3.1.0 or later, the @@ -25,7 +102,7 @@ Version 3.3.0 in the urn name is used to derive the C++ namespace name. * New option, --schema-file-regex, in combination with the existing - --type-file-regex, can be used to place the generated files into + --type-file-regex, can be used to place the generated files into subdirectories or to resolve file name conflicts in the file-per- type mode (--file-per-type). @@ -34,12 +111,12 @@ Version 3.3.0 driver, P - C++/Parser mapping, T - C++/Tree mapping. * Strings used to match regular expressions supplied with the - --namespace-regex and --anonymous-regex options now include the file + --namespace-regex and --anonymous-regex options now include the file component for the schema being compiled. * The XSD_NO_EXPORT macro can be used to omit code generated with the --export/import-maps and, for C++/Tree, --generate-xml-schema options - during C++ compilation. This may be useful if you would like to use + during C++ compilation. This may be useful if you would like to use the same generated code across multiple platforms. C++/Tree @@ -49,7 +126,7 @@ Version 3.3.0 is primarily useful to distinguish object models with the same root type but with different root elements. For more information, refer to the messaging example and Section 2.9.1, "Element Types" in the - C++/Tree Mapping User Manual. To support the customization of the + C++/Tree Mapping User Manual. To support the customization of the element type naming the --element-type-regex option has been added. See the NAMING CONVENTION section in the compiler command line manual (man pages) for details. @@ -61,9 +138,9 @@ Version 3.3.0 example and Section 2.9.2, "Element Map" in the C++/Tree Mapping User Manual. - * Prior to this version, if the --generate-polymorphic option is + * Prior to this version, if the --generate-polymorphic option is specified, the compiler treats all types as potentially polymorphic. - Now by default only type hierarchies used in substitution groups and + Now by default only type hierarchies used in substitution groups and those explicitly declared polymorphic with the new --polymorphic-type option are treated as polymorphic. This results in smaller and faster generated code. If you would like to continue using the old behavior, @@ -71,13 +148,13 @@ Version 3.3.0 on this change see Section 2.11, "Mapping for xsi:type and Substitution Groups" in the C++/Tree Mapping User Manual. - * New option, --generate-detach, triggers the generation of detach - functions for required elements and attributes. For optional and - sequence cardinalities the detach functions are now provided by the - respective containers even without this option. These functions, for + * New option, --generate-detach, triggers the generation of detach + functions for required elements and attributes. For optional and + sequence cardinalities the detach functions are now provided by the + respective containers even without this option. These functions, for example, allow one to move sub-trees in the object model either within - the same tree or between different trees without copying. For more - information, refer to Section 2.8 "Mapping for Local Elements and + the same tree or between different trees without copying. For more + information, refer to Section 2.8 "Mapping for Local Elements and Attributes" in the C++/Tree Mapping User Manual. * New option, --export-xml-schema, causes the compiler to export/import @@ -85,33 +162,33 @@ Version 3.3.0 with the --export-symbol option. * New example, embedded, shows how to embed the binary representation of - the schema grammar into an application and then use it to parse and + the schema grammar into an application and then use it to parse and validate XML documents. - * New example, compression, shows how to compress an XML document during + * New example, compression, shows how to compress an XML document during serialization and decompress it during parsing using the zlib library. - * New example, custom/mixed, shows how to use type customization to parse + * New example, custom/mixed, shows how to use type customization to parse and serialize mixed content. * The streaming example has been extended to show how to perform stream- oriented, partially in-memory XML processing using the C++/Tree mapping. With the partially in-memory parsing and serialization only a part of the object model is in memory at any given time. With this approach one - can process parts of the document as they become available as well as + can process parts of the document as they become available as well as handle documents that are too large to fit into memory. * New default/fixed value initialization code. Now the default/fixed values are parsed by the XSD compiler at compile time instead of the standard - parsing code at runtime. This will allow the compilation of schemas that - use the default/fixed values without support for XML parsing + parsing code at runtime. This will allow the compilation of schemas that + use the default/fixed values without support for XML parsing (--suppress-parsing option). - * Empty XML Schema enumeration values are now mapped to the 'empty' C++ + * Empty XML Schema enumeration values are now mapped to the 'empty' C++ enumerator name instead of 'cxx'. - * XML Schema union types with members that are enumeration types are - automatically converted to equivalent enumeration types with a union + * XML Schema union types with members that are enumeration types are + automatically converted to equivalent enumeration types with a union of all the members' enumerators. Version 3.2.0 @@ -120,7 +197,7 @@ Version 3.2.0 the specified id. Specifying 'all' for the warning id disables all warnings. - * New options, --export-maps and --import-maps, provide support for + * New options, --export-maps and --import-maps, provide support for splitting a polymorphic type hierarchy across several Win32 DLLs. See the compiler command line manual (man pages) for details. @@ -149,14 +226,14 @@ Version 3.2.0 with specific cardinalities. For more information see the NAMING CONVENTION section in the compiler command line manual (man pages). - * Support for comparison (--generate-comparison) and printing + * Support for comparison (--generate-comparison) and printing (--generate-ostream) of polymorphic object models. * New serialization flag, xml_schema::flags::dont_pretty_print, disables extra spaces and new lines that make the resulting XML slightly bigger but easier to read. - * New example, custom/double, shows how to customize parsing and + * New example, custom/double, shows how to customize parsing and serialization code for the xsd:double XML Schema built-in type. It can be used as a guide on how to customize built-in XML Schema types that are mapped to fundamental C++ types. @@ -164,7 +241,7 @@ Version 3.2.0 * Support for fractionDigits and totalDigits facets in serialization of types derived from xsd:decimal. - * New set of compile-time macros that control how the xsd:float, + * New set of compile-time macros that control how the xsd:float, xsd:double, and xsd:decimal types are serialized. The following macros control the format: @@ -234,7 +311,7 @@ Version 3.2.0 a pointer or a reference) and 'const return type&' otherwise. * The interface for polymorphic parsing has been simplified. Calling the - *_parser() functions multiple times to specify several parsers is no + *_parser() functions multiple times to specify several parsers is no longer supported. Instead you need to pass the xml_schema::parser_map object which contains the parsers. For more information refer to Section 5.4, "Support for Polymorphism" in the C++/Parser Mapping diff --git a/xsd/README b/xsd/README index b7d30d7..ee60cce 100644 --- a/xsd/README +++ b/xsd/README @@ -19,9 +19,9 @@ See the LICENSE file for distribution conditions. See the INSTALL file for prerequisites and installation instructions. -See the documentation/ directory for documentation. +See the doc/ directory for documentation. -The project page is at http://codesynthesis.com/projects/xsd/. +The project page is at http://www.codesynthesis.com/projects/xsd/. Send bug reports or any other feedback to the xsd-users@codesynthesis.com mailing list. diff --git a/xsd/build/bootstrap.make b/xsd/build/bootstrap.make index 7b4fdb9..56c20b3 100644 --- a/xsd/build/bootstrap.make +++ b/xsd/build/bootstrap.make @@ -1,9 +1,8 @@ # file : build/bootstrap.make -# author : Boris Kolpackov -# copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +# copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC # license : GNU GPL v2 + exceptions; see accompanying LICENSE file -project_name := XSD +project_name := xsd # First try to include the bundled bootstrap.make if it exist. If that # fails, let make search for the external bootstrap.make. @@ -16,10 +15,17 @@ ifeq ($(patsubst %build/bootstrap.make,,$(lastword $(MAKEFILE_LIST))),) include $(build)/bootstrap.make endif +def_goal := $(.DEFAULT_GOAL) + # Configuration # $(call include,$(scf_root)/configuration.make) +# Include C++ configuration. We need to know if we are using the generic +# C++ compiler in which case we need to compensate for missing dependency +# auto-generation (see below). +# +$(call include,$(bld_root)/cxx/configuration.make) # Aliases # @@ -29,23 +35,17 @@ $(call include,$(scf_root)/configuration.make) $(out_base)/.dist \ $(out_base)/.dist-win \ $(out_base)/.dist-common \ - $(out_base)/.clean \ - $(out_base)/.cleandoc + $(out_base)/.clean ifdef %interactive% -.PHONY: test install dist dist-win clean cleandoc +.PHONY: test install dist dist-win clean test: $(out_base)/.test install: $(out_base)/.install dist: $(out_base)/.dist dist-win: $(out_base)/.dist-win clean: $(out_base)/.clean -cleandoc: $(out_base)/.cleandoc - -ifneq ($(filter $(.DEFAULT_GOAL),test install dist dist-win clean cleandoc),) -.DEFAULT_GOAL := -endif endif @@ -58,14 +58,28 @@ $(error dist_prefix is not set) endif endif - -# Don't include dependency info for certain targets. +# If we don't have dependency auto-generation then we need to manually +# make sure that generated files are generated before C++ file are +# compiler. To do this we make the object files ($2) depend in order- +# only on generated files ($3). # +ifeq ($(cxx_id),generic) + +define include-dep +$(if $2,$(eval $2: | $3)) +endef + +else + define include-dep $(call -include,$1) endef -ifneq ($(filter $(MAKECMDGOALS),clean cleandoc disfigure),) +endif + +# Don't include dependency info for certain targets. +# +ifneq ($(filter $(MAKECMDGOALS),clean disfigure),) include-dep = endif @@ -84,3 +98,5 @@ include-dep = endif endif + +.DEFAULT_GOAL := $(def_goal) diff --git a/xsd/build/configuration-dynamic.make b/xsd/build/configuration-dynamic.make index d8f9cf3..8bebd90 100644 --- a/xsd/build/configuration-dynamic.make +++ b/xsd/build/configuration-dynamic.make @@ -1,7 +1,8 @@ xsd_with_zlib := n xsd_with_ace := n xsd_with_xdr := n -xsd_with_dbxml := n xsd_with_xqilla := n xsd_with_boost_date_time := n xsd_with_boost_serialization := n + +xsd_clean_gen := n diff --git a/xsd/build/configuration-rules.make b/xsd/build/configuration-rules.make index 6fb0155..1cf21d0 100644 --- a/xsd/build/configuration-rules.make +++ b/xsd/build/configuration-rules.make @@ -1,6 +1,5 @@ # file : build/configuration-rules.make -# author : Boris Kolpackov -# copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +# copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC # license : GNU GPL v2 + exceptions; see accompanying LICENSE file $(dcf_root)/configuration-dynamic.make: | $(dcf_root)/. diff --git a/xsd/build/configuration.make b/xsd/build/configuration.make index b1f5e60..3d739b9 100644 --- a/xsd/build/configuration.make +++ b/xsd/build/configuration.make @@ -1,6 +1,5 @@ # file : build/configuration.make -# author : Boris Kolpackov -# copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +# copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC # license : GNU GPL v2 + exceptions; see accompanying LICENSE file $(call include-once,$(scf_root)/configuration-rules.make,$(dcf_root)) @@ -10,7 +9,6 @@ $(call include-once,$(scf_root)/configuration-rules.make,$(dcf_root)) xsd_with_zlib := xsd_with_ace := xsd_with_xdr := -xsd_with_dbxml := xsd_with_xqilla := xsd_with_boost_date_time := xsd_with_boost_serialization := @@ -22,7 +20,6 @@ ifdef xsd_with_zlib $(out_root)/%: xsd_with_zlib := $(xsd_with_zlib) $(out_root)/%: xsd_with_ace := $(xsd_with_ace) $(out_root)/%: xsd_with_xdr := $(xsd_with_xdr) -$(out_root)/%: xsd_with_dbxml := $(xsd_with_dbxml) $(out_root)/%: xsd_with_xqilla := $(xsd_with_xqilla) $(out_root)/%: xsd_with_boost_date_time := $(xsd_with_boost_date_time) $(out_root)/%: xsd_with_boost_serialization := $(xsd_with_boost_serialization) diff --git a/xsd/build/configure b/xsd/build/configure index 44cbc27..df57f07 100755 --- a/xsd/build/configure +++ b/xsd/build/configure @@ -1,8 +1,7 @@ #! /usr/bin/env bash # file : build/configure -# author : Boris Kolpackov -# copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +# copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC # license : GNU GPL v2 + exceptions; see accompanying LICENSE file # $1 out file @@ -49,7 +48,6 @@ $echo with_boost_serialization=`read_y_n n` - $echo $echo "Would you like to build optional parts of '$project_name' that require" $echo "the boost 'date_time' library?" @@ -57,13 +55,6 @@ $echo with_boost_date_time=`read_y_n n` -$echo -$echo "Would you like to build optional parts of '$project_name' that require" -$echo "the 'Berkeley DB XML' library?" -$echo - -with_dbxml=`read_y_n n` - $echo $echo "Would you like to build optional parts of '$project_name' that require" $echo "the XQilla library?" @@ -74,7 +65,6 @@ with_xqilla=`read_y_n n` echo "xsd_with_zlib := $with_zlib" >$1 echo "xsd_with_ace := $with_ace" >>$1 echo "xsd_with_xdr := $with_xdr" >>$1 -echo "xsd_with_dbxml := $with_dbxml" >>$1 echo "xsd_with_xqilla := $with_xqilla" >>$1 echo "xsd_with_boost_date_time := $with_boost_date_time" >>$1 echo "xsd_with_boost_serialization := $with_boost_serialization" >>$1 diff --git a/xsd/build/cxx/configuration-dynamic.make b/xsd/build/cxx/configuration-dynamic.make index 568ab40..83cf860 100644 --- a/xsd/build/cxx/configuration-dynamic.make +++ b/xsd/build/cxx/configuration-dynamic.make @@ -1,7 +1,4 @@ -cxx_id := gnu -cxx_optimize := n -cxx_debug := n -cxx_rpath := n +cxx_id := generic cxx_pp_extra_options := $(CPPFLAGS) cxx_extra_options := $(CXXFLAGS) cxx_ld_extra_options := $(LDFLAGS) diff --git a/xsd/build/cxx/generic/configuration-dynamic.make b/xsd/build/cxx/generic/configuration-dynamic.make new file mode 100644 index 0000000..f35ea66 --- /dev/null +++ b/xsd/build/cxx/generic/configuration-dynamic.make @@ -0,0 +1,16 @@ +ifeq ($(filter $(origin CXX),undefined default),) +cxx_generic := $(CXX) +else +cxx_generic := g++ +endif + +r := $(shell $(cxx_generic) $(cxx_extra_options) $(cxx_ld_extra_options) \ +-print-search-dirs 2>&1 | sed -e 's/libraries: =//p' -e d) + +ifneq ($r,) + ifeq ($(cxx_extra_lib_paths),) + cxx_extra_lib_paths := $r + else + cxx_extra_lib_paths := $(cxx_extra_lib_paths):$r + endif +endif diff --git a/xsd/build/cxx/gnu/configuration-dynamic.make b/xsd/build/cxx/gnu/configuration-dynamic.make deleted file mode 100644 index f3fe64d..0000000 --- a/xsd/build/cxx/gnu/configuration-dynamic.make +++ /dev/null @@ -1,8 +0,0 @@ -ifneq ($(CXX),) -cxx_gnu := $(CXX) -else -cxx_gnu := g++ -endif - -cxx_gnu_libraries := -cxx_gnu_optimization_options := diff --git a/xsd/build/import/cli/LICENSE b/xsd/build/import/cli/LICENSE new file mode 100644 index 0000000..57ee246 --- /dev/null +++ b/xsd/build/import/cli/LICENSE @@ -0,0 +1,21 @@ +Copyright (c) 2009-2012 Code Synthesis Tools CC. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be included +in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + diff --git a/xsd/build/import/cli/cli-cxx.make b/xsd/build/import/cli/cli-cxx.make new file mode 100644 index 0000000..cd009d9 --- /dev/null +++ b/xsd/build/import/cli/cli-cxx.make @@ -0,0 +1,48 @@ +# file : build/import/cli/cli-cxx.make +# copyright : Copyright (c) 2009-2012 Code Synthesis Tools CC +# license : MIT; see accompanying LICENSE file + +# Here we are operating in the importing project's space, not in +# cli's. +# + +# Get the C++ file extensions. +# +$(call include,$(bld_root)/cxx/configuration-static.make) + +cli_pattern := \ +$(out_base)/%.$(cxx_s_suffix) \ +$(out_base)/%.$(cxx_h_suffix) \ +$(out_base)/%.$(cxx_i_suffix) + +$(cli_pattern): cli_options := \ +--hxx-suffix .$(cxx_h_suffix) \ +--ixx-suffix .$(cxx_i_suffix) \ +--cxx-suffix .$(cxx_s_suffix) + +.PRECIOUS: $(cli_pattern) + +ifeq ($(out_base),$(src_base)) + +$(cli_pattern): $(src_base)/%.cli + $(call message,cli $<,$(cli) $(cli_options) --output-dir $(dir $@) $<) + +else + +$(cli_pattern): $(src_base)/%.cli | $$(dir $$@). + $(call message,cli $<,$(cli) $(cli_options) --output-dir $(dir $@) $<) + +$(cli_pattern): $(out_base)/%.cli | $$(dir $$@). + $(call message,cli $<,$(cli) $(cli_options) --output-dir $(dir $@) $<) +endif + +.PHONY: $(out_base)/%.cxx.cli.clean + +$(out_base)/%.cxx.cli.clean: cxx_s_suffix := $(cxx_s_suffix) +$(out_base)/%.cxx.cli.clean: cxx_h_suffix := $(cxx_h_suffix) +$(out_base)/%.cxx.cli.clean: cxx_i_suffix := $(cxx_i_suffix) + +$(out_base)/%.cxx.cli.clean: + $(call message,rm $$1,rm -f $$1,$(@:.cxx.cli.clean=.$(cxx_s_suffix))) + $(call message,rm $$1,rm -f $$1,$(@:.cxx.cli.clean=.$(cxx_h_suffix))) + $(call message,rm $$1,rm -f $$1,$(@:.cxx.cli.clean=.$(cxx_i_suffix))) diff --git a/xsd/build/import/cli/configuration-dynamic.make b/xsd/build/import/cli/configuration-dynamic.make new file mode 100644 index 0000000..908d979 --- /dev/null +++ b/xsd/build/import/cli/configuration-dynamic.make @@ -0,0 +1,3 @@ +# We ship up-to-date generated files so cli normally won't be invoked. +# +cli_installed := y diff --git a/xsd/build/import/cli/configuration-rules.make b/xsd/build/import/cli/configuration-rules.make new file mode 100644 index 0000000..5fb2485 --- /dev/null +++ b/xsd/build/import/cli/configuration-rules.make @@ -0,0 +1,14 @@ +# file : build/import/cli/configuration-rules.make +# copyright : Copyright (c) 2009-2012 Code Synthesis Tools CC +# license : MIT; see accompanying LICENSE file + +$(dcf_root)/import/cli/configuration-dynamic.make: | $(dcf_root)/import/cli/. + $(call message,,$(scf_root)/import/cli/configure $@) + +ifndef %foreign% + +$(dcf_root)/.disfigure:: + $(call message,rm $(dcf_root)/import/cli/configuration-dynamic.make,\ +rm -f $(dcf_root)/import/cli/configuration-dynamic.make) + +endif diff --git a/xsd/build/import/cli/configure b/xsd/build/import/cli/configure new file mode 100755 index 0000000..ae1e512 --- /dev/null +++ b/xsd/build/import/cli/configure @@ -0,0 +1,54 @@ +#! /usr/bin/env bash + +# file : build/import/cli/configure +# copyright : Copyright (c) 2009-2012 Code Synthesis Tools CC +# license : MIT; see accompanying LICENSE file + + +# $1 - out file +# +# bld_root - build root +# project_name - project name +# + +source $bld_root/dialog.bash + + +$echo +$echo "Configuring external dependency on 'cli' for '$project_name'." +$echo + +$echo +$echo "Would you like to configure dependency on the installed " +$echo "version of 'cli' as opposed to the development build?" +$echo + +installed=`read_y_n y` + +path= + +if [ "$installed" = "n" ]; then + +$echo +$echo "Please enter the src_root for 'cli'." +$echo + +src_root=`read_path --directory --exist` + +$echo +$echo "Please enter the out_root for 'cli'." +$eche + +out_root=`read_path --directory $src_root` + +fi + +echo cli_installed := $installed >$1 + +if [ "$installed" = "n" ]; then + +echo src_root := $src_root >>$1 +echo scf_root := \$\(src_root\)/build >>$1 +echo out_root := $out_root >>$1 + +fi diff --git a/xsd/build/import/cli/stub.make b/xsd/build/import/cli/stub.make new file mode 100644 index 0000000..3704723 --- /dev/null +++ b/xsd/build/import/cli/stub.make @@ -0,0 +1,29 @@ +# file : build/import/cli/stub.make +# copyright : Copyright (c) 2009-2012 Code Synthesis Tools CC +# license : MIT; see accompanying LICENSE file + +$(call include-once,$(scf_root)/import/cli/configuration-rules.make,$(dcf_root)) + +cli_installed := + +$(call -include,$(dcf_root)/import/cli/configuration-dynamic.make) + +ifdef cli_installed + +ifeq ($(cli_installed),y) + +$(call export,cli: cli,cli-rules: $(scf_root)/import/cli/cli-cxx.make) + +else + +# Include export stub. +# +$(call include,$(scf_root)/export/cli/stub.make) + +endif + +else + +.NOTPARALLEL: + +endif diff --git a/xsd/build/import/libace/configuration-rules.make b/xsd/build/import/libace/configuration-rules.make index 8d1230c..9073dc5 100644 --- a/xsd/build/import/libace/configuration-rules.make +++ b/xsd/build/import/libace/configuration-rules.make @@ -1,5 +1,4 @@ # file : build/import/libace/configuration-rules.make -# author : Boris Kolpackov # copyright : Copyright (c) 2005-2009 Boris Kolpackov # license : GNU GPL v2; see accompanying LICENSE file diff --git a/xsd/build/import/libace/configure b/xsd/build/import/libace/configure index eb7bd56..5f35228 100755 --- a/xsd/build/import/libace/configure +++ b/xsd/build/import/libace/configure @@ -1,7 +1,6 @@ #! /usr/bin/env bash # file : build/import/libace/configure -# author : Boris Kolpackov # copyright : Copyright (c) 2005-2009 Boris Kolpackov # license : GNU GPL v2; see accompanying LICENSE file diff --git a/xsd/build/import/libace/rules.make b/xsd/build/import/libace/rules.make index 9535085..c04724d 100644 --- a/xsd/build/import/libace/rules.make +++ b/xsd/build/import/libace/rules.make @@ -1,5 +1,4 @@ # file : build/import/libace/rules.make -# author : Boris Kolpackov # copyright : Copyright (c) 2005-2009 Boris Kolpackov # license : GNU GPL v2; see accompanying LICENSE file diff --git a/xsd/build/import/libace/stub.make b/xsd/build/import/libace/stub.make index 9482396..ba4946d 100644 --- a/xsd/build/import/libace/stub.make +++ b/xsd/build/import/libace/stub.make @@ -1,5 +1,4 @@ # file : build/import/libace/stub.make -# author : Boris Kolpackov # copyright : Copyright (c) 2005-2009 Boris Kolpackov # license : GNU GPL v2; see accompanying LICENSE file diff --git a/xsd/build/import/libbackend-elements/LICENSE b/xsd/build/import/libbackend-elements/LICENSE deleted file mode 100644 index 3912109..0000000 --- a/xsd/build/import/libbackend-elements/LICENSE +++ /dev/null @@ -1,340 +0,0 @@ - GNU GENERAL PUBLIC LICENSE - Version 2, June 1991 - - Copyright (C) 1989, 1991 Free Software Foundation, Inc. - 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The licenses for most software are designed to take away your -freedom to share and change it. By contrast, the GNU General Public -License is intended to guarantee your freedom to share and change free -software--to make sure the software is free for all its users. This -General Public License applies to most of the Free Software -Foundation's software and to any other program whose authors commit to -using it. (Some other Free Software Foundation software is covered by -the GNU Library General Public License instead.) You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -this service if you wish), that you receive source code or can get it -if you want it, that you can change the software or use pieces of it -in new free programs; and that you know you can do these things. - - To protect your rights, we need to make restrictions that forbid -anyone to deny you these rights or to ask you to surrender the rights. -These restrictions translate to certain responsibilities for you if you -distribute copies of the software, or if you modify it. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must give the recipients all the rights that -you have. You must make sure that they, too, receive or can get the -source code. And you must show them these terms so they know their -rights. - - We protect your rights with two steps: (1) copyright the software, and -(2) offer you this license which gives you legal permission to copy, -distribute and/or modify the software. - - Also, for each author's protection and ours, we want to make certain -that everyone understands that there is no warranty for this free -software. If the software is modified by someone else and passed on, we -want its recipients to know that what they have is not the original, so -that any problems introduced by others will not reflect on the original -authors' reputations. - - Finally, any free program is threatened constantly by software -patents. We wish to avoid the danger that redistributors of a free -program will individually obtain patent licenses, in effect making the -program proprietary. To prevent this, we have made it clear that any -patent must be licensed for everyone's free use or not licensed at all. - - The precise terms and conditions for copying, distribution and -modification follow. - - GNU GENERAL PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. This License applies to any program or other work which contains -a notice placed by the copyright holder saying it may be distributed -under the terms of this General Public License. The "Program", below, -refers to any such program or work, and a "work based on the Program" -means either the Program or any derivative work under copyright law: -that is to say, a work containing the Program or a portion of it, -either verbatim or with modifications and/or translated into another -language. (Hereinafter, translation is included without limitation in -the term "modification".) Each licensee is addressed as "you". - -Activities other than copying, distribution and modification are not -covered by this License; they are outside its scope. The act of -running the Program is not restricted, and the output from the Program -is covered only if its contents constitute a work based on the -Program (independent of having been made by running the Program). -Whether that is true depends on what the Program does. - - 1. You may copy and distribute verbatim copies of the Program's -source code as you receive it, in any medium, provided that you -conspicuously and appropriately publish on each copy an appropriate -copyright notice and disclaimer of warranty; keep intact all the -notices that refer to this License and to the absence of any warranty; -and give any other recipients of the Program a copy of this License -along with the Program. - -You may charge a fee for the physical act of transferring a copy, and -you may at your option offer warranty protection in exchange for a fee. - - 2. You may modify your copy or copies of the Program or any portion -of it, thus forming a work based on the Program, and copy and -distribute such modifications or work under the terms of Section 1 -above, provided that you also meet all of these conditions: - - a) You must cause the modified files to carry prominent notices - stating that you changed the files and the date of any change. - - b) You must cause any work that you distribute or publish, that in - whole or in part contains or is derived from the Program or any - part thereof, to be licensed as a whole at no charge to all third - parties under the terms of this License. - - c) If the modified program normally reads commands interactively - when run, you must cause it, when started running for such - interactive use in the most ordinary way, to print or display an - announcement including an appropriate copyright notice and a - notice that there is no warranty (or else, saying that you provide - a warranty) and that users may redistribute the program under - these conditions, and telling the user how to view a copy of this - License. (Exception: if the Program itself is interactive but - does not normally print such an announcement, your work based on - the Program is not required to print an announcement.) - -These requirements apply to the modified work as a whole. If -identifiable sections of that work are not derived from the Program, -and can be reasonably considered independent and separate works in -themselves, then this License, and its terms, do not apply to those -sections when you distribute them as separate works. But when you -distribute the same sections as part of a whole which is a work based -on the Program, the distribution of the whole must be on the terms of -this License, whose permissions for other licensees extend to the -entire whole, and thus to each and every part regardless of who wrote it. - -Thus, it is not the intent of this section to claim rights or contest -your rights to work written entirely by you; rather, the intent is to -exercise the right to control the distribution of derivative or -collective works based on the Program. - -In addition, mere aggregation of another work not based on the Program -with the Program (or with a work based on the Program) on a volume of -a storage or distribution medium does not bring the other work under -the scope of this License. - - 3. You may copy and distribute the Program (or a work based on it, -under Section 2) in object code or executable form under the terms of -Sections 1 and 2 above provided that you also do one of the following: - - a) Accompany it with the complete corresponding machine-readable - source code, which must be distributed under the terms of Sections - 1 and 2 above on a medium customarily used for software interchange; or, - - b) Accompany it with a written offer, valid for at least three - years, to give any third party, for a charge no more than your - cost of physically performing source distribution, a complete - machine-readable copy of the corresponding source code, to be - distributed under the terms of Sections 1 and 2 above on a medium - customarily used for software interchange; or, - - c) Accompany it with the information you received as to the offer - to distribute corresponding source code. (This alternative is - allowed only for noncommercial distribution and only if you - received the program in object code or executable form with such - an offer, in accord with Subsection b above.) - -The source code for a work means the preferred form of the work for -making modifications to it. For an executable work, complete source -code means all the source code for all modules it contains, plus any -associated interface definition files, plus the scripts used to -control compilation and installation of the executable. However, as a -special exception, the source code distributed need not include -anything that is normally distributed (in either source or binary -form) with the major components (compiler, kernel, and so on) of the -operating system on which the executable runs, unless that component -itself accompanies the executable. - -If distribution of executable or object code is made by offering -access to copy from a designated place, then offering equivalent -access to copy the source code from the same place counts as -distribution of the source code, even though third parties are not -compelled to copy the source along with the object code. - - 4. You may not copy, modify, sublicense, or distribute the Program -except as expressly provided under this License. Any attempt -otherwise to copy, modify, sublicense or distribute the Program is -void, and will automatically terminate your rights under this License. -However, parties who have received copies, or rights, from you under -this License will not have their licenses terminated so long as such -parties remain in full compliance. - - 5. You are not required to accept this License, since you have not -signed it. However, nothing else grants you permission to modify or -distribute the Program or its derivative works. These actions are -prohibited by law if you do not accept this License. Therefore, by -modifying or distributing the Program (or any work based on the -Program), you indicate your acceptance of this License to do so, and -all its terms and conditions for copying, distributing or modifying -the Program or works based on it. - - 6. Each time you redistribute the Program (or any work based on the -Program), the recipient automatically receives a license from the -original licensor to copy, distribute or modify the Program subject to -these terms and conditions. You may not impose any further -restrictions on the recipients' exercise of the rights granted herein. -You are not responsible for enforcing compliance by third parties to -this License. - - 7. If, as a consequence of a court judgment or allegation of patent -infringement or for any other reason (not limited to patent issues), -conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot -distribute so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you -may not distribute the Program at all. For example, if a patent -license would not permit royalty-free redistribution of the Program by -all those who receive copies directly or indirectly through you, then -the only way you could satisfy both it and this License would be to -refrain entirely from distribution of the Program. - -If any portion of this section is held invalid or unenforceable under -any particular circumstance, the balance of the section is intended to -apply and the section as a whole is intended to apply in other -circumstances. - -It is not the purpose of this section to induce you to infringe any -patents or other property right claims or to contest validity of any -such claims; this section has the sole purpose of protecting the -integrity of the free software distribution system, which is -implemented by public license practices. Many people have made -generous contributions to the wide range of software distributed -through that system in reliance on consistent application of that -system; it is up to the author/donor to decide if he or she is willing -to distribute software through any other system and a licensee cannot -impose that choice. - -This section is intended to make thoroughly clear what is believed to -be a consequence of the rest of this License. - - 8. If the distribution and/or use of the Program is restricted in -certain countries either by patents or by copyrighted interfaces, the -original copyright holder who places the Program under this License -may add an explicit geographical distribution limitation excluding -those countries, so that distribution is permitted only in or among -countries not thus excluded. In such case, this License incorporates -the limitation as if written in the body of this License. - - 9. The Free Software Foundation may publish revised and/or new versions -of the General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - -Each version is given a distinguishing version number. If the Program -specifies a version number of this License which applies to it and "any -later version", you have the option of following the terms and conditions -either of that version or of any later version published by the Free -Software Foundation. If the Program does not specify a version number of -this License, you may choose any version ever published by the Free Software -Foundation. - - 10. If you wish to incorporate parts of the Program into other free -programs whose distribution conditions are different, write to the author -to ask for permission. For software which is copyrighted by the Free -Software Foundation, write to the Free Software Foundation; we sometimes -make exceptions for this. Our decision will be guided by the two goals -of preserving the free status of all derivatives of our free software and -of promoting the sharing and reuse of software generally. - - NO WARRANTY - - 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY -FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN -OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES -PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED -OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS -TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE -PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, -REPAIR OR CORRECTION. - - 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR -REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, -INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING -OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED -TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY -YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER -PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE -POSSIBILITY OF SUCH DAMAGES. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -convey the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - - -Also add information on how to contact you by electronic and paper mail. - -If the program is interactive, make it output a short notice like this -when it starts in an interactive mode: - - Gnomovision version 69, Copyright (C) year name of author - Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, the commands you use may -be called something other than `show w' and `show c'; they could even be -mouse-clicks or menu items--whatever suits your program. - -You should also get your employer (if you work as a programmer) or your -school, if any, to sign a "copyright disclaimer" for the program, if -necessary. Here is a sample; alter the names: - - Yoyodyne, Inc., hereby disclaims all copyright interest in the program - `Gnomovision' (which makes passes at compilers) written by James Hacker. - - , 1 April 1989 - Ty Coon, President of Vice - -This General Public License does not permit incorporating your program into -proprietary programs. If your program is a subroutine library, you may -consider it more useful to permit linking proprietary applications with the -library. If this is what you want to do, use the GNU Library General -Public License instead of this License. diff --git a/xsd/build/import/libbackend-elements/configuration-dynamic.make b/xsd/build/import/libbackend-elements/configuration-dynamic.make deleted file mode 100644 index 8a6f091..0000000 --- a/xsd/build/import/libbackend-elements/configuration-dynamic.make +++ /dev/null @@ -1,4 +0,0 @@ -libbackend_elements_installed := n -src_root := $(abspath $(src_root)/../libbackend-elements) -scf_root := $(src_root)/build -out_root := $(src_root) diff --git a/xsd/build/import/libbackend-elements/configuration-rules.make b/xsd/build/import/libbackend-elements/configuration-rules.make deleted file mode 100644 index 1766f03..0000000 --- a/xsd/build/import/libbackend-elements/configuration-rules.make +++ /dev/null @@ -1,15 +0,0 @@ -# file : build/import/libbackend-elements/configuration-rules.make -# author : Boris Kolpackov -# copyright : Copyright (c) 2005-2009 Boris Kolpackov -# license : GNU GPL v2; see accompanying LICENSE file - -$(dcf_root)/import/libbackend-elements/configuration-dynamic.make: | $(dcf_root)/import/libbackend-elements/. - $(call message,,$(scf_root)/import/libbackend-elements/configure $@) - -ifndef %foreign% - -disfigure:: - $(call message,rm $(dcf_root)/import/libbackend-elements/configuration-dynamic.make,\ -rm -f $(dcf_root)/import/libbackend-elements/configuration-dynamic.make) - -endif diff --git a/xsd/build/import/libbackend-elements/configure b/xsd/build/import/libbackend-elements/configure deleted file mode 100755 index db3e44d..0000000 --- a/xsd/build/import/libbackend-elements/configure +++ /dev/null @@ -1,55 +0,0 @@ -#! /usr/bin/env bash - -# file : build/import/libbackend-elements/configure -# author : Boris Kolpackov -# copyright : Copyright (c) 2005-2009 Boris Kolpackov -# license : GNU GPL v2; see accompanying LICENSE file - - -# $1 - out file -# -# bld_root - build root -# project_name - project name -# - -source $bld_root/dialog.bash - - -$echo -$echo "Configuring external dependency on 'libbackend-elements' for '$project_name'." -$echo - -$echo -$echo "Would you like to configure dependency on the installed version" -$echo "of 'libbackend-elements' as opposed to the development build?" -$echo - -installed=`read_y_n y` - -path= - -if [ "$installed" = "n" ]; then - -$echo -$echo "Please enter the src_root for 'libbackend-elements'." -$echo - -src_root=`read_path --directory --exist` - -$echo -$echo "Please enter the out_root for 'libbackend-elements'." -$echo - -out_root=`read_path --directory $src_root` - -fi - -echo libbackend_elements_installed := $installed >$1 - -if [ "$installed" = "n" ]; then - -echo src_root := $src_root >>$1 -echo scf_root := \$\(src_root\)/build >>$1 -echo out_root := $out_root >>$1 - -fi diff --git a/xsd/build/import/libbackend-elements/stub.make b/xsd/build/import/libbackend-elements/stub.make deleted file mode 100644 index b171c30..0000000 --- a/xsd/build/import/libbackend-elements/stub.make +++ /dev/null @@ -1,32 +0,0 @@ -# file : build/import/libbackend-elements/stub.make -# author : Boris Kolpackov -# copyright : Copyright (c) 2005-2009 Boris Kolpackov -# license : GNU GPL v2; see accompanying LICENSE file - -$(call include-once,$(scf_root)/import/libbackend-elements/configuration-rules.make,$(dcf_root)) - -libbackend_elements_installed := - -$(call -include,$(dcf_root)/import/libbackend-elements/configuration-dynamic.make) - -ifdef libbackend_elements_installed - -ifeq ($(libbackend_elements_installed),y) - -#-lbackend-elements - -$(call export,l: -lcult -lboost_regex,cpp_options: ) - -else - -# Include export stub. -# -$(call include,$(scf_root)/export/libbackend-elements/stub.make) - -endif - -else - -.NOTPARALLEL: - -endif diff --git a/xsd/build/import/libboost/configuration-dynamic.make b/xsd/build/import/libboost/configuration-dynamic.make deleted file mode 100644 index ab55882..0000000 --- a/xsd/build/import/libboost/configuration-dynamic.make +++ /dev/null @@ -1,8 +0,0 @@ -libboost_installed := y -libboost_suffix := $(BOOST_LIB_SUFFIX) - -ifeq ($(BOOST_LINK_SYSTEM),n) -libboost_system := n -else -libboost_system := y -endif diff --git a/xsd/build/import/libboost/configuration-rules.make b/xsd/build/import/libboost/configuration-rules.make index 40fff9f..88a3b38 100644 --- a/xsd/build/import/libboost/configuration-rules.make +++ b/xsd/build/import/libboost/configuration-rules.make @@ -1,6 +1,5 @@ # file : build/import/libboost/configuration-rules.make -# author : Boris Kolpackov -# copyright : Copyright (c) 2005-2010 Boris Kolpackov +# copyright : Copyright (c) 2005-2011 Boris Kolpackov # license : GNU GPL v2; see accompanying LICENSE file $(dcf_root)/import/libboost/configuration-dynamic.make: | $(dcf_root)/import/libboost/. diff --git a/xsd/build/import/libboost/configure b/xsd/build/import/libboost/configure index c924a30..361be81 100755 --- a/xsd/build/import/libboost/configure +++ b/xsd/build/import/libboost/configure @@ -1,8 +1,7 @@ #! /usr/bin/env bash # file : build/import/libboost/configure -# author : Boris Kolpackov -# copyright : Copyright (c) 2005-2010 Boris Kolpackov +# copyright : Copyright (c) 2005-2011 Boris Kolpackov # license : GNU GPL v2; see accompanying LICENSE file diff --git a/xsd/build/import/libboost/date-time/rules.make b/xsd/build/import/libboost/date-time/rules.make index 5de56fc..7f862f5 100644 --- a/xsd/build/import/libboost/date-time/rules.make +++ b/xsd/build/import/libboost/date-time/rules.make @@ -1,6 +1,5 @@ # file : build/import/libboost/date-time/rules.make -# author : Boris Kolpackov -# copyright : Copyright (c) 2005-2010 Boris Kolpackov +# copyright : Copyright (c) 2005-2011 Boris Kolpackov # license : GNU GPL v2; see accompanying LICENSE file $(dcf_root)/import/libboost/%: root := $(libboost_root) diff --git a/xsd/build/import/libboost/date-time/stub.make b/xsd/build/import/libboost/date-time/stub.make index cb10dd9..64deb54 100644 --- a/xsd/build/import/libboost/date-time/stub.make +++ b/xsd/build/import/libboost/date-time/stub.make @@ -1,6 +1,5 @@ # file : build/import/libboost/date-time/stub.make -# author : Boris Kolpackov -# copyright : Copyright (c) 2005-2010 Boris Kolpackov +# copyright : Copyright (c) 2005-2011 Boris Kolpackov # license : GNU GPL v2; see accompanying LICENSE file $(call include-once,$(scf_root)/import/libboost/configuration-rules.make,$(dcf_root)) diff --git a/xsd/build/import/libboost/filesystem/rules.make b/xsd/build/import/libboost/filesystem/rules.make deleted file mode 100644 index b5febd3..0000000 --- a/xsd/build/import/libboost/filesystem/rules.make +++ /dev/null @@ -1,53 +0,0 @@ -# file : build/import/libboost/filesystem/rules.make -# author : Boris Kolpackov -# copyright : Copyright (c) 2005-2010 Boris Kolpackov -# license : GNU GPL v2; see accompanying LICENSE file - -#@@ Should use message everywhere. -# - -$(dcf_root)/import/libboost/%: root := $(libboost_root) - -$(dcf_root)/import/libboost/filesystem/filesystem.l: \ - | $(dcf_root)/import/libboost/filesystem/. - -ifeq ($(libboost_type),archive) - -ifeq ($(libboost_system),y) -$(dcf_root)/import/libboost/filesystem/filesystem.l: \ - $(libboost_root)/stage/lib/libboost_filesystem$(libboost_suffix).a \ - $(libboost_root)/stage/lib/libboost_system$(libboost_suffix).a -else -$(dcf_root)/import/libboost/filesystem/filesystem.l: \ - $(libboost_root)/stage/lib/libboost_filesystem$(libboost_suffix).a -endif - @echo $^ >$@ - -else - -ifeq ($(libboost_system),y) -$(dcf_root)/import/libboost/filesystem/filesystem.l: \ - $(libboost_root)/stage/lib/libboost_filesystem$(libboost_suffix).so \ - $(libboost_root)/stage/lib/libboost_system$(libboost_suffix).so -else -$(dcf_root)/import/libboost/filesystem/filesystem.l: \ - $(libboost_root)/stage/lib/libboost_filesystem$(libboost_suffix).so -endif - @echo $^ >$@ - @echo rpath:$(root)/stage/lib >>$@ - -endif - - -$(dcf_root)/import/libboost/filesystem/filesystem.l.cpp-options: \ - | $(dcf_root)/import/libboost/filesystem/. - @echo include: -I$(root) >$@ - -ifndef %foreign% - -disfigure:: - $(call message,rm $(dcf_root)/import/libboost/filesystem/filesystem.l,\ -rm -f $(dcf_root)/import/libboost/filesystem/filesystem.l) - $(call message,,rm -f $(dcf_root)/import/libboost/filesystem/filesystem.l.cpp-options) - -endif diff --git a/xsd/build/import/libboost/filesystem/stub.make b/xsd/build/import/libboost/filesystem/stub.make deleted file mode 100644 index fb7398d..0000000 --- a/xsd/build/import/libboost/filesystem/stub.make +++ /dev/null @@ -1,36 +0,0 @@ -# file : build/import/libboost/filesystem/stub.make -# author : Boris Kolpackov -# copyright : Copyright (c) 2005-2010 Boris Kolpackov -# license : GNU GPL v2; see accompanying LICENSE file - -$(call include-once,$(scf_root)/import/libboost/configuration-rules.make,$(dcf_root)) - -libboost_installed := - -$(call -include,$(dcf_root)/import/libboost/configuration-dynamic.make) - -ifdef libboost_installed - -ifeq ($(libboost_installed),y) - -ifeq ($(libboost_system),y) -$(call export,l: -lboost_filesystem$(libboost_suffix) -lboost_system$(libboost_suffix),cpp_options: ) -else -$(call export,l: -lboost_filesystem$(libboost_suffix),cpp_options: ) -endif - -else - -$(call include-once,$(scf_root)/import/libboost/filesystem/rules.make,$(dcf_root)) - -$(call export,\ - l: $(dcf_root)/import/libboost/filesystem/filesystem.l,\ - cpp-options: $(dcf_root)/import/libboost/filesystem/filesystem.l.cpp-options) - -endif - -else - -.NOTPARALLEL: - -endif diff --git a/xsd/build/import/libboost/regex/rules.make b/xsd/build/import/libboost/regex/rules.make deleted file mode 100644 index 2f6b8f7..0000000 --- a/xsd/build/import/libboost/regex/rules.make +++ /dev/null @@ -1,50 +0,0 @@ -# file : build/import/libboost/regex/rules.make -# author : Boris Kolpackov -# copyright : Copyright (c) 2005-2010 Boris Kolpackov -# license : GNU GPL v2; see accompanying LICENSE file - -$(dcf_root)/import/libboost/%: root := $(libboost_root) - -$(dcf_root)/import/libboost/regex/regex.l: \ - | $(dcf_root)/import/libboost/regex/. - -ifeq ($(libboost_type),archive) - -ifeq ($(libboost_system),y) -$(dcf_root)/import/libboost/regex/regex.l: \ - $(libboost_root)/stage/lib/libboost_regex$(libboost_suffix).a \ - $(libboost_root)/stage/lib/libboost_system$(libboost_suffix).a -else -$(dcf_root)/import/libboost/regex/regex.l: \ - $(libboost_root)/stage/lib/libboost_regex$(libboost_suffix).a -endif - @echo $^ >$@ - -else - -ifeq ($(libboost_system),y) -$(dcf_root)/import/libboost/regex/regex.l: \ - $(libboost_root)/stage/lib/libboost_regex$(libboost_suffix).so \ - $(libboost_root)/stage/lib/libboost_system$(libboost_suffix).so -else -$(dcf_root)/import/libboost/regex/regex.l: \ - $(libboost_root)/stage/lib/libboost_regex$(libboost_suffix).so -endif - @echo $^ >$@ - @echo rpath:$(root)/stage/lib >>$@ - -endif - - -$(dcf_root)/import/libboost/regex/regex.l.cpp-options: \ - | $(dcf_root)/import/libboost/regex/. - @echo include: -I$(root) >$@ - -ifndef %foreign% - -disfigure:: - $(call message,rm $(dcf_root)/import/libboost/regex/regex.l,\ -rm -f $(dcf_root)/import/libboost/regex/regex.l) - $(call message,,rm -f $(dcf_root)/import/libboost/regex/regex.l.cpp-options) - -endif diff --git a/xsd/build/import/libboost/regex/stub.make b/xsd/build/import/libboost/regex/stub.make deleted file mode 100644 index eabc515..0000000 --- a/xsd/build/import/libboost/regex/stub.make +++ /dev/null @@ -1,36 +0,0 @@ -# file : build/import/libboost/regex/stub.make -# author : Boris Kolpackov -# copyright : Copyright (c) 2005-2010 Boris Kolpackov -# license : GNU GPL v2; see accompanying LICENSE file - -$(call include-once,$(scf_root)/import/libboost/configuration-rules.make,$(dcf_root)) - -libboost_installed := - -$(call -include,$(dcf_root)/import/libboost/configuration-dynamic.make) - -ifdef libboost_installed - -ifeq ($(libboost_installed),y) - -ifeq ($(libboost_system),y) -$(call export,l: -lboost_regex$(libboost_suffix) -lboost_system$(libboost_suffix),cpp_options: ) -else -$(call export,l: -lboost_regex$(libboost_suffix),cpp_options: ) -endif - -else - -$(call include-once,$(scf_root)/import/libboost/regex/rules.make,$(dcf_root)) - -$(call export,\ - l: $(dcf_root)/import/libboost/regex/regex.l,\ - cpp-options: $(dcf_root)/import/libboost/regex/regex.l.cpp-options) - -endif - -else - -.NOTPARALLEL: - -endif diff --git a/xsd/build/import/libboost/serialization/rules.make b/xsd/build/import/libboost/serialization/rules.make index eab97ff..6d02b86 100644 --- a/xsd/build/import/libboost/serialization/rules.make +++ b/xsd/build/import/libboost/serialization/rules.make @@ -1,6 +1,5 @@ # file : build/import/libboost/serialization/rules.make -# author : Boris Kolpackov -# copyright : Copyright (c) 2005-2010 Boris Kolpackov +# copyright : Copyright (c) 2005-2011 Boris Kolpackov # license : GNU GPL v2; see accompanying LICENSE file $(dcf_root)/import/libboost/%: root := $(libboost_root) diff --git a/xsd/build/import/libboost/serialization/stub.make b/xsd/build/import/libboost/serialization/stub.make index 09d0858..b63db81 100644 --- a/xsd/build/import/libboost/serialization/stub.make +++ b/xsd/build/import/libboost/serialization/stub.make @@ -1,6 +1,5 @@ # file : build/import/libboost/serialization/stub.make -# author : Boris Kolpackov -# copyright : Copyright (c) 2005-2010 Boris Kolpackov +# copyright : Copyright (c) 2005-2011 Boris Kolpackov # license : GNU GPL v2; see accompanying LICENSE file $(call include-once,$(scf_root)/import/libboost/configuration-rules.make,$(dcf_root)) diff --git a/xsd/build/import/libcult/LICENSE b/xsd/build/import/libcult/LICENSE deleted file mode 100644 index 3912109..0000000 --- a/xsd/build/import/libcult/LICENSE +++ /dev/null @@ -1,340 +0,0 @@ - GNU GENERAL PUBLIC LICENSE - Version 2, June 1991 - - Copyright (C) 1989, 1991 Free Software Foundation, Inc. - 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The licenses for most software are designed to take away your -freedom to share and change it. By contrast, the GNU General Public -License is intended to guarantee your freedom to share and change free -software--to make sure the software is free for all its users. This -General Public License applies to most of the Free Software -Foundation's software and to any other program whose authors commit to -using it. (Some other Free Software Foundation software is covered by -the GNU Library General Public License instead.) You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -this service if you wish), that you receive source code or can get it -if you want it, that you can change the software or use pieces of it -in new free programs; and that you know you can do these things. - - To protect your rights, we need to make restrictions that forbid -anyone to deny you these rights or to ask you to surrender the rights. -These restrictions translate to certain responsibilities for you if you -distribute copies of the software, or if you modify it. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must give the recipients all the rights that -you have. You must make sure that they, too, receive or can get the -source code. And you must show them these terms so they know their -rights. - - We protect your rights with two steps: (1) copyright the software, and -(2) offer you this license which gives you legal permission to copy, -distribute and/or modify the software. - - Also, for each author's protection and ours, we want to make certain -that everyone understands that there is no warranty for this free -software. If the software is modified by someone else and passed on, we -want its recipients to know that what they have is not the original, so -that any problems introduced by others will not reflect on the original -authors' reputations. - - Finally, any free program is threatened constantly by software -patents. We wish to avoid the danger that redistributors of a free -program will individually obtain patent licenses, in effect making the -program proprietary. To prevent this, we have made it clear that any -patent must be licensed for everyone's free use or not licensed at all. - - The precise terms and conditions for copying, distribution and -modification follow. - - GNU GENERAL PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. This License applies to any program or other work which contains -a notice placed by the copyright holder saying it may be distributed -under the terms of this General Public License. The "Program", below, -refers to any such program or work, and a "work based on the Program" -means either the Program or any derivative work under copyright law: -that is to say, a work containing the Program or a portion of it, -either verbatim or with modifications and/or translated into another -language. (Hereinafter, translation is included without limitation in -the term "modification".) Each licensee is addressed as "you". - -Activities other than copying, distribution and modification are not -covered by this License; they are outside its scope. The act of -running the Program is not restricted, and the output from the Program -is covered only if its contents constitute a work based on the -Program (independent of having been made by running the Program). -Whether that is true depends on what the Program does. - - 1. You may copy and distribute verbatim copies of the Program's -source code as you receive it, in any medium, provided that you -conspicuously and appropriately publish on each copy an appropriate -copyright notice and disclaimer of warranty; keep intact all the -notices that refer to this License and to the absence of any warranty; -and give any other recipients of the Program a copy of this License -along with the Program. - -You may charge a fee for the physical act of transferring a copy, and -you may at your option offer warranty protection in exchange for a fee. - - 2. You may modify your copy or copies of the Program or any portion -of it, thus forming a work based on the Program, and copy and -distribute such modifications or work under the terms of Section 1 -above, provided that you also meet all of these conditions: - - a) You must cause the modified files to carry prominent notices - stating that you changed the files and the date of any change. - - b) You must cause any work that you distribute or publish, that in - whole or in part contains or is derived from the Program or any - part thereof, to be licensed as a whole at no charge to all third - parties under the terms of this License. - - c) If the modified program normally reads commands interactively - when run, you must cause it, when started running for such - interactive use in the most ordinary way, to print or display an - announcement including an appropriate copyright notice and a - notice that there is no warranty (or else, saying that you provide - a warranty) and that users may redistribute the program under - these conditions, and telling the user how to view a copy of this - License. (Exception: if the Program itself is interactive but - does not normally print such an announcement, your work based on - the Program is not required to print an announcement.) - -These requirements apply to the modified work as a whole. If -identifiable sections of that work are not derived from the Program, -and can be reasonably considered independent and separate works in -themselves, then this License, and its terms, do not apply to those -sections when you distribute them as separate works. But when you -distribute the same sections as part of a whole which is a work based -on the Program, the distribution of the whole must be on the terms of -this License, whose permissions for other licensees extend to the -entire whole, and thus to each and every part regardless of who wrote it. - -Thus, it is not the intent of this section to claim rights or contest -your rights to work written entirely by you; rather, the intent is to -exercise the right to control the distribution of derivative or -collective works based on the Program. - -In addition, mere aggregation of another work not based on the Program -with the Program (or with a work based on the Program) on a volume of -a storage or distribution medium does not bring the other work under -the scope of this License. - - 3. You may copy and distribute the Program (or a work based on it, -under Section 2) in object code or executable form under the terms of -Sections 1 and 2 above provided that you also do one of the following: - - a) Accompany it with the complete corresponding machine-readable - source code, which must be distributed under the terms of Sections - 1 and 2 above on a medium customarily used for software interchange; or, - - b) Accompany it with a written offer, valid for at least three - years, to give any third party, for a charge no more than your - cost of physically performing source distribution, a complete - machine-readable copy of the corresponding source code, to be - distributed under the terms of Sections 1 and 2 above on a medium - customarily used for software interchange; or, - - c) Accompany it with the information you received as to the offer - to distribute corresponding source code. (This alternative is - allowed only for noncommercial distribution and only if you - received the program in object code or executable form with such - an offer, in accord with Subsection b above.) - -The source code for a work means the preferred form of the work for -making modifications to it. For an executable work, complete source -code means all the source code for all modules it contains, plus any -associated interface definition files, plus the scripts used to -control compilation and installation of the executable. However, as a -special exception, the source code distributed need not include -anything that is normally distributed (in either source or binary -form) with the major components (compiler, kernel, and so on) of the -operating system on which the executable runs, unless that component -itself accompanies the executable. - -If distribution of executable or object code is made by offering -access to copy from a designated place, then offering equivalent -access to copy the source code from the same place counts as -distribution of the source code, even though third parties are not -compelled to copy the source along with the object code. - - 4. You may not copy, modify, sublicense, or distribute the Program -except as expressly provided under this License. Any attempt -otherwise to copy, modify, sublicense or distribute the Program is -void, and will automatically terminate your rights under this License. -However, parties who have received copies, or rights, from you under -this License will not have their licenses terminated so long as such -parties remain in full compliance. - - 5. You are not required to accept this License, since you have not -signed it. However, nothing else grants you permission to modify or -distribute the Program or its derivative works. These actions are -prohibited by law if you do not accept this License. Therefore, by -modifying or distributing the Program (or any work based on the -Program), you indicate your acceptance of this License to do so, and -all its terms and conditions for copying, distributing or modifying -the Program or works based on it. - - 6. Each time you redistribute the Program (or any work based on the -Program), the recipient automatically receives a license from the -original licensor to copy, distribute or modify the Program subject to -these terms and conditions. You may not impose any further -restrictions on the recipients' exercise of the rights granted herein. -You are not responsible for enforcing compliance by third parties to -this License. - - 7. If, as a consequence of a court judgment or allegation of patent -infringement or for any other reason (not limited to patent issues), -conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot -distribute so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you -may not distribute the Program at all. For example, if a patent -license would not permit royalty-free redistribution of the Program by -all those who receive copies directly or indirectly through you, then -the only way you could satisfy both it and this License would be to -refrain entirely from distribution of the Program. - -If any portion of this section is held invalid or unenforceable under -any particular circumstance, the balance of the section is intended to -apply and the section as a whole is intended to apply in other -circumstances. - -It is not the purpose of this section to induce you to infringe any -patents or other property right claims or to contest validity of any -such claims; this section has the sole purpose of protecting the -integrity of the free software distribution system, which is -implemented by public license practices. Many people have made -generous contributions to the wide range of software distributed -through that system in reliance on consistent application of that -system; it is up to the author/donor to decide if he or she is willing -to distribute software through any other system and a licensee cannot -impose that choice. - -This section is intended to make thoroughly clear what is believed to -be a consequence of the rest of this License. - - 8. If the distribution and/or use of the Program is restricted in -certain countries either by patents or by copyrighted interfaces, the -original copyright holder who places the Program under this License -may add an explicit geographical distribution limitation excluding -those countries, so that distribution is permitted only in or among -countries not thus excluded. In such case, this License incorporates -the limitation as if written in the body of this License. - - 9. The Free Software Foundation may publish revised and/or new versions -of the General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - -Each version is given a distinguishing version number. If the Program -specifies a version number of this License which applies to it and "any -later version", you have the option of following the terms and conditions -either of that version or of any later version published by the Free -Software Foundation. If the Program does not specify a version number of -this License, you may choose any version ever published by the Free Software -Foundation. - - 10. If you wish to incorporate parts of the Program into other free -programs whose distribution conditions are different, write to the author -to ask for permission. For software which is copyrighted by the Free -Software Foundation, write to the Free Software Foundation; we sometimes -make exceptions for this. Our decision will be guided by the two goals -of preserving the free status of all derivatives of our free software and -of promoting the sharing and reuse of software generally. - - NO WARRANTY - - 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY -FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN -OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES -PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED -OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS -TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE -PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, -REPAIR OR CORRECTION. - - 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR -REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, -INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING -OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED -TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY -YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER -PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE -POSSIBILITY OF SUCH DAMAGES. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -convey the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - - -Also add information on how to contact you by electronic and paper mail. - -If the program is interactive, make it output a short notice like this -when it starts in an interactive mode: - - Gnomovision version 69, Copyright (C) year name of author - Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, the commands you use may -be called something other than `show w' and `show c'; they could even be -mouse-clicks or menu items--whatever suits your program. - -You should also get your employer (if you work as a programmer) or your -school, if any, to sign a "copyright disclaimer" for the program, if -necessary. Here is a sample; alter the names: - - Yoyodyne, Inc., hereby disclaims all copyright interest in the program - `Gnomovision' (which makes passes at compilers) written by James Hacker. - - , 1 April 1989 - Ty Coon, President of Vice - -This General Public License does not permit incorporating your program into -proprietary programs. If your program is a subroutine library, you may -consider it more useful to permit linking proprietary applications with the -library. If this is what you want to do, use the GNU Library General -Public License instead of this License. diff --git a/xsd/build/import/libcult/configuration-dynamic.make b/xsd/build/import/libcult/configuration-dynamic.make deleted file mode 100644 index 73c92bb..0000000 --- a/xsd/build/import/libcult/configuration-dynamic.make +++ /dev/null @@ -1,4 +0,0 @@ -libcult_installed := n -src_root := $(abspath $(src_root)/../libcult) -scf_root := $(src_root)/build -out_root := $(src_root) diff --git a/xsd/build/import/libcult/configuration-rules.make b/xsd/build/import/libcult/configuration-rules.make deleted file mode 100644 index dc19df4..0000000 --- a/xsd/build/import/libcult/configuration-rules.make +++ /dev/null @@ -1,15 +0,0 @@ -# file : build/import/libcult/configuration-rules.make -# author : Boris Kolpackov -# copyright : Copyright (c) 2005-2009 Boris Kolpackov -# license : GNU GPL v2; see accompanying LICENSE file - -$(dcf_root)/import/libcult/configuration-dynamic.make: | $(dcf_root)/import/libcult/. - $(call message,,$(scf_root)/import/libcult/configure $@) - -ifndef %foreign% - -disfigure:: - $(call message,rm $(dcf_root)/import/libcult/configuration-dynamic.make,\ -rm -f $(dcf_root)/import/libcult/configuration-dynamic.make) - -endif diff --git a/xsd/build/import/libcult/configure b/xsd/build/import/libcult/configure deleted file mode 100755 index afa4c9c..0000000 --- a/xsd/build/import/libcult/configure +++ /dev/null @@ -1,55 +0,0 @@ -#! /usr/bin/env bash - -# file : build/import/libcult/configure -# author : Boris Kolpackov -# copyright : Copyright (c) 2005-2009 Boris Kolpackov -# license : GNU GPL v2; see accompanying LICENSE file - - -# $1 - out file -# -# bld_root - build root -# project_name - project name -# - -source $bld_root/dialog.bash - - -$echo -$echo "Configuring external dependency on 'libcult' for '$project_name'." -$echo - -$echo -$echo "Would you like to configure dependency on the installed " -$echo "version of 'libcult' as opposed to the development build?" -$echo - -installed=`read_y_n y` - -path= - -if [ "$installed" = "n" ]; then - -$echo -$echo "Please enter the src_root for 'libcult'." -$echo - -src_root=`read_path --directory --exist` - -$echo -$echo "Please enter the out_root for 'libcult'." -$echo - -out_root=`read_path --directory $src_root` - -fi - -echo libcult_installed := $installed >$1 - -if [ "$installed" = "n" ]; then - -echo src_root := $src_root >>$1 -echo scf_root := \$\(src_root\)/build >>$1 -echo out_root := $out_root >>$1 - -fi diff --git a/xsd/build/import/libcult/stub.make b/xsd/build/import/libcult/stub.make deleted file mode 100644 index f5f7691..0000000 --- a/xsd/build/import/libcult/stub.make +++ /dev/null @@ -1,30 +0,0 @@ -# file : build/import/libcult/stub.make -# author : Boris Kolpackov -# copyright : Copyright (c) 2005-2009 Boris Kolpackov -# license : GNU GPL v2; see accompanying LICENSE file - -$(call include-once,$(scf_root)/import/libcult/configuration-rules.make,$(dcf_root)) - -libcult_installed := - -$(call -include,$(dcf_root)/import/libcult/configuration-dynamic.make) - -ifdef libcult_installed - -ifeq ($(libcult_installed),y) - -$(call export,l: -lcult,cpp-options: ) - -else - -# Include export stub. -# -$(call include,$(scf_root)/export/libcult/stub.make) - -endif - -else - -.NOTPARALLEL: - -endif diff --git a/xsd/build/import/libcutl/LICENSE b/xsd/build/import/libcutl/LICENSE new file mode 100644 index 0000000..6b90d44 --- /dev/null +++ b/xsd/build/import/libcutl/LICENSE @@ -0,0 +1,24 @@ +Code found in the cutl/details/boost/ directory is distributed under +the Boost Software License (see the accompanying LICENSE file). + +The rest is Copyright (c) 2009-2011 Code Synthesis Tools CC and is +distributed under the following license (MIT License): + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be included +in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/xsd/build/import/libcutl/configuration-dynamic.make b/xsd/build/import/libcutl/configuration-dynamic.make new file mode 100644 index 0000000..4e4bb83 --- /dev/null +++ b/xsd/build/import/libcutl/configuration-dynamic.make @@ -0,0 +1,8 @@ +ifeq ($(EXTERNAL_LIBCUTL),y) +libcutl_installed := y +else +libcutl_installed := n +src_root := $(abspath $(src_root)/../libcutl) +scf_root := $(src_root)/build +out_root := $(src_root) +endif diff --git a/xsd/build/import/libcutl/configuration-rules.make b/xsd/build/import/libcutl/configuration-rules.make new file mode 100644 index 0000000..b9fcabc --- /dev/null +++ b/xsd/build/import/libcutl/configuration-rules.make @@ -0,0 +1,14 @@ +# file : build/import/libcutl/configuration-rules.make +# copyright : Copyright (c) 2009-2012 Code Synthesis Tools CC +# license : MIT; see accompanying LICENSE file + +$(dcf_root)/import/libcutl/configuration-dynamic.make: | $(dcf_root)/import/libcutl/. + $(call message,,$(scf_root)/import/libcutl/configure $@) + +ifndef %foreign% + +$(dcf_root)/.disfigure:: + $(call message,rm $(dcf_root)/import/libcutl/configuration-dynamic.make,\ +rm -f $(dcf_root)/import/libcutl/configuration-dynamic.make) + +endif diff --git a/xsd/build/import/libcutl/configure b/xsd/build/import/libcutl/configure new file mode 100755 index 0000000..8adb631 --- /dev/null +++ b/xsd/build/import/libcutl/configure @@ -0,0 +1,54 @@ +#! /usr/bin/env bash + +# file : build/import/libcutl/configure +# copyright : Copyright (c) 2009-2012 Code Synthesis Tools CC +# license : MIT; see accompanying LICENSE file + + +# $1 - out file +# +# bld_root - build root +# project_name - project name +# + +source $bld_root/dialog.bash + + +$echo +$echo "Configuring external dependency on 'libcutl' for '$project_name'." +$echo + +$echo +$echo "Would you like to configure dependency on the installed " +$echo "version of 'libcutl' as opposed to the development build?" +$echo + +installed=`read_y_n y` + +path= + +if [ "$installed" = "n" ]; then + +$echo +$echo "Please enter the src_root for 'libcutl'." +$echo + +src_root=`read_path --directory --exist` + +$echo +$echo "Please enter the out_root for 'libcutl'." +$echo + +out_root=`read_path --directory $src_root` + +fi + +echo libcutl_installed := $installed >$1 + +if [ "$installed" = "n" ]; then + +echo src_root := $src_root >>$1 +echo scf_root := \$\(src_root\)/build >>$1 +echo out_root := $out_root >>$1 + +fi diff --git a/xsd/build/import/libcutl/stub.make b/xsd/build/import/libcutl/stub.make new file mode 100644 index 0000000..1ec4716 --- /dev/null +++ b/xsd/build/import/libcutl/stub.make @@ -0,0 +1,29 @@ +# file : build/import/libcutl/stub.make +# copyright : Copyright (c) 2009-2012 Code Synthesis Tools CC +# license : MIT; see accompanying LICENSE file + +$(call include-once,$(scf_root)/import/libcutl/configuration-rules.make,$(dcf_root)) + +libcutl_installed := + +$(call -include,$(dcf_root)/import/libcutl/configuration-dynamic.make) + +ifdef libcutl_installed + +ifeq ($(libcutl_installed),y) + +$(call export,l: -lcutl,cpp-options: ) + +else + +# Include export stub. +# +$(call include,$(scf_root)/export/libcutl/stub.make) + +endif + +else + +.NOTPARALLEL: + +endif diff --git a/xsd/build/import/libdbxml/LICENSE b/xsd/build/import/libdbxml/LICENSE deleted file mode 100644 index 3912109..0000000 --- a/xsd/build/import/libdbxml/LICENSE +++ /dev/null @@ -1,340 +0,0 @@ - GNU GENERAL PUBLIC LICENSE - Version 2, June 1991 - - Copyright (C) 1989, 1991 Free Software Foundation, Inc. - 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The licenses for most software are designed to take away your -freedom to share and change it. By contrast, the GNU General Public -License is intended to guarantee your freedom to share and change free -software--to make sure the software is free for all its users. This -General Public License applies to most of the Free Software -Foundation's software and to any other program whose authors commit to -using it. (Some other Free Software Foundation software is covered by -the GNU Library General Public License instead.) You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -this service if you wish), that you receive source code or can get it -if you want it, that you can change the software or use pieces of it -in new free programs; and that you know you can do these things. - - To protect your rights, we need to make restrictions that forbid -anyone to deny you these rights or to ask you to surrender the rights. -These restrictions translate to certain responsibilities for you if you -distribute copies of the software, or if you modify it. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must give the recipients all the rights that -you have. You must make sure that they, too, receive or can get the -source code. And you must show them these terms so they know their -rights. - - We protect your rights with two steps: (1) copyright the software, and -(2) offer you this license which gives you legal permission to copy, -distribute and/or modify the software. - - Also, for each author's protection and ours, we want to make certain -that everyone understands that there is no warranty for this free -software. If the software is modified by someone else and passed on, we -want its recipients to know that what they have is not the original, so -that any problems introduced by others will not reflect on the original -authors' reputations. - - Finally, any free program is threatened constantly by software -patents. We wish to avoid the danger that redistributors of a free -program will individually obtain patent licenses, in effect making the -program proprietary. To prevent this, we have made it clear that any -patent must be licensed for everyone's free use or not licensed at all. - - The precise terms and conditions for copying, distribution and -modification follow. - - GNU GENERAL PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. This License applies to any program or other work which contains -a notice placed by the copyright holder saying it may be distributed -under the terms of this General Public License. The "Program", below, -refers to any such program or work, and a "work based on the Program" -means either the Program or any derivative work under copyright law: -that is to say, a work containing the Program or a portion of it, -either verbatim or with modifications and/or translated into another -language. (Hereinafter, translation is included without limitation in -the term "modification".) Each licensee is addressed as "you". - -Activities other than copying, distribution and modification are not -covered by this License; they are outside its scope. The act of -running the Program is not restricted, and the output from the Program -is covered only if its contents constitute a work based on the -Program (independent of having been made by running the Program). -Whether that is true depends on what the Program does. - - 1. You may copy and distribute verbatim copies of the Program's -source code as you receive it, in any medium, provided that you -conspicuously and appropriately publish on each copy an appropriate -copyright notice and disclaimer of warranty; keep intact all the -notices that refer to this License and to the absence of any warranty; -and give any other recipients of the Program a copy of this License -along with the Program. - -You may charge a fee for the physical act of transferring a copy, and -you may at your option offer warranty protection in exchange for a fee. - - 2. You may modify your copy or copies of the Program or any portion -of it, thus forming a work based on the Program, and copy and -distribute such modifications or work under the terms of Section 1 -above, provided that you also meet all of these conditions: - - a) You must cause the modified files to carry prominent notices - stating that you changed the files and the date of any change. - - b) You must cause any work that you distribute or publish, that in - whole or in part contains or is derived from the Program or any - part thereof, to be licensed as a whole at no charge to all third - parties under the terms of this License. - - c) If the modified program normally reads commands interactively - when run, you must cause it, when started running for such - interactive use in the most ordinary way, to print or display an - announcement including an appropriate copyright notice and a - notice that there is no warranty (or else, saying that you provide - a warranty) and that users may redistribute the program under - these conditions, and telling the user how to view a copy of this - License. (Exception: if the Program itself is interactive but - does not normally print such an announcement, your work based on - the Program is not required to print an announcement.) - -These requirements apply to the modified work as a whole. If -identifiable sections of that work are not derived from the Program, -and can be reasonably considered independent and separate works in -themselves, then this License, and its terms, do not apply to those -sections when you distribute them as separate works. But when you -distribute the same sections as part of a whole which is a work based -on the Program, the distribution of the whole must be on the terms of -this License, whose permissions for other licensees extend to the -entire whole, and thus to each and every part regardless of who wrote it. - -Thus, it is not the intent of this section to claim rights or contest -your rights to work written entirely by you; rather, the intent is to -exercise the right to control the distribution of derivative or -collective works based on the Program. - -In addition, mere aggregation of another work not based on the Program -with the Program (or with a work based on the Program) on a volume of -a storage or distribution medium does not bring the other work under -the scope of this License. - - 3. You may copy and distribute the Program (or a work based on it, -under Section 2) in object code or executable form under the terms of -Sections 1 and 2 above provided that you also do one of the following: - - a) Accompany it with the complete corresponding machine-readable - source code, which must be distributed under the terms of Sections - 1 and 2 above on a medium customarily used for software interchange; or, - - b) Accompany it with a written offer, valid for at least three - years, to give any third party, for a charge no more than your - cost of physically performing source distribution, a complete - machine-readable copy of the corresponding source code, to be - distributed under the terms of Sections 1 and 2 above on a medium - customarily used for software interchange; or, - - c) Accompany it with the information you received as to the offer - to distribute corresponding source code. (This alternative is - allowed only for noncommercial distribution and only if you - received the program in object code or executable form with such - an offer, in accord with Subsection b above.) - -The source code for a work means the preferred form of the work for -making modifications to it. For an executable work, complete source -code means all the source code for all modules it contains, plus any -associated interface definition files, plus the scripts used to -control compilation and installation of the executable. However, as a -special exception, the source code distributed need not include -anything that is normally distributed (in either source or binary -form) with the major components (compiler, kernel, and so on) of the -operating system on which the executable runs, unless that component -itself accompanies the executable. - -If distribution of executable or object code is made by offering -access to copy from a designated place, then offering equivalent -access to copy the source code from the same place counts as -distribution of the source code, even though third parties are not -compelled to copy the source along with the object code. - - 4. You may not copy, modify, sublicense, or distribute the Program -except as expressly provided under this License. Any attempt -otherwise to copy, modify, sublicense or distribute the Program is -void, and will automatically terminate your rights under this License. -However, parties who have received copies, or rights, from you under -this License will not have their licenses terminated so long as such -parties remain in full compliance. - - 5. You are not required to accept this License, since you have not -signed it. However, nothing else grants you permission to modify or -distribute the Program or its derivative works. These actions are -prohibited by law if you do not accept this License. Therefore, by -modifying or distributing the Program (or any work based on the -Program), you indicate your acceptance of this License to do so, and -all its terms and conditions for copying, distributing or modifying -the Program or works based on it. - - 6. Each time you redistribute the Program (or any work based on the -Program), the recipient automatically receives a license from the -original licensor to copy, distribute or modify the Program subject to -these terms and conditions. You may not impose any further -restrictions on the recipients' exercise of the rights granted herein. -You are not responsible for enforcing compliance by third parties to -this License. - - 7. If, as a consequence of a court judgment or allegation of patent -infringement or for any other reason (not limited to patent issues), -conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot -distribute so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you -may not distribute the Program at all. For example, if a patent -license would not permit royalty-free redistribution of the Program by -all those who receive copies directly or indirectly through you, then -the only way you could satisfy both it and this License would be to -refrain entirely from distribution of the Program. - -If any portion of this section is held invalid or unenforceable under -any particular circumstance, the balance of the section is intended to -apply and the section as a whole is intended to apply in other -circumstances. - -It is not the purpose of this section to induce you to infringe any -patents or other property right claims or to contest validity of any -such claims; this section has the sole purpose of protecting the -integrity of the free software distribution system, which is -implemented by public license practices. Many people have made -generous contributions to the wide range of software distributed -through that system in reliance on consistent application of that -system; it is up to the author/donor to decide if he or she is willing -to distribute software through any other system and a licensee cannot -impose that choice. - -This section is intended to make thoroughly clear what is believed to -be a consequence of the rest of this License. - - 8. If the distribution and/or use of the Program is restricted in -certain countries either by patents or by copyrighted interfaces, the -original copyright holder who places the Program under this License -may add an explicit geographical distribution limitation excluding -those countries, so that distribution is permitted only in or among -countries not thus excluded. In such case, this License incorporates -the limitation as if written in the body of this License. - - 9. The Free Software Foundation may publish revised and/or new versions -of the General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - -Each version is given a distinguishing version number. If the Program -specifies a version number of this License which applies to it and "any -later version", you have the option of following the terms and conditions -either of that version or of any later version published by the Free -Software Foundation. If the Program does not specify a version number of -this License, you may choose any version ever published by the Free Software -Foundation. - - 10. If you wish to incorporate parts of the Program into other free -programs whose distribution conditions are different, write to the author -to ask for permission. For software which is copyrighted by the Free -Software Foundation, write to the Free Software Foundation; we sometimes -make exceptions for this. Our decision will be guided by the two goals -of preserving the free status of all derivatives of our free software and -of promoting the sharing and reuse of software generally. - - NO WARRANTY - - 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY -FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN -OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES -PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED -OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS -TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE -PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, -REPAIR OR CORRECTION. - - 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR -REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, -INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING -OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED -TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY -YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER -PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE -POSSIBILITY OF SUCH DAMAGES. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -convey the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - - -Also add information on how to contact you by electronic and paper mail. - -If the program is interactive, make it output a short notice like this -when it starts in an interactive mode: - - Gnomovision version 69, Copyright (C) year name of author - Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, the commands you use may -be called something other than `show w' and `show c'; they could even be -mouse-clicks or menu items--whatever suits your program. - -You should also get your employer (if you work as a programmer) or your -school, if any, to sign a "copyright disclaimer" for the program, if -necessary. Here is a sample; alter the names: - - Yoyodyne, Inc., hereby disclaims all copyright interest in the program - `Gnomovision' (which makes passes at compilers) written by James Hacker. - - , 1 April 1989 - Ty Coon, President of Vice - -This General Public License does not permit incorporating your program into -proprietary programs. If your program is a subroutine library, you may -consider it more useful to permit linking proprietary applications with the -library. If this is what you want to do, use the GNU Library General -Public License instead of this License. diff --git a/xsd/build/import/libdbxml/configuration-rules.make b/xsd/build/import/libdbxml/configuration-rules.make deleted file mode 100644 index 823186c..0000000 --- a/xsd/build/import/libdbxml/configuration-rules.make +++ /dev/null @@ -1,15 +0,0 @@ -# file : build/import/libdbxml/configuration-rules.make -# author : Boris Kolpackov -# copyright : Copyright (c) 2005-2009 Boris Kolpackov -# license : GNU GPL v2; see accompanying LICENSE file - -$(dcf_root)/import/libdbxml/configuration-dynamic.make: | $(dcf_root)/import/libdbxml/. - $(call message,,$(scf_root)/import/libdbxml/configure $@) - -ifndef %foreign% - -disfigure:: - $(call message,rm $(dcf_root)/import/libdbxml/configuration-dynamic.make,\ -rm -f $(dcf_root)/import/libdbxml/configuration-dynamic.make) - -endif diff --git a/xsd/build/import/libdbxml/configure b/xsd/build/import/libdbxml/configure deleted file mode 100755 index 73ce78c..0000000 --- a/xsd/build/import/libdbxml/configure +++ /dev/null @@ -1,58 +0,0 @@ -#! /usr/bin/env bash - -# file : build/import/libdbxml/configure -# author : Boris Kolpackov -# copyright : Copyright (c) 2005-2009 Boris Kolpackov -# license : GNU GPL v2; see accompanying LICENSE file - - -# $1 - out config file -# -# bld_root - build root -# project_name - project name -# - -source $bld_root/dialog.bash - - -$echo -$echo "Configuring external dependency on 'Berkeley DB XML' for '$project_name'." -$echo - -$echo -$echo "Would you like to configure dependency on the installed version" -$echo "of 'Berkeley DB XML' as opposed to the development build?" -$echo - -installed=`read_y_n y` - -path= -type= - -if [ "$installed" = "n" ]; then - - $echo - $echo "Please enter the 'Berkeley DB XML' root directory." - $echo - - root=`read_path --directory --exist` - - $echo - $echo "Please select the library type you would like to use:" - $echo - $echo "(1) archive" - $echo "(2) shared object" - $echo - - type=`read_option "archive shared" "shared"` - -fi - -echo libdbxml_installed := $installed >$1 - -if [ "$installed" = "n" ]; then - - echo libdbxml_root := $root >>$1 - echo libdbxml_type := $type >>$1 - -fi diff --git a/xsd/build/import/libdbxml/rules.make b/xsd/build/import/libdbxml/rules.make deleted file mode 100644 index ac8118c..0000000 --- a/xsd/build/import/libdbxml/rules.make +++ /dev/null @@ -1,42 +0,0 @@ -# file : build/import/libdbxml/rules.make -# author : Boris Kolpackov -# copyright : Copyright (c) 2005-2009 Boris Kolpackov -# license : GNU GPL v2; see accompanying LICENSE file - -#@@ .l construction is compiler-specific -# - -$(dcf_root)/import/libdbxml/%: root := $(libdbxml_root) - -ifeq ($(libdbxml_type),archive) - -$(dcf_root)/import/libdbxml/dbxml.l: \ -$(libdbxml_root)/install/lib/libdbxml.a \ -$(libdbxml_root)/install/lib/libxqilla.a \ -$(libdbxml_root)/install/lib/libxerces-c.a \ -$(libdbxml_root)/install/lib/libdb_cxx.a \ -$(libdbxml_root)/install/lib/libdb.a - -else - -$(dcf_root)/import/libdbxml/dbxml.l: \ -$(libdbxml_root)/install/lib/libdbxml.so \ -$(libdbxml_root)/install/lib/libxqilla.so \ -$(libdbxml_root)/install/lib/libxerces-c.so \ -$(libdbxml_root)/install/lib/libdb_cxx.so \ -$(libdbxml_root)/install/lib/libdb.so - @echo $^ | xargs -n 1 echo >$@ - @echo rpath:$(root)/install/lib >>$@ -endif - -$(dcf_root)/import/libdbxml/dbxml.l.cpp-options: - @echo include: -I$(root)/install/include >$@ - -ifndef %foreign% - -disfigure:: - $(call message,rm $(dcf_root)/import/libdbxml/dbxml.l,\ -rm -f $(dcf_root)/import/libdbxml/dbxml.l) - $(call message,,rm -f $(dcf_root)/import/libdbxml/dbxml.l.cpp-options) - -endif diff --git a/xsd/build/import/libdbxml/stub.make b/xsd/build/import/libdbxml/stub.make deleted file mode 100644 index f8eb9a3..0000000 --- a/xsd/build/import/libdbxml/stub.make +++ /dev/null @@ -1,32 +0,0 @@ -# file : build/import/libdbxml/stub.make -# author : Boris Kolpackov -# copyright : Copyright (c) 2005-2009 Boris Kolpackov -# license : GNU GPL v2; see accompanying LICENSE file - -$(call include-once,$(scf_root)/import/libdbxml/configuration-rules.make,$(dcf_root)) - -libdbxml_installed := - -$(call -include,$(dcf_root)/import/libdbxml/configuration-dynamic.make) - -ifdef libdbxml_installed - -ifeq ($(libdbxml_installed),y) - -$(call export,l: -ldbxml -lxqilla -lxerces-c -ldb_cxx -ldb,cpp-options: ) - -else - -$(call include-once,$(scf_root)/import/libdbxml/rules.make,$(dcf_root)) - -$(call export,\ - l: $(dcf_root)/import/libdbxml/dbxml.l,\ - cpp-options: $(dcf_root)/import/libdbxml/dbxml.l.cpp-options) - -endif - -else - -.NOTPARALLEL: - -endif diff --git a/xsd/build/import/libdbxml/version b/xsd/build/import/libdbxml/version deleted file mode 100644 index 9e11b32..0000000 --- a/xsd/build/import/libdbxml/version +++ /dev/null @@ -1 +0,0 @@ -0.3.1 diff --git a/xsd/build/import/libxerces-c/configuration-rules.make b/xsd/build/import/libxerces-c/configuration-rules.make index fdb2263..995e6bd 100644 --- a/xsd/build/import/libxerces-c/configuration-rules.make +++ b/xsd/build/import/libxerces-c/configuration-rules.make @@ -1,5 +1,4 @@ # file : build/import/libxerces-c/configuration-rules.make -# author : Boris Kolpackov # copyright : Copyright (c) 2005-2009 Boris Kolpackov # license : GNU GPL v2; see accompanying LICENSE file diff --git a/xsd/build/import/libxerces-c/configure b/xsd/build/import/libxerces-c/configure index 26e56a7..45cd3da 100755 --- a/xsd/build/import/libxerces-c/configure +++ b/xsd/build/import/libxerces-c/configure @@ -1,7 +1,6 @@ #! /usr/bin/env bash # file : build/import/libxerces-c/configure -# author : Boris Kolpackov # copyright : Copyright (c) 2005-2009 Boris Kolpackov # license : GNU GPL v2; see accompanying LICENSE file diff --git a/xsd/build/import/libxerces-c/rules.make b/xsd/build/import/libxerces-c/rules.make index 7cdca8c..21ac145 100644 --- a/xsd/build/import/libxerces-c/rules.make +++ b/xsd/build/import/libxerces-c/rules.make @@ -1,5 +1,4 @@ # file : build/import/libxerces-c/rules.make -# author : Boris Kolpackov # copyright : Copyright (c) 2005-2009 Boris Kolpackov # license : GNU GPL v2; see accompanying LICENSE file diff --git a/xsd/build/import/libxerces-c/stub.make b/xsd/build/import/libxerces-c/stub.make index d4de5ec..745200d 100644 --- a/xsd/build/import/libxerces-c/stub.make +++ b/xsd/build/import/libxerces-c/stub.make @@ -1,5 +1,4 @@ # file : build/import/libxerces-c/stub.make -# author : Boris Kolpackov # copyright : Copyright (c) 2005-2009 Boris Kolpackov # license : GNU GPL v2; see accompanying LICENSE file diff --git a/xsd/build/import/libxqilla/configuration-rules.make b/xsd/build/import/libxqilla/configuration-rules.make index c567c76..1c5578e 100644 --- a/xsd/build/import/libxqilla/configuration-rules.make +++ b/xsd/build/import/libxqilla/configuration-rules.make @@ -1,5 +1,4 @@ # file : build/import/libxqilla/configuration-rules.make -# author : Boris Kolpackov # copyright : Copyright (c) 2005-2009 Boris Kolpackov # license : GNU GPL v2; see accompanying LICENSE file diff --git a/xsd/build/import/libxqilla/configure b/xsd/build/import/libxqilla/configure index 71cd954..1105838 100755 --- a/xsd/build/import/libxqilla/configure +++ b/xsd/build/import/libxqilla/configure @@ -1,7 +1,6 @@ #! /usr/bin/env bash # file : build/import/libxqilla/configure -# author : Boris Kolpackov # copyright : Copyright (c) 2005-2009 Boris Kolpackov # license : GNU GPL v2; see accompanying LICENSE file diff --git a/xsd/build/import/libxqilla/rules.make b/xsd/build/import/libxqilla/rules.make index 780ac50..11f442d 100644 --- a/xsd/build/import/libxqilla/rules.make +++ b/xsd/build/import/libxqilla/rules.make @@ -1,5 +1,4 @@ # file : build/import/libxqilla/rules.make -# author : Boris Kolpackov # copyright : Copyright (c) 2005-2009 Boris Kolpackov # license : GNU GPL v2; see accompanying LICENSE file diff --git a/xsd/build/import/libxqilla/stub.make b/xsd/build/import/libxqilla/stub.make index d24f962..b7ee956 100644 --- a/xsd/build/import/libxqilla/stub.make +++ b/xsd/build/import/libxqilla/stub.make @@ -1,5 +1,4 @@ # file : build/import/libxqilla/stub.make -# author : Boris Kolpackov # copyright : Copyright (c) 2005-2009 Boris Kolpackov # license : GNU GPL v2; see accompanying LICENSE file diff --git a/xsd/build/import/libxsd-frontend/configuration-rules.make b/xsd/build/import/libxsd-frontend/configuration-rules.make index eda6378..05a312a 100644 --- a/xsd/build/import/libxsd-frontend/configuration-rules.make +++ b/xsd/build/import/libxsd-frontend/configuration-rules.make @@ -1,6 +1,5 @@ # file : build/import/libxsd-frontend/configuration-rules.make -# author : Boris Kolpackov -# copyright : Copyright (c) 2005-2009 Code Synthesis Tools CC +# copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC # license : GNU GPL v2 + exceptions; see accompanying LICENSE file $(dcf_root)/import/libxsd-frontend/configuration-dynamic.make: | $(dcf_root)/import/libxsd-frontend/. diff --git a/xsd/build/import/libxsd-frontend/configure b/xsd/build/import/libxsd-frontend/configure index 1571a27..0c34062 100755 --- a/xsd/build/import/libxsd-frontend/configure +++ b/xsd/build/import/libxsd-frontend/configure @@ -1,8 +1,7 @@ #! /usr/bin/env bash # file : build/import/libxsd-frontend/configure -# author : Boris Kolpackov -# copyright : Copyright (c) 2005-2009 Code Synthesis Tools CC +# copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC # license : GNU GPL v2 + exceptions; see accompanying LICENSE file diff --git a/xsd/build/import/libxsd-frontend/stub.make b/xsd/build/import/libxsd-frontend/stub.make index f861eb6..cb57cef 100644 --- a/xsd/build/import/libxsd-frontend/stub.make +++ b/xsd/build/import/libxsd-frontend/stub.make @@ -1,6 +1,5 @@ # file : build/import/libxsd-frontend/stub.make -# author : Boris Kolpackov -# copyright : Copyright (c) 2005-2009 Code Synthesis Tools CC +# copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC # license : GNU GPL v2 + exceptions; see accompanying LICENSE file $(call include-once,$(scf_root)/import/libxsd-frontend/configuration-rules.make,$(dcf_root)) @@ -13,7 +12,7 @@ ifdef libxsd_frontend_installed ifeq ($(libxsd_frontend_installed),y) -$(call export,l: -lxsd-frontend -lfrontend-elements -lcult -lboost_filesystem -lxerces-c,cpp_options: ) +$(call export,l: -lxsd-frontend -lcutl -lxerces-c,cpp_options: ) else diff --git a/xsd/build/import/libz/configuration-rules.make b/xsd/build/import/libz/configuration-rules.make index c393b8b..180d3f3 100644 --- a/xsd/build/import/libz/configuration-rules.make +++ b/xsd/build/import/libz/configuration-rules.make @@ -1,5 +1,4 @@ # file : build/import/libz/configuration-rules.make -# author : Boris Kolpackov # copyright : Copyright (c) 2009 Boris Kolpackov # license : GNU GPL v2; see accompanying LICENSE file diff --git a/xsd/build/import/libz/configure b/xsd/build/import/libz/configure index c572910..b937a6c 100755 --- a/xsd/build/import/libz/configure +++ b/xsd/build/import/libz/configure @@ -1,7 +1,6 @@ #! /usr/bin/env bash # file : build/import/libz/configure -# author : Boris Kolpackov # copyright : Copyright (c) 2009 Boris Kolpackov # license : GNU GPL v2; see accompanying LICENSE file diff --git a/xsd/build/import/libz/rules.make b/xsd/build/import/libz/rules.make index d16089b..f28a280 100644 --- a/xsd/build/import/libz/rules.make +++ b/xsd/build/import/libz/rules.make @@ -1,5 +1,4 @@ # file : build/import/libz/rules.make -# author : Boris Kolpackov # copyright : Copyright (c) 2009 Boris Kolpackov # license : GNU GPL v2; see accompanying LICENSE file diff --git a/xsd/build/import/libz/stub.make b/xsd/build/import/libz/stub.make index 582fc41..8d0f8fb 100644 --- a/xsd/build/import/libz/stub.make +++ b/xsd/build/import/libz/stub.make @@ -1,5 +1,4 @@ # file : build/import/libz/stub.make -# author : Boris Kolpackov # copyright : Copyright (c) 2009 Boris Kolpackov # license : GNU GPL v2; see accompanying LICENSE file diff --git a/xsd/build/xsd/parser/xsd-cxx.make b/xsd/build/xsd/parser/xsd-cxx.make index e96c29f..185718f 100644 --- a/xsd/build/xsd/parser/xsd-cxx.make +++ b/xsd/build/xsd/parser/xsd-cxx.make @@ -1,6 +1,5 @@ # file : build/xsd/parser/xsd-cxx.make -# author : Boris Kolpackov -# copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +# copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC # license : GNU GPL v2 + exceptions; see accompanying LICENSE file #@@ Need to use extensions from cxx config. @@ -28,7 +27,7 @@ endif $(xsd_parser_pattern): xsd := xsd $(xsd_parser_pattern): xsd_command := cxx-parser -ops := --skel-file-suffix $(xsd_parser_skel_suffix) +ops := --generate-inline --skel-file-suffix $(xsd_parser_skel_suffix) ifneq ($(xsd_pimpl_suffix),) ops += --impl-file-suffix $(xsd_parser_impl_suffix) diff --git a/xsd/build/xsd/tree/xsd-cxx.make b/xsd/build/xsd/tree/xsd-cxx.make index d63c651..0411820 100644 --- a/xsd/build/xsd/tree/xsd-cxx.make +++ b/xsd/build/xsd/tree/xsd-cxx.make @@ -1,6 +1,5 @@ # file : build/xsd/tree/xsd-cxx.make -# author : Boris Kolpackov -# copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +# copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC # license : GNU GPL v2 + exceptions; see accompanying LICENSE file #@@ Need to use extensions from cxx config. @@ -16,7 +15,7 @@ $(out_base)/%$(xsd_tree_suffix)-fwd.hxx $(xsd_tree_pattern): xsd := xsd $(xsd_tree_pattern): xsd_command := cxx-tree -$(xsd_tree_pattern): xsd_options := +$(xsd_tree_pattern): xsd_options := --generate-inline .PRECIOUS: $(xsd_tree_pattern) diff --git a/xsd/dist/README-UNIX b/xsd/dist/README-UNIX index 15513de..4f83a7d 100644 --- a/xsd/dist/README-UNIX +++ b/xsd/dist/README-UNIX @@ -66,9 +66,6 @@ WITH_BOOST - Set this variable to 1 if you would like to build examples WITH_XQILLA - Set this variable to 1 if you would like to build examples that depend on the XQilla library (XPath 2) -WITH_DBXML - Set this variable to 1 if you would like to build examples - that depend on the Berkeley DB XML library - Additionally, makefiles for the C++/Parser examples (examples/cxx/parser/) allow you to choose the underlying XML parser: diff --git a/xsd/dist/README-WINDOWS b/xsd/dist/README-WINDOWS index d2e3925..0657c9f 100644 --- a/xsd/dist/README-WINDOWS +++ b/xsd/dist/README-WINDOWS @@ -5,8 +5,9 @@ Windows. For more information about XSD visit http://www.codesynthesis.com/products/xsd/ This README file describes how to start using XSD in the Microsoft -Windows environment with Visual Studio .NET 2003 (7.1), Visual Studio -2005 (8.0), Visual Studio 2008 (9.0), and Visual Studio 2010 (10.0). +Windows environment with Visual Studio 2005 (8.0), Visual Studio 2008 +(9.0), and Visual Studio 2010 (10.0), Visual Studio 2012 (11.0), and +Visual Studio 2013 (12.0). Prerequisites @@ -14,9 +15,15 @@ Prerequisites The XSD runtime library and the generated code depend on the Xerces-C++ XML parser which you can obtain from http://xerces.apache.org/xerces-c/. -You can also download precompiled Xerces-C++ libraries for Windows from +You can also download precompiled Xerces-C++ libraries for Windows from: + http://xerces.apache.org/xerces-c/download.cgi +Note that the above download page may not contain Xerces-C++ libraries +for the latest Visual Studio releases. The Windows Installer package +(.msi) for XSD contains Xerces-C++ libraries for all of the above- +mentioned Visual Studio versions. + Environment ----------- @@ -34,22 +41,8 @@ Studio IDE and the System Environment. place, you will need to adjust the paths below accordingly. - a) For Visual Studio .NET 2003 (7.1): - - In the Visual Studio IDE, select "Tools"/"Options"/"Projects"/"VC++ - Directories". - - Then, in the "Show directories for" field, select "Include files" and - create a new entry with the value "C:\projects\xerces-c-x.y.z\include". - - After that, in the "Show directories for" field, select "Library files" - and create a new entry with the value "C:\projects\xerces-c-x.y.z\lib". - - After that, in the "Show directories for" field, select "Executable files" - and create a new entry with the value "C:\projects\xerces-c-x.y.z\bin". + a) For Visual Studio 2005 (8.0) and Visual Studio 2008 (9.0): - For Visual Studio 2005 (8.0) and Visual Studio 2008 (9.0): - In the Visual Studio IDE, select "Tools"/"Options"/"Projects and Solution"/"VC++ Directories". @@ -62,44 +55,44 @@ Studio IDE and the System Environment. After that, in the "Show directories for" field, select "Executable files" and create a new entry with the value "C:\projects\xerces-c-x.y.z\bin". - If you are building the 64-bit version of your application, repeat the - above steps for the 64-bit version of Xerces-C++ while selecting x64 + If you are building the 64-bit version of your application, repeat the + above steps for the 64-bit version of Xerces-C++ while selecting x64 in the "Platform" drop-down list in the VC++ Directories dialog (Visual - Studio keeps a separate set of paths for each platform). + Studio keeps a separate set of paths for each platform). - For Visual Studio 2010 (10.0): + For Visual Studio 2010-2013 (10.0-12.0): 1. Open an existing or create a new C++ project (you can open one of - the example solutions) + the example solutions that come with XSD). - 2. Open the Property Manager view by selecting "View"->"Property - Manager" (or "View"->"Other Windows"->"Property Manager") menu - action + 2. Open the Property Manager view by selecting "View"->"Property + Manager" (or "View"->"Other Windows"->"Property Manager") menu + action. - 3. Expand the property hierarchy for the project and find the - Microsoft.Cpp.Win32.user property sheet + 3. Expand the property hierarchy for the project and find the + Microsoft.Cpp.Win32.user property sheet. 4. Right click on Microsoft.Cpp.Win32.user and select the "Properties" - menu action + menu action. - 5. Select the VC++ Directories tab + 5. Select the VC++ Directories tab. - 6. Add the "C:\projects\xerces-c-x.y.z\include" path to the "Include - Directories" field (the paths are separated by a semicolon) + 6. Add the "C:\projects\xerces-c-x.y.z\include" path to the "Include + Directories" field (the paths are separated by a semicolon). - 7. Add the "C:\projects\xerces-c-x.y.z\lib" path to the "Library - Directories" field + 7. Add the "C:\projects\xerces-c-x.y.z\lib" path to the "Library + Directories" field. - 8. Add the "C:\projects\xerces-c-x.y.z\bin" path to the "Executable - Directories" field + 8. Add the "C:\projects\xerces-c-x.y.z\bin" path to the "Executable + Directories" field. - 9. Click Ok to close the dialog and then click the Save button at the - top of the Property Manager view to save Microsoft.Cpp.Win32.user + 9. Click Ok to close the dialog and then click the Save button at the + top of the Property Manager view to save Microsoft.Cpp.Win32.user. If you are building the 64-bit version of your application, repeat - the above steps for the 64-bit version of Xerces-C++ but using the + the above steps for the 64-bit version of Xerces-C++ but using the Microsoft.Cpp.x64.user property sheet (Visual Studio keeps a separate - set of paths for each platform). + set of paths for each platform). b) In the Control Panel, choose "System" and select the "Advanced" tab. @@ -111,24 +104,11 @@ Studio IDE and the System Environment. 2. Setting up XSD Now you need to set up XSD executable and include search paths. Here we - assume that your XSD path is C:\projects\xsd-x.y.z. If you have XSD in + assume that your XSD path is C:\projects\xsd-x.y.z. If you have XSD in a different place, you will need to adjust the paths below accordingly. - For Visual Studio .NET 2003 (7.1): - - In the Visual Studio IDE, select "Tools"/"Options"/"Projects"/"VC++ - Directories". - - Then, in the "Show directories for" field, select "Include files" and - create a new entry with the value "C:\projects\xsd-x.y.z\libxsd". - - After that, in the "Show directories for" field, select "Executable - files" and create a new entry with the value "C:\projects\xsd-x.y.z\bin". - Make sure it is the first line in the list of directories (use the - "Up" button to move the new entry up, if necessary). - For Visual Studio 2005 (8.0) and Visual Studio 2008 (9.0): - + In the Visual Studio IDE, select "Tools"/"Options"/"Projects and Solution"/"VC++ Directories". @@ -140,42 +120,42 @@ Studio IDE and the System Environment. Make sure it is the first line in the list of directories (use the "Up" button to move the new entry up, if necessary). - If you are building the 64-bit version of your application, repeat the + If you are building the 64-bit version of your application, repeat the above steps using the same paths while selecting x64 in the "Platform" - drop-down list in the VC++ Directories dialog (Visual Studio keeps a - separate set of paths for each platform). + drop-down list in the VC++ Directories dialog (Visual Studio keeps a + separate set of paths for each platform). For Visual Studio 2010 (10.0): 1. Open an existing or create a new C++ project (you can open one of - the example solutions) + the example solutions that come with XSD). - 2. Open the Property Manager view by selecting "View"->"Property + 2. Open the Property Manager view by selecting "View"->"Property Manager" (or "View"->"Other Windows"->"Property Manager") menu - action + action. - 3. Expand the property hierarchy for the project and find the - Microsoft.Cpp.Win32.user property sheet + 3. Expand the property hierarchy for the project and find the + Microsoft.Cpp.Win32.user property sheet. 4. Right click on Microsoft.Cpp.Win32.user and select the "Properties" - menu action + menu action. - 5. Select the VC++ Directories tab + 5. Select the VC++ Directories tab. - 6. Add the "C:\projects\xsd-x.y.z\libxsd" path to the "Include - Directories" field (the paths are separated by a semicolon) + 6. Add the "C:\projects\xsd-x.y.z\libxsd" path to the "Include + Directories" field (the paths are separated by a semicolon). - 7. Add the "C:\projects\xsd-x.y.z\bin" path to the "Executable - Directories" field and make sure it is the first path in the - the list of directories + 7. Add the "C:\projects\xsd-x.y.z\bin" path to the "Executable + Directories" field and make sure it is the first path in the + the list of directories. - 8. Click Ok to close the dialog and then click the Save button at the - top of the Property Manager view to save Microsoft.Cpp.Win32.user + 8. Click Ok to close the dialog and then click the Save button at the + top of the Property Manager view to save Microsoft.Cpp.Win32.user. - If you are building the 64-bit version of your application, repeat the - above steps using the same paths but using the Microsoft.Cpp.x64.user - property sheet (Visual Studio keeps a separate set of paths for each - platform). + If you are building the 64-bit version of your application, repeat the + above steps using the same paths but using the Microsoft.Cpp.x64.user + property sheet (Visual Studio keeps a separate set of paths for each + platform). 3. Restart the Visual Studio IDE. @@ -185,7 +165,8 @@ Building Examples ----------------- Now you are ready to build examples. Simply open the solution file -found in the examples\cxx\tree and examples\cxx\parser directories. +found in the examples\cxx\tree (C++/Tree mapping examples) or +examples\cxx\parser (C++/Parser examples) directories. Some of the examples depend on additional third-party libraries or show a specific feature of XSD and are not included in the solutions @@ -199,13 +180,12 @@ examples/cxx/tree/binary/boost - depends on the Boost serialization library examples/cxx/tree/binary/cdr - depends on the ACE library examples/cxx/tree/binary/xdr - requires a third-party XDR library examples/cxx/tree/xpath - depends on the XQilla library (XPath 2) -examples/cxx/tree/dbxml - depends on the Berkeley DB XML library Using XSD in Your Projects -------------------------- -For various ways to integrate the XSD compiler with the Visual Studio IDE +For various ways to integrate the XSD compiler with the Visual Studio IDE as well as other Visual Studio-specific topics, refer to the Using XSD with Microsoft Visual Studio Wiki page: diff --git a/xsd/dist/etc/vc-10.0/xsd-cxx-parser.props b/xsd/dist/etc/vc-10.0/xsd-cxx-parser.props deleted file mode 100644 index b167a38..0000000 --- a/xsd/dist/etc/vc-10.0/xsd-cxx-parser.props +++ /dev/null @@ -1,33 +0,0 @@ - - - - Midl - CustomBuild - - - _SelectedFiles;$(CXX_Parser_Mapping_RuleDependsOn) - - - - False - False - False - False - False - . - .hxx - .cxx - .ixx - -pskel - _pskel - 0 - 0 - 0 - xsd.exe cxx-parser [AllOptions] [AdditionalOptions] [Inputs] - xsd cxx-parser %(Identity) - false - - - diff --git a/xsd/dist/etc/vc-10.0/xsd-cxx-parser.targets b/xsd/dist/etc/vc-10.0/xsd-cxx-parser.targets deleted file mode 100644 index 62ad2b2..0000000 --- a/xsd/dist/etc/vc-10.0/xsd-cxx-parser.targets +++ /dev/null @@ -1,92 +0,0 @@ - - - - - - XsdCompile - - - - $(MSBuildThisFileDirectory)$(MSBuildThisFileName).xml - - - - - - - - @(CXX_Parser_Mapping_Rule, '|') - - - - - - - - - @(CXX_Parser_Mapping_Rule->Metadata('OutDir')->Distinct())\@(CXX_Parser_Mapping_Rule->Metadata('Filename')->Distinct())@(CXX_Parser_Mapping_Rule->Metadata('SkelFileSuffix')->Distinct())@(CXX_Parser_Mapping_Rule->Metadata('HeaderSuffix')->Distinct());@(CXX_Parser_Mapping_Rule->Metadata('OutDir')->Distinct())\@(CXX_Parser_Mapping_Rule->Metadata('Filename')->Distinct())@(CXX_Parser_Mapping_Rule->Metadata('SkelFileSuffix')->Distinct())@(CXX_Parser_Mapping_Rule->Metadata('SourceSuffix')->Distinct());@(CXX_Parser_Mapping_Rule->Metadata('OutDir')->Distinct())\@(CXX_Parser_Mapping_Rule->Metadata('Filename')->Distinct())@(CXX_Parser_Mapping_Rule->Metadata('SkelFileSuffix')->Distinct())@(CXX_Parser_Mapping_Rule->Metadata('InlineSuffix')->Distinct()); - - - - %(CoreCppClean.FilePatternsToDelete);$(XsdCleanFilePatternsToDelete) - $(XsdCleanFilePatternsToDelete) - - - - - - - diff --git a/xsd/dist/etc/vc-10.0/xsd-cxx-parser.xml b/xsd/dist/etc/vc-10.0/xsd-cxx-parser.xml deleted file mode 100644 index 37202c6..0000000 --- a/xsd/dist/etc/vc-10.0/xsd-cxx-parser.xml +++ /dev/null @@ -1,284 +0,0 @@ - - - - - - - - - - General - - - - - Command Line - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Execute Before - - - Specifies the targets for the build customization to run before. - - - - - - - - - - - Execute After - - - Specifies the targets for the build customization to run after. - - - - - - - - - - - - - Additional Options - - - Additional Options - - - - - - - diff --git a/xsd/dist/etc/vc-10.0/xsd-cxx-tree.props b/xsd/dist/etc/vc-10.0/xsd-cxx-tree.props deleted file mode 100644 index 3d66166..0000000 --- a/xsd/dist/etc/vc-10.0/xsd-cxx-tree.props +++ /dev/null @@ -1,45 +0,0 @@ - - - - Midl - CustomBuild - - - _SelectedFiles;$(CXX_Tree_Mapping_RuleDependsOn) - - - - False - False - False - False - False - False - False - False - False - False - False - False - False - False - False - False - False - . - .hxx - .cxx - .ixx - -fwd.hxx - 0 - 0 - 0 - 0 - xsd.exe cxx-tree [AllOptions] [AdditionalOptions] [Inputs] - xsd cxx-tree %(Identity) - false - - - diff --git a/xsd/dist/etc/vc-10.0/xsd-cxx-tree.targets b/xsd/dist/etc/vc-10.0/xsd-cxx-tree.targets deleted file mode 100644 index a65b559..0000000 --- a/xsd/dist/etc/vc-10.0/xsd-cxx-tree.targets +++ /dev/null @@ -1,105 +0,0 @@ - - - - - - XsdCompile - - - - $(MSBuildThisFileDirectory)$(MSBuildThisFileName).xml - - - - - - - - @(CXX_Tree_Mapping_Rule, '|') - - - - - - - - - @(CXX_Tree_Mapping_Rule->Metadata('OutDir')->Distinct())\@(CXX_Tree_Mapping_Rule->Metadata('Filename')->Distinct())@(CXX_Tree_Mapping_Rule->Metadata('HeaderSuffix')->Distinct());@(CXX_Tree_Mapping_Rule->Metadata('OutDir')->Distinct())\@(CXX_Tree_Mapping_Rule->Metadata('Filename')->Distinct())@(CXX_Tree_Mapping_Rule->Metadata('SourceSuffix')->Distinct());@(CXX_Tree_Mapping_Rule->Metadata('OutDir')->Distinct())\@(CXX_Tree_Mapping_Rule->Metadata('Filename')->Distinct())@(CXX_Tree_Mapping_Rule->Metadata('InlineSuffix')->Distinct());@(CXX_Tree_Mapping_Rule->Metadata('OutDir')->Distinct())\@(CXX_Tree_Mapping_Rule->Metadata('Filename')->Distinct())@(CXX_Tree_Mapping_Rule->Metadata('ForwardSuffix')->Distinct()) - - - - %(CoreCppClean.FilePatternsToDelete);$(XsdCleanFilePatternsToDelete) - $(XsdCleanFilePatternsToDelete) - - - - - - - diff --git a/xsd/dist/etc/vc-10.0/xsd-cxx-tree.xml b/xsd/dist/etc/vc-10.0/xsd-cxx-tree.xml deleted file mode 100644 index 12393ee..0000000 --- a/xsd/dist/etc/vc-10.0/xsd-cxx-tree.xml +++ /dev/null @@ -1,390 +0,0 @@ - - - - - - - - - - General - - - - - Command Line - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Execute Before - - - Specifies the targets for the build customization to run before. - - - - - - - - - - - Execute After - - - Specifies the targets for the build customization to run after. - - - - - - - - - - - - - Additional Options - - - Additional Options - - - - - - - diff --git a/xsd/dist/etc/vc-1x.0/xsd-cxx-parser.props b/xsd/dist/etc/vc-1x.0/xsd-cxx-parser.props new file mode 100644 index 0000000..b167a38 --- /dev/null +++ b/xsd/dist/etc/vc-1x.0/xsd-cxx-parser.props @@ -0,0 +1,33 @@ + + + + Midl + CustomBuild + + + _SelectedFiles;$(CXX_Parser_Mapping_RuleDependsOn) + + + + False + False + False + False + False + . + .hxx + .cxx + .ixx + -pskel + _pskel + 0 + 0 + 0 + xsd.exe cxx-parser [AllOptions] [AdditionalOptions] [Inputs] + xsd cxx-parser %(Identity) + false + + + diff --git a/xsd/dist/etc/vc-1x.0/xsd-cxx-parser.targets b/xsd/dist/etc/vc-1x.0/xsd-cxx-parser.targets new file mode 100644 index 0000000..62ad2b2 --- /dev/null +++ b/xsd/dist/etc/vc-1x.0/xsd-cxx-parser.targets @@ -0,0 +1,92 @@ + + + + + + XsdCompile + + + + $(MSBuildThisFileDirectory)$(MSBuildThisFileName).xml + + + + + + + + @(CXX_Parser_Mapping_Rule, '|') + + + + + + + + + @(CXX_Parser_Mapping_Rule->Metadata('OutDir')->Distinct())\@(CXX_Parser_Mapping_Rule->Metadata('Filename')->Distinct())@(CXX_Parser_Mapping_Rule->Metadata('SkelFileSuffix')->Distinct())@(CXX_Parser_Mapping_Rule->Metadata('HeaderSuffix')->Distinct());@(CXX_Parser_Mapping_Rule->Metadata('OutDir')->Distinct())\@(CXX_Parser_Mapping_Rule->Metadata('Filename')->Distinct())@(CXX_Parser_Mapping_Rule->Metadata('SkelFileSuffix')->Distinct())@(CXX_Parser_Mapping_Rule->Metadata('SourceSuffix')->Distinct());@(CXX_Parser_Mapping_Rule->Metadata('OutDir')->Distinct())\@(CXX_Parser_Mapping_Rule->Metadata('Filename')->Distinct())@(CXX_Parser_Mapping_Rule->Metadata('SkelFileSuffix')->Distinct())@(CXX_Parser_Mapping_Rule->Metadata('InlineSuffix')->Distinct()); + + + + %(CoreCppClean.FilePatternsToDelete);$(XsdCleanFilePatternsToDelete) + $(XsdCleanFilePatternsToDelete) + + + + + + + diff --git a/xsd/dist/etc/vc-1x.0/xsd-cxx-parser.xml b/xsd/dist/etc/vc-1x.0/xsd-cxx-parser.xml new file mode 100644 index 0000000..37202c6 --- /dev/null +++ b/xsd/dist/etc/vc-1x.0/xsd-cxx-parser.xml @@ -0,0 +1,284 @@ + + + + + + + + + + General + + + + + Command Line + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Execute Before + + + Specifies the targets for the build customization to run before. + + + + + + + + + + + Execute After + + + Specifies the targets for the build customization to run after. + + + + + + + + + + + + + Additional Options + + + Additional Options + + + + + + + diff --git a/xsd/dist/etc/vc-1x.0/xsd-cxx-tree.props b/xsd/dist/etc/vc-1x.0/xsd-cxx-tree.props new file mode 100644 index 0000000..fc81c9b --- /dev/null +++ b/xsd/dist/etc/vc-1x.0/xsd-cxx-tree.props @@ -0,0 +1,47 @@ + + + + Midl + CustomBuild + + + _SelectedFiles;$(CXX_Tree_Mapping_RuleDependsOn) + + + + False + 0 + False + False + False + False + False + False + False + False + False + False + False + False + False + False + False + False + False + . + .hxx + .cxx + .ixx + -fwd.hxx + 0 + 0 + 0 + 0 + xsd.exe cxx-tree [AllOptions] [AdditionalOptions] [Inputs] + xsd cxx-tree %(Identity) + false + + + diff --git a/xsd/dist/etc/vc-1x.0/xsd-cxx-tree.targets b/xsd/dist/etc/vc-1x.0/xsd-cxx-tree.targets new file mode 100644 index 0000000..6156ec2 --- /dev/null +++ b/xsd/dist/etc/vc-1x.0/xsd-cxx-tree.targets @@ -0,0 +1,107 @@ + + + + + + XsdCompile + + + + $(MSBuildThisFileDirectory)$(MSBuildThisFileName).xml + + + + + + + + @(CXX_Tree_Mapping_Rule, '|') + + + + + + + + + @(CXX_Tree_Mapping_Rule->Metadata('OutDir')->Distinct())\@(CXX_Tree_Mapping_Rule->Metadata('Filename')->Distinct())@(CXX_Tree_Mapping_Rule->Metadata('HeaderSuffix')->Distinct());@(CXX_Tree_Mapping_Rule->Metadata('OutDir')->Distinct())\@(CXX_Tree_Mapping_Rule->Metadata('Filename')->Distinct())@(CXX_Tree_Mapping_Rule->Metadata('SourceSuffix')->Distinct());@(CXX_Tree_Mapping_Rule->Metadata('OutDir')->Distinct())\@(CXX_Tree_Mapping_Rule->Metadata('Filename')->Distinct())@(CXX_Tree_Mapping_Rule->Metadata('InlineSuffix')->Distinct());@(CXX_Tree_Mapping_Rule->Metadata('OutDir')->Distinct())\@(CXX_Tree_Mapping_Rule->Metadata('Filename')->Distinct())@(CXX_Tree_Mapping_Rule->Metadata('ForwardSuffix')->Distinct()) + + + + %(CoreCppClean.FilePatternsToDelete);$(XsdCleanFilePatternsToDelete) + $(XsdCleanFilePatternsToDelete) + + + + + + + diff --git a/xsd/dist/etc/vc-1x.0/xsd-cxx-tree.xml b/xsd/dist/etc/vc-1x.0/xsd-cxx-tree.xml new file mode 100644 index 0000000..e37eb1c --- /dev/null +++ b/xsd/dist/etc/vc-1x.0/xsd-cxx-tree.xml @@ -0,0 +1,411 @@ + + + + + + + + + + General + + + + + Command Line + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Execute Before + + + Specifies the targets for the build customization to run before. + + + + + + + + + + + Execute After + + + Specifies the targets for the build customization to run after. + + + + + + + + + + + + + Additional Options + + + Additional Options + + + + + + + diff --git a/xsd/dist/examples/build/cxx/compilers.make b/xsd/dist/examples/build/cxx/compilers.make index b8d5538..a7f6296 100644 --- a/xsd/dist/examples/build/cxx/compilers.make +++ b/xsd/dist/examples/build/cxx/compilers.make @@ -1,6 +1,5 @@ # file : examples/build/cxx/compilers.make -# author : Boris Kolpackov -# copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +# copyright : Copyright (c) 2006-2014 Code Synthesis Tools CC # license : GNU GPL v2 + exceptions; see accompanying LICENSE file CXX := g++ @@ -43,13 +42,13 @@ endif # Clang # ifeq ($(cxx_id),) -ifeq ($(shell echo '$(cxx_sign)' | sed -e 's/^.* clang .*$$//'),) +ifeq ($(shell echo '$(cxx_sign)' | sed -e 's/^.*clang.*$$//'),) cxx_id := clang endif endif ifeq ($(cxx_id),) -ifeq ($(shell echo '$(cxx_sign)' | sed -e 's/^.* Clang .*$$//'),) +ifeq ($(shell echo '$(cxx_sign)' | sed -e 's/^.*Clang.*$$//'),) cxx_id := clang endif endif @@ -65,27 +64,15 @@ endif # HP C++ (aCC) # -# aCC3 and aCC6 are two very different compilers so we will call them -# hp3 and hp6. -# - -# 3 -ifeq ($(cxx_id),) -ifeq ($(shell echo '$(cxx_sign)' | sed -e 's/^[^ ]* HP ANSI C.. .* A\.03\..*$$//'),) -cxx_id := hp3 -endif -endif - -# 6 ifeq ($(cxx_id),) ifeq ($(shell echo '$(cxx_sign)' | sed -e 's/^[^ ]* HP aC..\/ANSI C .* A\.06\..*$$//'),) -cxx_id := hp6 +cxx_id := hp endif endif ifeq ($(cxx_id),) ifeq ($(shell echo '$(cxx_sign)' | sed -e 's/^[^ ]* HP C\/aC.. .* A\.06\..*$$//'),) -cxx_id := hp6 +cxx_id := hp endif endif diff --git a/xsd/dist/examples/build/cxx/rules.make b/xsd/dist/examples/build/cxx/rules.make index 3e74764..3f6c38c 100644 --- a/xsd/dist/examples/build/cxx/rules.make +++ b/xsd/dist/examples/build/cxx/rules.make @@ -1,6 +1,5 @@ # file : examples/build/cxx/rules.make -# author : Boris Kolpackov -# copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +# copyright : Copyright (c) 2006-2014 Code Synthesis Tools CC # license : GNU GPL v2 + exceptions; see accompanying LICENSE file include $(root)/build/cxx/compilers.make @@ -32,23 +31,11 @@ ifeq ($(cxx_id),sun) endif -# HP aCC3 +# HP aCC # -ifeq ($(cxx_id),hp3) +ifeq ($(cxx_id),hp) - # By default Xerces-C++ is built with -mt for aCC3. - # 849 : symbol to long, truncated to 4000 - # 1039: incompatible vtable layout - # - CXXFLAGS := -AA -O -mt +W849 +W1039 -endif - - -# HP aCC6 -# -ifeq ($(cxx_id),hp6) - - # By default Xerces-C++ is built with -mt for aCC6. + # By default Xerces-C++ is built with -mt for aCC. # 2334 no suitable copy constructor (e.g., for std::auto_ptr) # CXXFLAGS := -Aa -O -mt +W2334 diff --git a/xsd/dist/examples/build/xsd/common.make b/xsd/dist/examples/build/xsd/common.make index d82cbfb..21d39e7 100644 --- a/xsd/dist/examples/build/xsd/common.make +++ b/xsd/dist/examples/build/xsd/common.make @@ -1,6 +1,5 @@ # file : examples/build/xsd/common.make -# author : Boris Kolpackov -# copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +# copyright : Copyright (c) 2006-2014 Code Synthesis Tools CC # license : GNU GPL v2 + exceptions; see accompanying LICENSE file XSD := $(shell if test -x $(root)/../bin/xsd; \ diff --git a/xsd/dist/examples/build/xsd/parser-rules.make b/xsd/dist/examples/build/xsd/parser-rules.make index 8da4fc6..c39b85c 100644 --- a/xsd/dist/examples/build/xsd/parser-rules.make +++ b/xsd/dist/examples/build/xsd/parser-rules.make @@ -1,6 +1,5 @@ # file : examples/build/xsd/parser-rules.make -# author : Boris Kolpackov -# copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +# copyright : Copyright (c) 2006-2014 Code Synthesis Tools CC # license : GNU GPL v2 + exceptions; see accompanying LICENSE file include $(root)/build/xsd/common.make diff --git a/xsd/dist/examples/build/xsd/tree-rules.make b/xsd/dist/examples/build/xsd/tree-rules.make index 0ea6990..7ff3529 100644 --- a/xsd/dist/examples/build/xsd/tree-rules.make +++ b/xsd/dist/examples/build/xsd/tree-rules.make @@ -1,6 +1,5 @@ # file : examples/build/xsd/tree-rules.make -# author : Boris Kolpackov -# copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +# copyright : Copyright (c) 2006-2014 Code Synthesis Tools CC # license : GNU GPL v2 + exceptions; see accompanying LICENSE file include $(root)/build/xsd/common.make diff --git a/xsd/dist/examples/cxx/parser/generated/generated-10.0.vcxproj b/xsd/dist/examples/cxx/parser/generated/generated-10.0.vcxproj deleted file mode 100644 index f5bdf86..0000000 --- a/xsd/dist/examples/cxx/parser/generated/generated-10.0.vcxproj +++ /dev/null @@ -1,207 +0,0 @@ - - - - - Debug - Win32 - - - Debug - x64 - - - Release - Win32 - - - Release - x64 - - - - generated - {4277B39A-C9FB-4F10-8223-8DD38053EDA0} - generated - Win32Proj - - - - Application - MultiByte - - - Application - MultiByte - - - Application - MultiByte - - - Application - MultiByte - - - - - - - - - - - - - - - - - - - library-driver - library-driver - library-driver - library-driver - Debug\ - Debug\ - true - $(Platform)\$(Configuration)\ - $(Platform)\$(Configuration)\ - true - Release\ - Release\ - false - $(Platform)\$(Configuration)\ - $(Platform)\$(Configuration)\ - false - - - - Disabled - WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebug - - - Level3 - EditAndContinue - - - xerces-c_3D.lib;%(AdditionalDependencies) - $(TargetPath) - true - $(OutDir)library-driver.pdb - Console - false - - - MachineX86 - - - - - X64 - - - Disabled - WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebug - - - Level3 - ProgramDatabase - - - xerces-c_3D.lib;%(AdditionalDependencies) - $(TargetPath) - true - $(OutDir)library-driver.pdb - Console - false - - - MachineX64 - - - - - WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - MultiThreaded - - - Level3 - ProgramDatabase - - - xerces-c_3.lib;%(AdditionalDependencies) - $(TargetPath) - true - Console - true - true - false - - - MachineX86 - - - - - X64 - - - WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - MultiThreaded - - - Level3 - ProgramDatabase - - - xerces-c_3.lib;%(AdditionalDependencies) - $(TargetPath) - true - Console - true - true - false - - - MachineX64 - - - - - - - - - - - - - - xsd library.xsd - xsd cxx-parser --generate-print-impl --generate-test-driver --force-overwrite library.xsd - library-pskel.hxx;library-pskel.cxx;library-pimpl.hxx;library-pimpl.cxx;library-driver.cxx;%(Outputs) - xsd library.xsd - xsd cxx-parser --generate-print-impl --generate-test-driver --force-overwrite library.xsd - library-pskel.hxx;library-pskel.cxx;library-pimpl.hxx;library-pimpl.cxx;library-driver.cxx;%(Outputs) - xsd library.xsd - xsd cxx-parser --generate-print-impl --generate-test-driver --force-overwrite library.xsd - library-pskel.hxx;library-pskel.cxx;library-pimpl.hxx;library-pimpl.cxx;library-driver.cxx;%(Outputs) - xsd library.xsd - xsd cxx-parser --generate-print-impl --generate-test-driver --force-overwrite library.xsd - library-pskel.hxx;library-pskel.cxx;library-pimpl.hxx;library-pimpl.cxx;library-driver.cxx;%(Outputs) - - - - - - - - - \ No newline at end of file diff --git a/xsd/dist/examples/cxx/parser/generated/generated-10.0.vcxproj.filters b/xsd/dist/examples/cxx/parser/generated/generated-10.0.vcxproj.filters deleted file mode 100644 index b2cc277..0000000 --- a/xsd/dist/examples/cxx/parser/generated/generated-10.0.vcxproj.filters +++ /dev/null @@ -1,44 +0,0 @@ - - - - - {6241A332-00FB-43D7-8E2D-4277B261F512} - cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx - - - {5F7B4073-4744-4C7E-9B74-B5B7D8628B23} - h;hpp;hxx;hm;inl;inc;xsd - - - {64b9ddc3-e796-405a-84e3-6e33b610b7ba} - xsd - - - - - Source Files - - - Source Files - - - Source Files - - - - - Header Files - - - Header Files - - - - - - - - Schema Files - - - \ No newline at end of file diff --git a/xsd/dist/examples/cxx/parser/generated/generated-7.1.vcproj b/xsd/dist/examples/cxx/parser/generated/generated-7.1.vcproj deleted file mode 100644 index 0932856..0000000 --- a/xsd/dist/examples/cxx/parser/generated/generated-7.1.vcproj +++ /dev/null @@ -1,168 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/xsd/dist/examples/cxx/parser/generated/generated-8.0.vcproj b/xsd/dist/examples/cxx/parser/generated/generated-8.0.vcproj deleted file mode 100644 index e1c668c..0000000 --- a/xsd/dist/examples/cxx/parser/generated/generated-8.0.vcproj +++ /dev/null @@ -1,427 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/xsd/dist/examples/cxx/parser/generated/generated-9.0.vcproj b/xsd/dist/examples/cxx/parser/generated/generated-9.0.vcproj deleted file mode 100644 index 3025912..0000000 --- a/xsd/dist/examples/cxx/parser/generated/generated-9.0.vcproj +++ /dev/null @@ -1,424 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/xsd/dist/examples/cxx/parser/generated/generated-vc10.vcxproj b/xsd/dist/examples/cxx/parser/generated/generated-vc10.vcxproj new file mode 100644 index 0000000..c20e5be --- /dev/null +++ b/xsd/dist/examples/cxx/parser/generated/generated-vc10.vcxproj @@ -0,0 +1,203 @@ + + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + generated + {4277B39A-C9FB-4F10-8223-8DD38053EDA0} + generated + Win32Proj + + + + Application + MultiByte + + + Application + MultiByte + + + Application + MultiByte + + + Application + MultiByte + + + + + + + + + + + + + + + + + + + driver + driver + driver + driver + Debug\ + Debug\ + true + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + true + Release\ + Release\ + false + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + false + + + + Disabled + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebugDLL + + + Level3 + + + xerces-c_3D.lib;%(AdditionalDependencies) + $(TargetPath) + true + $(OutDir)driver.pdb + Console + false + + + MachineX86 + + + + + X64 + + + Disabled + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebugDLL + + + Level3 + + + xerces-c_3D.lib;%(AdditionalDependencies) + $(TargetPath) + true + $(OutDir)driver.pdb + Console + false + + + MachineX64 + + + + + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreadedDLL + + + Level3 + + + xerces-c_3.lib;%(AdditionalDependencies) + $(TargetPath) + true + Console + true + true + false + + + MachineX86 + + + + + X64 + + + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreadedDLL + + + Level3 + + + xerces-c_3.lib;%(AdditionalDependencies) + $(TargetPath) + true + Console + true + true + false + + + MachineX64 + + + + + + + + + + + + + + xsd library.xsd + xsd cxx-parser --generate-print-impl --generate-test-driver --force-overwrite library.xsd + library-pskel.hxx;library-pskel.cxx;library-pimpl.hxx;library-pimpl.cxx;library-driver.cxx;%(Outputs) + xsd library.xsd + xsd cxx-parser --generate-print-impl --generate-test-driver --force-overwrite library.xsd + library-pskel.hxx;library-pskel.cxx;library-pimpl.hxx;library-pimpl.cxx;library-driver.cxx;%(Outputs) + xsd library.xsd + xsd cxx-parser --generate-print-impl --generate-test-driver --force-overwrite library.xsd + library-pskel.hxx;library-pskel.cxx;library-pimpl.hxx;library-pimpl.cxx;library-driver.cxx;%(Outputs) + xsd library.xsd + xsd cxx-parser --generate-print-impl --generate-test-driver --force-overwrite library.xsd + library-pskel.hxx;library-pskel.cxx;library-pimpl.hxx;library-pimpl.cxx;library-driver.cxx;%(Outputs) + + + + + + + + + \ No newline at end of file diff --git a/xsd/dist/examples/cxx/parser/generated/generated-vc10.vcxproj.filters b/xsd/dist/examples/cxx/parser/generated/generated-vc10.vcxproj.filters new file mode 100644 index 0000000..b2cc277 --- /dev/null +++ b/xsd/dist/examples/cxx/parser/generated/generated-vc10.vcxproj.filters @@ -0,0 +1,44 @@ + + + + + {6241A332-00FB-43D7-8E2D-4277B261F512} + cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {5F7B4073-4744-4C7E-9B74-B5B7D8628B23} + h;hpp;hxx;hm;inl;inc;xsd + + + {64b9ddc3-e796-405a-84e3-6e33b610b7ba} + xsd + + + + + Source Files + + + Source Files + + + Source Files + + + + + Header Files + + + Header Files + + + + + + + + Schema Files + + + \ No newline at end of file diff --git a/xsd/dist/examples/cxx/parser/generated/generated-vc11.vcxproj b/xsd/dist/examples/cxx/parser/generated/generated-vc11.vcxproj new file mode 100644 index 0000000..1df7dd5 --- /dev/null +++ b/xsd/dist/examples/cxx/parser/generated/generated-vc11.vcxproj @@ -0,0 +1,207 @@ + + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + generated + {4277B39A-C9FB-4F10-8223-8DD38053EDA0} + generated + Win32Proj + + + + Application + v110 + MultiByte + + + Application + v110 + MultiByte + + + Application + v110 + MultiByte + + + Application + v110 + MultiByte + + + + + + + + + + + + + + + + + + + driver + driver + driver + driver + Debug\ + Debug\ + true + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + true + Release\ + Release\ + false + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + false + + + + Disabled + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebugDLL + + + Level3 + + + xerces-c_3D.lib;%(AdditionalDependencies) + $(TargetPath) + true + $(OutDir)driver.pdb + Console + false + + + MachineX86 + + + + + X64 + + + Disabled + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebugDLL + + + Level3 + + + xerces-c_3D.lib;%(AdditionalDependencies) + $(TargetPath) + true + $(OutDir)driver.pdb + Console + false + + + MachineX64 + + + + + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreadedDLL + + + Level3 + + + xerces-c_3.lib;%(AdditionalDependencies) + $(TargetPath) + true + Console + true + true + false + + + MachineX86 + + + + + X64 + + + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreadedDLL + + + Level3 + + + xerces-c_3.lib;%(AdditionalDependencies) + $(TargetPath) + true + Console + true + true + false + + + MachineX64 + + + + + + + + + + + + + + xsd library.xsd + xsd cxx-parser --generate-print-impl --generate-test-driver --force-overwrite library.xsd + library-pskel.hxx;library-pskel.cxx;library-pimpl.hxx;library-pimpl.cxx;library-driver.cxx;%(Outputs) + xsd library.xsd + xsd cxx-parser --generate-print-impl --generate-test-driver --force-overwrite library.xsd + library-pskel.hxx;library-pskel.cxx;library-pimpl.hxx;library-pimpl.cxx;library-driver.cxx;%(Outputs) + xsd library.xsd + xsd cxx-parser --generate-print-impl --generate-test-driver --force-overwrite library.xsd + library-pskel.hxx;library-pskel.cxx;library-pimpl.hxx;library-pimpl.cxx;library-driver.cxx;%(Outputs) + xsd library.xsd + xsd cxx-parser --generate-print-impl --generate-test-driver --force-overwrite library.xsd + library-pskel.hxx;library-pskel.cxx;library-pimpl.hxx;library-pimpl.cxx;library-driver.cxx;%(Outputs) + + + + + + + + + \ No newline at end of file diff --git a/xsd/dist/examples/cxx/parser/generated/generated-vc11.vcxproj.filters b/xsd/dist/examples/cxx/parser/generated/generated-vc11.vcxproj.filters new file mode 100644 index 0000000..b2cc277 --- /dev/null +++ b/xsd/dist/examples/cxx/parser/generated/generated-vc11.vcxproj.filters @@ -0,0 +1,44 @@ + + + + + {6241A332-00FB-43D7-8E2D-4277B261F512} + cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {5F7B4073-4744-4C7E-9B74-B5B7D8628B23} + h;hpp;hxx;hm;inl;inc;xsd + + + {64b9ddc3-e796-405a-84e3-6e33b610b7ba} + xsd + + + + + Source Files + + + Source Files + + + Source Files + + + + + Header Files + + + Header Files + + + + + + + + Schema Files + + + \ No newline at end of file diff --git a/xsd/dist/examples/cxx/parser/generated/generated-vc12.vcxproj b/xsd/dist/examples/cxx/parser/generated/generated-vc12.vcxproj new file mode 100644 index 0000000..21bce27 --- /dev/null +++ b/xsd/dist/examples/cxx/parser/generated/generated-vc12.vcxproj @@ -0,0 +1,211 @@ + + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + generated + {4277B39A-C9FB-4F10-8223-8DD38053EDA0} + generated + Win32Proj + + + + Application + v120 + MultiByte + + + Application + v120 + MultiByte + + + Application + v120 + MultiByte + + + Application + v120 + MultiByte + + + + + + + + + + + + + + + + + + + driver + driver + driver + driver + Debug\ + Debug\ + true + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + true + Release\ + Release\ + false + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + false + + + + Disabled + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebugDLL + + + Level3 + true + + + xerces-c_3D.lib;%(AdditionalDependencies) + $(TargetPath) + true + $(OutDir)driver.pdb + Console + false + + + MachineX86 + + + + + X64 + + + Disabled + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebugDLL + + + Level3 + true + + + xerces-c_3D.lib;%(AdditionalDependencies) + $(TargetPath) + true + $(OutDir)driver.pdb + Console + false + + + MachineX64 + + + + + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreadedDLL + + + Level3 + true + + + xerces-c_3.lib;%(AdditionalDependencies) + $(TargetPath) + true + Console + true + true + false + + + MachineX86 + + + + + X64 + + + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreadedDLL + + + Level3 + true + + + xerces-c_3.lib;%(AdditionalDependencies) + $(TargetPath) + true + Console + true + true + false + + + MachineX64 + + + + + + + + + + + + + + xsd library.xsd + xsd cxx-parser --generate-print-impl --generate-test-driver --force-overwrite library.xsd + library-pskel.hxx;library-pskel.cxx;library-pimpl.hxx;library-pimpl.cxx;library-driver.cxx;%(Outputs) + xsd library.xsd + xsd cxx-parser --generate-print-impl --generate-test-driver --force-overwrite library.xsd + library-pskel.hxx;library-pskel.cxx;library-pimpl.hxx;library-pimpl.cxx;library-driver.cxx;%(Outputs) + xsd library.xsd + xsd cxx-parser --generate-print-impl --generate-test-driver --force-overwrite library.xsd + library-pskel.hxx;library-pskel.cxx;library-pimpl.hxx;library-pimpl.cxx;library-driver.cxx;%(Outputs) + xsd library.xsd + xsd cxx-parser --generate-print-impl --generate-test-driver --force-overwrite library.xsd + library-pskel.hxx;library-pskel.cxx;library-pimpl.hxx;library-pimpl.cxx;library-driver.cxx;%(Outputs) + + + + + + + + + \ No newline at end of file diff --git a/xsd/dist/examples/cxx/parser/generated/generated-vc12.vcxproj.filters b/xsd/dist/examples/cxx/parser/generated/generated-vc12.vcxproj.filters new file mode 100644 index 0000000..b2cc277 --- /dev/null +++ b/xsd/dist/examples/cxx/parser/generated/generated-vc12.vcxproj.filters @@ -0,0 +1,44 @@ + + + + + {6241A332-00FB-43D7-8E2D-4277B261F512} + cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {5F7B4073-4744-4C7E-9B74-B5B7D8628B23} + h;hpp;hxx;hm;inl;inc;xsd + + + {64b9ddc3-e796-405a-84e3-6e33b610b7ba} + xsd + + + + + Source Files + + + Source Files + + + Source Files + + + + + Header Files + + + Header Files + + + + + + + + Schema Files + + + \ No newline at end of file diff --git a/xsd/dist/examples/cxx/parser/generated/generated-vc8.vcproj b/xsd/dist/examples/cxx/parser/generated/generated-vc8.vcproj new file mode 100644 index 0000000..ee4e0f6 --- /dev/null +++ b/xsd/dist/examples/cxx/parser/generated/generated-vc8.vcproj @@ -0,0 +1,427 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/xsd/dist/examples/cxx/parser/generated/generated-vc9.vcproj b/xsd/dist/examples/cxx/parser/generated/generated-vc9.vcproj new file mode 100644 index 0000000..2ffc6dd --- /dev/null +++ b/xsd/dist/examples/cxx/parser/generated/generated-vc9.vcproj @@ -0,0 +1,424 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/xsd/dist/examples/cxx/parser/generated/generated-xerces2-7.1.vcproj b/xsd/dist/examples/cxx/parser/generated/generated-xerces2-7.1.vcproj deleted file mode 100644 index caf31bb..0000000 --- a/xsd/dist/examples/cxx/parser/generated/generated-xerces2-7.1.vcproj +++ /dev/null @@ -1,168 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/xsd/dist/examples/cxx/parser/generated/generated-xerces2-8.0.vcproj b/xsd/dist/examples/cxx/parser/generated/generated-xerces2-8.0.vcproj deleted file mode 100644 index 14867aa..0000000 --- a/xsd/dist/examples/cxx/parser/generated/generated-xerces2-8.0.vcproj +++ /dev/null @@ -1,427 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/xsd/dist/examples/cxx/parser/generated/generated-xerces2-9.0.vcproj b/xsd/dist/examples/cxx/parser/generated/generated-xerces2-9.0.vcproj deleted file mode 100644 index 3cefb45..0000000 --- a/xsd/dist/examples/cxx/parser/generated/generated-xerces2-9.0.vcproj +++ /dev/null @@ -1,424 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/xsd/dist/examples/cxx/parser/hello/hello-10.0.vcxproj b/xsd/dist/examples/cxx/parser/hello/hello-10.0.vcxproj deleted file mode 100644 index cedf9e0..0000000 --- a/xsd/dist/examples/cxx/parser/hello/hello-10.0.vcxproj +++ /dev/null @@ -1,205 +0,0 @@ - - - - - Debug - Win32 - - - Debug - x64 - - - Release - Win32 - - - Release - x64 - - - - hello - {683E9D46-FCC7-4163-984B-9F399169CF7F} - hello - Win32Proj - - - - Application - MultiByte - - - Application - MultiByte - - - Application - MultiByte - - - Application - MultiByte - - - - - - - - - - - - - - - - - - - driver - driver - driver - driver - Debug\ - Debug\ - true - $(Platform)\$(Configuration)\ - $(Platform)\$(Configuration)\ - true - Release\ - Release\ - false - $(Platform)\$(Configuration)\ - $(Platform)\$(Configuration)\ - false - - - - Disabled - WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebug - - - Level3 - EditAndContinue - - - xerces-c_3D.lib;%(AdditionalDependencies) - $(TargetPath) - true - $(OutDir)driver.pdb - Console - false - - - MachineX86 - - - - - X64 - - - Disabled - WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebug - - - Level3 - ProgramDatabase - - - xerces-c_3D.lib;%(AdditionalDependencies) - $(TargetPath) - true - $(OutDir)driver.pdb - Console - false - - - MachineX64 - - - - - WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - MultiThreaded - - - Level3 - ProgramDatabase - - - xerces-c_3.lib;%(AdditionalDependencies) - $(TargetPath) - true - Console - true - true - false - - - MachineX86 - - - - - X64 - - - WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - MultiThreaded - - - Level3 - ProgramDatabase - - - xerces-c_3.lib;%(AdditionalDependencies) - $(TargetPath) - true - Console - true - true - false - - - MachineX64 - - - - - - - - - - - - xsd hello.xsd - xsd cxx-parser hello.xsd - hello-pskel.hxx;hello-pskel.cxx;%(Outputs) - xsd hello.xsd - xsd cxx-parser hello.xsd - hello-pskel.hxx;hello-pskel.cxx;%(Outputs) - xsd hello.xsd - xsd cxx-parser hello.xsd - hello-pskel.hxx;hello-pskel.cxx;%(Outputs) - xsd hello.xsd - xsd cxx-parser hello.xsd - hello-pskel.hxx;hello-pskel.cxx;%(Outputs) - - - - - - - - - \ No newline at end of file diff --git a/xsd/dist/examples/cxx/parser/hello/hello-10.0.vcxproj.filters b/xsd/dist/examples/cxx/parser/hello/hello-10.0.vcxproj.filters deleted file mode 100644 index 26513bb..0000000 --- a/xsd/dist/examples/cxx/parser/hello/hello-10.0.vcxproj.filters +++ /dev/null @@ -1,38 +0,0 @@ - - - - - {E9BF8C86-0B39-4E45-81D2-35AD75F02C5C} - cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx - - - {3490E63E-27F8-4E29-996F-79F99714DDB3} - h;hpp;hxx;hm;inl;inc;xsd - - - {338ac052-a215-4fe4-a66b-f6be21b5ffa4} - xsd - - - - - Source Files - - - Source Files - - - - - Header Files - - - - - - - - Schema Files - - - \ No newline at end of file diff --git a/xsd/dist/examples/cxx/parser/hello/hello-7.1.vcproj b/xsd/dist/examples/cxx/parser/hello/hello-7.1.vcproj deleted file mode 100644 index d0f5ca5..0000000 --- a/xsd/dist/examples/cxx/parser/hello/hello-7.1.vcproj +++ /dev/null @@ -1,162 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/xsd/dist/examples/cxx/parser/hello/hello-8.0.vcproj b/xsd/dist/examples/cxx/parser/hello/hello-8.0.vcproj deleted file mode 100644 index 841e602..0000000 --- a/xsd/dist/examples/cxx/parser/hello/hello-8.0.vcproj +++ /dev/null @@ -1,419 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/xsd/dist/examples/cxx/parser/hello/hello-9.0.vcproj b/xsd/dist/examples/cxx/parser/hello/hello-9.0.vcproj deleted file mode 100644 index 6223e65..0000000 --- a/xsd/dist/examples/cxx/parser/hello/hello-9.0.vcproj +++ /dev/null @@ -1,416 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/xsd/dist/examples/cxx/parser/hello/hello-vc10.vcxproj b/xsd/dist/examples/cxx/parser/hello/hello-vc10.vcxproj new file mode 100644 index 0000000..8478a29 --- /dev/null +++ b/xsd/dist/examples/cxx/parser/hello/hello-vc10.vcxproj @@ -0,0 +1,201 @@ + + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + hello + {683E9D46-FCC7-4163-984B-9F399169CF7F} + hello + Win32Proj + + + + Application + MultiByte + + + Application + MultiByte + + + Application + MultiByte + + + Application + MultiByte + + + + + + + + + + + + + + + + + + + driver + driver + driver + driver + Debug\ + Debug\ + true + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + true + Release\ + Release\ + false + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + false + + + + Disabled + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebugDLL + + + Level3 + + + xerces-c_3D.lib;%(AdditionalDependencies) + $(TargetPath) + true + $(OutDir)driver.pdb + Console + false + + + MachineX86 + + + + + X64 + + + Disabled + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebugDLL + + + Level3 + + + xerces-c_3D.lib;%(AdditionalDependencies) + $(TargetPath) + true + $(OutDir)driver.pdb + Console + false + + + MachineX64 + + + + + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreadedDLL + + + Level3 + + + xerces-c_3.lib;%(AdditionalDependencies) + $(TargetPath) + true + Console + true + true + false + + + MachineX86 + + + + + X64 + + + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreadedDLL + + + Level3 + + + xerces-c_3.lib;%(AdditionalDependencies) + $(TargetPath) + true + Console + true + true + false + + + MachineX64 + + + + + + + + + + + + xsd hello.xsd + xsd cxx-parser hello.xsd + hello-pskel.hxx;hello-pskel.cxx;%(Outputs) + xsd hello.xsd + xsd cxx-parser hello.xsd + hello-pskel.hxx;hello-pskel.cxx;%(Outputs) + xsd hello.xsd + xsd cxx-parser hello.xsd + hello-pskel.hxx;hello-pskel.cxx;%(Outputs) + xsd hello.xsd + xsd cxx-parser hello.xsd + hello-pskel.hxx;hello-pskel.cxx;%(Outputs) + + + + + + + + + \ No newline at end of file diff --git a/xsd/dist/examples/cxx/parser/hello/hello-vc10.vcxproj.filters b/xsd/dist/examples/cxx/parser/hello/hello-vc10.vcxproj.filters new file mode 100644 index 0000000..26513bb --- /dev/null +++ b/xsd/dist/examples/cxx/parser/hello/hello-vc10.vcxproj.filters @@ -0,0 +1,38 @@ + + + + + {E9BF8C86-0B39-4E45-81D2-35AD75F02C5C} + cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {3490E63E-27F8-4E29-996F-79F99714DDB3} + h;hpp;hxx;hm;inl;inc;xsd + + + {338ac052-a215-4fe4-a66b-f6be21b5ffa4} + xsd + + + + + Source Files + + + Source Files + + + + + Header Files + + + + + + + + Schema Files + + + \ No newline at end of file diff --git a/xsd/dist/examples/cxx/parser/hello/hello-vc11.vcxproj b/xsd/dist/examples/cxx/parser/hello/hello-vc11.vcxproj new file mode 100644 index 0000000..48a41ac --- /dev/null +++ b/xsd/dist/examples/cxx/parser/hello/hello-vc11.vcxproj @@ -0,0 +1,205 @@ + + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + hello + {683E9D46-FCC7-4163-984B-9F399169CF7F} + hello + Win32Proj + + + + Application + v110 + MultiByte + + + Application + v110 + MultiByte + + + Application + v110 + MultiByte + + + Application + v110 + MultiByte + + + + + + + + + + + + + + + + + + + driver + driver + driver + driver + Debug\ + Debug\ + true + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + true + Release\ + Release\ + false + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + false + + + + Disabled + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebugDLL + + + Level3 + + + xerces-c_3D.lib;%(AdditionalDependencies) + $(TargetPath) + true + $(OutDir)driver.pdb + Console + false + + + MachineX86 + + + + + X64 + + + Disabled + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebugDLL + + + Level3 + + + xerces-c_3D.lib;%(AdditionalDependencies) + $(TargetPath) + true + $(OutDir)driver.pdb + Console + false + + + MachineX64 + + + + + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreadedDLL + + + Level3 + + + xerces-c_3.lib;%(AdditionalDependencies) + $(TargetPath) + true + Console + true + true + false + + + MachineX86 + + + + + X64 + + + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreadedDLL + + + Level3 + + + xerces-c_3.lib;%(AdditionalDependencies) + $(TargetPath) + true + Console + true + true + false + + + MachineX64 + + + + + + + + + + + + xsd hello.xsd + xsd cxx-parser hello.xsd + hello-pskel.hxx;hello-pskel.cxx;%(Outputs) + xsd hello.xsd + xsd cxx-parser hello.xsd + hello-pskel.hxx;hello-pskel.cxx;%(Outputs) + xsd hello.xsd + xsd cxx-parser hello.xsd + hello-pskel.hxx;hello-pskel.cxx;%(Outputs) + xsd hello.xsd + xsd cxx-parser hello.xsd + hello-pskel.hxx;hello-pskel.cxx;%(Outputs) + + + + + + + + + \ No newline at end of file diff --git a/xsd/dist/examples/cxx/parser/hello/hello-vc11.vcxproj.filters b/xsd/dist/examples/cxx/parser/hello/hello-vc11.vcxproj.filters new file mode 100644 index 0000000..26513bb --- /dev/null +++ b/xsd/dist/examples/cxx/parser/hello/hello-vc11.vcxproj.filters @@ -0,0 +1,38 @@ + + + + + {E9BF8C86-0B39-4E45-81D2-35AD75F02C5C} + cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {3490E63E-27F8-4E29-996F-79F99714DDB3} + h;hpp;hxx;hm;inl;inc;xsd + + + {338ac052-a215-4fe4-a66b-f6be21b5ffa4} + xsd + + + + + Source Files + + + Source Files + + + + + Header Files + + + + + + + + Schema Files + + + \ No newline at end of file diff --git a/xsd/dist/examples/cxx/parser/hello/hello-vc12.vcxproj b/xsd/dist/examples/cxx/parser/hello/hello-vc12.vcxproj new file mode 100644 index 0000000..22ac525 --- /dev/null +++ b/xsd/dist/examples/cxx/parser/hello/hello-vc12.vcxproj @@ -0,0 +1,209 @@ + + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + hello + {683E9D46-FCC7-4163-984B-9F399169CF7F} + hello + Win32Proj + + + + Application + v120 + MultiByte + + + Application + v120 + MultiByte + + + Application + v120 + MultiByte + + + Application + v120 + MultiByte + + + + + + + + + + + + + + + + + + + driver + driver + driver + driver + Debug\ + Debug\ + true + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + true + Release\ + Release\ + false + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + false + + + + Disabled + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebugDLL + + + Level3 + true + + + xerces-c_3D.lib;%(AdditionalDependencies) + $(TargetPath) + true + $(OutDir)driver.pdb + Console + false + + + MachineX86 + + + + + X64 + + + Disabled + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebugDLL + + + Level3 + true + + + xerces-c_3D.lib;%(AdditionalDependencies) + $(TargetPath) + true + $(OutDir)driver.pdb + Console + false + + + MachineX64 + + + + + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreadedDLL + + + Level3 + true + + + xerces-c_3.lib;%(AdditionalDependencies) + $(TargetPath) + true + Console + true + true + false + + + MachineX86 + + + + + X64 + + + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreadedDLL + + + Level3 + true + + + xerces-c_3.lib;%(AdditionalDependencies) + $(TargetPath) + true + Console + true + true + false + + + MachineX64 + + + + + + + + + + + + xsd hello.xsd + xsd cxx-parser hello.xsd + hello-pskel.hxx;hello-pskel.cxx;%(Outputs) + xsd hello.xsd + xsd cxx-parser hello.xsd + hello-pskel.hxx;hello-pskel.cxx;%(Outputs) + xsd hello.xsd + xsd cxx-parser hello.xsd + hello-pskel.hxx;hello-pskel.cxx;%(Outputs) + xsd hello.xsd + xsd cxx-parser hello.xsd + hello-pskel.hxx;hello-pskel.cxx;%(Outputs) + + + + + + + + + \ No newline at end of file diff --git a/xsd/dist/examples/cxx/parser/hello/hello-vc12.vcxproj.filters b/xsd/dist/examples/cxx/parser/hello/hello-vc12.vcxproj.filters new file mode 100644 index 0000000..26513bb --- /dev/null +++ b/xsd/dist/examples/cxx/parser/hello/hello-vc12.vcxproj.filters @@ -0,0 +1,38 @@ + + + + + {E9BF8C86-0B39-4E45-81D2-35AD75F02C5C} + cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {3490E63E-27F8-4E29-996F-79F99714DDB3} + h;hpp;hxx;hm;inl;inc;xsd + + + {338ac052-a215-4fe4-a66b-f6be21b5ffa4} + xsd + + + + + Source Files + + + Source Files + + + + + Header Files + + + + + + + + Schema Files + + + \ No newline at end of file diff --git a/xsd/dist/examples/cxx/parser/hello/hello-vc8.vcproj b/xsd/dist/examples/cxx/parser/hello/hello-vc8.vcproj new file mode 100644 index 0000000..a19fb43 --- /dev/null +++ b/xsd/dist/examples/cxx/parser/hello/hello-vc8.vcproj @@ -0,0 +1,419 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/xsd/dist/examples/cxx/parser/hello/hello-vc9.vcproj b/xsd/dist/examples/cxx/parser/hello/hello-vc9.vcproj new file mode 100644 index 0000000..9d0e755 --- /dev/null +++ b/xsd/dist/examples/cxx/parser/hello/hello-vc9.vcproj @@ -0,0 +1,416 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/xsd/dist/examples/cxx/parser/hello/hello-xerces2-7.1.vcproj b/xsd/dist/examples/cxx/parser/hello/hello-xerces2-7.1.vcproj deleted file mode 100644 index 51b3bdf..0000000 --- a/xsd/dist/examples/cxx/parser/hello/hello-xerces2-7.1.vcproj +++ /dev/null @@ -1,162 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/xsd/dist/examples/cxx/parser/hello/hello-xerces2-8.0.vcproj b/xsd/dist/examples/cxx/parser/hello/hello-xerces2-8.0.vcproj deleted file mode 100644 index ae0a8a9..0000000 --- a/xsd/dist/examples/cxx/parser/hello/hello-xerces2-8.0.vcproj +++ /dev/null @@ -1,419 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/xsd/dist/examples/cxx/parser/hello/hello-xerces2-9.0.vcproj b/xsd/dist/examples/cxx/parser/hello/hello-xerces2-9.0.vcproj deleted file mode 100644 index fb407b9..0000000 --- a/xsd/dist/examples/cxx/parser/hello/hello-xerces2-9.0.vcproj +++ /dev/null @@ -1,416 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/xsd/dist/examples/cxx/parser/library/library-10.0.vcxproj b/xsd/dist/examples/cxx/parser/library/library-10.0.vcxproj deleted file mode 100644 index 2366880..0000000 --- a/xsd/dist/examples/cxx/parser/library/library-10.0.vcxproj +++ /dev/null @@ -1,209 +0,0 @@ - - - - - Debug - Win32 - - - Debug - x64 - - - Release - Win32 - - - Release - x64 - - - - library - {D66DAC4D-133C-4DB5-923F-C88A961C3C51} - library - Win32Proj - - - - Application - MultiByte - - - Application - MultiByte - - - Application - MultiByte - - - Application - MultiByte - - - - - - - - - - - - - - - - - - - driver - driver - driver - driver - Debug\ - Debug\ - true - $(Platform)\$(Configuration)\ - $(Platform)\$(Configuration)\ - true - Release\ - Release\ - false - $(Platform)\$(Configuration)\ - $(Platform)\$(Configuration)\ - false - - - - Disabled - WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebug - - - Level3 - EditAndContinue - - - xerces-c_3D.lib;%(AdditionalDependencies) - $(TargetPath) - true - $(OutDir)driver.pdb - Console - false - - - MachineX86 - - - - - X64 - - - Disabled - WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebug - - - Level3 - ProgramDatabase - - - xerces-c_3D.lib;%(AdditionalDependencies) - $(TargetPath) - true - $(OutDir)driver.pdb - Console - false - - - MachineX64 - - - - - WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - MultiThreaded - - - Level3 - ProgramDatabase - - - xerces-c_3.lib;%(AdditionalDependencies) - $(TargetPath) - true - Console - true - true - false - - - MachineX86 - - - - - X64 - - - WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - MultiThreaded - - - Level3 - ProgramDatabase - - - xerces-c_3.lib;%(AdditionalDependencies) - $(TargetPath) - true - Console - true - true - false - - - MachineX64 - - - - - - - - - - - - - - - - - - - xsd library.xsd - xsd cxx-parser --generate-inline --type-map library.map library.xsd - library-pskel.hxx;library-pskel.ixx;library-pskel.cxx;%(Outputs) - xsd library.xsd - xsd cxx-parser --generate-inline --type-map library.map library.xsd - library-pskel.hxx;library-pskel.ixx;library-pskel.cxx;%(Outputs) - xsd library.xsd - xsd cxx-parser --generate-inline --type-map library.map library.xsd - library-pskel.hxx;library-pskel.ixx;library-pskel.cxx;%(Outputs) - xsd library.xsd - xsd cxx-parser --generate-inline --type-map library.map library.xsd - library-pskel.hxx;library-pskel.ixx;library-pskel.cxx;%(Outputs) - - - - - - \ No newline at end of file diff --git a/xsd/dist/examples/cxx/parser/library/library-10.0.vcxproj.filters b/xsd/dist/examples/cxx/parser/library/library-10.0.vcxproj.filters deleted file mode 100644 index 30f473b..0000000 --- a/xsd/dist/examples/cxx/parser/library/library-10.0.vcxproj.filters +++ /dev/null @@ -1,54 +0,0 @@ - - - - - {4044D311-878E-4632-B816-7810045EF3F1} - cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx - - - {4F90DEB0-060B-4976-949A-66FFB902F598} - h;hpp;hxx;hm;inl;inc;xsd - - - {a31fd2f2-4ce6-4ee0-962d-68d213bc7b1b} - ixx - - - {8e9fd809-af45-49e4-95b8-d2becff77db5} - xsd - - - - - Source Files - - - Source Files - - - Source Files - - - - - Header Files - - - Header Files - - - Header Files - - - - - Inline Files - - - - - - Schema Files - - - \ No newline at end of file diff --git a/xsd/dist/examples/cxx/parser/library/library-7.1.vcproj b/xsd/dist/examples/cxx/parser/library/library-7.1.vcproj deleted file mode 100644 index 98dce27..0000000 --- a/xsd/dist/examples/cxx/parser/library/library-7.1.vcproj +++ /dev/null @@ -1,178 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/xsd/dist/examples/cxx/parser/library/library-8.0.vcproj b/xsd/dist/examples/cxx/parser/library/library-8.0.vcproj deleted file mode 100644 index bb45f42..0000000 --- a/xsd/dist/examples/cxx/parser/library/library-8.0.vcproj +++ /dev/null @@ -1,440 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/xsd/dist/examples/cxx/parser/library/library-9.0.vcproj b/xsd/dist/examples/cxx/parser/library/library-9.0.vcproj deleted file mode 100644 index 93c9f6c..0000000 --- a/xsd/dist/examples/cxx/parser/library/library-9.0.vcproj +++ /dev/null @@ -1,437 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/xsd/dist/examples/cxx/parser/library/library-vc10.vcxproj b/xsd/dist/examples/cxx/parser/library/library-vc10.vcxproj new file mode 100644 index 0000000..c9046d7 --- /dev/null +++ b/xsd/dist/examples/cxx/parser/library/library-vc10.vcxproj @@ -0,0 +1,205 @@ + + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + library + {D66DAC4D-133C-4DB5-923F-C88A961C3C51} + library + Win32Proj + + + + Application + MultiByte + + + Application + MultiByte + + + Application + MultiByte + + + Application + MultiByte + + + + + + + + + + + + + + + + + + + driver + driver + driver + driver + Debug\ + Debug\ + true + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + true + Release\ + Release\ + false + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + false + + + + Disabled + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebugDLL + + + Level3 + + + xerces-c_3D.lib;%(AdditionalDependencies) + $(TargetPath) + true + $(OutDir)driver.pdb + Console + false + + + MachineX86 + + + + + X64 + + + Disabled + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebugDLL + + + Level3 + + + xerces-c_3D.lib;%(AdditionalDependencies) + $(TargetPath) + true + $(OutDir)driver.pdb + Console + false + + + MachineX64 + + + + + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreadedDLL + + + Level3 + + + xerces-c_3.lib;%(AdditionalDependencies) + $(TargetPath) + true + Console + true + true + false + + + MachineX86 + + + + + X64 + + + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreadedDLL + + + Level3 + + + xerces-c_3.lib;%(AdditionalDependencies) + $(TargetPath) + true + Console + true + true + false + + + MachineX64 + + + + + + + + + + + + + + + + + + + xsd library.xsd + xsd cxx-parser --generate-inline --type-map library.map library.xsd + library-pskel.hxx;library-pskel.ixx;library-pskel.cxx;%(Outputs) + xsd library.xsd + xsd cxx-parser --generate-inline --type-map library.map library.xsd + library-pskel.hxx;library-pskel.ixx;library-pskel.cxx;%(Outputs) + xsd library.xsd + xsd cxx-parser --generate-inline --type-map library.map library.xsd + library-pskel.hxx;library-pskel.ixx;library-pskel.cxx;%(Outputs) + xsd library.xsd + xsd cxx-parser --generate-inline --type-map library.map library.xsd + library-pskel.hxx;library-pskel.ixx;library-pskel.cxx;%(Outputs) + + + + + + \ No newline at end of file diff --git a/xsd/dist/examples/cxx/parser/library/library-vc10.vcxproj.filters b/xsd/dist/examples/cxx/parser/library/library-vc10.vcxproj.filters new file mode 100644 index 0000000..30f473b --- /dev/null +++ b/xsd/dist/examples/cxx/parser/library/library-vc10.vcxproj.filters @@ -0,0 +1,54 @@ + + + + + {4044D311-878E-4632-B816-7810045EF3F1} + cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {4F90DEB0-060B-4976-949A-66FFB902F598} + h;hpp;hxx;hm;inl;inc;xsd + + + {a31fd2f2-4ce6-4ee0-962d-68d213bc7b1b} + ixx + + + {8e9fd809-af45-49e4-95b8-d2becff77db5} + xsd + + + + + Source Files + + + Source Files + + + Source Files + + + + + Header Files + + + Header Files + + + Header Files + + + + + Inline Files + + + + + + Schema Files + + + \ No newline at end of file diff --git a/xsd/dist/examples/cxx/parser/library/library-vc11.vcxproj b/xsd/dist/examples/cxx/parser/library/library-vc11.vcxproj new file mode 100644 index 0000000..daa5ef3 --- /dev/null +++ b/xsd/dist/examples/cxx/parser/library/library-vc11.vcxproj @@ -0,0 +1,209 @@ + + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + library + {D66DAC4D-133C-4DB5-923F-C88A961C3C51} + library + Win32Proj + + + + Application + v110 + MultiByte + + + Application + v110 + MultiByte + + + Application + v110 + MultiByte + + + Application + v110 + MultiByte + + + + + + + + + + + + + + + + + + + driver + driver + driver + driver + Debug\ + Debug\ + true + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + true + Release\ + Release\ + false + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + false + + + + Disabled + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebugDLL + + + Level3 + + + xerces-c_3D.lib;%(AdditionalDependencies) + $(TargetPath) + true + $(OutDir)driver.pdb + Console + false + + + MachineX86 + + + + + X64 + + + Disabled + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebugDLL + + + Level3 + + + xerces-c_3D.lib;%(AdditionalDependencies) + $(TargetPath) + true + $(OutDir)driver.pdb + Console + false + + + MachineX64 + + + + + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreadedDLL + + + Level3 + + + xerces-c_3.lib;%(AdditionalDependencies) + $(TargetPath) + true + Console + true + true + false + + + MachineX86 + + + + + X64 + + + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreadedDLL + + + Level3 + + + xerces-c_3.lib;%(AdditionalDependencies) + $(TargetPath) + true + Console + true + true + false + + + MachineX64 + + + + + + + + + + + + + + + + + + + xsd library.xsd + xsd cxx-parser --generate-inline --type-map library.map library.xsd + library-pskel.hxx;library-pskel.ixx;library-pskel.cxx;%(Outputs) + xsd library.xsd + xsd cxx-parser --generate-inline --type-map library.map library.xsd + library-pskel.hxx;library-pskel.ixx;library-pskel.cxx;%(Outputs) + xsd library.xsd + xsd cxx-parser --generate-inline --type-map library.map library.xsd + library-pskel.hxx;library-pskel.ixx;library-pskel.cxx;%(Outputs) + xsd library.xsd + xsd cxx-parser --generate-inline --type-map library.map library.xsd + library-pskel.hxx;library-pskel.ixx;library-pskel.cxx;%(Outputs) + + + + + + \ No newline at end of file diff --git a/xsd/dist/examples/cxx/parser/library/library-vc11.vcxproj.filters b/xsd/dist/examples/cxx/parser/library/library-vc11.vcxproj.filters new file mode 100644 index 0000000..30f473b --- /dev/null +++ b/xsd/dist/examples/cxx/parser/library/library-vc11.vcxproj.filters @@ -0,0 +1,54 @@ + + + + + {4044D311-878E-4632-B816-7810045EF3F1} + cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {4F90DEB0-060B-4976-949A-66FFB902F598} + h;hpp;hxx;hm;inl;inc;xsd + + + {a31fd2f2-4ce6-4ee0-962d-68d213bc7b1b} + ixx + + + {8e9fd809-af45-49e4-95b8-d2becff77db5} + xsd + + + + + Source Files + + + Source Files + + + Source Files + + + + + Header Files + + + Header Files + + + Header Files + + + + + Inline Files + + + + + + Schema Files + + + \ No newline at end of file diff --git a/xsd/dist/examples/cxx/parser/library/library-vc12.vcxproj b/xsd/dist/examples/cxx/parser/library/library-vc12.vcxproj new file mode 100644 index 0000000..345226f --- /dev/null +++ b/xsd/dist/examples/cxx/parser/library/library-vc12.vcxproj @@ -0,0 +1,213 @@ + + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + library + {D66DAC4D-133C-4DB5-923F-C88A961C3C51} + library + Win32Proj + + + + Application + v120 + MultiByte + + + Application + v120 + MultiByte + + + Application + v120 + MultiByte + + + Application + v120 + MultiByte + + + + + + + + + + + + + + + + + + + driver + driver + driver + driver + Debug\ + Debug\ + true + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + true + Release\ + Release\ + false + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + false + + + + Disabled + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebugDLL + + + Level3 + true + + + xerces-c_3D.lib;%(AdditionalDependencies) + $(TargetPath) + true + $(OutDir)driver.pdb + Console + false + + + MachineX86 + + + + + X64 + + + Disabled + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebugDLL + + + Level3 + true + + + xerces-c_3D.lib;%(AdditionalDependencies) + $(TargetPath) + true + $(OutDir)driver.pdb + Console + false + + + MachineX64 + + + + + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreadedDLL + + + Level3 + true + + + xerces-c_3.lib;%(AdditionalDependencies) + $(TargetPath) + true + Console + true + true + false + + + MachineX86 + + + + + X64 + + + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreadedDLL + + + Level3 + true + + + xerces-c_3.lib;%(AdditionalDependencies) + $(TargetPath) + true + Console + true + true + false + + + MachineX64 + + + + + + + + + + + + + + + + + + + xsd library.xsd + xsd cxx-parser --generate-inline --type-map library.map library.xsd + library-pskel.hxx;library-pskel.ixx;library-pskel.cxx;%(Outputs) + xsd library.xsd + xsd cxx-parser --generate-inline --type-map library.map library.xsd + library-pskel.hxx;library-pskel.ixx;library-pskel.cxx;%(Outputs) + xsd library.xsd + xsd cxx-parser --generate-inline --type-map library.map library.xsd + library-pskel.hxx;library-pskel.ixx;library-pskel.cxx;%(Outputs) + xsd library.xsd + xsd cxx-parser --generate-inline --type-map library.map library.xsd + library-pskel.hxx;library-pskel.ixx;library-pskel.cxx;%(Outputs) + + + + + + \ No newline at end of file diff --git a/xsd/dist/examples/cxx/parser/library/library-vc12.vcxproj.filters b/xsd/dist/examples/cxx/parser/library/library-vc12.vcxproj.filters new file mode 100644 index 0000000..30f473b --- /dev/null +++ b/xsd/dist/examples/cxx/parser/library/library-vc12.vcxproj.filters @@ -0,0 +1,54 @@ + + + + + {4044D311-878E-4632-B816-7810045EF3F1} + cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {4F90DEB0-060B-4976-949A-66FFB902F598} + h;hpp;hxx;hm;inl;inc;xsd + + + {a31fd2f2-4ce6-4ee0-962d-68d213bc7b1b} + ixx + + + {8e9fd809-af45-49e4-95b8-d2becff77db5} + xsd + + + + + Source Files + + + Source Files + + + Source Files + + + + + Header Files + + + Header Files + + + Header Files + + + + + Inline Files + + + + + + Schema Files + + + \ No newline at end of file diff --git a/xsd/dist/examples/cxx/parser/library/library-vc8.vcproj b/xsd/dist/examples/cxx/parser/library/library-vc8.vcproj new file mode 100644 index 0000000..f5bb549 --- /dev/null +++ b/xsd/dist/examples/cxx/parser/library/library-vc8.vcproj @@ -0,0 +1,440 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/xsd/dist/examples/cxx/parser/library/library-vc9.vcproj b/xsd/dist/examples/cxx/parser/library/library-vc9.vcproj new file mode 100644 index 0000000..1348f83 --- /dev/null +++ b/xsd/dist/examples/cxx/parser/library/library-vc9.vcproj @@ -0,0 +1,437 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/xsd/dist/examples/cxx/parser/library/library-xerces2-7.1.vcproj b/xsd/dist/examples/cxx/parser/library/library-xerces2-7.1.vcproj deleted file mode 100644 index 7585fea..0000000 --- a/xsd/dist/examples/cxx/parser/library/library-xerces2-7.1.vcproj +++ /dev/null @@ -1,178 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/xsd/dist/examples/cxx/parser/library/library-xerces2-8.0.vcproj b/xsd/dist/examples/cxx/parser/library/library-xerces2-8.0.vcproj deleted file mode 100644 index 6bd700b..0000000 --- a/xsd/dist/examples/cxx/parser/library/library-xerces2-8.0.vcproj +++ /dev/null @@ -1,440 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/xsd/dist/examples/cxx/parser/library/library-xerces2-9.0.vcproj b/xsd/dist/examples/cxx/parser/library/library-xerces2-9.0.vcproj deleted file mode 100644 index 0364547..0000000 --- a/xsd/dist/examples/cxx/parser/library/library-xerces2-9.0.vcproj +++ /dev/null @@ -1,437 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/xsd/dist/examples/cxx/parser/mixed/mixed-10.0.vcxproj b/xsd/dist/examples/cxx/parser/mixed/mixed-10.0.vcxproj deleted file mode 100644 index 8342e03..0000000 --- a/xsd/dist/examples/cxx/parser/mixed/mixed-10.0.vcxproj +++ /dev/null @@ -1,206 +0,0 @@ - - - - - Debug - Win32 - - - Debug - x64 - - - Release - Win32 - - - Release - x64 - - - - mixed - {304FD6A7-6C73-41C3-B489-97FD5E635CCB} - mixed - Win32Proj - - - - Application - MultiByte - - - Application - MultiByte - - - Application - MultiByte - - - Application - MultiByte - - - - - - - - - - - - - - - - - - - driver - driver - driver - driver - Debug\ - Debug\ - true - $(Platform)\$(Configuration)\ - $(Platform)\$(Configuration)\ - true - Release\ - Release\ - false - $(Platform)\$(Configuration)\ - $(Platform)\$(Configuration)\ - false - - - - Disabled - WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebug - - - Level3 - EditAndContinue - - - xerces-c_3D.lib;%(AdditionalDependencies) - $(TargetPath) - true - $(OutDir)driver.pdb - Console - false - - - MachineX86 - - - - - X64 - - - Disabled - WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebug - - - Level3 - ProgramDatabase - - - xerces-c_3D.lib;%(AdditionalDependencies) - $(TargetPath) - true - $(OutDir)driver.pdb - Console - false - - - MachineX64 - - - - - WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - MultiThreaded - - - Level3 - ProgramDatabase - - - xerces-c_3.lib;%(AdditionalDependencies) - $(TargetPath) - true - Console - true - true - false - - - MachineX86 - - - - - X64 - - - WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - MultiThreaded - - - Level3 - ProgramDatabase - - - xerces-c_3.lib;%(AdditionalDependencies) - $(TargetPath) - true - Console - true - true - false - - - MachineX64 - - - - - - - - - - - - - xsd text.xsd - xsd cxx-parser --type-map text.map text.xsd - text-pskel.hxx;text-pskel.cxx;%(Outputs) - xsd text.xsd - xsd cxx-parser --type-map text.map text.xsd - text-pskel.hxx;text-pskel.cxx;%(Outputs) - xsd text.xsd - xsd cxx-parser --type-map text.map text.xsd - text-pskel.hxx;text-pskel.cxx;%(Outputs) - xsd text.xsd - xsd cxx-parser --type-map text.map text.xsd - text-pskel.hxx;text-pskel.cxx;%(Outputs) - - - - - - - - - \ No newline at end of file diff --git a/xsd/dist/examples/cxx/parser/mixed/mixed-10.0.vcxproj.filters b/xsd/dist/examples/cxx/parser/mixed/mixed-10.0.vcxproj.filters deleted file mode 100644 index 9d5bb36..0000000 --- a/xsd/dist/examples/cxx/parser/mixed/mixed-10.0.vcxproj.filters +++ /dev/null @@ -1,41 +0,0 @@ - - - - - {8E9A9B27-1882-4B49-9451-345FEED45AEE} - cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx - - - {0BDCEBD5-F78D-437D-BED5-4507831FA9E8} - h;hpp;hxx;hm;inl;inc;xsd - - - {748ddcb3-bd88-48b4-b396-d1d3fef8a4e6} - xsd - - - - - Source Files - - - Source Files - - - - - Header Files - - - Header Files - - - - - - - - Schema Files - - - \ No newline at end of file diff --git a/xsd/dist/examples/cxx/parser/mixed/mixed-7.1.vcproj b/xsd/dist/examples/cxx/parser/mixed/mixed-7.1.vcproj deleted file mode 100644 index 09f05f1..0000000 --- a/xsd/dist/examples/cxx/parser/mixed/mixed-7.1.vcproj +++ /dev/null @@ -1,165 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/xsd/dist/examples/cxx/parser/mixed/mixed-8.0.vcproj b/xsd/dist/examples/cxx/parser/mixed/mixed-8.0.vcproj deleted file mode 100644 index 7a3a9fc..0000000 --- a/xsd/dist/examples/cxx/parser/mixed/mixed-8.0.vcproj +++ /dev/null @@ -1,423 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/xsd/dist/examples/cxx/parser/mixed/mixed-9.0.vcproj b/xsd/dist/examples/cxx/parser/mixed/mixed-9.0.vcproj deleted file mode 100644 index a283dad..0000000 --- a/xsd/dist/examples/cxx/parser/mixed/mixed-9.0.vcproj +++ /dev/null @@ -1,420 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/xsd/dist/examples/cxx/parser/mixed/mixed-vc10.vcxproj b/xsd/dist/examples/cxx/parser/mixed/mixed-vc10.vcxproj new file mode 100644 index 0000000..d940e8d --- /dev/null +++ b/xsd/dist/examples/cxx/parser/mixed/mixed-vc10.vcxproj @@ -0,0 +1,202 @@ + + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + mixed + {304FD6A7-6C73-41C3-B489-97FD5E635CCB} + mixed + Win32Proj + + + + Application + MultiByte + + + Application + MultiByte + + + Application + MultiByte + + + Application + MultiByte + + + + + + + + + + + + + + + + + + + driver + driver + driver + driver + Debug\ + Debug\ + true + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + true + Release\ + Release\ + false + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + false + + + + Disabled + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebugDLL + + + Level3 + + + xerces-c_3D.lib;%(AdditionalDependencies) + $(TargetPath) + true + $(OutDir)driver.pdb + Console + false + + + MachineX86 + + + + + X64 + + + Disabled + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebugDLL + + + Level3 + + + xerces-c_3D.lib;%(AdditionalDependencies) + $(TargetPath) + true + $(OutDir)driver.pdb + Console + false + + + MachineX64 + + + + + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreadedDLL + + + Level3 + + + xerces-c_3.lib;%(AdditionalDependencies) + $(TargetPath) + true + Console + true + true + false + + + MachineX86 + + + + + X64 + + + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreadedDLL + + + Level3 + + + xerces-c_3.lib;%(AdditionalDependencies) + $(TargetPath) + true + Console + true + true + false + + + MachineX64 + + + + + + + + + + + + + xsd text.xsd + xsd cxx-parser --type-map text.map text.xsd + text-pskel.hxx;text-pskel.cxx;%(Outputs) + xsd text.xsd + xsd cxx-parser --type-map text.map text.xsd + text-pskel.hxx;text-pskel.cxx;%(Outputs) + xsd text.xsd + xsd cxx-parser --type-map text.map text.xsd + text-pskel.hxx;text-pskel.cxx;%(Outputs) + xsd text.xsd + xsd cxx-parser --type-map text.map text.xsd + text-pskel.hxx;text-pskel.cxx;%(Outputs) + + + + + + + + + \ No newline at end of file diff --git a/xsd/dist/examples/cxx/parser/mixed/mixed-vc10.vcxproj.filters b/xsd/dist/examples/cxx/parser/mixed/mixed-vc10.vcxproj.filters new file mode 100644 index 0000000..9d5bb36 --- /dev/null +++ b/xsd/dist/examples/cxx/parser/mixed/mixed-vc10.vcxproj.filters @@ -0,0 +1,41 @@ + + + + + {8E9A9B27-1882-4B49-9451-345FEED45AEE} + cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {0BDCEBD5-F78D-437D-BED5-4507831FA9E8} + h;hpp;hxx;hm;inl;inc;xsd + + + {748ddcb3-bd88-48b4-b396-d1d3fef8a4e6} + xsd + + + + + Source Files + + + Source Files + + + + + Header Files + + + Header Files + + + + + + + + Schema Files + + + \ No newline at end of file diff --git a/xsd/dist/examples/cxx/parser/mixed/mixed-vc11.vcxproj b/xsd/dist/examples/cxx/parser/mixed/mixed-vc11.vcxproj new file mode 100644 index 0000000..00b00a2 --- /dev/null +++ b/xsd/dist/examples/cxx/parser/mixed/mixed-vc11.vcxproj @@ -0,0 +1,206 @@ + + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + mixed + {304FD6A7-6C73-41C3-B489-97FD5E635CCB} + mixed + Win32Proj + + + + Application + v110 + MultiByte + + + Application + v110 + MultiByte + + + Application + v110 + MultiByte + + + Application + v110 + MultiByte + + + + + + + + + + + + + + + + + + + driver + driver + driver + driver + Debug\ + Debug\ + true + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + true + Release\ + Release\ + false + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + false + + + + Disabled + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebugDLL + + + Level3 + + + xerces-c_3D.lib;%(AdditionalDependencies) + $(TargetPath) + true + $(OutDir)driver.pdb + Console + false + + + MachineX86 + + + + + X64 + + + Disabled + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebugDLL + + + Level3 + + + xerces-c_3D.lib;%(AdditionalDependencies) + $(TargetPath) + true + $(OutDir)driver.pdb + Console + false + + + MachineX64 + + + + + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreadedDLL + + + Level3 + + + xerces-c_3.lib;%(AdditionalDependencies) + $(TargetPath) + true + Console + true + true + false + + + MachineX86 + + + + + X64 + + + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreadedDLL + + + Level3 + + + xerces-c_3.lib;%(AdditionalDependencies) + $(TargetPath) + true + Console + true + true + false + + + MachineX64 + + + + + + + + + + + + + xsd text.xsd + xsd cxx-parser --type-map text.map text.xsd + text-pskel.hxx;text-pskel.cxx;%(Outputs) + xsd text.xsd + xsd cxx-parser --type-map text.map text.xsd + text-pskel.hxx;text-pskel.cxx;%(Outputs) + xsd text.xsd + xsd cxx-parser --type-map text.map text.xsd + text-pskel.hxx;text-pskel.cxx;%(Outputs) + xsd text.xsd + xsd cxx-parser --type-map text.map text.xsd + text-pskel.hxx;text-pskel.cxx;%(Outputs) + + + + + + + + + \ No newline at end of file diff --git a/xsd/dist/examples/cxx/parser/mixed/mixed-vc11.vcxproj.filters b/xsd/dist/examples/cxx/parser/mixed/mixed-vc11.vcxproj.filters new file mode 100644 index 0000000..9d5bb36 --- /dev/null +++ b/xsd/dist/examples/cxx/parser/mixed/mixed-vc11.vcxproj.filters @@ -0,0 +1,41 @@ + + + + + {8E9A9B27-1882-4B49-9451-345FEED45AEE} + cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {0BDCEBD5-F78D-437D-BED5-4507831FA9E8} + h;hpp;hxx;hm;inl;inc;xsd + + + {748ddcb3-bd88-48b4-b396-d1d3fef8a4e6} + xsd + + + + + Source Files + + + Source Files + + + + + Header Files + + + Header Files + + + + + + + + Schema Files + + + \ No newline at end of file diff --git a/xsd/dist/examples/cxx/parser/mixed/mixed-vc12.vcxproj b/xsd/dist/examples/cxx/parser/mixed/mixed-vc12.vcxproj new file mode 100644 index 0000000..d9e63ed --- /dev/null +++ b/xsd/dist/examples/cxx/parser/mixed/mixed-vc12.vcxproj @@ -0,0 +1,210 @@ + + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + mixed + {304FD6A7-6C73-41C3-B489-97FD5E635CCB} + mixed + Win32Proj + + + + Application + v120 + MultiByte + + + Application + v120 + MultiByte + + + Application + v120 + MultiByte + + + Application + v120 + MultiByte + + + + + + + + + + + + + + + + + + + driver + driver + driver + driver + Debug\ + Debug\ + true + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + true + Release\ + Release\ + false + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + false + + + + Disabled + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebugDLL + + + Level3 + true + + + xerces-c_3D.lib;%(AdditionalDependencies) + $(TargetPath) + true + $(OutDir)driver.pdb + Console + false + + + MachineX86 + + + + + X64 + + + Disabled + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebugDLL + + + Level3 + true + + + xerces-c_3D.lib;%(AdditionalDependencies) + $(TargetPath) + true + $(OutDir)driver.pdb + Console + false + + + MachineX64 + + + + + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreadedDLL + + + Level3 + true + + + xerces-c_3.lib;%(AdditionalDependencies) + $(TargetPath) + true + Console + true + true + false + + + MachineX86 + + + + + X64 + + + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreadedDLL + + + Level3 + true + + + xerces-c_3.lib;%(AdditionalDependencies) + $(TargetPath) + true + Console + true + true + false + + + MachineX64 + + + + + + + + + + + + + xsd text.xsd + xsd cxx-parser --type-map text.map text.xsd + text-pskel.hxx;text-pskel.cxx;%(Outputs) + xsd text.xsd + xsd cxx-parser --type-map text.map text.xsd + text-pskel.hxx;text-pskel.cxx;%(Outputs) + xsd text.xsd + xsd cxx-parser --type-map text.map text.xsd + text-pskel.hxx;text-pskel.cxx;%(Outputs) + xsd text.xsd + xsd cxx-parser --type-map text.map text.xsd + text-pskel.hxx;text-pskel.cxx;%(Outputs) + + + + + + + + + \ No newline at end of file diff --git a/xsd/dist/examples/cxx/parser/mixed/mixed-vc12.vcxproj.filters b/xsd/dist/examples/cxx/parser/mixed/mixed-vc12.vcxproj.filters new file mode 100644 index 0000000..9d5bb36 --- /dev/null +++ b/xsd/dist/examples/cxx/parser/mixed/mixed-vc12.vcxproj.filters @@ -0,0 +1,41 @@ + + + + + {8E9A9B27-1882-4B49-9451-345FEED45AEE} + cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {0BDCEBD5-F78D-437D-BED5-4507831FA9E8} + h;hpp;hxx;hm;inl;inc;xsd + + + {748ddcb3-bd88-48b4-b396-d1d3fef8a4e6} + xsd + + + + + Source Files + + + Source Files + + + + + Header Files + + + Header Files + + + + + + + + Schema Files + + + \ No newline at end of file diff --git a/xsd/dist/examples/cxx/parser/mixed/mixed-vc8.vcproj b/xsd/dist/examples/cxx/parser/mixed/mixed-vc8.vcproj new file mode 100644 index 0000000..91906be --- /dev/null +++ b/xsd/dist/examples/cxx/parser/mixed/mixed-vc8.vcproj @@ -0,0 +1,423 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/xsd/dist/examples/cxx/parser/mixed/mixed-vc9.vcproj b/xsd/dist/examples/cxx/parser/mixed/mixed-vc9.vcproj new file mode 100644 index 0000000..f2eb5f1 --- /dev/null +++ b/xsd/dist/examples/cxx/parser/mixed/mixed-vc9.vcproj @@ -0,0 +1,420 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/xsd/dist/examples/cxx/parser/mixed/mixed-xerces2-7.1.vcproj b/xsd/dist/examples/cxx/parser/mixed/mixed-xerces2-7.1.vcproj deleted file mode 100644 index 1aa766f..0000000 --- a/xsd/dist/examples/cxx/parser/mixed/mixed-xerces2-7.1.vcproj +++ /dev/null @@ -1,165 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/xsd/dist/examples/cxx/parser/mixed/mixed-xerces2-8.0.vcproj b/xsd/dist/examples/cxx/parser/mixed/mixed-xerces2-8.0.vcproj deleted file mode 100644 index 49476a1..0000000 --- a/xsd/dist/examples/cxx/parser/mixed/mixed-xerces2-8.0.vcproj +++ /dev/null @@ -1,423 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/xsd/dist/examples/cxx/parser/mixed/mixed-xerces2-9.0.vcproj b/xsd/dist/examples/cxx/parser/mixed/mixed-xerces2-9.0.vcproj deleted file mode 100644 index de84d74..0000000 --- a/xsd/dist/examples/cxx/parser/mixed/mixed-xerces2-9.0.vcproj +++ /dev/null @@ -1,420 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/xsd/dist/examples/cxx/parser/mixin/mixin-10.0.vcxproj b/xsd/dist/examples/cxx/parser/mixin/mixin-10.0.vcxproj deleted file mode 100644 index 1b2f0f9..0000000 --- a/xsd/dist/examples/cxx/parser/mixin/mixin-10.0.vcxproj +++ /dev/null @@ -1,206 +0,0 @@ - - - - - Debug - Win32 - - - Debug - x64 - - - Release - Win32 - - - Release - x64 - - - - mixin - {8CCA6181-F2CE-4E5E-A20E-4E1E53A35125} - mixin - Win32Proj - - - - Application - MultiByte - - - Application - MultiByte - - - Application - MultiByte - - - Application - MultiByte - - - - - - - - - - - - - - - - - - - driver - driver - driver - driver - Debug\ - Debug\ - true - $(Platform)\$(Configuration)\ - $(Platform)\$(Configuration)\ - true - Release\ - Release\ - false - $(Platform)\$(Configuration)\ - $(Platform)\$(Configuration)\ - false - - - - Disabled - WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebug - - - Level3 - EditAndContinue - - - xerces-c_3D.lib;%(AdditionalDependencies) - $(TargetPath) - true - $(OutDir)driver.pdb - Console - false - - - MachineX86 - - - - - X64 - - - Disabled - WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebug - - - Level3 - ProgramDatabase - - - xerces-c_3D.lib;%(AdditionalDependencies) - $(TargetPath) - true - $(OutDir)driver.pdb - Console - false - - - MachineX64 - - - - - WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - MultiThreaded - - - Level3 - ProgramDatabase - - - xerces-c_3.lib;%(AdditionalDependencies) - $(TargetPath) - true - Console - true - true - false - - - MachineX86 - - - - - X64 - - - WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - MultiThreaded - - - Level3 - ProgramDatabase - - - xerces-c_3.lib;%(AdditionalDependencies) - $(TargetPath) - true - Console - true - true - false - - - MachineX64 - - - - - - - - - - - - - xsd schema.xsd - xsd cxx-parser --type-map schema.map schema.xsd - schema-pskel.hxx;schema-pskel.cxx;%(Outputs) - xsd schema.xsd - xsd cxx-parser --type-map schema.map schema.xsd - schema-pskel.hxx;schema-pskel.cxx;%(Outputs) - xsd schema.xsd - xsd cxx-parser --type-map schema.map schema.xsd - schema-pskel.hxx;schema-pskel.cxx;%(Outputs) - xsd schema.xsd - xsd cxx-parser --type-map schema.map schema.xsd - schema-pskel.hxx;schema-pskel.cxx;%(Outputs) - - - - - - - - - \ No newline at end of file diff --git a/xsd/dist/examples/cxx/parser/mixin/mixin-10.0.vcxproj.filters b/xsd/dist/examples/cxx/parser/mixin/mixin-10.0.vcxproj.filters deleted file mode 100644 index 4fd62ea..0000000 --- a/xsd/dist/examples/cxx/parser/mixin/mixin-10.0.vcxproj.filters +++ /dev/null @@ -1,41 +0,0 @@ - - - - - {4BF1C3D0-33B1-4924-9F8C-4DD7B7765D82} - cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx - - - {A4012AA7-A8FE-4CE8-9BB0-1DBA14C2CEAD} - h;hpp;hxx;hm;inl;inc;xsd - - - {1772a873-01ce-415d-a4e7-b107ecfb3d0f} - xsd - - - - - Source Files - - - Source Files - - - - - Header Files - - - Header Files - - - - - - - - Schema Files - - - \ No newline at end of file diff --git a/xsd/dist/examples/cxx/parser/mixin/mixin-7.1.vcproj b/xsd/dist/examples/cxx/parser/mixin/mixin-7.1.vcproj deleted file mode 100644 index 0dda903..0000000 --- a/xsd/dist/examples/cxx/parser/mixin/mixin-7.1.vcproj +++ /dev/null @@ -1,165 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/xsd/dist/examples/cxx/parser/mixin/mixin-8.0.vcproj b/xsd/dist/examples/cxx/parser/mixin/mixin-8.0.vcproj deleted file mode 100644 index 558f449..0000000 --- a/xsd/dist/examples/cxx/parser/mixin/mixin-8.0.vcproj +++ /dev/null @@ -1,423 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/xsd/dist/examples/cxx/parser/mixin/mixin-9.0.vcproj b/xsd/dist/examples/cxx/parser/mixin/mixin-9.0.vcproj deleted file mode 100644 index 2457d2f..0000000 --- a/xsd/dist/examples/cxx/parser/mixin/mixin-9.0.vcproj +++ /dev/null @@ -1,420 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/xsd/dist/examples/cxx/parser/mixin/mixin-vc10.vcxproj b/xsd/dist/examples/cxx/parser/mixin/mixin-vc10.vcxproj new file mode 100644 index 0000000..729240e --- /dev/null +++ b/xsd/dist/examples/cxx/parser/mixin/mixin-vc10.vcxproj @@ -0,0 +1,202 @@ + + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + mixin + {8CCA6181-F2CE-4E5E-A20E-4E1E53A35125} + mixin + Win32Proj + + + + Application + MultiByte + + + Application + MultiByte + + + Application + MultiByte + + + Application + MultiByte + + + + + + + + + + + + + + + + + + + driver + driver + driver + driver + Debug\ + Debug\ + true + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + true + Release\ + Release\ + false + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + false + + + + Disabled + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebugDLL + + + Level3 + + + xerces-c_3D.lib;%(AdditionalDependencies) + $(TargetPath) + true + $(OutDir)driver.pdb + Console + false + + + MachineX86 + + + + + X64 + + + Disabled + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebugDLL + + + Level3 + + + xerces-c_3D.lib;%(AdditionalDependencies) + $(TargetPath) + true + $(OutDir)driver.pdb + Console + false + + + MachineX64 + + + + + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreadedDLL + + + Level3 + + + xerces-c_3.lib;%(AdditionalDependencies) + $(TargetPath) + true + Console + true + true + false + + + MachineX86 + + + + + X64 + + + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreadedDLL + + + Level3 + + + xerces-c_3.lib;%(AdditionalDependencies) + $(TargetPath) + true + Console + true + true + false + + + MachineX64 + + + + + + + + + + + + + xsd schema.xsd + xsd cxx-parser --type-map schema.map schema.xsd + schema-pskel.hxx;schema-pskel.cxx;%(Outputs) + xsd schema.xsd + xsd cxx-parser --type-map schema.map schema.xsd + schema-pskel.hxx;schema-pskel.cxx;%(Outputs) + xsd schema.xsd + xsd cxx-parser --type-map schema.map schema.xsd + schema-pskel.hxx;schema-pskel.cxx;%(Outputs) + xsd schema.xsd + xsd cxx-parser --type-map schema.map schema.xsd + schema-pskel.hxx;schema-pskel.cxx;%(Outputs) + + + + + + + + + \ No newline at end of file diff --git a/xsd/dist/examples/cxx/parser/mixin/mixin-vc10.vcxproj.filters b/xsd/dist/examples/cxx/parser/mixin/mixin-vc10.vcxproj.filters new file mode 100644 index 0000000..4fd62ea --- /dev/null +++ b/xsd/dist/examples/cxx/parser/mixin/mixin-vc10.vcxproj.filters @@ -0,0 +1,41 @@ + + + + + {4BF1C3D0-33B1-4924-9F8C-4DD7B7765D82} + cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {A4012AA7-A8FE-4CE8-9BB0-1DBA14C2CEAD} + h;hpp;hxx;hm;inl;inc;xsd + + + {1772a873-01ce-415d-a4e7-b107ecfb3d0f} + xsd + + + + + Source Files + + + Source Files + + + + + Header Files + + + Header Files + + + + + + + + Schema Files + + + \ No newline at end of file diff --git a/xsd/dist/examples/cxx/parser/mixin/mixin-vc11.vcxproj b/xsd/dist/examples/cxx/parser/mixin/mixin-vc11.vcxproj new file mode 100644 index 0000000..7de773e --- /dev/null +++ b/xsd/dist/examples/cxx/parser/mixin/mixin-vc11.vcxproj @@ -0,0 +1,206 @@ + + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + mixin + {8CCA6181-F2CE-4E5E-A20E-4E1E53A35125} + mixin + Win32Proj + + + + Application + v110 + MultiByte + + + Application + v110 + MultiByte + + + Application + v110 + MultiByte + + + Application + v110 + MultiByte + + + + + + + + + + + + + + + + + + + driver + driver + driver + driver + Debug\ + Debug\ + true + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + true + Release\ + Release\ + false + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + false + + + + Disabled + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebugDLL + + + Level3 + + + xerces-c_3D.lib;%(AdditionalDependencies) + $(TargetPath) + true + $(OutDir)driver.pdb + Console + false + + + MachineX86 + + + + + X64 + + + Disabled + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebugDLL + + + Level3 + + + xerces-c_3D.lib;%(AdditionalDependencies) + $(TargetPath) + true + $(OutDir)driver.pdb + Console + false + + + MachineX64 + + + + + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreadedDLL + + + Level3 + + + xerces-c_3.lib;%(AdditionalDependencies) + $(TargetPath) + true + Console + true + true + false + + + MachineX86 + + + + + X64 + + + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreadedDLL + + + Level3 + + + xerces-c_3.lib;%(AdditionalDependencies) + $(TargetPath) + true + Console + true + true + false + + + MachineX64 + + + + + + + + + + + + + xsd schema.xsd + xsd cxx-parser --type-map schema.map schema.xsd + schema-pskel.hxx;schema-pskel.cxx;%(Outputs) + xsd schema.xsd + xsd cxx-parser --type-map schema.map schema.xsd + schema-pskel.hxx;schema-pskel.cxx;%(Outputs) + xsd schema.xsd + xsd cxx-parser --type-map schema.map schema.xsd + schema-pskel.hxx;schema-pskel.cxx;%(Outputs) + xsd schema.xsd + xsd cxx-parser --type-map schema.map schema.xsd + schema-pskel.hxx;schema-pskel.cxx;%(Outputs) + + + + + + + + + \ No newline at end of file diff --git a/xsd/dist/examples/cxx/parser/mixin/mixin-vc11.vcxproj.filters b/xsd/dist/examples/cxx/parser/mixin/mixin-vc11.vcxproj.filters new file mode 100644 index 0000000..4fd62ea --- /dev/null +++ b/xsd/dist/examples/cxx/parser/mixin/mixin-vc11.vcxproj.filters @@ -0,0 +1,41 @@ + + + + + {4BF1C3D0-33B1-4924-9F8C-4DD7B7765D82} + cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {A4012AA7-A8FE-4CE8-9BB0-1DBA14C2CEAD} + h;hpp;hxx;hm;inl;inc;xsd + + + {1772a873-01ce-415d-a4e7-b107ecfb3d0f} + xsd + + + + + Source Files + + + Source Files + + + + + Header Files + + + Header Files + + + + + + + + Schema Files + + + \ No newline at end of file diff --git a/xsd/dist/examples/cxx/parser/mixin/mixin-vc12.vcxproj b/xsd/dist/examples/cxx/parser/mixin/mixin-vc12.vcxproj new file mode 100644 index 0000000..83771b4 --- /dev/null +++ b/xsd/dist/examples/cxx/parser/mixin/mixin-vc12.vcxproj @@ -0,0 +1,210 @@ + + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + mixin + {8CCA6181-F2CE-4E5E-A20E-4E1E53A35125} + mixin + Win32Proj + + + + Application + v120 + MultiByte + + + Application + v120 + MultiByte + + + Application + v120 + MultiByte + + + Application + v120 + MultiByte + + + + + + + + + + + + + + + + + + + driver + driver + driver + driver + Debug\ + Debug\ + true + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + true + Release\ + Release\ + false + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + false + + + + Disabled + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebugDLL + + + Level3 + true + + + xerces-c_3D.lib;%(AdditionalDependencies) + $(TargetPath) + true + $(OutDir)driver.pdb + Console + false + + + MachineX86 + + + + + X64 + + + Disabled + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebugDLL + + + Level3 + true + + + xerces-c_3D.lib;%(AdditionalDependencies) + $(TargetPath) + true + $(OutDir)driver.pdb + Console + false + + + MachineX64 + + + + + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreadedDLL + + + Level3 + true + + + xerces-c_3.lib;%(AdditionalDependencies) + $(TargetPath) + true + Console + true + true + false + + + MachineX86 + + + + + X64 + + + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreadedDLL + + + Level3 + true + + + xerces-c_3.lib;%(AdditionalDependencies) + $(TargetPath) + true + Console + true + true + false + + + MachineX64 + + + + + + + + + + + + + xsd schema.xsd + xsd cxx-parser --type-map schema.map schema.xsd + schema-pskel.hxx;schema-pskel.cxx;%(Outputs) + xsd schema.xsd + xsd cxx-parser --type-map schema.map schema.xsd + schema-pskel.hxx;schema-pskel.cxx;%(Outputs) + xsd schema.xsd + xsd cxx-parser --type-map schema.map schema.xsd + schema-pskel.hxx;schema-pskel.cxx;%(Outputs) + xsd schema.xsd + xsd cxx-parser --type-map schema.map schema.xsd + schema-pskel.hxx;schema-pskel.cxx;%(Outputs) + + + + + + + + + \ No newline at end of file diff --git a/xsd/dist/examples/cxx/parser/mixin/mixin-vc12.vcxproj.filters b/xsd/dist/examples/cxx/parser/mixin/mixin-vc12.vcxproj.filters new file mode 100644 index 0000000..4fd62ea --- /dev/null +++ b/xsd/dist/examples/cxx/parser/mixin/mixin-vc12.vcxproj.filters @@ -0,0 +1,41 @@ + + + + + {4BF1C3D0-33B1-4924-9F8C-4DD7B7765D82} + cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {A4012AA7-A8FE-4CE8-9BB0-1DBA14C2CEAD} + h;hpp;hxx;hm;inl;inc;xsd + + + {1772a873-01ce-415d-a4e7-b107ecfb3d0f} + xsd + + + + + Source Files + + + Source Files + + + + + Header Files + + + Header Files + + + + + + + + Schema Files + + + \ No newline at end of file diff --git a/xsd/dist/examples/cxx/parser/mixin/mixin-vc8.vcproj b/xsd/dist/examples/cxx/parser/mixin/mixin-vc8.vcproj new file mode 100644 index 0000000..384e122 --- /dev/null +++ b/xsd/dist/examples/cxx/parser/mixin/mixin-vc8.vcproj @@ -0,0 +1,423 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/xsd/dist/examples/cxx/parser/mixin/mixin-vc9.vcproj b/xsd/dist/examples/cxx/parser/mixin/mixin-vc9.vcproj new file mode 100644 index 0000000..9cdccb3 --- /dev/null +++ b/xsd/dist/examples/cxx/parser/mixin/mixin-vc9.vcproj @@ -0,0 +1,420 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/xsd/dist/examples/cxx/parser/mixin/mixin-xerces2-7.1.vcproj b/xsd/dist/examples/cxx/parser/mixin/mixin-xerces2-7.1.vcproj deleted file mode 100644 index 39e6cdc..0000000 --- a/xsd/dist/examples/cxx/parser/mixin/mixin-xerces2-7.1.vcproj +++ /dev/null @@ -1,165 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/xsd/dist/examples/cxx/parser/mixin/mixin-xerces2-8.0.vcproj b/xsd/dist/examples/cxx/parser/mixin/mixin-xerces2-8.0.vcproj deleted file mode 100644 index 5e4e495..0000000 --- a/xsd/dist/examples/cxx/parser/mixin/mixin-xerces2-8.0.vcproj +++ /dev/null @@ -1,423 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/xsd/dist/examples/cxx/parser/mixin/mixin-xerces2-9.0.vcproj b/xsd/dist/examples/cxx/parser/mixin/mixin-xerces2-9.0.vcproj deleted file mode 100644 index e519aef..0000000 --- a/xsd/dist/examples/cxx/parser/mixin/mixin-xerces2-9.0.vcproj +++ /dev/null @@ -1,420 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/xsd/dist/examples/cxx/parser/multiroot/multiroot-10.0.vcxproj b/xsd/dist/examples/cxx/parser/multiroot/multiroot-10.0.vcxproj deleted file mode 100644 index bba8fd2..0000000 --- a/xsd/dist/examples/cxx/parser/multiroot/multiroot-10.0.vcxproj +++ /dev/null @@ -1,212 +0,0 @@ - - - - - Debug - Win32 - - - Debug - x64 - - - Release - Win32 - - - Release - x64 - - - - multiroot - {3AC187DF-4FDF-40B7-9E12-002DC0A15EDB} - multiroot - Win32Proj - - - - Application - MultiByte - - - Application - MultiByte - - - Application - MultiByte - - - Application - MultiByte - - - - - - - - - - - - - - - - - - - driver - driver - driver - driver - Debug\ - Debug\ - true - $(Platform)\$(Configuration)\ - $(Platform)\$(Configuration)\ - true - Release\ - Release\ - false - $(Platform)\$(Configuration)\ - $(Platform)\$(Configuration)\ - false - - - - Disabled - WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebug - true - - - Level3 - EditAndContinue - - - xerces-c_3D.lib;%(AdditionalDependencies) - $(TargetPath) - true - $(OutDir)driver.pdb - Console - false - - - MachineX86 - - - - - X64 - - - Disabled - WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebug - true - - - Level3 - ProgramDatabase - - - xerces-c_3D.lib;%(AdditionalDependencies) - $(TargetPath) - true - $(OutDir)driver.pdb - Console - false - - - MachineX64 - - - - - WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - MultiThreaded - true - - - Level3 - ProgramDatabase - - - xerces-c_3.lib;%(AdditionalDependencies) - $(TargetPath) - true - Console - true - true - false - - - MachineX86 - - - - - X64 - - - WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - MultiThreaded - true - - - Level3 - ProgramDatabase - - - xerces-c_3.lib;%(AdditionalDependencies) - $(TargetPath) - true - Console - true - true - false - - - MachineX64 - - - - - - - - - - - - - - - xsd protocol.xsd - xsd cxx-parser --type-map protocol.map protocol.xsd - protocol-pskel.hxx;protocol-pskel.cxx;%(Outputs) - xsd protocol.xsd - xsd cxx-parser --type-map protocol.map protocol.xsd - protocol-pskel.hxx;protocol-pskel.cxx;%(Outputs) - xsd protocol.xsd - xsd cxx-parser --type-map protocol.map protocol.xsd - protocol-pskel.hxx;protocol-pskel.cxx;%(Outputs) - xsd protocol.xsd - xsd cxx-parser --type-map protocol.map protocol.xsd - protocol-pskel.hxx;protocol-pskel.cxx;%(Outputs) - - - - - - - - - \ No newline at end of file diff --git a/xsd/dist/examples/cxx/parser/multiroot/multiroot-10.0.vcxproj.filters b/xsd/dist/examples/cxx/parser/multiroot/multiroot-10.0.vcxproj.filters deleted file mode 100644 index 2b80057..0000000 --- a/xsd/dist/examples/cxx/parser/multiroot/multiroot-10.0.vcxproj.filters +++ /dev/null @@ -1,47 +0,0 @@ - - - - - {5CA12033-B9C7-4B8D-95C9-BC1D88DFB211} - cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx - - - {5F7258C7-69F9-44AC-8651-7ABC08C70815} - h;hpp;hxx;hm;inl;inc;xsd - - - {8a01b14f-5199-4686-a4e8-419ab31b3ea3} - xsd - - - - - Source Files - - - Source Files - - - Source Files - - - - - Header Files - - - Header Files - - - Header Files - - - - - - - - Schema Files - - - \ No newline at end of file diff --git a/xsd/dist/examples/cxx/parser/multiroot/multiroot-7.1.vcproj b/xsd/dist/examples/cxx/parser/multiroot/multiroot-7.1.vcproj deleted file mode 100644 index 7855b8c..0000000 --- a/xsd/dist/examples/cxx/parser/multiroot/multiroot-7.1.vcproj +++ /dev/null @@ -1,173 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/xsd/dist/examples/cxx/parser/multiroot/multiroot-8.0.vcproj b/xsd/dist/examples/cxx/parser/multiroot/multiroot-8.0.vcproj deleted file mode 100644 index be8f5ef..0000000 --- a/xsd/dist/examples/cxx/parser/multiroot/multiroot-8.0.vcproj +++ /dev/null @@ -1,435 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/xsd/dist/examples/cxx/parser/multiroot/multiroot-9.0.vcproj b/xsd/dist/examples/cxx/parser/multiroot/multiroot-9.0.vcproj deleted file mode 100644 index e77e1f7..0000000 --- a/xsd/dist/examples/cxx/parser/multiroot/multiroot-9.0.vcproj +++ /dev/null @@ -1,432 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/xsd/dist/examples/cxx/parser/multiroot/multiroot-vc10.vcxproj b/xsd/dist/examples/cxx/parser/multiroot/multiroot-vc10.vcxproj new file mode 100644 index 0000000..dac752c --- /dev/null +++ b/xsd/dist/examples/cxx/parser/multiroot/multiroot-vc10.vcxproj @@ -0,0 +1,208 @@ + + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + multiroot + {3AC187DF-4FDF-40B7-9E12-002DC0A15EDB} + multiroot + Win32Proj + + + + Application + MultiByte + + + Application + MultiByte + + + Application + MultiByte + + + Application + MultiByte + + + + + + + + + + + + + + + + + + + driver + driver + driver + driver + Debug\ + Debug\ + true + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + true + Release\ + Release\ + false + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + false + + + + Disabled + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebugDLL + true + + + Level3 + + + xerces-c_3D.lib;%(AdditionalDependencies) + $(TargetPath) + true + $(OutDir)driver.pdb + Console + false + + + MachineX86 + + + + + X64 + + + Disabled + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebugDLL + true + + + Level3 + + + xerces-c_3D.lib;%(AdditionalDependencies) + $(TargetPath) + true + $(OutDir)driver.pdb + Console + false + + + MachineX64 + + + + + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreadedDLL + true + + + Level3 + + + xerces-c_3.lib;%(AdditionalDependencies) + $(TargetPath) + true + Console + true + true + false + + + MachineX86 + + + + + X64 + + + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreadedDLL + true + + + Level3 + + + xerces-c_3.lib;%(AdditionalDependencies) + $(TargetPath) + true + Console + true + true + false + + + MachineX64 + + + + + + + + + + + + + + + xsd protocol.xsd + xsd cxx-parser --type-map protocol.map protocol.xsd + protocol-pskel.hxx;protocol-pskel.cxx;%(Outputs) + xsd protocol.xsd + xsd cxx-parser --type-map protocol.map protocol.xsd + protocol-pskel.hxx;protocol-pskel.cxx;%(Outputs) + xsd protocol.xsd + xsd cxx-parser --type-map protocol.map protocol.xsd + protocol-pskel.hxx;protocol-pskel.cxx;%(Outputs) + xsd protocol.xsd + xsd cxx-parser --type-map protocol.map protocol.xsd + protocol-pskel.hxx;protocol-pskel.cxx;%(Outputs) + + + + + + + + + \ No newline at end of file diff --git a/xsd/dist/examples/cxx/parser/multiroot/multiroot-vc10.vcxproj.filters b/xsd/dist/examples/cxx/parser/multiroot/multiroot-vc10.vcxproj.filters new file mode 100644 index 0000000..2b80057 --- /dev/null +++ b/xsd/dist/examples/cxx/parser/multiroot/multiroot-vc10.vcxproj.filters @@ -0,0 +1,47 @@ + + + + + {5CA12033-B9C7-4B8D-95C9-BC1D88DFB211} + cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {5F7258C7-69F9-44AC-8651-7ABC08C70815} + h;hpp;hxx;hm;inl;inc;xsd + + + {8a01b14f-5199-4686-a4e8-419ab31b3ea3} + xsd + + + + + Source Files + + + Source Files + + + Source Files + + + + + Header Files + + + Header Files + + + Header Files + + + + + + + + Schema Files + + + \ No newline at end of file diff --git a/xsd/dist/examples/cxx/parser/multiroot/multiroot-vc11.vcxproj b/xsd/dist/examples/cxx/parser/multiroot/multiroot-vc11.vcxproj new file mode 100644 index 0000000..9a5497d --- /dev/null +++ b/xsd/dist/examples/cxx/parser/multiroot/multiroot-vc11.vcxproj @@ -0,0 +1,212 @@ + + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + multiroot + {3AC187DF-4FDF-40B7-9E12-002DC0A15EDB} + multiroot + Win32Proj + + + + Application + v110 + MultiByte + + + Application + v110 + MultiByte + + + Application + v110 + MultiByte + + + Application + v110 + MultiByte + + + + + + + + + + + + + + + + + + + driver + driver + driver + driver + Debug\ + Debug\ + true + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + true + Release\ + Release\ + false + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + false + + + + Disabled + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebugDLL + true + + + Level3 + + + xerces-c_3D.lib;%(AdditionalDependencies) + $(TargetPath) + true + $(OutDir)driver.pdb + Console + false + + + MachineX86 + + + + + X64 + + + Disabled + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebugDLL + true + + + Level3 + + + xerces-c_3D.lib;%(AdditionalDependencies) + $(TargetPath) + true + $(OutDir)driver.pdb + Console + false + + + MachineX64 + + + + + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreadedDLL + true + + + Level3 + + + xerces-c_3.lib;%(AdditionalDependencies) + $(TargetPath) + true + Console + true + true + false + + + MachineX86 + + + + + X64 + + + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreadedDLL + true + + + Level3 + + + xerces-c_3.lib;%(AdditionalDependencies) + $(TargetPath) + true + Console + true + true + false + + + MachineX64 + + + + + + + + + + + + + + + xsd protocol.xsd + xsd cxx-parser --type-map protocol.map protocol.xsd + protocol-pskel.hxx;protocol-pskel.cxx;%(Outputs) + xsd protocol.xsd + xsd cxx-parser --type-map protocol.map protocol.xsd + protocol-pskel.hxx;protocol-pskel.cxx;%(Outputs) + xsd protocol.xsd + xsd cxx-parser --type-map protocol.map protocol.xsd + protocol-pskel.hxx;protocol-pskel.cxx;%(Outputs) + xsd protocol.xsd + xsd cxx-parser --type-map protocol.map protocol.xsd + protocol-pskel.hxx;protocol-pskel.cxx;%(Outputs) + + + + + + + + + \ No newline at end of file diff --git a/xsd/dist/examples/cxx/parser/multiroot/multiroot-vc11.vcxproj.filters b/xsd/dist/examples/cxx/parser/multiroot/multiroot-vc11.vcxproj.filters new file mode 100644 index 0000000..2b80057 --- /dev/null +++ b/xsd/dist/examples/cxx/parser/multiroot/multiroot-vc11.vcxproj.filters @@ -0,0 +1,47 @@ + + + + + {5CA12033-B9C7-4B8D-95C9-BC1D88DFB211} + cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {5F7258C7-69F9-44AC-8651-7ABC08C70815} + h;hpp;hxx;hm;inl;inc;xsd + + + {8a01b14f-5199-4686-a4e8-419ab31b3ea3} + xsd + + + + + Source Files + + + Source Files + + + Source Files + + + + + Header Files + + + Header Files + + + Header Files + + + + + + + + Schema Files + + + \ No newline at end of file diff --git a/xsd/dist/examples/cxx/parser/multiroot/multiroot-vc12.vcxproj b/xsd/dist/examples/cxx/parser/multiroot/multiroot-vc12.vcxproj new file mode 100644 index 0000000..a8a41dc --- /dev/null +++ b/xsd/dist/examples/cxx/parser/multiroot/multiroot-vc12.vcxproj @@ -0,0 +1,216 @@ + + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + multiroot + {3AC187DF-4FDF-40B7-9E12-002DC0A15EDB} + multiroot + Win32Proj + + + + Application + v120 + MultiByte + + + Application + v120 + MultiByte + + + Application + v120 + MultiByte + + + Application + v120 + MultiByte + + + + + + + + + + + + + + + + + + + driver + driver + driver + driver + Debug\ + Debug\ + true + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + true + Release\ + Release\ + false + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + false + + + + Disabled + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebugDLL + true + + + Level3 + true + + + xerces-c_3D.lib;%(AdditionalDependencies) + $(TargetPath) + true + $(OutDir)driver.pdb + Console + false + + + MachineX86 + + + + + X64 + + + Disabled + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebugDLL + true + + + Level3 + true + + + xerces-c_3D.lib;%(AdditionalDependencies) + $(TargetPath) + true + $(OutDir)driver.pdb + Console + false + + + MachineX64 + + + + + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreadedDLL + true + + + Level3 + true + + + xerces-c_3.lib;%(AdditionalDependencies) + $(TargetPath) + true + Console + true + true + false + + + MachineX86 + + + + + X64 + + + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreadedDLL + true + + + Level3 + true + + + xerces-c_3.lib;%(AdditionalDependencies) + $(TargetPath) + true + Console + true + true + false + + + MachineX64 + + + + + + + + + + + + + + + xsd protocol.xsd + xsd cxx-parser --type-map protocol.map protocol.xsd + protocol-pskel.hxx;protocol-pskel.cxx;%(Outputs) + xsd protocol.xsd + xsd cxx-parser --type-map protocol.map protocol.xsd + protocol-pskel.hxx;protocol-pskel.cxx;%(Outputs) + xsd protocol.xsd + xsd cxx-parser --type-map protocol.map protocol.xsd + protocol-pskel.hxx;protocol-pskel.cxx;%(Outputs) + xsd protocol.xsd + xsd cxx-parser --type-map protocol.map protocol.xsd + protocol-pskel.hxx;protocol-pskel.cxx;%(Outputs) + + + + + + + + + \ No newline at end of file diff --git a/xsd/dist/examples/cxx/parser/multiroot/multiroot-vc12.vcxproj.filters b/xsd/dist/examples/cxx/parser/multiroot/multiroot-vc12.vcxproj.filters new file mode 100644 index 0000000..2b80057 --- /dev/null +++ b/xsd/dist/examples/cxx/parser/multiroot/multiroot-vc12.vcxproj.filters @@ -0,0 +1,47 @@ + + + + + {5CA12033-B9C7-4B8D-95C9-BC1D88DFB211} + cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {5F7258C7-69F9-44AC-8651-7ABC08C70815} + h;hpp;hxx;hm;inl;inc;xsd + + + {8a01b14f-5199-4686-a4e8-419ab31b3ea3} + xsd + + + + + Source Files + + + Source Files + + + Source Files + + + + + Header Files + + + Header Files + + + Header Files + + + + + + + + Schema Files + + + \ No newline at end of file diff --git a/xsd/dist/examples/cxx/parser/multiroot/multiroot-vc8.vcproj b/xsd/dist/examples/cxx/parser/multiroot/multiroot-vc8.vcproj new file mode 100644 index 0000000..a37ec06 --- /dev/null +++ b/xsd/dist/examples/cxx/parser/multiroot/multiroot-vc8.vcproj @@ -0,0 +1,435 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/xsd/dist/examples/cxx/parser/multiroot/multiroot-vc9.vcproj b/xsd/dist/examples/cxx/parser/multiroot/multiroot-vc9.vcproj new file mode 100644 index 0000000..75ef5e6 --- /dev/null +++ b/xsd/dist/examples/cxx/parser/multiroot/multiroot-vc9.vcproj @@ -0,0 +1,432 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/xsd/dist/examples/cxx/parser/multiroot/multiroot-xerces2-7.1.vcproj b/xsd/dist/examples/cxx/parser/multiroot/multiroot-xerces2-7.1.vcproj deleted file mode 100644 index 8510fbb..0000000 --- a/xsd/dist/examples/cxx/parser/multiroot/multiroot-xerces2-7.1.vcproj +++ /dev/null @@ -1,173 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/xsd/dist/examples/cxx/parser/multiroot/multiroot-xerces2-8.0.vcproj b/xsd/dist/examples/cxx/parser/multiroot/multiroot-xerces2-8.0.vcproj deleted file mode 100644 index 6deabc8..0000000 --- a/xsd/dist/examples/cxx/parser/multiroot/multiroot-xerces2-8.0.vcproj +++ /dev/null @@ -1,435 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/xsd/dist/examples/cxx/parser/multiroot/multiroot-xerces2-9.0.vcproj b/xsd/dist/examples/cxx/parser/multiroot/multiroot-xerces2-9.0.vcproj deleted file mode 100644 index c2a7264..0000000 --- a/xsd/dist/examples/cxx/parser/multiroot/multiroot-xerces2-9.0.vcproj +++ /dev/null @@ -1,432 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/xsd/dist/examples/cxx/parser/parser-10.0.sln b/xsd/dist/examples/cxx/parser/parser-10.0.sln deleted file mode 100644 index a3a35e6..0000000 --- a/xsd/dist/examples/cxx/parser/parser-10.0.sln +++ /dev/null @@ -1,115 +0,0 @@ -Microsoft Visual Studio Solution File, Format Version 11.00 -# Visual Studio 2010 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "hello", "hello\hello-10.0.vcxproj", "{683E9D46-FCC7-4163-984B-9F399169CF7F}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "library", "library\library-10.0.vcxproj", "{D66DAC4D-133C-4DB5-923F-C88A961C3C51}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mixin", "mixin\mixin-10.0.vcxproj", "{8CCA6181-F2CE-4E5E-A20E-4E1E53A35125}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mixed", "mixed\mixed-10.0.vcxproj", "{304FD6A7-6C73-41C3-B489-97FD5E635CCB}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "generated", "generated\generated-10.0.vcxproj", "{4277B39A-C9FB-4F10-8223-8DD38053EDA0}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "multiroot", "multiroot\multiroot-10.0.vcxproj", "{3AC187DF-4FDF-40B7-9E12-002DC0A15EDB}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "polymorphism", "polymorphism\polymorphism-10.0.vcxproj", "{E05F914A-490B-4780-9BAB-1ED225B3DBEE}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "polyroot", "polyroot\polyroot-10.0.vcxproj", "{FB2098FC-CE8C-4A6B-A064-E2705324A16A}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "wildcard", "wildcard\wildcard-10.0.vcxproj", "{9832425B-38D5-44EC-AED6-3ED4353B24EA}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "performance", "performance\performance-10.0.vcxproj", "{676CB1A8-1060-4B7F-86FA-5F8F01AB80BD}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Win32 = Debug|Win32 - Debug|x64 = Debug|x64 - Release|Win32 = Release|Win32 - Release|x64 = Release|x64 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {683E9D46-FCC7-4163-984B-9F399169CF7F}.Debug|Win32.ActiveCfg = Debug|Win32 - {683E9D46-FCC7-4163-984B-9F399169CF7F}.Debug|Win32.Build.0 = Debug|Win32 - {683E9D46-FCC7-4163-984B-9F399169CF7F}.Debug|x64.ActiveCfg = Debug|x64 - {683E9D46-FCC7-4163-984B-9F399169CF7F}.Debug|x64.Build.0 = Debug|x64 - {683E9D46-FCC7-4163-984B-9F399169CF7F}.Release|Win32.ActiveCfg = Release|Win32 - {683E9D46-FCC7-4163-984B-9F399169CF7F}.Release|Win32.Build.0 = Release|Win32 - {683E9D46-FCC7-4163-984B-9F399169CF7F}.Release|x64.ActiveCfg = Release|x64 - {683E9D46-FCC7-4163-984B-9F399169CF7F}.Release|x64.Build.0 = Release|x64 - {D66DAC4D-133C-4DB5-923F-C88A961C3C51}.Debug|Win32.ActiveCfg = Debug|Win32 - {D66DAC4D-133C-4DB5-923F-C88A961C3C51}.Debug|Win32.Build.0 = Debug|Win32 - {D66DAC4D-133C-4DB5-923F-C88A961C3C51}.Debug|x64.ActiveCfg = Debug|x64 - {D66DAC4D-133C-4DB5-923F-C88A961C3C51}.Debug|x64.Build.0 = Debug|x64 - {D66DAC4D-133C-4DB5-923F-C88A961C3C51}.Release|Win32.ActiveCfg = Release|Win32 - {D66DAC4D-133C-4DB5-923F-C88A961C3C51}.Release|Win32.Build.0 = Release|Win32 - {D66DAC4D-133C-4DB5-923F-C88A961C3C51}.Release|x64.ActiveCfg = Release|x64 - {D66DAC4D-133C-4DB5-923F-C88A961C3C51}.Release|x64.Build.0 = Release|x64 - {8CCA6181-F2CE-4E5E-A20E-4E1E53A35125}.Debug|Win32.ActiveCfg = Debug|Win32 - {8CCA6181-F2CE-4E5E-A20E-4E1E53A35125}.Debug|Win32.Build.0 = Debug|Win32 - {8CCA6181-F2CE-4E5E-A20E-4E1E53A35125}.Debug|x64.ActiveCfg = Debug|x64 - {8CCA6181-F2CE-4E5E-A20E-4E1E53A35125}.Debug|x64.Build.0 = Debug|x64 - {8CCA6181-F2CE-4E5E-A20E-4E1E53A35125}.Release|Win32.ActiveCfg = Release|Win32 - {8CCA6181-F2CE-4E5E-A20E-4E1E53A35125}.Release|Win32.Build.0 = Release|Win32 - {8CCA6181-F2CE-4E5E-A20E-4E1E53A35125}.Release|x64.ActiveCfg = Release|x64 - {8CCA6181-F2CE-4E5E-A20E-4E1E53A35125}.Release|x64.Build.0 = Release|x64 - {304FD6A7-6C73-41C3-B489-97FD5E635CCB}.Debug|Win32.ActiveCfg = Debug|Win32 - {304FD6A7-6C73-41C3-B489-97FD5E635CCB}.Debug|Win32.Build.0 = Debug|Win32 - {304FD6A7-6C73-41C3-B489-97FD5E635CCB}.Debug|x64.ActiveCfg = Debug|x64 - {304FD6A7-6C73-41C3-B489-97FD5E635CCB}.Debug|x64.Build.0 = Debug|x64 - {304FD6A7-6C73-41C3-B489-97FD5E635CCB}.Release|Win32.ActiveCfg = Release|Win32 - {304FD6A7-6C73-41C3-B489-97FD5E635CCB}.Release|Win32.Build.0 = Release|Win32 - {304FD6A7-6C73-41C3-B489-97FD5E635CCB}.Release|x64.ActiveCfg = Release|x64 - {304FD6A7-6C73-41C3-B489-97FD5E635CCB}.Release|x64.Build.0 = Release|x64 - {4277B39A-C9FB-4F10-8223-8DD38053EDA0}.Debug|Win32.ActiveCfg = Debug|Win32 - {4277B39A-C9FB-4F10-8223-8DD38053EDA0}.Debug|Win32.Build.0 = Debug|Win32 - {4277B39A-C9FB-4F10-8223-8DD38053EDA0}.Debug|x64.ActiveCfg = Debug|x64 - {4277B39A-C9FB-4F10-8223-8DD38053EDA0}.Debug|x64.Build.0 = Debug|x64 - {4277B39A-C9FB-4F10-8223-8DD38053EDA0}.Release|Win32.ActiveCfg = Release|Win32 - {4277B39A-C9FB-4F10-8223-8DD38053EDA0}.Release|Win32.Build.0 = Release|Win32 - {4277B39A-C9FB-4F10-8223-8DD38053EDA0}.Release|x64.ActiveCfg = Release|x64 - {4277B39A-C9FB-4F10-8223-8DD38053EDA0}.Release|x64.Build.0 = Release|x64 - {3AC187DF-4FDF-40B7-9E12-002DC0A15EDB}.Debug|Win32.ActiveCfg = Debug|Win32 - {3AC187DF-4FDF-40B7-9E12-002DC0A15EDB}.Debug|Win32.Build.0 = Debug|Win32 - {3AC187DF-4FDF-40B7-9E12-002DC0A15EDB}.Debug|x64.ActiveCfg = Debug|x64 - {3AC187DF-4FDF-40B7-9E12-002DC0A15EDB}.Debug|x64.Build.0 = Debug|x64 - {3AC187DF-4FDF-40B7-9E12-002DC0A15EDB}.Release|Win32.ActiveCfg = Release|Win32 - {3AC187DF-4FDF-40B7-9E12-002DC0A15EDB}.Release|Win32.Build.0 = Release|Win32 - {3AC187DF-4FDF-40B7-9E12-002DC0A15EDB}.Release|x64.ActiveCfg = Release|x64 - {3AC187DF-4FDF-40B7-9E12-002DC0A15EDB}.Release|x64.Build.0 = Release|x64 - {E05F914A-490B-4780-9BAB-1ED225B3DBEE}.Debug|Win32.ActiveCfg = Debug|Win32 - {E05F914A-490B-4780-9BAB-1ED225B3DBEE}.Debug|Win32.Build.0 = Debug|Win32 - {E05F914A-490B-4780-9BAB-1ED225B3DBEE}.Debug|x64.ActiveCfg = Debug|x64 - {E05F914A-490B-4780-9BAB-1ED225B3DBEE}.Debug|x64.Build.0 = Debug|x64 - {E05F914A-490B-4780-9BAB-1ED225B3DBEE}.Release|Win32.ActiveCfg = Release|Win32 - {E05F914A-490B-4780-9BAB-1ED225B3DBEE}.Release|Win32.Build.0 = Release|Win32 - {E05F914A-490B-4780-9BAB-1ED225B3DBEE}.Release|x64.ActiveCfg = Release|x64 - {E05F914A-490B-4780-9BAB-1ED225B3DBEE}.Release|x64.Build.0 = Release|x64 - {FB2098FC-CE8C-4A6B-A064-E2705324A16A}.Debug|Win32.ActiveCfg = Debug|Win32 - {FB2098FC-CE8C-4A6B-A064-E2705324A16A}.Debug|Win32.Build.0 = Debug|Win32 - {FB2098FC-CE8C-4A6B-A064-E2705324A16A}.Debug|x64.ActiveCfg = Debug|x64 - {FB2098FC-CE8C-4A6B-A064-E2705324A16A}.Debug|x64.Build.0 = Debug|x64 - {FB2098FC-CE8C-4A6B-A064-E2705324A16A}.Release|Win32.ActiveCfg = Release|Win32 - {FB2098FC-CE8C-4A6B-A064-E2705324A16A}.Release|Win32.Build.0 = Release|Win32 - {FB2098FC-CE8C-4A6B-A064-E2705324A16A}.Release|x64.ActiveCfg = Release|x64 - {FB2098FC-CE8C-4A6B-A064-E2705324A16A}.Release|x64.Build.0 = Release|x64 - {9832425B-38D5-44EC-AED6-3ED4353B24EA}.Debug|Win32.ActiveCfg = Debug|Win32 - {9832425B-38D5-44EC-AED6-3ED4353B24EA}.Debug|Win32.Build.0 = Debug|Win32 - {9832425B-38D5-44EC-AED6-3ED4353B24EA}.Debug|x64.ActiveCfg = Debug|x64 - {9832425B-38D5-44EC-AED6-3ED4353B24EA}.Debug|x64.Build.0 = Debug|x64 - {9832425B-38D5-44EC-AED6-3ED4353B24EA}.Release|Win32.ActiveCfg = Release|Win32 - {9832425B-38D5-44EC-AED6-3ED4353B24EA}.Release|Win32.Build.0 = Release|Win32 - {9832425B-38D5-44EC-AED6-3ED4353B24EA}.Release|x64.ActiveCfg = Release|x64 - {9832425B-38D5-44EC-AED6-3ED4353B24EA}.Release|x64.Build.0 = Release|x64 - {676CB1A8-1060-4B7F-86FA-5F8F01AB80BD}.Debug|Win32.ActiveCfg = Debug|Win32 - {676CB1A8-1060-4B7F-86FA-5F8F01AB80BD}.Debug|Win32.Build.0 = Debug|Win32 - {676CB1A8-1060-4B7F-86FA-5F8F01AB80BD}.Debug|x64.ActiveCfg = Debug|x64 - {676CB1A8-1060-4B7F-86FA-5F8F01AB80BD}.Debug|x64.Build.0 = Debug|x64 - {676CB1A8-1060-4B7F-86FA-5F8F01AB80BD}.Release|Win32.ActiveCfg = Release|Win32 - {676CB1A8-1060-4B7F-86FA-5F8F01AB80BD}.Release|Win32.Build.0 = Release|Win32 - {676CB1A8-1060-4B7F-86FA-5F8F01AB80BD}.Release|x64.ActiveCfg = Release|x64 - {676CB1A8-1060-4B7F-86FA-5F8F01AB80BD}.Release|x64.Build.0 = Release|x64 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal diff --git a/xsd/dist/examples/cxx/parser/parser-7.1.sln b/xsd/dist/examples/cxx/parser/parser-7.1.sln deleted file mode 100644 index f274b0b..0000000 --- a/xsd/dist/examples/cxx/parser/parser-7.1.sln +++ /dev/null @@ -1,93 +0,0 @@ -Microsoft Visual Studio Solution File, Format Version 8.00 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "hello", "hello\hello-7.1.vcproj", "{683E9D46-FCC7-4163-984B-9F399169CF7F}" - ProjectSection(ProjectDependencies) = postProject - EndProjectSection -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "library", "library\library-7.1.vcproj", "{D66DAC4D-133C-4DB5-923F-C88A961C3C51}" - ProjectSection(ProjectDependencies) = postProject - EndProjectSection -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mixin", "mixin\mixin-7.1.vcproj", "{8CCA6181-F2CE-4E5E-A20E-4E1E53A35125}" - ProjectSection(ProjectDependencies) = postProject - EndProjectSection -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mixed", "mixed\mixed-7.1.vcproj", "{304FD6A7-6C73-41C3-B489-97FD5E635CCB}" - ProjectSection(ProjectDependencies) = postProject - EndProjectSection -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "generated", "generated\generated-7.1.vcproj", "{4277B39A-C9FB-4F10-8223-8DD38053EDA0}" - ProjectSection(ProjectDependencies) = postProject - EndProjectSection -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "multiroot", "multiroot\multiroot-7.1.vcproj", "{3AC187DF-4FDF-40B7-9E12-002DC0A15EDB}" - ProjectSection(ProjectDependencies) = postProject - EndProjectSection -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "polymorphism", "polymorphism\polymorphism-7.1.vcproj", "{E05F914A-490B-4780-9BAB-1ED225B3DBEE}" - ProjectSection(ProjectDependencies) = postProject - EndProjectSection -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "polyroot", "polyroot\polyroot-7.1.vcproj", "{FB2098FC-CE8C-4A6B-A064-E2705324A16A}" - ProjectSection(ProjectDependencies) = postProject - EndProjectSection -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "wildcard", "wildcard\wildcard-7.1.vcproj", "{9832425B-38D5-44EC-AED6-3ED4353B24EA}" - ProjectSection(ProjectDependencies) = postProject - EndProjectSection -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "performance", "performance\performance-7.1.vcproj", "{676CB1A8-1060-4B7F-86FA-5F8F01AB80BD}" - ProjectSection(ProjectDependencies) = postProject - EndProjectSection -EndProject -Global - GlobalSection(SolutionConfiguration) = preSolution - Debug = Debug - Release = Release - EndGlobalSection - GlobalSection(ProjectConfiguration) = postSolution - {683E9D46-FCC7-4163-984B-9F399169CF7F}.Debug.ActiveCfg = Debug|Win32 - {683E9D46-FCC7-4163-984B-9F399169CF7F}.Debug.Build.0 = Debug|Win32 - {683E9D46-FCC7-4163-984B-9F399169CF7F}.Release.ActiveCfg = Release|Win32 - {683E9D46-FCC7-4163-984B-9F399169CF7F}.Release.Build.0 = Release|Win32 - {D66DAC4D-133C-4DB5-923F-C88A961C3C51}.Debug.ActiveCfg = Debug|Win32 - {D66DAC4D-133C-4DB5-923F-C88A961C3C51}.Debug.Build.0 = Debug|Win32 - {D66DAC4D-133C-4DB5-923F-C88A961C3C51}.Release.ActiveCfg = Release|Win32 - {D66DAC4D-133C-4DB5-923F-C88A961C3C51}.Release.Build.0 = Release|Win32 - {8CCA6181-F2CE-4E5E-A20E-4E1E53A35125}.Debug.ActiveCfg = Debug|Win32 - {8CCA6181-F2CE-4E5E-A20E-4E1E53A35125}.Debug.Build.0 = Debug|Win32 - {8CCA6181-F2CE-4E5E-A20E-4E1E53A35125}.Release.ActiveCfg = Release|Win32 - {8CCA6181-F2CE-4E5E-A20E-4E1E53A35125}.Release.Build.0 = Release|Win32 - {304FD6A7-6C73-41C3-B489-97FD5E635CCB}.Debug.ActiveCfg = Debug|Win32 - {304FD6A7-6C73-41C3-B489-97FD5E635CCB}.Debug.Build.0 = Debug|Win32 - {304FD6A7-6C73-41C3-B489-97FD5E635CCB}.Release.ActiveCfg = Release|Win32 - {304FD6A7-6C73-41C3-B489-97FD5E635CCB}.Release.Build.0 = Release|Win32 - {4277B39A-C9FB-4F10-8223-8DD38053EDA0}.Debug.ActiveCfg = Debug|Win32 - {4277B39A-C9FB-4F10-8223-8DD38053EDA0}.Debug.Build.0 = Debug|Win32 - {4277B39A-C9FB-4F10-8223-8DD38053EDA0}.Release.ActiveCfg = Release|Win32 - {4277B39A-C9FB-4F10-8223-8DD38053EDA0}.Release.Build.0 = Release|Win32 - {3AC187DF-4FDF-40B7-9E12-002DC0A15EDB}.Debug.ActiveCfg = Debug|Win32 - {3AC187DF-4FDF-40B7-9E12-002DC0A15EDB}.Debug.Build.0 = Debug|Win32 - {3AC187DF-4FDF-40B7-9E12-002DC0A15EDB}.Release.ActiveCfg = Release|Win32 - {3AC187DF-4FDF-40B7-9E12-002DC0A15EDB}.Release.Build.0 = Release|Win32 - {9832425B-38D5-44EC-AED6-3ED4353B24EA}.Debug.ActiveCfg = Debug|Win32 - {9832425B-38D5-44EC-AED6-3ED4353B24EA}.Debug.Build.0 = Debug|Win32 - {9832425B-38D5-44EC-AED6-3ED4353B24EA}.Release.ActiveCfg = Release|Win32 - {9832425B-38D5-44EC-AED6-3ED4353B24EA}.Release.Build.0 = Release|Win32 - {E05F914A-490B-4780-9BAB-1ED225B3DBEE}.Debug.ActiveCfg = Debug|Win32 - {E05F914A-490B-4780-9BAB-1ED225B3DBEE}.Debug.Build.0 = Debug|Win32 - {E05F914A-490B-4780-9BAB-1ED225B3DBEE}.Release.ActiveCfg = Release|Win32 - {E05F914A-490B-4780-9BAB-1ED225B3DBEE}.Release.Build.0 = Release|Win32 - {FB2098FC-CE8C-4A6B-A064-E2705324A16A}.Debug.ActiveCfg = Debug|Win32 - {FB2098FC-CE8C-4A6B-A064-E2705324A16A}.Debug.Build.0 = Debug|Win32 - {FB2098FC-CE8C-4A6B-A064-E2705324A16A}.Release.ActiveCfg = Release|Win32 - {FB2098FC-CE8C-4A6B-A064-E2705324A16A}.Release.Build.0 = Release|Win32 - {676CB1A8-1060-4B7F-86FA-5F8F01AB80BD}.Debug.ActiveCfg = Debug|Win32 - {676CB1A8-1060-4B7F-86FA-5F8F01AB80BD}.Debug.Build.0 = Debug|Win32 - {676CB1A8-1060-4B7F-86FA-5F8F01AB80BD}.Release.ActiveCfg = Release|Win32 - {676CB1A8-1060-4B7F-86FA-5F8F01AB80BD}.Release.Build.0 = Release|Win32 - EndGlobalSection - GlobalSection(ExtensibilityGlobals) = postSolution - EndGlobalSection - GlobalSection(ExtensibilityAddIns) = postSolution - EndGlobalSection -EndGlobal diff --git a/xsd/dist/examples/cxx/parser/parser-8.0.sln b/xsd/dist/examples/cxx/parser/parser-8.0.sln deleted file mode 100644 index bbb3691..0000000 --- a/xsd/dist/examples/cxx/parser/parser-8.0.sln +++ /dev/null @@ -1,115 +0,0 @@ -Microsoft Visual Studio Solution File, Format Version 9.00 -# Visual Studio 2005 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "hello", "hello\hello-8.0.vcproj", "{683E9D46-FCC7-4163-984B-9F399169CF7F}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "library", "library\library-8.0.vcproj", "{D66DAC4D-133C-4DB5-923F-C88A961C3C51}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mixin", "mixin\mixin-8.0.vcproj", "{8CCA6181-F2CE-4E5E-A20E-4E1E53A35125}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mixed", "mixed\mixed-8.0.vcproj", "{304FD6A7-6C73-41C3-B489-97FD5E635CCB}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "generated", "generated\generated-8.0.vcproj", "{4277B39A-C9FB-4F10-8223-8DD38053EDA0}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "multiroot", "multiroot\multiroot-8.0.vcproj", "{3AC187DF-4FDF-40B7-9E12-002DC0A15EDB}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "polymorphism", "polymorphism\polymorphism-8.0.vcproj", "{E05F914A-490B-4780-9BAB-1ED225B3DBEE}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "polyroot", "polyroot\polyroot-8.0.vcproj", "{FB2098FC-CE8C-4A6B-A064-E2705324A16A}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "wildcard", "wildcard\wildcard-8.0.vcproj", "{9832425B-38D5-44EC-AED6-3ED4353B24EA}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "performance", "performance\performance-8.0.vcproj", "{676CB1A8-1060-4B7F-86FA-5F8F01AB80BD}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Win32 = Debug|Win32 - Debug|x64 = Debug|x64 - Release|Win32 = Release|Win32 - Release|x64 = Release|x64 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {683E9D46-FCC7-4163-984B-9F399169CF7F}.Debug|Win32.ActiveCfg = Debug|Win32 - {683E9D46-FCC7-4163-984B-9F399169CF7F}.Debug|Win32.Build.0 = Debug|Win32 - {683E9D46-FCC7-4163-984B-9F399169CF7F}.Debug|x64.ActiveCfg = Debug|x64 - {683E9D46-FCC7-4163-984B-9F399169CF7F}.Debug|x64.Build.0 = Debug|x64 - {683E9D46-FCC7-4163-984B-9F399169CF7F}.Release|Win32.ActiveCfg = Release|Win32 - {683E9D46-FCC7-4163-984B-9F399169CF7F}.Release|Win32.Build.0 = Release|Win32 - {683E9D46-FCC7-4163-984B-9F399169CF7F}.Release|x64.ActiveCfg = Release|x64 - {683E9D46-FCC7-4163-984B-9F399169CF7F}.Release|x64.Build.0 = Release|x64 - {D66DAC4D-133C-4DB5-923F-C88A961C3C51}.Debug|Win32.ActiveCfg = Debug|Win32 - {D66DAC4D-133C-4DB5-923F-C88A961C3C51}.Debug|Win32.Build.0 = Debug|Win32 - {D66DAC4D-133C-4DB5-923F-C88A961C3C51}.Debug|x64.ActiveCfg = Debug|x64 - {D66DAC4D-133C-4DB5-923F-C88A961C3C51}.Debug|x64.Build.0 = Debug|x64 - {D66DAC4D-133C-4DB5-923F-C88A961C3C51}.Release|Win32.ActiveCfg = Release|Win32 - {D66DAC4D-133C-4DB5-923F-C88A961C3C51}.Release|Win32.Build.0 = Release|Win32 - {D66DAC4D-133C-4DB5-923F-C88A961C3C51}.Release|x64.ActiveCfg = Release|x64 - {D66DAC4D-133C-4DB5-923F-C88A961C3C51}.Release|x64.Build.0 = Release|x64 - {8CCA6181-F2CE-4E5E-A20E-4E1E53A35125}.Debug|Win32.ActiveCfg = Debug|Win32 - {8CCA6181-F2CE-4E5E-A20E-4E1E53A35125}.Debug|Win32.Build.0 = Debug|Win32 - {8CCA6181-F2CE-4E5E-A20E-4E1E53A35125}.Debug|x64.ActiveCfg = Debug|x64 - {8CCA6181-F2CE-4E5E-A20E-4E1E53A35125}.Debug|x64.Build.0 = Debug|x64 - {8CCA6181-F2CE-4E5E-A20E-4E1E53A35125}.Release|Win32.ActiveCfg = Release|Win32 - {8CCA6181-F2CE-4E5E-A20E-4E1E53A35125}.Release|Win32.Build.0 = Release|Win32 - {8CCA6181-F2CE-4E5E-A20E-4E1E53A35125}.Release|x64.ActiveCfg = Release|x64 - {8CCA6181-F2CE-4E5E-A20E-4E1E53A35125}.Release|x64.Build.0 = Release|x64 - {304FD6A7-6C73-41C3-B489-97FD5E635CCB}.Debug|Win32.ActiveCfg = Debug|Win32 - {304FD6A7-6C73-41C3-B489-97FD5E635CCB}.Debug|Win32.Build.0 = Debug|Win32 - {304FD6A7-6C73-41C3-B489-97FD5E635CCB}.Debug|x64.ActiveCfg = Debug|x64 - {304FD6A7-6C73-41C3-B489-97FD5E635CCB}.Debug|x64.Build.0 = Debug|x64 - {304FD6A7-6C73-41C3-B489-97FD5E635CCB}.Release|Win32.ActiveCfg = Release|Win32 - {304FD6A7-6C73-41C3-B489-97FD5E635CCB}.Release|Win32.Build.0 = Release|Win32 - {304FD6A7-6C73-41C3-B489-97FD5E635CCB}.Release|x64.ActiveCfg = Release|x64 - {304FD6A7-6C73-41C3-B489-97FD5E635CCB}.Release|x64.Build.0 = Release|x64 - {4277B39A-C9FB-4F10-8223-8DD38053EDA0}.Debug|Win32.ActiveCfg = Debug|Win32 - {4277B39A-C9FB-4F10-8223-8DD38053EDA0}.Debug|Win32.Build.0 = Debug|Win32 - {4277B39A-C9FB-4F10-8223-8DD38053EDA0}.Debug|x64.ActiveCfg = Debug|x64 - {4277B39A-C9FB-4F10-8223-8DD38053EDA0}.Debug|x64.Build.0 = Debug|x64 - {4277B39A-C9FB-4F10-8223-8DD38053EDA0}.Release|Win32.ActiveCfg = Release|Win32 - {4277B39A-C9FB-4F10-8223-8DD38053EDA0}.Release|Win32.Build.0 = Release|Win32 - {4277B39A-C9FB-4F10-8223-8DD38053EDA0}.Release|x64.ActiveCfg = Release|x64 - {4277B39A-C9FB-4F10-8223-8DD38053EDA0}.Release|x64.Build.0 = Release|x64 - {3AC187DF-4FDF-40B7-9E12-002DC0A15EDB}.Debug|Win32.ActiveCfg = Debug|Win32 - {3AC187DF-4FDF-40B7-9E12-002DC0A15EDB}.Debug|Win32.Build.0 = Debug|Win32 - {3AC187DF-4FDF-40B7-9E12-002DC0A15EDB}.Debug|x64.ActiveCfg = Debug|x64 - {3AC187DF-4FDF-40B7-9E12-002DC0A15EDB}.Debug|x64.Build.0 = Debug|x64 - {3AC187DF-4FDF-40B7-9E12-002DC0A15EDB}.Release|Win32.ActiveCfg = Release|Win32 - {3AC187DF-4FDF-40B7-9E12-002DC0A15EDB}.Release|Win32.Build.0 = Release|Win32 - {3AC187DF-4FDF-40B7-9E12-002DC0A15EDB}.Release|x64.ActiveCfg = Release|x64 - {3AC187DF-4FDF-40B7-9E12-002DC0A15EDB}.Release|x64.Build.0 = Release|x64 - {E05F914A-490B-4780-9BAB-1ED225B3DBEE}.Debug|Win32.ActiveCfg = Debug|Win32 - {E05F914A-490B-4780-9BAB-1ED225B3DBEE}.Debug|Win32.Build.0 = Debug|Win32 - {E05F914A-490B-4780-9BAB-1ED225B3DBEE}.Debug|x64.ActiveCfg = Debug|x64 - {E05F914A-490B-4780-9BAB-1ED225B3DBEE}.Debug|x64.Build.0 = Debug|x64 - {E05F914A-490B-4780-9BAB-1ED225B3DBEE}.Release|Win32.ActiveCfg = Release|Win32 - {E05F914A-490B-4780-9BAB-1ED225B3DBEE}.Release|Win32.Build.0 = Release|Win32 - {E05F914A-490B-4780-9BAB-1ED225B3DBEE}.Release|x64.ActiveCfg = Release|x64 - {E05F914A-490B-4780-9BAB-1ED225B3DBEE}.Release|x64.Build.0 = Release|x64 - {FB2098FC-CE8C-4A6B-A064-E2705324A16A}.Debug|Win32.ActiveCfg = Debug|Win32 - {FB2098FC-CE8C-4A6B-A064-E2705324A16A}.Debug|Win32.Build.0 = Debug|Win32 - {FB2098FC-CE8C-4A6B-A064-E2705324A16A}.Debug|x64.ActiveCfg = Debug|x64 - {FB2098FC-CE8C-4A6B-A064-E2705324A16A}.Debug|x64.Build.0 = Debug|x64 - {FB2098FC-CE8C-4A6B-A064-E2705324A16A}.Release|Win32.ActiveCfg = Release|Win32 - {FB2098FC-CE8C-4A6B-A064-E2705324A16A}.Release|Win32.Build.0 = Release|Win32 - {FB2098FC-CE8C-4A6B-A064-E2705324A16A}.Release|x64.ActiveCfg = Release|x64 - {FB2098FC-CE8C-4A6B-A064-E2705324A16A}.Release|x64.Build.0 = Release|x64 - {9832425B-38D5-44EC-AED6-3ED4353B24EA}.Debug|Win32.ActiveCfg = Debug|Win32 - {9832425B-38D5-44EC-AED6-3ED4353B24EA}.Debug|Win32.Build.0 = Debug|Win32 - {9832425B-38D5-44EC-AED6-3ED4353B24EA}.Debug|x64.ActiveCfg = Debug|x64 - {9832425B-38D5-44EC-AED6-3ED4353B24EA}.Debug|x64.Build.0 = Debug|x64 - {9832425B-38D5-44EC-AED6-3ED4353B24EA}.Release|Win32.ActiveCfg = Release|Win32 - {9832425B-38D5-44EC-AED6-3ED4353B24EA}.Release|Win32.Build.0 = Release|Win32 - {9832425B-38D5-44EC-AED6-3ED4353B24EA}.Release|x64.ActiveCfg = Release|x64 - {9832425B-38D5-44EC-AED6-3ED4353B24EA}.Release|x64.Build.0 = Release|x64 - {676CB1A8-1060-4B7F-86FA-5F8F01AB80BD}.Debug|Win32.ActiveCfg = Debug|Win32 - {676CB1A8-1060-4B7F-86FA-5F8F01AB80BD}.Debug|Win32.Build.0 = Debug|Win32 - {676CB1A8-1060-4B7F-86FA-5F8F01AB80BD}.Debug|x64.ActiveCfg = Debug|x64 - {676CB1A8-1060-4B7F-86FA-5F8F01AB80BD}.Debug|x64.Build.0 = Debug|x64 - {676CB1A8-1060-4B7F-86FA-5F8F01AB80BD}.Release|Win32.ActiveCfg = Release|Win32 - {676CB1A8-1060-4B7F-86FA-5F8F01AB80BD}.Release|Win32.Build.0 = Release|Win32 - {676CB1A8-1060-4B7F-86FA-5F8F01AB80BD}.Release|x64.ActiveCfg = Release|x64 - {676CB1A8-1060-4B7F-86FA-5F8F01AB80BD}.Release|x64.Build.0 = Release|x64 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal diff --git a/xsd/dist/examples/cxx/parser/parser-9.0.sln b/xsd/dist/examples/cxx/parser/parser-9.0.sln deleted file mode 100644 index aa5f95d..0000000 --- a/xsd/dist/examples/cxx/parser/parser-9.0.sln +++ /dev/null @@ -1,115 +0,0 @@ -Microsoft Visual Studio Solution File, Format Version 10.00 -# Visual Studio 2008 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "hello", "hello\hello-9.0.vcproj", "{683E9D46-FCC7-4163-984B-9F399169CF7F}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "library", "library\library-9.0.vcproj", "{D66DAC4D-133C-4DB5-923F-C88A961C3C51}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mixin", "mixin\mixin-9.0.vcproj", "{8CCA6181-F2CE-4E5E-A20E-4E1E53A35125}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mixed", "mixed\mixed-9.0.vcproj", "{304FD6A7-6C73-41C3-B489-97FD5E635CCB}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "generated", "generated\generated-9.0.vcproj", "{4277B39A-C9FB-4F10-8223-8DD38053EDA0}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "multiroot", "multiroot\multiroot-9.0.vcproj", "{3AC187DF-4FDF-40B7-9E12-002DC0A15EDB}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "polymorphism", "polymorphism\polymorphism-9.0.vcproj", "{E05F914A-490B-4780-9BAB-1ED225B3DBEE}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "polyroot", "polyroot\polyroot-9.0.vcproj", "{FB2098FC-CE8C-4A6B-A064-E2705324A16A}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "wildcard", "wildcard\wildcard-9.0.vcproj", "{9832425B-38D5-44EC-AED6-3ED4353B24EA}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "performance", "performance\performance-9.0.vcproj", "{676CB1A8-1060-4B7F-86FA-5F8F01AB80BD}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Win32 = Debug|Win32 - Debug|x64 = Debug|x64 - Release|Win32 = Release|Win32 - Release|x64 = Release|x64 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {683E9D46-FCC7-4163-984B-9F399169CF7F}.Debug|Win32.ActiveCfg = Debug|Win32 - {683E9D46-FCC7-4163-984B-9F399169CF7F}.Debug|Win32.Build.0 = Debug|Win32 - {683E9D46-FCC7-4163-984B-9F399169CF7F}.Debug|x64.ActiveCfg = Debug|x64 - {683E9D46-FCC7-4163-984B-9F399169CF7F}.Debug|x64.Build.0 = Debug|x64 - {683E9D46-FCC7-4163-984B-9F399169CF7F}.Release|Win32.ActiveCfg = Release|Win32 - {683E9D46-FCC7-4163-984B-9F399169CF7F}.Release|Win32.Build.0 = Release|Win32 - {683E9D46-FCC7-4163-984B-9F399169CF7F}.Release|x64.ActiveCfg = Release|x64 - {683E9D46-FCC7-4163-984B-9F399169CF7F}.Release|x64.Build.0 = Release|x64 - {D66DAC4D-133C-4DB5-923F-C88A961C3C51}.Debug|Win32.ActiveCfg = Debug|Win32 - {D66DAC4D-133C-4DB5-923F-C88A961C3C51}.Debug|Win32.Build.0 = Debug|Win32 - {D66DAC4D-133C-4DB5-923F-C88A961C3C51}.Debug|x64.ActiveCfg = Debug|x64 - {D66DAC4D-133C-4DB5-923F-C88A961C3C51}.Debug|x64.Build.0 = Debug|x64 - {D66DAC4D-133C-4DB5-923F-C88A961C3C51}.Release|Win32.ActiveCfg = Release|Win32 - {D66DAC4D-133C-4DB5-923F-C88A961C3C51}.Release|Win32.Build.0 = Release|Win32 - {D66DAC4D-133C-4DB5-923F-C88A961C3C51}.Release|x64.ActiveCfg = Release|x64 - {D66DAC4D-133C-4DB5-923F-C88A961C3C51}.Release|x64.Build.0 = Release|x64 - {8CCA6181-F2CE-4E5E-A20E-4E1E53A35125}.Debug|Win32.ActiveCfg = Debug|Win32 - {8CCA6181-F2CE-4E5E-A20E-4E1E53A35125}.Debug|Win32.Build.0 = Debug|Win32 - {8CCA6181-F2CE-4E5E-A20E-4E1E53A35125}.Debug|x64.ActiveCfg = Debug|x64 - {8CCA6181-F2CE-4E5E-A20E-4E1E53A35125}.Debug|x64.Build.0 = Debug|x64 - {8CCA6181-F2CE-4E5E-A20E-4E1E53A35125}.Release|Win32.ActiveCfg = Release|Win32 - {8CCA6181-F2CE-4E5E-A20E-4E1E53A35125}.Release|Win32.Build.0 = Release|Win32 - {8CCA6181-F2CE-4E5E-A20E-4E1E53A35125}.Release|x64.ActiveCfg = Release|x64 - {8CCA6181-F2CE-4E5E-A20E-4E1E53A35125}.Release|x64.Build.0 = Release|x64 - {304FD6A7-6C73-41C3-B489-97FD5E635CCB}.Debug|Win32.ActiveCfg = Debug|Win32 - {304FD6A7-6C73-41C3-B489-97FD5E635CCB}.Debug|Win32.Build.0 = Debug|Win32 - {304FD6A7-6C73-41C3-B489-97FD5E635CCB}.Debug|x64.ActiveCfg = Debug|x64 - {304FD6A7-6C73-41C3-B489-97FD5E635CCB}.Debug|x64.Build.0 = Debug|x64 - {304FD6A7-6C73-41C3-B489-97FD5E635CCB}.Release|Win32.ActiveCfg = Release|Win32 - {304FD6A7-6C73-41C3-B489-97FD5E635CCB}.Release|Win32.Build.0 = Release|Win32 - {304FD6A7-6C73-41C3-B489-97FD5E635CCB}.Release|x64.ActiveCfg = Release|x64 - {304FD6A7-6C73-41C3-B489-97FD5E635CCB}.Release|x64.Build.0 = Release|x64 - {4277B39A-C9FB-4F10-8223-8DD38053EDA0}.Debug|Win32.ActiveCfg = Debug|Win32 - {4277B39A-C9FB-4F10-8223-8DD38053EDA0}.Debug|Win32.Build.0 = Debug|Win32 - {4277B39A-C9FB-4F10-8223-8DD38053EDA0}.Debug|x64.ActiveCfg = Debug|x64 - {4277B39A-C9FB-4F10-8223-8DD38053EDA0}.Debug|x64.Build.0 = Debug|x64 - {4277B39A-C9FB-4F10-8223-8DD38053EDA0}.Release|Win32.ActiveCfg = Release|Win32 - {4277B39A-C9FB-4F10-8223-8DD38053EDA0}.Release|Win32.Build.0 = Release|Win32 - {4277B39A-C9FB-4F10-8223-8DD38053EDA0}.Release|x64.ActiveCfg = Release|x64 - {4277B39A-C9FB-4F10-8223-8DD38053EDA0}.Release|x64.Build.0 = Release|x64 - {3AC187DF-4FDF-40B7-9E12-002DC0A15EDB}.Debug|Win32.ActiveCfg = Debug|Win32 - {3AC187DF-4FDF-40B7-9E12-002DC0A15EDB}.Debug|Win32.Build.0 = Debug|Win32 - {3AC187DF-4FDF-40B7-9E12-002DC0A15EDB}.Debug|x64.ActiveCfg = Debug|x64 - {3AC187DF-4FDF-40B7-9E12-002DC0A15EDB}.Debug|x64.Build.0 = Debug|x64 - {3AC187DF-4FDF-40B7-9E12-002DC0A15EDB}.Release|Win32.ActiveCfg = Release|Win32 - {3AC187DF-4FDF-40B7-9E12-002DC0A15EDB}.Release|Win32.Build.0 = Release|Win32 - {3AC187DF-4FDF-40B7-9E12-002DC0A15EDB}.Release|x64.ActiveCfg = Release|x64 - {3AC187DF-4FDF-40B7-9E12-002DC0A15EDB}.Release|x64.Build.0 = Release|x64 - {E05F914A-490B-4780-9BAB-1ED225B3DBEE}.Debug|Win32.ActiveCfg = Debug|Win32 - {E05F914A-490B-4780-9BAB-1ED225B3DBEE}.Debug|Win32.Build.0 = Debug|Win32 - {E05F914A-490B-4780-9BAB-1ED225B3DBEE}.Debug|x64.ActiveCfg = Debug|x64 - {E05F914A-490B-4780-9BAB-1ED225B3DBEE}.Debug|x64.Build.0 = Debug|x64 - {E05F914A-490B-4780-9BAB-1ED225B3DBEE}.Release|Win32.ActiveCfg = Release|Win32 - {E05F914A-490B-4780-9BAB-1ED225B3DBEE}.Release|Win32.Build.0 = Release|Win32 - {E05F914A-490B-4780-9BAB-1ED225B3DBEE}.Release|x64.ActiveCfg = Release|x64 - {E05F914A-490B-4780-9BAB-1ED225B3DBEE}.Release|x64.Build.0 = Release|x64 - {FB2098FC-CE8C-4A6B-A064-E2705324A16A}.Debug|Win32.ActiveCfg = Debug|Win32 - {FB2098FC-CE8C-4A6B-A064-E2705324A16A}.Debug|Win32.Build.0 = Debug|Win32 - {FB2098FC-CE8C-4A6B-A064-E2705324A16A}.Debug|x64.ActiveCfg = Debug|x64 - {FB2098FC-CE8C-4A6B-A064-E2705324A16A}.Debug|x64.Build.0 = Debug|x64 - {FB2098FC-CE8C-4A6B-A064-E2705324A16A}.Release|Win32.ActiveCfg = Release|Win32 - {FB2098FC-CE8C-4A6B-A064-E2705324A16A}.Release|Win32.Build.0 = Release|Win32 - {FB2098FC-CE8C-4A6B-A064-E2705324A16A}.Release|x64.ActiveCfg = Release|x64 - {FB2098FC-CE8C-4A6B-A064-E2705324A16A}.Release|x64.Build.0 = Release|x64 - {9832425B-38D5-44EC-AED6-3ED4353B24EA}.Debug|Win32.ActiveCfg = Debug|Win32 - {9832425B-38D5-44EC-AED6-3ED4353B24EA}.Debug|Win32.Build.0 = Debug|Win32 - {9832425B-38D5-44EC-AED6-3ED4353B24EA}.Debug|x64.ActiveCfg = Debug|x64 - {9832425B-38D5-44EC-AED6-3ED4353B24EA}.Debug|x64.Build.0 = Debug|x64 - {9832425B-38D5-44EC-AED6-3ED4353B24EA}.Release|Win32.ActiveCfg = Release|Win32 - {9832425B-38D5-44EC-AED6-3ED4353B24EA}.Release|Win32.Build.0 = Release|Win32 - {9832425B-38D5-44EC-AED6-3ED4353B24EA}.Release|x64.ActiveCfg = Release|x64 - {9832425B-38D5-44EC-AED6-3ED4353B24EA}.Release|x64.Build.0 = Release|x64 - {676CB1A8-1060-4B7F-86FA-5F8F01AB80BD}.Debug|Win32.ActiveCfg = Debug|Win32 - {676CB1A8-1060-4B7F-86FA-5F8F01AB80BD}.Debug|Win32.Build.0 = Debug|Win32 - {676CB1A8-1060-4B7F-86FA-5F8F01AB80BD}.Debug|x64.ActiveCfg = Debug|x64 - {676CB1A8-1060-4B7F-86FA-5F8F01AB80BD}.Debug|x64.Build.0 = Debug|x64 - {676CB1A8-1060-4B7F-86FA-5F8F01AB80BD}.Release|Win32.ActiveCfg = Release|Win32 - {676CB1A8-1060-4B7F-86FA-5F8F01AB80BD}.Release|Win32.Build.0 = Release|Win32 - {676CB1A8-1060-4B7F-86FA-5F8F01AB80BD}.Release|x64.ActiveCfg = Release|x64 - {676CB1A8-1060-4B7F-86FA-5F8F01AB80BD}.Release|x64.Build.0 = Release|x64 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal diff --git a/xsd/dist/examples/cxx/parser/parser-xerces2-7.1.sln b/xsd/dist/examples/cxx/parser/parser-xerces2-7.1.sln deleted file mode 100644 index 83886e5..0000000 --- a/xsd/dist/examples/cxx/parser/parser-xerces2-7.1.sln +++ /dev/null @@ -1,93 +0,0 @@ -Microsoft Visual Studio Solution File, Format Version 8.00 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "hello", "hello\hello-xerces2-7.1.vcproj", "{683E9D46-FCC7-4163-984B-9F399169CF7F}" - ProjectSection(ProjectDependencies) = postProject - EndProjectSection -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "library", "library\library-xerces2-7.1.vcproj", "{D66DAC4D-133C-4DB5-923F-C88A961C3C51}" - ProjectSection(ProjectDependencies) = postProject - EndProjectSection -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mixin", "mixin\mixin-xerces2-7.1.vcproj", "{8CCA6181-F2CE-4E5E-A20E-4E1E53A35125}" - ProjectSection(ProjectDependencies) = postProject - EndProjectSection -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mixed", "mixed\mixed-xerces2-7.1.vcproj", "{304FD6A7-6C73-41C3-B489-97FD5E635CCB}" - ProjectSection(ProjectDependencies) = postProject - EndProjectSection -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "generated", "generated\generated-xerces2-7.1.vcproj", "{4277B39A-C9FB-4F10-8223-8DD38053EDA0}" - ProjectSection(ProjectDependencies) = postProject - EndProjectSection -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "multiroot", "multiroot\multiroot-xerces2-7.1.vcproj", "{3AC187DF-4FDF-40B7-9E12-002DC0A15EDB}" - ProjectSection(ProjectDependencies) = postProject - EndProjectSection -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "polymorphism", "polymorphism\polymorphism-xerces2-7.1.vcproj", "{E05F914A-490B-4780-9BAB-1ED225B3DBEE}" - ProjectSection(ProjectDependencies) = postProject - EndProjectSection -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "polyroot", "polyroot\polyroot-xerces2-7.1.vcproj", "{FB2098FC-CE8C-4A6B-A064-E2705324A16A}" - ProjectSection(ProjectDependencies) = postProject - EndProjectSection -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "wildcard", "wildcard\wildcard-xerces2-7.1.vcproj", "{9832425B-38D5-44EC-AED6-3ED4353B24EA}" - ProjectSection(ProjectDependencies) = postProject - EndProjectSection -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "performance", "performance\performance-xerces2-7.1.vcproj", "{676CB1A8-1060-4B7F-86FA-5F8F01AB80BD}" - ProjectSection(ProjectDependencies) = postProject - EndProjectSection -EndProject -Global - GlobalSection(SolutionConfiguration) = preSolution - Debug = Debug - Release = Release - EndGlobalSection - GlobalSection(ProjectConfiguration) = postSolution - {683E9D46-FCC7-4163-984B-9F399169CF7F}.Debug.ActiveCfg = Debug|Win32 - {683E9D46-FCC7-4163-984B-9F399169CF7F}.Debug.Build.0 = Debug|Win32 - {683E9D46-FCC7-4163-984B-9F399169CF7F}.Release.ActiveCfg = Release|Win32 - {683E9D46-FCC7-4163-984B-9F399169CF7F}.Release.Build.0 = Release|Win32 - {D66DAC4D-133C-4DB5-923F-C88A961C3C51}.Debug.ActiveCfg = Debug|Win32 - {D66DAC4D-133C-4DB5-923F-C88A961C3C51}.Debug.Build.0 = Debug|Win32 - {D66DAC4D-133C-4DB5-923F-C88A961C3C51}.Release.ActiveCfg = Release|Win32 - {D66DAC4D-133C-4DB5-923F-C88A961C3C51}.Release.Build.0 = Release|Win32 - {8CCA6181-F2CE-4E5E-A20E-4E1E53A35125}.Debug.ActiveCfg = Debug|Win32 - {8CCA6181-F2CE-4E5E-A20E-4E1E53A35125}.Debug.Build.0 = Debug|Win32 - {8CCA6181-F2CE-4E5E-A20E-4E1E53A35125}.Release.ActiveCfg = Release|Win32 - {8CCA6181-F2CE-4E5E-A20E-4E1E53A35125}.Release.Build.0 = Release|Win32 - {304FD6A7-6C73-41C3-B489-97FD5E635CCB}.Debug.ActiveCfg = Debug|Win32 - {304FD6A7-6C73-41C3-B489-97FD5E635CCB}.Debug.Build.0 = Debug|Win32 - {304FD6A7-6C73-41C3-B489-97FD5E635CCB}.Release.ActiveCfg = Release|Win32 - {304FD6A7-6C73-41C3-B489-97FD5E635CCB}.Release.Build.0 = Release|Win32 - {4277B39A-C9FB-4F10-8223-8DD38053EDA0}.Debug.ActiveCfg = Debug|Win32 - {4277B39A-C9FB-4F10-8223-8DD38053EDA0}.Debug.Build.0 = Debug|Win32 - {4277B39A-C9FB-4F10-8223-8DD38053EDA0}.Release.ActiveCfg = Release|Win32 - {4277B39A-C9FB-4F10-8223-8DD38053EDA0}.Release.Build.0 = Release|Win32 - {3AC187DF-4FDF-40B7-9E12-002DC0A15EDB}.Debug.ActiveCfg = Debug|Win32 - {3AC187DF-4FDF-40B7-9E12-002DC0A15EDB}.Debug.Build.0 = Debug|Win32 - {3AC187DF-4FDF-40B7-9E12-002DC0A15EDB}.Release.ActiveCfg = Release|Win32 - {3AC187DF-4FDF-40B7-9E12-002DC0A15EDB}.Release.Build.0 = Release|Win32 - {9832425B-38D5-44EC-AED6-3ED4353B24EA}.Debug.ActiveCfg = Debug|Win32 - {9832425B-38D5-44EC-AED6-3ED4353B24EA}.Debug.Build.0 = Debug|Win32 - {9832425B-38D5-44EC-AED6-3ED4353B24EA}.Release.ActiveCfg = Release|Win32 - {9832425B-38D5-44EC-AED6-3ED4353B24EA}.Release.Build.0 = Release|Win32 - {E05F914A-490B-4780-9BAB-1ED225B3DBEE}.Debug.ActiveCfg = Debug|Win32 - {E05F914A-490B-4780-9BAB-1ED225B3DBEE}.Debug.Build.0 = Debug|Win32 - {E05F914A-490B-4780-9BAB-1ED225B3DBEE}.Release.ActiveCfg = Release|Win32 - {E05F914A-490B-4780-9BAB-1ED225B3DBEE}.Release.Build.0 = Release|Win32 - {FB2098FC-CE8C-4A6B-A064-E2705324A16A}.Debug.ActiveCfg = Debug|Win32 - {FB2098FC-CE8C-4A6B-A064-E2705324A16A}.Debug.Build.0 = Debug|Win32 - {FB2098FC-CE8C-4A6B-A064-E2705324A16A}.Release.ActiveCfg = Release|Win32 - {FB2098FC-CE8C-4A6B-A064-E2705324A16A}.Release.Build.0 = Release|Win32 - {676CB1A8-1060-4B7F-86FA-5F8F01AB80BD}.Debug.ActiveCfg = Debug|Win32 - {676CB1A8-1060-4B7F-86FA-5F8F01AB80BD}.Debug.Build.0 = Debug|Win32 - {676CB1A8-1060-4B7F-86FA-5F8F01AB80BD}.Release.ActiveCfg = Release|Win32 - {676CB1A8-1060-4B7F-86FA-5F8F01AB80BD}.Release.Build.0 = Release|Win32 - EndGlobalSection - GlobalSection(ExtensibilityGlobals) = postSolution - EndGlobalSection - GlobalSection(ExtensibilityAddIns) = postSolution - EndGlobalSection -EndGlobal diff --git a/xsd/dist/examples/cxx/parser/parser-xerces2-8.0.sln b/xsd/dist/examples/cxx/parser/parser-xerces2-8.0.sln deleted file mode 100644 index e2e0743..0000000 --- a/xsd/dist/examples/cxx/parser/parser-xerces2-8.0.sln +++ /dev/null @@ -1,115 +0,0 @@ -Microsoft Visual Studio Solution File, Format Version 9.00 -# Visual Studio 2005 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "hello", "hello\hello-xerces2-8.0.vcproj", "{683E9D46-FCC7-4163-984B-9F399169CF7F}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "library", "library\library-xerces2-8.0.vcproj", "{D66DAC4D-133C-4DB5-923F-C88A961C3C51}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mixin", "mixin\mixin-xerces2-8.0.vcproj", "{8CCA6181-F2CE-4E5E-A20E-4E1E53A35125}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mixed", "mixed\mixed-xerces2-8.0.vcproj", "{304FD6A7-6C73-41C3-B489-97FD5E635CCB}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "generated", "generated\generated-xerces2-8.0.vcproj", "{4277B39A-C9FB-4F10-8223-8DD38053EDA0}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "multiroot", "multiroot\multiroot-xerces2-8.0.vcproj", "{3AC187DF-4FDF-40B7-9E12-002DC0A15EDB}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "polymorphism", "polymorphism\polymorphism-xerces2-8.0.vcproj", "{E05F914A-490B-4780-9BAB-1ED225B3DBEE}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "polyroot", "polyroot\polyroot-xerces2-8.0.vcproj", "{FB2098FC-CE8C-4A6B-A064-E2705324A16A}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "wildcard", "wildcard\wildcard-xerces2-8.0.vcproj", "{9832425B-38D5-44EC-AED6-3ED4353B24EA}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "performance", "performance\performance-xerces2-8.0.vcproj", "{676CB1A8-1060-4B7F-86FA-5F8F01AB80BD}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Win32 = Debug|Win32 - Debug|x64 = Debug|x64 - Release|Win32 = Release|Win32 - Release|x64 = Release|x64 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {683E9D46-FCC7-4163-984B-9F399169CF7F}.Debug|Win32.ActiveCfg = Debug|Win32 - {683E9D46-FCC7-4163-984B-9F399169CF7F}.Debug|Win32.Build.0 = Debug|Win32 - {683E9D46-FCC7-4163-984B-9F399169CF7F}.Debug|x64.ActiveCfg = Debug|x64 - {683E9D46-FCC7-4163-984B-9F399169CF7F}.Debug|x64.Build.0 = Debug|x64 - {683E9D46-FCC7-4163-984B-9F399169CF7F}.Release|Win32.ActiveCfg = Release|Win32 - {683E9D46-FCC7-4163-984B-9F399169CF7F}.Release|Win32.Build.0 = Release|Win32 - {683E9D46-FCC7-4163-984B-9F399169CF7F}.Release|x64.ActiveCfg = Release|x64 - {683E9D46-FCC7-4163-984B-9F399169CF7F}.Release|x64.Build.0 = Release|x64 - {D66DAC4D-133C-4DB5-923F-C88A961C3C51}.Debug|Win32.ActiveCfg = Debug|Win32 - {D66DAC4D-133C-4DB5-923F-C88A961C3C51}.Debug|Win32.Build.0 = Debug|Win32 - {D66DAC4D-133C-4DB5-923F-C88A961C3C51}.Debug|x64.ActiveCfg = Debug|x64 - {D66DAC4D-133C-4DB5-923F-C88A961C3C51}.Debug|x64.Build.0 = Debug|x64 - {D66DAC4D-133C-4DB5-923F-C88A961C3C51}.Release|Win32.ActiveCfg = Release|Win32 - {D66DAC4D-133C-4DB5-923F-C88A961C3C51}.Release|Win32.Build.0 = Release|Win32 - {D66DAC4D-133C-4DB5-923F-C88A961C3C51}.Release|x64.ActiveCfg = Release|x64 - {D66DAC4D-133C-4DB5-923F-C88A961C3C51}.Release|x64.Build.0 = Release|x64 - {8CCA6181-F2CE-4E5E-A20E-4E1E53A35125}.Debug|Win32.ActiveCfg = Debug|Win32 - {8CCA6181-F2CE-4E5E-A20E-4E1E53A35125}.Debug|Win32.Build.0 = Debug|Win32 - {8CCA6181-F2CE-4E5E-A20E-4E1E53A35125}.Debug|x64.ActiveCfg = Debug|x64 - {8CCA6181-F2CE-4E5E-A20E-4E1E53A35125}.Debug|x64.Build.0 = Debug|x64 - {8CCA6181-F2CE-4E5E-A20E-4E1E53A35125}.Release|Win32.ActiveCfg = Release|Win32 - {8CCA6181-F2CE-4E5E-A20E-4E1E53A35125}.Release|Win32.Build.0 = Release|Win32 - {8CCA6181-F2CE-4E5E-A20E-4E1E53A35125}.Release|x64.ActiveCfg = Release|x64 - {8CCA6181-F2CE-4E5E-A20E-4E1E53A35125}.Release|x64.Build.0 = Release|x64 - {304FD6A7-6C73-41C3-B489-97FD5E635CCB}.Debug|Win32.ActiveCfg = Debug|Win32 - {304FD6A7-6C73-41C3-B489-97FD5E635CCB}.Debug|Win32.Build.0 = Debug|Win32 - {304FD6A7-6C73-41C3-B489-97FD5E635CCB}.Debug|x64.ActiveCfg = Debug|x64 - {304FD6A7-6C73-41C3-B489-97FD5E635CCB}.Debug|x64.Build.0 = Debug|x64 - {304FD6A7-6C73-41C3-B489-97FD5E635CCB}.Release|Win32.ActiveCfg = Release|Win32 - {304FD6A7-6C73-41C3-B489-97FD5E635CCB}.Release|Win32.Build.0 = Release|Win32 - {304FD6A7-6C73-41C3-B489-97FD5E635CCB}.Release|x64.ActiveCfg = Release|x64 - {304FD6A7-6C73-41C3-B489-97FD5E635CCB}.Release|x64.Build.0 = Release|x64 - {4277B39A-C9FB-4F10-8223-8DD38053EDA0}.Debug|Win32.ActiveCfg = Debug|Win32 - {4277B39A-C9FB-4F10-8223-8DD38053EDA0}.Debug|Win32.Build.0 = Debug|Win32 - {4277B39A-C9FB-4F10-8223-8DD38053EDA0}.Debug|x64.ActiveCfg = Debug|x64 - {4277B39A-C9FB-4F10-8223-8DD38053EDA0}.Debug|x64.Build.0 = Debug|x64 - {4277B39A-C9FB-4F10-8223-8DD38053EDA0}.Release|Win32.ActiveCfg = Release|Win32 - {4277B39A-C9FB-4F10-8223-8DD38053EDA0}.Release|Win32.Build.0 = Release|Win32 - {4277B39A-C9FB-4F10-8223-8DD38053EDA0}.Release|x64.ActiveCfg = Release|x64 - {4277B39A-C9FB-4F10-8223-8DD38053EDA0}.Release|x64.Build.0 = Release|x64 - {3AC187DF-4FDF-40B7-9E12-002DC0A15EDB}.Debug|Win32.ActiveCfg = Debug|Win32 - {3AC187DF-4FDF-40B7-9E12-002DC0A15EDB}.Debug|Win32.Build.0 = Debug|Win32 - {3AC187DF-4FDF-40B7-9E12-002DC0A15EDB}.Debug|x64.ActiveCfg = Debug|x64 - {3AC187DF-4FDF-40B7-9E12-002DC0A15EDB}.Debug|x64.Build.0 = Debug|x64 - {3AC187DF-4FDF-40B7-9E12-002DC0A15EDB}.Release|Win32.ActiveCfg = Release|Win32 - {3AC187DF-4FDF-40B7-9E12-002DC0A15EDB}.Release|Win32.Build.0 = Release|Win32 - {3AC187DF-4FDF-40B7-9E12-002DC0A15EDB}.Release|x64.ActiveCfg = Release|x64 - {3AC187DF-4FDF-40B7-9E12-002DC0A15EDB}.Release|x64.Build.0 = Release|x64 - {E05F914A-490B-4780-9BAB-1ED225B3DBEE}.Debug|Win32.ActiveCfg = Debug|Win32 - {E05F914A-490B-4780-9BAB-1ED225B3DBEE}.Debug|Win32.Build.0 = Debug|Win32 - {E05F914A-490B-4780-9BAB-1ED225B3DBEE}.Debug|x64.ActiveCfg = Debug|x64 - {E05F914A-490B-4780-9BAB-1ED225B3DBEE}.Debug|x64.Build.0 = Debug|x64 - {E05F914A-490B-4780-9BAB-1ED225B3DBEE}.Release|Win32.ActiveCfg = Release|Win32 - {E05F914A-490B-4780-9BAB-1ED225B3DBEE}.Release|Win32.Build.0 = Release|Win32 - {E05F914A-490B-4780-9BAB-1ED225B3DBEE}.Release|x64.ActiveCfg = Release|x64 - {E05F914A-490B-4780-9BAB-1ED225B3DBEE}.Release|x64.Build.0 = Release|x64 - {FB2098FC-CE8C-4A6B-A064-E2705324A16A}.Debug|Win32.ActiveCfg = Debug|Win32 - {FB2098FC-CE8C-4A6B-A064-E2705324A16A}.Debug|Win32.Build.0 = Debug|Win32 - {FB2098FC-CE8C-4A6B-A064-E2705324A16A}.Debug|x64.ActiveCfg = Debug|x64 - {FB2098FC-CE8C-4A6B-A064-E2705324A16A}.Debug|x64.Build.0 = Debug|x64 - {FB2098FC-CE8C-4A6B-A064-E2705324A16A}.Release|Win32.ActiveCfg = Release|Win32 - {FB2098FC-CE8C-4A6B-A064-E2705324A16A}.Release|Win32.Build.0 = Release|Win32 - {FB2098FC-CE8C-4A6B-A064-E2705324A16A}.Release|x64.ActiveCfg = Release|x64 - {FB2098FC-CE8C-4A6B-A064-E2705324A16A}.Release|x64.Build.0 = Release|x64 - {9832425B-38D5-44EC-AED6-3ED4353B24EA}.Debug|Win32.ActiveCfg = Debug|Win32 - {9832425B-38D5-44EC-AED6-3ED4353B24EA}.Debug|Win32.Build.0 = Debug|Win32 - {9832425B-38D5-44EC-AED6-3ED4353B24EA}.Debug|x64.ActiveCfg = Debug|x64 - {9832425B-38D5-44EC-AED6-3ED4353B24EA}.Debug|x64.Build.0 = Debug|x64 - {9832425B-38D5-44EC-AED6-3ED4353B24EA}.Release|Win32.ActiveCfg = Release|Win32 - {9832425B-38D5-44EC-AED6-3ED4353B24EA}.Release|Win32.Build.0 = Release|Win32 - {9832425B-38D5-44EC-AED6-3ED4353B24EA}.Release|x64.ActiveCfg = Release|x64 - {9832425B-38D5-44EC-AED6-3ED4353B24EA}.Release|x64.Build.0 = Release|x64 - {676CB1A8-1060-4B7F-86FA-5F8F01AB80BD}.Debug|Win32.ActiveCfg = Debug|Win32 - {676CB1A8-1060-4B7F-86FA-5F8F01AB80BD}.Debug|Win32.Build.0 = Debug|Win32 - {676CB1A8-1060-4B7F-86FA-5F8F01AB80BD}.Debug|x64.ActiveCfg = Debug|x64 - {676CB1A8-1060-4B7F-86FA-5F8F01AB80BD}.Debug|x64.Build.0 = Debug|x64 - {676CB1A8-1060-4B7F-86FA-5F8F01AB80BD}.Release|Win32.ActiveCfg = Release|Win32 - {676CB1A8-1060-4B7F-86FA-5F8F01AB80BD}.Release|Win32.Build.0 = Release|Win32 - {676CB1A8-1060-4B7F-86FA-5F8F01AB80BD}.Release|x64.ActiveCfg = Release|x64 - {676CB1A8-1060-4B7F-86FA-5F8F01AB80BD}.Release|x64.Build.0 = Release|x64 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal diff --git a/xsd/dist/examples/cxx/parser/parser-xerces2-9.0.sln b/xsd/dist/examples/cxx/parser/parser-xerces2-9.0.sln deleted file mode 100644 index 39fffe1..0000000 --- a/xsd/dist/examples/cxx/parser/parser-xerces2-9.0.sln +++ /dev/null @@ -1,115 +0,0 @@ -Microsoft Visual Studio Solution File, Format Version 10.00 -# Visual Studio 2008 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "hello", "hello\hello-xerces2-9.0.vcproj", "{683E9D46-FCC7-4163-984B-9F399169CF7F}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "library", "library\library-xerces2-9.0.vcproj", "{D66DAC4D-133C-4DB5-923F-C88A961C3C51}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mixin", "mixin\mixin-xerces2-9.0.vcproj", "{8CCA6181-F2CE-4E5E-A20E-4E1E53A35125}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mixed", "mixed\mixed-xerces2-9.0.vcproj", "{304FD6A7-6C73-41C3-B489-97FD5E635CCB}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "generated", "generated\generated-xerces2-9.0.vcproj", "{4277B39A-C9FB-4F10-8223-8DD38053EDA0}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "multiroot", "multiroot\multiroot-xerces2-9.0.vcproj", "{3AC187DF-4FDF-40B7-9E12-002DC0A15EDB}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "polymorphism", "polymorphism\polymorphism-xerces2-9.0.vcproj", "{E05F914A-490B-4780-9BAB-1ED225B3DBEE}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "polyroot", "polyroot\polyroot-xerces2-9.0.vcproj", "{FB2098FC-CE8C-4A6B-A064-E2705324A16A}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "wildcard", "wildcard\wildcard-xerces2-9.0.vcproj", "{9832425B-38D5-44EC-AED6-3ED4353B24EA}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "performance", "performance\performance-xerces2-9.0.vcproj", "{676CB1A8-1060-4B7F-86FA-5F8F01AB80BD}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Win32 = Debug|Win32 - Debug|x64 = Debug|x64 - Release|Win32 = Release|Win32 - Release|x64 = Release|x64 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {683E9D46-FCC7-4163-984B-9F399169CF7F}.Debug|Win32.ActiveCfg = Debug|Win32 - {683E9D46-FCC7-4163-984B-9F399169CF7F}.Debug|Win32.Build.0 = Debug|Win32 - {683E9D46-FCC7-4163-984B-9F399169CF7F}.Debug|x64.ActiveCfg = Debug|x64 - {683E9D46-FCC7-4163-984B-9F399169CF7F}.Debug|x64.Build.0 = Debug|x64 - {683E9D46-FCC7-4163-984B-9F399169CF7F}.Release|Win32.ActiveCfg = Release|Win32 - {683E9D46-FCC7-4163-984B-9F399169CF7F}.Release|Win32.Build.0 = Release|Win32 - {683E9D46-FCC7-4163-984B-9F399169CF7F}.Release|x64.ActiveCfg = Release|x64 - {683E9D46-FCC7-4163-984B-9F399169CF7F}.Release|x64.Build.0 = Release|x64 - {D66DAC4D-133C-4DB5-923F-C88A961C3C51}.Debug|Win32.ActiveCfg = Debug|Win32 - {D66DAC4D-133C-4DB5-923F-C88A961C3C51}.Debug|Win32.Build.0 = Debug|Win32 - {D66DAC4D-133C-4DB5-923F-C88A961C3C51}.Debug|x64.ActiveCfg = Debug|x64 - {D66DAC4D-133C-4DB5-923F-C88A961C3C51}.Debug|x64.Build.0 = Debug|x64 - {D66DAC4D-133C-4DB5-923F-C88A961C3C51}.Release|Win32.ActiveCfg = Release|Win32 - {D66DAC4D-133C-4DB5-923F-C88A961C3C51}.Release|Win32.Build.0 = Release|Win32 - {D66DAC4D-133C-4DB5-923F-C88A961C3C51}.Release|x64.ActiveCfg = Release|x64 - {D66DAC4D-133C-4DB5-923F-C88A961C3C51}.Release|x64.Build.0 = Release|x64 - {8CCA6181-F2CE-4E5E-A20E-4E1E53A35125}.Debug|Win32.ActiveCfg = Debug|Win32 - {8CCA6181-F2CE-4E5E-A20E-4E1E53A35125}.Debug|Win32.Build.0 = Debug|Win32 - {8CCA6181-F2CE-4E5E-A20E-4E1E53A35125}.Debug|x64.ActiveCfg = Debug|x64 - {8CCA6181-F2CE-4E5E-A20E-4E1E53A35125}.Debug|x64.Build.0 = Debug|x64 - {8CCA6181-F2CE-4E5E-A20E-4E1E53A35125}.Release|Win32.ActiveCfg = Release|Win32 - {8CCA6181-F2CE-4E5E-A20E-4E1E53A35125}.Release|Win32.Build.0 = Release|Win32 - {8CCA6181-F2CE-4E5E-A20E-4E1E53A35125}.Release|x64.ActiveCfg = Release|x64 - {8CCA6181-F2CE-4E5E-A20E-4E1E53A35125}.Release|x64.Build.0 = Release|x64 - {304FD6A7-6C73-41C3-B489-97FD5E635CCB}.Debug|Win32.ActiveCfg = Debug|Win32 - {304FD6A7-6C73-41C3-B489-97FD5E635CCB}.Debug|Win32.Build.0 = Debug|Win32 - {304FD6A7-6C73-41C3-B489-97FD5E635CCB}.Debug|x64.ActiveCfg = Debug|x64 - {304FD6A7-6C73-41C3-B489-97FD5E635CCB}.Debug|x64.Build.0 = Debug|x64 - {304FD6A7-6C73-41C3-B489-97FD5E635CCB}.Release|Win32.ActiveCfg = Release|Win32 - {304FD6A7-6C73-41C3-B489-97FD5E635CCB}.Release|Win32.Build.0 = Release|Win32 - {304FD6A7-6C73-41C3-B489-97FD5E635CCB}.Release|x64.ActiveCfg = Release|x64 - {304FD6A7-6C73-41C3-B489-97FD5E635CCB}.Release|x64.Build.0 = Release|x64 - {4277B39A-C9FB-4F10-8223-8DD38053EDA0}.Debug|Win32.ActiveCfg = Debug|Win32 - {4277B39A-C9FB-4F10-8223-8DD38053EDA0}.Debug|Win32.Build.0 = Debug|Win32 - {4277B39A-C9FB-4F10-8223-8DD38053EDA0}.Debug|x64.ActiveCfg = Debug|x64 - {4277B39A-C9FB-4F10-8223-8DD38053EDA0}.Debug|x64.Build.0 = Debug|x64 - {4277B39A-C9FB-4F10-8223-8DD38053EDA0}.Release|Win32.ActiveCfg = Release|Win32 - {4277B39A-C9FB-4F10-8223-8DD38053EDA0}.Release|Win32.Build.0 = Release|Win32 - {4277B39A-C9FB-4F10-8223-8DD38053EDA0}.Release|x64.ActiveCfg = Release|x64 - {4277B39A-C9FB-4F10-8223-8DD38053EDA0}.Release|x64.Build.0 = Release|x64 - {3AC187DF-4FDF-40B7-9E12-002DC0A15EDB}.Debug|Win32.ActiveCfg = Debug|Win32 - {3AC187DF-4FDF-40B7-9E12-002DC0A15EDB}.Debug|Win32.Build.0 = Debug|Win32 - {3AC187DF-4FDF-40B7-9E12-002DC0A15EDB}.Debug|x64.ActiveCfg = Debug|x64 - {3AC187DF-4FDF-40B7-9E12-002DC0A15EDB}.Debug|x64.Build.0 = Debug|x64 - {3AC187DF-4FDF-40B7-9E12-002DC0A15EDB}.Release|Win32.ActiveCfg = Release|Win32 - {3AC187DF-4FDF-40B7-9E12-002DC0A15EDB}.Release|Win32.Build.0 = Release|Win32 - {3AC187DF-4FDF-40B7-9E12-002DC0A15EDB}.Release|x64.ActiveCfg = Release|x64 - {3AC187DF-4FDF-40B7-9E12-002DC0A15EDB}.Release|x64.Build.0 = Release|x64 - {E05F914A-490B-4780-9BAB-1ED225B3DBEE}.Debug|Win32.ActiveCfg = Debug|Win32 - {E05F914A-490B-4780-9BAB-1ED225B3DBEE}.Debug|Win32.Build.0 = Debug|Win32 - {E05F914A-490B-4780-9BAB-1ED225B3DBEE}.Debug|x64.ActiveCfg = Debug|x64 - {E05F914A-490B-4780-9BAB-1ED225B3DBEE}.Debug|x64.Build.0 = Debug|x64 - {E05F914A-490B-4780-9BAB-1ED225B3DBEE}.Release|Win32.ActiveCfg = Release|Win32 - {E05F914A-490B-4780-9BAB-1ED225B3DBEE}.Release|Win32.Build.0 = Release|Win32 - {E05F914A-490B-4780-9BAB-1ED225B3DBEE}.Release|x64.ActiveCfg = Release|x64 - {E05F914A-490B-4780-9BAB-1ED225B3DBEE}.Release|x64.Build.0 = Release|x64 - {FB2098FC-CE8C-4A6B-A064-E2705324A16A}.Debug|Win32.ActiveCfg = Debug|Win32 - {FB2098FC-CE8C-4A6B-A064-E2705324A16A}.Debug|Win32.Build.0 = Debug|Win32 - {FB2098FC-CE8C-4A6B-A064-E2705324A16A}.Debug|x64.ActiveCfg = Debug|x64 - {FB2098FC-CE8C-4A6B-A064-E2705324A16A}.Debug|x64.Build.0 = Debug|x64 - {FB2098FC-CE8C-4A6B-A064-E2705324A16A}.Release|Win32.ActiveCfg = Release|Win32 - {FB2098FC-CE8C-4A6B-A064-E2705324A16A}.Release|Win32.Build.0 = Release|Win32 - {FB2098FC-CE8C-4A6B-A064-E2705324A16A}.Release|x64.ActiveCfg = Release|x64 - {FB2098FC-CE8C-4A6B-A064-E2705324A16A}.Release|x64.Build.0 = Release|x64 - {9832425B-38D5-44EC-AED6-3ED4353B24EA}.Debug|Win32.ActiveCfg = Debug|Win32 - {9832425B-38D5-44EC-AED6-3ED4353B24EA}.Debug|Win32.Build.0 = Debug|Win32 - {9832425B-38D5-44EC-AED6-3ED4353B24EA}.Debug|x64.ActiveCfg = Debug|x64 - {9832425B-38D5-44EC-AED6-3ED4353B24EA}.Debug|x64.Build.0 = Debug|x64 - {9832425B-38D5-44EC-AED6-3ED4353B24EA}.Release|Win32.ActiveCfg = Release|Win32 - {9832425B-38D5-44EC-AED6-3ED4353B24EA}.Release|Win32.Build.0 = Release|Win32 - {9832425B-38D5-44EC-AED6-3ED4353B24EA}.Release|x64.ActiveCfg = Release|x64 - {9832425B-38D5-44EC-AED6-3ED4353B24EA}.Release|x64.Build.0 = Release|x64 - {676CB1A8-1060-4B7F-86FA-5F8F01AB80BD}.Debug|Win32.ActiveCfg = Debug|Win32 - {676CB1A8-1060-4B7F-86FA-5F8F01AB80BD}.Debug|Win32.Build.0 = Debug|Win32 - {676CB1A8-1060-4B7F-86FA-5F8F01AB80BD}.Debug|x64.ActiveCfg = Debug|x64 - {676CB1A8-1060-4B7F-86FA-5F8F01AB80BD}.Debug|x64.Build.0 = Debug|x64 - {676CB1A8-1060-4B7F-86FA-5F8F01AB80BD}.Release|Win32.ActiveCfg = Release|Win32 - {676CB1A8-1060-4B7F-86FA-5F8F01AB80BD}.Release|Win32.Build.0 = Release|Win32 - {676CB1A8-1060-4B7F-86FA-5F8F01AB80BD}.Release|x64.ActiveCfg = Release|x64 - {676CB1A8-1060-4B7F-86FA-5F8F01AB80BD}.Release|x64.Build.0 = Release|x64 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal diff --git a/xsd/dist/examples/cxx/parser/performance/performance-10.0.vcxproj b/xsd/dist/examples/cxx/parser/performance/performance-10.0.vcxproj deleted file mode 100644 index 1560a07..0000000 --- a/xsd/dist/examples/cxx/parser/performance/performance-10.0.vcxproj +++ /dev/null @@ -1,207 +0,0 @@ - - - - - Debug - Win32 - - - Debug - x64 - - - Release - Win32 - - - Release - x64 - - - - performance - {676CB1A8-1060-4B7F-86FA-5F8F01AB80BD} - performance - Win32Proj - - - - Application - MultiByte - - - Application - MultiByte - - - Application - MultiByte - - - Application - MultiByte - - - - - - - - - - - - - - - - - - - driver - driver - driver - driver - Debug\ - Debug\ - true - $(Platform)\$(Configuration)\ - $(Platform)\$(Configuration)\ - true - Release\ - Release\ - false - $(Platform)\$(Configuration)\ - $(Platform)\$(Configuration)\ - false - - - - Disabled - WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebug - - - Level3 - EditAndContinue - - - xerces-c_3D.lib;%(AdditionalDependencies) - $(TargetPath) - true - $(OutDir)driver.pdb - Console - false - - - MachineX86 - - - - - X64 - - - Disabled - WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebug - - - Level3 - ProgramDatabase - - - xerces-c_3D.lib;%(AdditionalDependencies) - $(TargetPath) - true - $(OutDir)driver.pdb - Console - false - - - MachineX64 - - - - - WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - MultiThreaded - - - Level3 - ProgramDatabase - - - xerces-c_3.lib;%(AdditionalDependencies) - $(TargetPath) - true - Console - true - true - false - - - MachineX86 - - - - - X64 - - - WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - MultiThreaded - - - Level3 - ProgramDatabase - - - xerces-c_3.lib;%(AdditionalDependencies) - $(TargetPath) - true - Console - true - true - false - - - MachineX64 - - - - - - - - - - - - - - xsd test.xsd - xsd cxx-parser --generate-inline test.xsd - test-pskel.hxx;test-pskel.ixx;test-pskel.cxx;%(Outputs) - xsd test.xsd - xsd cxx-parser --generate-inline test.xsd - test-pskel.hxx;test-pskel.ixx;test-pskel.cxx;%(Outputs) - xsd test.xsd - xsd cxx-parser --generate-inline test.xsd - test-pskel.hxx;test-pskel.ixx;test-pskel.cxx;%(Outputs) - xsd test.xsd - xsd cxx-parser --generate-inline test.xsd - test-pskel.hxx;test-pskel.ixx;test-pskel.cxx;%(Outputs) - - - - - - - - - \ No newline at end of file diff --git a/xsd/dist/examples/cxx/parser/performance/performance-10.0.vcxproj.filters b/xsd/dist/examples/cxx/parser/performance/performance-10.0.vcxproj.filters deleted file mode 100644 index 43190f1..0000000 --- a/xsd/dist/examples/cxx/parser/performance/performance-10.0.vcxproj.filters +++ /dev/null @@ -1,44 +0,0 @@ - - - - - {699BF138-9DA5-4EC4-9796-4033D1E443E8} - cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx - - - {6B5C0740-D0B1-4A08-8657-DA9977EBA68D} - h;hpp;hxx;hm;inl;inc;xsd - - - {d885db2b-37d2-476b-964e-0f50c5f851d4} - xsd - - - - - Source Files - - - Source Files - - - Source Files - - - - - Header Files - - - Header Files - - - - - - - - Schema Files - - - \ No newline at end of file diff --git a/xsd/dist/examples/cxx/parser/performance/performance-7.1.vcproj b/xsd/dist/examples/cxx/parser/performance/performance-7.1.vcproj deleted file mode 100644 index 3326752..0000000 --- a/xsd/dist/examples/cxx/parser/performance/performance-7.1.vcproj +++ /dev/null @@ -1,168 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/xsd/dist/examples/cxx/parser/performance/performance-8.0.vcproj b/xsd/dist/examples/cxx/parser/performance/performance-8.0.vcproj deleted file mode 100644 index 5ff8ff0..0000000 --- a/xsd/dist/examples/cxx/parser/performance/performance-8.0.vcproj +++ /dev/null @@ -1,427 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/xsd/dist/examples/cxx/parser/performance/performance-9.0.vcproj b/xsd/dist/examples/cxx/parser/performance/performance-9.0.vcproj deleted file mode 100644 index e980e74..0000000 --- a/xsd/dist/examples/cxx/parser/performance/performance-9.0.vcproj +++ /dev/null @@ -1,424 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/xsd/dist/examples/cxx/parser/performance/performance-vc10.vcxproj b/xsd/dist/examples/cxx/parser/performance/performance-vc10.vcxproj new file mode 100644 index 0000000..42bc963 --- /dev/null +++ b/xsd/dist/examples/cxx/parser/performance/performance-vc10.vcxproj @@ -0,0 +1,203 @@ + + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + performance + {676CB1A8-1060-4B7F-86FA-5F8F01AB80BD} + performance + Win32Proj + + + + Application + MultiByte + + + Application + MultiByte + + + Application + MultiByte + + + Application + MultiByte + + + + + + + + + + + + + + + + + + + driver + driver + driver + driver + Debug\ + Debug\ + true + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + true + Release\ + Release\ + false + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + false + + + + Disabled + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebugDLL + + + Level3 + + + xerces-c_3D.lib;%(AdditionalDependencies) + $(TargetPath) + true + $(OutDir)driver.pdb + Console + false + + + MachineX86 + + + + + X64 + + + Disabled + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebugDLL + + + Level3 + + + xerces-c_3D.lib;%(AdditionalDependencies) + $(TargetPath) + true + $(OutDir)driver.pdb + Console + false + + + MachineX64 + + + + + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreadedDLL + + + Level3 + + + xerces-c_3.lib;%(AdditionalDependencies) + $(TargetPath) + true + Console + true + true + false + + + MachineX86 + + + + + X64 + + + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreadedDLL + + + Level3 + + + xerces-c_3.lib;%(AdditionalDependencies) + $(TargetPath) + true + Console + true + true + false + + + MachineX64 + + + + + + + + + + + + + + xsd test.xsd + xsd cxx-parser --generate-inline test.xsd + test-pskel.hxx;test-pskel.ixx;test-pskel.cxx;%(Outputs) + xsd test.xsd + xsd cxx-parser --generate-inline test.xsd + test-pskel.hxx;test-pskel.ixx;test-pskel.cxx;%(Outputs) + xsd test.xsd + xsd cxx-parser --generate-inline test.xsd + test-pskel.hxx;test-pskel.ixx;test-pskel.cxx;%(Outputs) + xsd test.xsd + xsd cxx-parser --generate-inline test.xsd + test-pskel.hxx;test-pskel.ixx;test-pskel.cxx;%(Outputs) + + + + + + + + + \ No newline at end of file diff --git a/xsd/dist/examples/cxx/parser/performance/performance-vc10.vcxproj.filters b/xsd/dist/examples/cxx/parser/performance/performance-vc10.vcxproj.filters new file mode 100644 index 0000000..43190f1 --- /dev/null +++ b/xsd/dist/examples/cxx/parser/performance/performance-vc10.vcxproj.filters @@ -0,0 +1,44 @@ + + + + + {699BF138-9DA5-4EC4-9796-4033D1E443E8} + cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {6B5C0740-D0B1-4A08-8657-DA9977EBA68D} + h;hpp;hxx;hm;inl;inc;xsd + + + {d885db2b-37d2-476b-964e-0f50c5f851d4} + xsd + + + + + Source Files + + + Source Files + + + Source Files + + + + + Header Files + + + Header Files + + + + + + + + Schema Files + + + \ No newline at end of file diff --git a/xsd/dist/examples/cxx/parser/performance/performance-vc11.vcxproj b/xsd/dist/examples/cxx/parser/performance/performance-vc11.vcxproj new file mode 100644 index 0000000..4d02641 --- /dev/null +++ b/xsd/dist/examples/cxx/parser/performance/performance-vc11.vcxproj @@ -0,0 +1,207 @@ + + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + performance + {676CB1A8-1060-4B7F-86FA-5F8F01AB80BD} + performance + Win32Proj + + + + Application + v110 + MultiByte + + + Application + v110 + MultiByte + + + Application + v110 + MultiByte + + + Application + v110 + MultiByte + + + + + + + + + + + + + + + + + + + driver + driver + driver + driver + Debug\ + Debug\ + true + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + true + Release\ + Release\ + false + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + false + + + + Disabled + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebugDLL + + + Level3 + + + xerces-c_3D.lib;%(AdditionalDependencies) + $(TargetPath) + true + $(OutDir)driver.pdb + Console + false + + + MachineX86 + + + + + X64 + + + Disabled + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebugDLL + + + Level3 + + + xerces-c_3D.lib;%(AdditionalDependencies) + $(TargetPath) + true + $(OutDir)driver.pdb + Console + false + + + MachineX64 + + + + + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreadedDLL + + + Level3 + + + xerces-c_3.lib;%(AdditionalDependencies) + $(TargetPath) + true + Console + true + true + false + + + MachineX86 + + + + + X64 + + + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreadedDLL + + + Level3 + + + xerces-c_3.lib;%(AdditionalDependencies) + $(TargetPath) + true + Console + true + true + false + + + MachineX64 + + + + + + + + + + + + + + xsd test.xsd + xsd cxx-parser --generate-inline test.xsd + test-pskel.hxx;test-pskel.ixx;test-pskel.cxx;%(Outputs) + xsd test.xsd + xsd cxx-parser --generate-inline test.xsd + test-pskel.hxx;test-pskel.ixx;test-pskel.cxx;%(Outputs) + xsd test.xsd + xsd cxx-parser --generate-inline test.xsd + test-pskel.hxx;test-pskel.ixx;test-pskel.cxx;%(Outputs) + xsd test.xsd + xsd cxx-parser --generate-inline test.xsd + test-pskel.hxx;test-pskel.ixx;test-pskel.cxx;%(Outputs) + + + + + + + + + \ No newline at end of file diff --git a/xsd/dist/examples/cxx/parser/performance/performance-vc11.vcxproj.filters b/xsd/dist/examples/cxx/parser/performance/performance-vc11.vcxproj.filters new file mode 100644 index 0000000..43190f1 --- /dev/null +++ b/xsd/dist/examples/cxx/parser/performance/performance-vc11.vcxproj.filters @@ -0,0 +1,44 @@ + + + + + {699BF138-9DA5-4EC4-9796-4033D1E443E8} + cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {6B5C0740-D0B1-4A08-8657-DA9977EBA68D} + h;hpp;hxx;hm;inl;inc;xsd + + + {d885db2b-37d2-476b-964e-0f50c5f851d4} + xsd + + + + + Source Files + + + Source Files + + + Source Files + + + + + Header Files + + + Header Files + + + + + + + + Schema Files + + + \ No newline at end of file diff --git a/xsd/dist/examples/cxx/parser/performance/performance-vc12.vcxproj b/xsd/dist/examples/cxx/parser/performance/performance-vc12.vcxproj new file mode 100644 index 0000000..b9bdd1c --- /dev/null +++ b/xsd/dist/examples/cxx/parser/performance/performance-vc12.vcxproj @@ -0,0 +1,211 @@ + + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + performance + {676CB1A8-1060-4B7F-86FA-5F8F01AB80BD} + performance + Win32Proj + + + + Application + v120 + MultiByte + + + Application + v120 + MultiByte + + + Application + v120 + MultiByte + + + Application + v120 + MultiByte + + + + + + + + + + + + + + + + + + + driver + driver + driver + driver + Debug\ + Debug\ + true + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + true + Release\ + Release\ + false + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + false + + + + Disabled + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebugDLL + + + Level3 + true + + + xerces-c_3D.lib;%(AdditionalDependencies) + $(TargetPath) + true + $(OutDir)driver.pdb + Console + false + + + MachineX86 + + + + + X64 + + + Disabled + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebugDLL + + + Level3 + true + + + xerces-c_3D.lib;%(AdditionalDependencies) + $(TargetPath) + true + $(OutDir)driver.pdb + Console + false + + + MachineX64 + + + + + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreadedDLL + + + Level3 + true + + + xerces-c_3.lib;%(AdditionalDependencies) + $(TargetPath) + true + Console + true + true + false + + + MachineX86 + + + + + X64 + + + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreadedDLL + + + Level3 + true + + + xerces-c_3.lib;%(AdditionalDependencies) + $(TargetPath) + true + Console + true + true + false + + + MachineX64 + + + + + + + + + + + + + + xsd test.xsd + xsd cxx-parser --generate-inline test.xsd + test-pskel.hxx;test-pskel.ixx;test-pskel.cxx;%(Outputs) + xsd test.xsd + xsd cxx-parser --generate-inline test.xsd + test-pskel.hxx;test-pskel.ixx;test-pskel.cxx;%(Outputs) + xsd test.xsd + xsd cxx-parser --generate-inline test.xsd + test-pskel.hxx;test-pskel.ixx;test-pskel.cxx;%(Outputs) + xsd test.xsd + xsd cxx-parser --generate-inline test.xsd + test-pskel.hxx;test-pskel.ixx;test-pskel.cxx;%(Outputs) + + + + + + + + + \ No newline at end of file diff --git a/xsd/dist/examples/cxx/parser/performance/performance-vc12.vcxproj.filters b/xsd/dist/examples/cxx/parser/performance/performance-vc12.vcxproj.filters new file mode 100644 index 0000000..43190f1 --- /dev/null +++ b/xsd/dist/examples/cxx/parser/performance/performance-vc12.vcxproj.filters @@ -0,0 +1,44 @@ + + + + + {699BF138-9DA5-4EC4-9796-4033D1E443E8} + cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {6B5C0740-D0B1-4A08-8657-DA9977EBA68D} + h;hpp;hxx;hm;inl;inc;xsd + + + {d885db2b-37d2-476b-964e-0f50c5f851d4} + xsd + + + + + Source Files + + + Source Files + + + Source Files + + + + + Header Files + + + Header Files + + + + + + + + Schema Files + + + \ No newline at end of file diff --git a/xsd/dist/examples/cxx/parser/performance/performance-vc8.vcproj b/xsd/dist/examples/cxx/parser/performance/performance-vc8.vcproj new file mode 100644 index 0000000..867ecbb --- /dev/null +++ b/xsd/dist/examples/cxx/parser/performance/performance-vc8.vcproj @@ -0,0 +1,427 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/xsd/dist/examples/cxx/parser/performance/performance-vc9.vcproj b/xsd/dist/examples/cxx/parser/performance/performance-vc9.vcproj new file mode 100644 index 0000000..3fd46c7 --- /dev/null +++ b/xsd/dist/examples/cxx/parser/performance/performance-vc9.vcproj @@ -0,0 +1,424 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/xsd/dist/examples/cxx/parser/performance/performance-xerces2-7.1.vcproj b/xsd/dist/examples/cxx/parser/performance/performance-xerces2-7.1.vcproj deleted file mode 100644 index 68498f8..0000000 --- a/xsd/dist/examples/cxx/parser/performance/performance-xerces2-7.1.vcproj +++ /dev/null @@ -1,168 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/xsd/dist/examples/cxx/parser/performance/performance-xerces2-8.0.vcproj b/xsd/dist/examples/cxx/parser/performance/performance-xerces2-8.0.vcproj deleted file mode 100644 index c50f283..0000000 --- a/xsd/dist/examples/cxx/parser/performance/performance-xerces2-8.0.vcproj +++ /dev/null @@ -1,427 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/xsd/dist/examples/cxx/parser/performance/performance-xerces2-9.0.vcproj b/xsd/dist/examples/cxx/parser/performance/performance-xerces2-9.0.vcproj deleted file mode 100644 index 5f50ab8..0000000 --- a/xsd/dist/examples/cxx/parser/performance/performance-xerces2-9.0.vcproj +++ /dev/null @@ -1,424 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/xsd/dist/examples/cxx/parser/polymorphism/polymorphism-10.0.vcxproj b/xsd/dist/examples/cxx/parser/polymorphism/polymorphism-10.0.vcxproj deleted file mode 100644 index 8e70cfe..0000000 --- a/xsd/dist/examples/cxx/parser/polymorphism/polymorphism-10.0.vcxproj +++ /dev/null @@ -1,211 +0,0 @@ - - - - - Debug - Win32 - - - Debug - x64 - - - Release - Win32 - - - Release - x64 - - - - polymorphism - {E05F914A-490B-4780-9BAB-1ED225B3DBEE} - polymorphism - Win32Proj - - - - Application - MultiByte - - - Application - MultiByte - - - Application - MultiByte - - - Application - MultiByte - - - - - - - - - - - - - - - - - - - driver - driver - driver - driver - Debug\ - Debug\ - true - $(Platform)\$(Configuration)\ - $(Platform)\$(Configuration)\ - true - Release\ - Release\ - false - $(Platform)\$(Configuration)\ - $(Platform)\$(Configuration)\ - false - - - - Disabled - WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebug - true - - - Level3 - EditAndContinue - - - xerces-c_3D.lib;%(AdditionalDependencies) - $(TargetPath) - true - $(OutDir)driver.pdb - Console - false - - - MachineX86 - - - - - X64 - - - Disabled - WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebug - true - - - Level3 - ProgramDatabase - - - xerces-c_3D.lib;%(AdditionalDependencies) - $(TargetPath) - true - $(OutDir)driver.pdb - Console - false - - - MachineX64 - - - - - WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - MultiThreaded - true - - - Level3 - ProgramDatabase - - - xerces-c_3.lib;%(AdditionalDependencies) - $(TargetPath) - true - Console - true - true - false - - - MachineX86 - - - - - X64 - - - WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - MultiThreaded - true - - - Level3 - ProgramDatabase - - - xerces-c_3.lib;%(AdditionalDependencies) - $(TargetPath) - true - Console - true - true - false - - - MachineX64 - - - - - - - - - - - - - - xsd supermen.xsd - xsd cxx-parser --generate-polymorphic supermen.xsd - supermen-pskel.hxx;supermen-pskel.cxx;%(Outputs) - xsd supermen.xsd - xsd cxx-parser --generate-polymorphic supermen.xsd - supermen-pskel.hxx;supermen-pskel.cxx;%(Outputs) - xsd supermen.xsd - xsd cxx-parser --generate-polymorphic supermen.xsd - supermen-pskel.hxx;supermen-pskel.cxx;%(Outputs) - xsd supermen.xsd - xsd cxx-parser --generate-polymorphic supermen.xsd - supermen-pskel.hxx;supermen-pskel.cxx;%(Outputs) - - - - - - - - - \ No newline at end of file diff --git a/xsd/dist/examples/cxx/parser/polymorphism/polymorphism-10.0.vcxproj.filters b/xsd/dist/examples/cxx/parser/polymorphism/polymorphism-10.0.vcxproj.filters deleted file mode 100644 index eb84ea1..0000000 --- a/xsd/dist/examples/cxx/parser/polymorphism/polymorphism-10.0.vcxproj.filters +++ /dev/null @@ -1,44 +0,0 @@ - - - - - {1B970E5F-EBC0-44A7-A542-7EBFADBF1573} - cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx - - - {B49CCB93-BC13-4222-A005-6785C8220E30} - h;hpp;hxx;hm;inl;inc;xsd - - - {408b97b6-8a71-4f5b-976a-dc6c59b92362} - xsd - - - - - Source Files - - - Source Files - - - Source Files - - - - - Header Files - - - Header Files - - - - - - - - Schema Files - - - \ No newline at end of file diff --git a/xsd/dist/examples/cxx/parser/polymorphism/polymorphism-7.1.vcproj b/xsd/dist/examples/cxx/parser/polymorphism/polymorphism-7.1.vcproj deleted file mode 100644 index 9f0724b..0000000 --- a/xsd/dist/examples/cxx/parser/polymorphism/polymorphism-7.1.vcproj +++ /dev/null @@ -1,170 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/xsd/dist/examples/cxx/parser/polymorphism/polymorphism-8.0.vcproj b/xsd/dist/examples/cxx/parser/polymorphism/polymorphism-8.0.vcproj deleted file mode 100644 index d6a0503..0000000 --- a/xsd/dist/examples/cxx/parser/polymorphism/polymorphism-8.0.vcproj +++ /dev/null @@ -1,431 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/xsd/dist/examples/cxx/parser/polymorphism/polymorphism-9.0.vcproj b/xsd/dist/examples/cxx/parser/polymorphism/polymorphism-9.0.vcproj deleted file mode 100644 index a504d67..0000000 --- a/xsd/dist/examples/cxx/parser/polymorphism/polymorphism-9.0.vcproj +++ /dev/null @@ -1,428 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/xsd/dist/examples/cxx/parser/polymorphism/polymorphism-vc10.vcxproj b/xsd/dist/examples/cxx/parser/polymorphism/polymorphism-vc10.vcxproj new file mode 100644 index 0000000..57c60a3 --- /dev/null +++ b/xsd/dist/examples/cxx/parser/polymorphism/polymorphism-vc10.vcxproj @@ -0,0 +1,207 @@ + + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + polymorphism + {E05F914A-490B-4780-9BAB-1ED225B3DBEE} + polymorphism + Win32Proj + + + + Application + MultiByte + + + Application + MultiByte + + + Application + MultiByte + + + Application + MultiByte + + + + + + + + + + + + + + + + + + + driver + driver + driver + driver + Debug\ + Debug\ + true + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + true + Release\ + Release\ + false + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + false + + + + Disabled + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebugDLL + true + + + Level3 + + + xerces-c_3D.lib;%(AdditionalDependencies) + $(TargetPath) + true + $(OutDir)driver.pdb + Console + false + + + MachineX86 + + + + + X64 + + + Disabled + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebugDLL + true + + + Level3 + + + xerces-c_3D.lib;%(AdditionalDependencies) + $(TargetPath) + true + $(OutDir)driver.pdb + Console + false + + + MachineX64 + + + + + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreadedDLL + true + + + Level3 + + + xerces-c_3.lib;%(AdditionalDependencies) + $(TargetPath) + true + Console + true + true + false + + + MachineX86 + + + + + X64 + + + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreadedDLL + true + + + Level3 + + + xerces-c_3.lib;%(AdditionalDependencies) + $(TargetPath) + true + Console + true + true + false + + + MachineX64 + + + + + + + + + + + + + + xsd supermen.xsd + xsd cxx-parser --generate-polymorphic supermen.xsd + supermen-pskel.hxx;supermen-pskel.cxx;%(Outputs) + xsd supermen.xsd + xsd cxx-parser --generate-polymorphic supermen.xsd + supermen-pskel.hxx;supermen-pskel.cxx;%(Outputs) + xsd supermen.xsd + xsd cxx-parser --generate-polymorphic supermen.xsd + supermen-pskel.hxx;supermen-pskel.cxx;%(Outputs) + xsd supermen.xsd + xsd cxx-parser --generate-polymorphic supermen.xsd + supermen-pskel.hxx;supermen-pskel.cxx;%(Outputs) + + + + + + + + + \ No newline at end of file diff --git a/xsd/dist/examples/cxx/parser/polymorphism/polymorphism-vc10.vcxproj.filters b/xsd/dist/examples/cxx/parser/polymorphism/polymorphism-vc10.vcxproj.filters new file mode 100644 index 0000000..eb84ea1 --- /dev/null +++ b/xsd/dist/examples/cxx/parser/polymorphism/polymorphism-vc10.vcxproj.filters @@ -0,0 +1,44 @@ + + + + + {1B970E5F-EBC0-44A7-A542-7EBFADBF1573} + cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {B49CCB93-BC13-4222-A005-6785C8220E30} + h;hpp;hxx;hm;inl;inc;xsd + + + {408b97b6-8a71-4f5b-976a-dc6c59b92362} + xsd + + + + + Source Files + + + Source Files + + + Source Files + + + + + Header Files + + + Header Files + + + + + + + + Schema Files + + + \ No newline at end of file diff --git a/xsd/dist/examples/cxx/parser/polymorphism/polymorphism-vc11.vcxproj b/xsd/dist/examples/cxx/parser/polymorphism/polymorphism-vc11.vcxproj new file mode 100644 index 0000000..19e2659 --- /dev/null +++ b/xsd/dist/examples/cxx/parser/polymorphism/polymorphism-vc11.vcxproj @@ -0,0 +1,211 @@ + + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + polymorphism + {E05F914A-490B-4780-9BAB-1ED225B3DBEE} + polymorphism + Win32Proj + + + + Application + v110 + MultiByte + + + Application + v110 + MultiByte + + + Application + v110 + MultiByte + + + Application + v110 + MultiByte + + + + + + + + + + + + + + + + + + + driver + driver + driver + driver + Debug\ + Debug\ + true + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + true + Release\ + Release\ + false + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + false + + + + Disabled + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebugDLL + true + + + Level3 + + + xerces-c_3D.lib;%(AdditionalDependencies) + $(TargetPath) + true + $(OutDir)driver.pdb + Console + false + + + MachineX86 + + + + + X64 + + + Disabled + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebugDLL + true + + + Level3 + + + xerces-c_3D.lib;%(AdditionalDependencies) + $(TargetPath) + true + $(OutDir)driver.pdb + Console + false + + + MachineX64 + + + + + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreadedDLL + true + + + Level3 + + + xerces-c_3.lib;%(AdditionalDependencies) + $(TargetPath) + true + Console + true + true + false + + + MachineX86 + + + + + X64 + + + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreadedDLL + true + + + Level3 + + + xerces-c_3.lib;%(AdditionalDependencies) + $(TargetPath) + true + Console + true + true + false + + + MachineX64 + + + + + + + + + + + + + + xsd supermen.xsd + xsd cxx-parser --generate-polymorphic supermen.xsd + supermen-pskel.hxx;supermen-pskel.cxx;%(Outputs) + xsd supermen.xsd + xsd cxx-parser --generate-polymorphic supermen.xsd + supermen-pskel.hxx;supermen-pskel.cxx;%(Outputs) + xsd supermen.xsd + xsd cxx-parser --generate-polymorphic supermen.xsd + supermen-pskel.hxx;supermen-pskel.cxx;%(Outputs) + xsd supermen.xsd + xsd cxx-parser --generate-polymorphic supermen.xsd + supermen-pskel.hxx;supermen-pskel.cxx;%(Outputs) + + + + + + + + + \ No newline at end of file diff --git a/xsd/dist/examples/cxx/parser/polymorphism/polymorphism-vc11.vcxproj.filters b/xsd/dist/examples/cxx/parser/polymorphism/polymorphism-vc11.vcxproj.filters new file mode 100644 index 0000000..eb84ea1 --- /dev/null +++ b/xsd/dist/examples/cxx/parser/polymorphism/polymorphism-vc11.vcxproj.filters @@ -0,0 +1,44 @@ + + + + + {1B970E5F-EBC0-44A7-A542-7EBFADBF1573} + cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {B49CCB93-BC13-4222-A005-6785C8220E30} + h;hpp;hxx;hm;inl;inc;xsd + + + {408b97b6-8a71-4f5b-976a-dc6c59b92362} + xsd + + + + + Source Files + + + Source Files + + + Source Files + + + + + Header Files + + + Header Files + + + + + + + + Schema Files + + + \ No newline at end of file diff --git a/xsd/dist/examples/cxx/parser/polymorphism/polymorphism-vc12.vcxproj b/xsd/dist/examples/cxx/parser/polymorphism/polymorphism-vc12.vcxproj new file mode 100644 index 0000000..775d69d --- /dev/null +++ b/xsd/dist/examples/cxx/parser/polymorphism/polymorphism-vc12.vcxproj @@ -0,0 +1,215 @@ + + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + polymorphism + {E05F914A-490B-4780-9BAB-1ED225B3DBEE} + polymorphism + Win32Proj + + + + Application + v120 + MultiByte + + + Application + v120 + MultiByte + + + Application + v120 + MultiByte + + + Application + v120 + MultiByte + + + + + + + + + + + + + + + + + + + driver + driver + driver + driver + Debug\ + Debug\ + true + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + true + Release\ + Release\ + false + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + false + + + + Disabled + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebugDLL + true + + + Level3 + true + + + xerces-c_3D.lib;%(AdditionalDependencies) + $(TargetPath) + true + $(OutDir)driver.pdb + Console + false + + + MachineX86 + + + + + X64 + + + Disabled + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebugDLL + true + + + Level3 + true + + + xerces-c_3D.lib;%(AdditionalDependencies) + $(TargetPath) + true + $(OutDir)driver.pdb + Console + false + + + MachineX64 + + + + + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreadedDLL + true + + + Level3 + true + + + xerces-c_3.lib;%(AdditionalDependencies) + $(TargetPath) + true + Console + true + true + false + + + MachineX86 + + + + + X64 + + + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreadedDLL + true + + + Level3 + true + + + xerces-c_3.lib;%(AdditionalDependencies) + $(TargetPath) + true + Console + true + true + false + + + MachineX64 + + + + + + + + + + + + + + xsd supermen.xsd + xsd cxx-parser --generate-polymorphic supermen.xsd + supermen-pskel.hxx;supermen-pskel.cxx;%(Outputs) + xsd supermen.xsd + xsd cxx-parser --generate-polymorphic supermen.xsd + supermen-pskel.hxx;supermen-pskel.cxx;%(Outputs) + xsd supermen.xsd + xsd cxx-parser --generate-polymorphic supermen.xsd + supermen-pskel.hxx;supermen-pskel.cxx;%(Outputs) + xsd supermen.xsd + xsd cxx-parser --generate-polymorphic supermen.xsd + supermen-pskel.hxx;supermen-pskel.cxx;%(Outputs) + + + + + + + + + \ No newline at end of file diff --git a/xsd/dist/examples/cxx/parser/polymorphism/polymorphism-vc12.vcxproj.filters b/xsd/dist/examples/cxx/parser/polymorphism/polymorphism-vc12.vcxproj.filters new file mode 100644 index 0000000..eb84ea1 --- /dev/null +++ b/xsd/dist/examples/cxx/parser/polymorphism/polymorphism-vc12.vcxproj.filters @@ -0,0 +1,44 @@ + + + + + {1B970E5F-EBC0-44A7-A542-7EBFADBF1573} + cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {B49CCB93-BC13-4222-A005-6785C8220E30} + h;hpp;hxx;hm;inl;inc;xsd + + + {408b97b6-8a71-4f5b-976a-dc6c59b92362} + xsd + + + + + Source Files + + + Source Files + + + Source Files + + + + + Header Files + + + Header Files + + + + + + + + Schema Files + + + \ No newline at end of file diff --git a/xsd/dist/examples/cxx/parser/polymorphism/polymorphism-vc8.vcproj b/xsd/dist/examples/cxx/parser/polymorphism/polymorphism-vc8.vcproj new file mode 100644 index 0000000..fb4f951 --- /dev/null +++ b/xsd/dist/examples/cxx/parser/polymorphism/polymorphism-vc8.vcproj @@ -0,0 +1,431 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/xsd/dist/examples/cxx/parser/polymorphism/polymorphism-vc9.vcproj b/xsd/dist/examples/cxx/parser/polymorphism/polymorphism-vc9.vcproj new file mode 100644 index 0000000..9759681 --- /dev/null +++ b/xsd/dist/examples/cxx/parser/polymorphism/polymorphism-vc9.vcproj @@ -0,0 +1,428 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/xsd/dist/examples/cxx/parser/polymorphism/polymorphism-xerces2-7.1.vcproj b/xsd/dist/examples/cxx/parser/polymorphism/polymorphism-xerces2-7.1.vcproj deleted file mode 100644 index c407617..0000000 --- a/xsd/dist/examples/cxx/parser/polymorphism/polymorphism-xerces2-7.1.vcproj +++ /dev/null @@ -1,170 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/xsd/dist/examples/cxx/parser/polymorphism/polymorphism-xerces2-8.0.vcproj b/xsd/dist/examples/cxx/parser/polymorphism/polymorphism-xerces2-8.0.vcproj deleted file mode 100644 index 5b478dc..0000000 --- a/xsd/dist/examples/cxx/parser/polymorphism/polymorphism-xerces2-8.0.vcproj +++ /dev/null @@ -1,431 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/xsd/dist/examples/cxx/parser/polymorphism/polymorphism-xerces2-9.0.vcproj b/xsd/dist/examples/cxx/parser/polymorphism/polymorphism-xerces2-9.0.vcproj deleted file mode 100644 index 94d0e59..0000000 --- a/xsd/dist/examples/cxx/parser/polymorphism/polymorphism-xerces2-9.0.vcproj +++ /dev/null @@ -1,428 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/xsd/dist/examples/cxx/parser/polyroot/polyroot-10.0.vcxproj b/xsd/dist/examples/cxx/parser/polyroot/polyroot-10.0.vcxproj deleted file mode 100644 index 41906bd..0000000 --- a/xsd/dist/examples/cxx/parser/polyroot/polyroot-10.0.vcxproj +++ /dev/null @@ -1,211 +0,0 @@ - - - - - Debug - Win32 - - - Debug - x64 - - - Release - Win32 - - - Release - x64 - - - - polyroot - {FB2098FC-CE8C-4A6B-A064-E2705324A16A} - polyroot - Win32Proj - - - - Application - MultiByte - - - Application - MultiByte - - - Application - MultiByte - - - Application - MultiByte - - - - - - - - - - - - - - - - - - - driver - driver - driver - driver - Debug\ - Debug\ - true - $(Platform)\$(Configuration)\ - $(Platform)\$(Configuration)\ - true - Release\ - Release\ - false - $(Platform)\$(Configuration)\ - $(Platform)\$(Configuration)\ - false - - - - Disabled - WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebug - true - - - Level3 - EditAndContinue - - - xerces-c_3D.lib;%(AdditionalDependencies) - $(TargetPath) - true - $(OutDir)driver.pdb - Console - false - - - MachineX86 - - - - - X64 - - - Disabled - WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebug - true - - - Level3 - ProgramDatabase - - - xerces-c_3D.lib;%(AdditionalDependencies) - $(TargetPath) - true - $(OutDir)driver.pdb - Console - false - - - MachineX64 - - - - - WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - MultiThreaded - true - - - Level3 - ProgramDatabase - - - xerces-c_3.lib;%(AdditionalDependencies) - $(TargetPath) - true - Console - true - true - false - - - MachineX86 - - - - - X64 - - - WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - MultiThreaded - true - - - Level3 - ProgramDatabase - - - xerces-c_3.lib;%(AdditionalDependencies) - $(TargetPath) - true - Console - true - true - false - - - MachineX64 - - - - - - - - - - - - - - xsd supermen.xsd - xsd cxx-parser --generate-polymorphic supermen.xsd - supermen-pskel.hxx;supermen-pskel.cxx;%(Outputs) - xsd supermen.xsd - xsd cxx-parser --generate-polymorphic supermen.xsd - supermen-pskel.hxx;supermen-pskel.cxx;%(Outputs) - xsd supermen.xsd - xsd cxx-parser --generate-polymorphic supermen.xsd - supermen-pskel.hxx;supermen-pskel.cxx;%(Outputs) - xsd supermen.xsd - xsd cxx-parser --generate-polymorphic supermen.xsd - supermen-pskel.hxx;supermen-pskel.cxx;%(Outputs) - - - - - - - - - \ No newline at end of file diff --git a/xsd/dist/examples/cxx/parser/polyroot/polyroot-10.0.vcxproj.filters b/xsd/dist/examples/cxx/parser/polyroot/polyroot-10.0.vcxproj.filters deleted file mode 100644 index 5b0ee29..0000000 --- a/xsd/dist/examples/cxx/parser/polyroot/polyroot-10.0.vcxproj.filters +++ /dev/null @@ -1,44 +0,0 @@ - - - - - {00F2FCE3-0165-405E-B027-F51956F669D1} - cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx - - - {6F6E09B9-C59E-45EE-BC77-C2F22039A485} - h;hpp;hxx;hm;inl;inc;xsd - - - {91582f5b-59e2-4b82-9325-b99cf969649e} - xsd - - - - - Source Files - - - Source Files - - - Source Files - - - - - Header Files - - - Header Files - - - - - - - - Schema Files - - - \ No newline at end of file diff --git a/xsd/dist/examples/cxx/parser/polyroot/polyroot-7.1.vcproj b/xsd/dist/examples/cxx/parser/polyroot/polyroot-7.1.vcproj deleted file mode 100644 index a725981..0000000 --- a/xsd/dist/examples/cxx/parser/polyroot/polyroot-7.1.vcproj +++ /dev/null @@ -1,170 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/xsd/dist/examples/cxx/parser/polyroot/polyroot-8.0.vcproj b/xsd/dist/examples/cxx/parser/polyroot/polyroot-8.0.vcproj deleted file mode 100644 index d62670f..0000000 --- a/xsd/dist/examples/cxx/parser/polyroot/polyroot-8.0.vcproj +++ /dev/null @@ -1,431 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/xsd/dist/examples/cxx/parser/polyroot/polyroot-9.0.vcproj b/xsd/dist/examples/cxx/parser/polyroot/polyroot-9.0.vcproj deleted file mode 100644 index 33d4daa..0000000 --- a/xsd/dist/examples/cxx/parser/polyroot/polyroot-9.0.vcproj +++ /dev/null @@ -1,428 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/xsd/dist/examples/cxx/parser/polyroot/polyroot-vc10.vcxproj b/xsd/dist/examples/cxx/parser/polyroot/polyroot-vc10.vcxproj new file mode 100644 index 0000000..897a3a1 --- /dev/null +++ b/xsd/dist/examples/cxx/parser/polyroot/polyroot-vc10.vcxproj @@ -0,0 +1,207 @@ + + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + polyroot + {FB2098FC-CE8C-4A6B-A064-E2705324A16A} + polyroot + Win32Proj + + + + Application + MultiByte + + + Application + MultiByte + + + Application + MultiByte + + + Application + MultiByte + + + + + + + + + + + + + + + + + + + driver + driver + driver + driver + Debug\ + Debug\ + true + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + true + Release\ + Release\ + false + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + false + + + + Disabled + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebugDLL + true + + + Level3 + + + xerces-c_3D.lib;%(AdditionalDependencies) + $(TargetPath) + true + $(OutDir)driver.pdb + Console + false + + + MachineX86 + + + + + X64 + + + Disabled + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebugDLL + true + + + Level3 + + + xerces-c_3D.lib;%(AdditionalDependencies) + $(TargetPath) + true + $(OutDir)driver.pdb + Console + false + + + MachineX64 + + + + + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreadedDLL + true + + + Level3 + + + xerces-c_3.lib;%(AdditionalDependencies) + $(TargetPath) + true + Console + true + true + false + + + MachineX86 + + + + + X64 + + + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreadedDLL + true + + + Level3 + + + xerces-c_3.lib;%(AdditionalDependencies) + $(TargetPath) + true + Console + true + true + false + + + MachineX64 + + + + + + + + + + + + + + xsd supermen.xsd + xsd cxx-parser --generate-polymorphic supermen.xsd + supermen-pskel.hxx;supermen-pskel.cxx;%(Outputs) + xsd supermen.xsd + xsd cxx-parser --generate-polymorphic supermen.xsd + supermen-pskel.hxx;supermen-pskel.cxx;%(Outputs) + xsd supermen.xsd + xsd cxx-parser --generate-polymorphic supermen.xsd + supermen-pskel.hxx;supermen-pskel.cxx;%(Outputs) + xsd supermen.xsd + xsd cxx-parser --generate-polymorphic supermen.xsd + supermen-pskel.hxx;supermen-pskel.cxx;%(Outputs) + + + + + + + + + \ No newline at end of file diff --git a/xsd/dist/examples/cxx/parser/polyroot/polyroot-vc10.vcxproj.filters b/xsd/dist/examples/cxx/parser/polyroot/polyroot-vc10.vcxproj.filters new file mode 100644 index 0000000..5b0ee29 --- /dev/null +++ b/xsd/dist/examples/cxx/parser/polyroot/polyroot-vc10.vcxproj.filters @@ -0,0 +1,44 @@ + + + + + {00F2FCE3-0165-405E-B027-F51956F669D1} + cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {6F6E09B9-C59E-45EE-BC77-C2F22039A485} + h;hpp;hxx;hm;inl;inc;xsd + + + {91582f5b-59e2-4b82-9325-b99cf969649e} + xsd + + + + + Source Files + + + Source Files + + + Source Files + + + + + Header Files + + + Header Files + + + + + + + + Schema Files + + + \ No newline at end of file diff --git a/xsd/dist/examples/cxx/parser/polyroot/polyroot-vc11.vcxproj b/xsd/dist/examples/cxx/parser/polyroot/polyroot-vc11.vcxproj new file mode 100644 index 0000000..86427ed --- /dev/null +++ b/xsd/dist/examples/cxx/parser/polyroot/polyroot-vc11.vcxproj @@ -0,0 +1,211 @@ + + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + polyroot + {FB2098FC-CE8C-4A6B-A064-E2705324A16A} + polyroot + Win32Proj + + + + Application + v110 + MultiByte + + + Application + v110 + MultiByte + + + Application + v110 + MultiByte + + + Application + v110 + MultiByte + + + + + + + + + + + + + + + + + + + driver + driver + driver + driver + Debug\ + Debug\ + true + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + true + Release\ + Release\ + false + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + false + + + + Disabled + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebugDLL + true + + + Level3 + + + xerces-c_3D.lib;%(AdditionalDependencies) + $(TargetPath) + true + $(OutDir)driver.pdb + Console + false + + + MachineX86 + + + + + X64 + + + Disabled + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebugDLL + true + + + Level3 + + + xerces-c_3D.lib;%(AdditionalDependencies) + $(TargetPath) + true + $(OutDir)driver.pdb + Console + false + + + MachineX64 + + + + + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreadedDLL + true + + + Level3 + + + xerces-c_3.lib;%(AdditionalDependencies) + $(TargetPath) + true + Console + true + true + false + + + MachineX86 + + + + + X64 + + + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreadedDLL + true + + + Level3 + + + xerces-c_3.lib;%(AdditionalDependencies) + $(TargetPath) + true + Console + true + true + false + + + MachineX64 + + + + + + + + + + + + + + xsd supermen.xsd + xsd cxx-parser --generate-polymorphic supermen.xsd + supermen-pskel.hxx;supermen-pskel.cxx;%(Outputs) + xsd supermen.xsd + xsd cxx-parser --generate-polymorphic supermen.xsd + supermen-pskel.hxx;supermen-pskel.cxx;%(Outputs) + xsd supermen.xsd + xsd cxx-parser --generate-polymorphic supermen.xsd + supermen-pskel.hxx;supermen-pskel.cxx;%(Outputs) + xsd supermen.xsd + xsd cxx-parser --generate-polymorphic supermen.xsd + supermen-pskel.hxx;supermen-pskel.cxx;%(Outputs) + + + + + + + + + \ No newline at end of file diff --git a/xsd/dist/examples/cxx/parser/polyroot/polyroot-vc11.vcxproj.filters b/xsd/dist/examples/cxx/parser/polyroot/polyroot-vc11.vcxproj.filters new file mode 100644 index 0000000..5b0ee29 --- /dev/null +++ b/xsd/dist/examples/cxx/parser/polyroot/polyroot-vc11.vcxproj.filters @@ -0,0 +1,44 @@ + + + + + {00F2FCE3-0165-405E-B027-F51956F669D1} + cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {6F6E09B9-C59E-45EE-BC77-C2F22039A485} + h;hpp;hxx;hm;inl;inc;xsd + + + {91582f5b-59e2-4b82-9325-b99cf969649e} + xsd + + + + + Source Files + + + Source Files + + + Source Files + + + + + Header Files + + + Header Files + + + + + + + + Schema Files + + + \ No newline at end of file diff --git a/xsd/dist/examples/cxx/parser/polyroot/polyroot-vc12.vcxproj b/xsd/dist/examples/cxx/parser/polyroot/polyroot-vc12.vcxproj new file mode 100644 index 0000000..079305b --- /dev/null +++ b/xsd/dist/examples/cxx/parser/polyroot/polyroot-vc12.vcxproj @@ -0,0 +1,215 @@ + + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + polyroot + {FB2098FC-CE8C-4A6B-A064-E2705324A16A} + polyroot + Win32Proj + + + + Application + v120 + MultiByte + + + Application + v120 + MultiByte + + + Application + v120 + MultiByte + + + Application + v120 + MultiByte + + + + + + + + + + + + + + + + + + + driver + driver + driver + driver + Debug\ + Debug\ + true + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + true + Release\ + Release\ + false + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + false + + + + Disabled + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebugDLL + true + + + Level3 + true + + + xerces-c_3D.lib;%(AdditionalDependencies) + $(TargetPath) + true + $(OutDir)driver.pdb + Console + false + + + MachineX86 + + + + + X64 + + + Disabled + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebugDLL + true + + + Level3 + true + + + xerces-c_3D.lib;%(AdditionalDependencies) + $(TargetPath) + true + $(OutDir)driver.pdb + Console + false + + + MachineX64 + + + + + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreadedDLL + true + + + Level3 + true + + + xerces-c_3.lib;%(AdditionalDependencies) + $(TargetPath) + true + Console + true + true + false + + + MachineX86 + + + + + X64 + + + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreadedDLL + true + + + Level3 + true + + + xerces-c_3.lib;%(AdditionalDependencies) + $(TargetPath) + true + Console + true + true + false + + + MachineX64 + + + + + + + + + + + + + + xsd supermen.xsd + xsd cxx-parser --generate-polymorphic supermen.xsd + supermen-pskel.hxx;supermen-pskel.cxx;%(Outputs) + xsd supermen.xsd + xsd cxx-parser --generate-polymorphic supermen.xsd + supermen-pskel.hxx;supermen-pskel.cxx;%(Outputs) + xsd supermen.xsd + xsd cxx-parser --generate-polymorphic supermen.xsd + supermen-pskel.hxx;supermen-pskel.cxx;%(Outputs) + xsd supermen.xsd + xsd cxx-parser --generate-polymorphic supermen.xsd + supermen-pskel.hxx;supermen-pskel.cxx;%(Outputs) + + + + + + + + + \ No newline at end of file diff --git a/xsd/dist/examples/cxx/parser/polyroot/polyroot-vc12.vcxproj.filters b/xsd/dist/examples/cxx/parser/polyroot/polyroot-vc12.vcxproj.filters new file mode 100644 index 0000000..5b0ee29 --- /dev/null +++ b/xsd/dist/examples/cxx/parser/polyroot/polyroot-vc12.vcxproj.filters @@ -0,0 +1,44 @@ + + + + + {00F2FCE3-0165-405E-B027-F51956F669D1} + cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {6F6E09B9-C59E-45EE-BC77-C2F22039A485} + h;hpp;hxx;hm;inl;inc;xsd + + + {91582f5b-59e2-4b82-9325-b99cf969649e} + xsd + + + + + Source Files + + + Source Files + + + Source Files + + + + + Header Files + + + Header Files + + + + + + + + Schema Files + + + \ No newline at end of file diff --git a/xsd/dist/examples/cxx/parser/polyroot/polyroot-vc8.vcproj b/xsd/dist/examples/cxx/parser/polyroot/polyroot-vc8.vcproj new file mode 100644 index 0000000..322f814 --- /dev/null +++ b/xsd/dist/examples/cxx/parser/polyroot/polyroot-vc8.vcproj @@ -0,0 +1,431 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/xsd/dist/examples/cxx/parser/polyroot/polyroot-vc9.vcproj b/xsd/dist/examples/cxx/parser/polyroot/polyroot-vc9.vcproj new file mode 100644 index 0000000..fd72439 --- /dev/null +++ b/xsd/dist/examples/cxx/parser/polyroot/polyroot-vc9.vcproj @@ -0,0 +1,428 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/xsd/dist/examples/cxx/parser/polyroot/polyroot-xerces2-7.1.vcproj b/xsd/dist/examples/cxx/parser/polyroot/polyroot-xerces2-7.1.vcproj deleted file mode 100644 index 1cf2d7b..0000000 --- a/xsd/dist/examples/cxx/parser/polyroot/polyroot-xerces2-7.1.vcproj +++ /dev/null @@ -1,170 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/xsd/dist/examples/cxx/parser/polyroot/polyroot-xerces2-8.0.vcproj b/xsd/dist/examples/cxx/parser/polyroot/polyroot-xerces2-8.0.vcproj deleted file mode 100644 index 13ee0c1..0000000 --- a/xsd/dist/examples/cxx/parser/polyroot/polyroot-xerces2-8.0.vcproj +++ /dev/null @@ -1,431 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/xsd/dist/examples/cxx/parser/polyroot/polyroot-xerces2-9.0.vcproj b/xsd/dist/examples/cxx/parser/polyroot/polyroot-xerces2-9.0.vcproj deleted file mode 100644 index 792cac2..0000000 --- a/xsd/dist/examples/cxx/parser/polyroot/polyroot-xerces2-9.0.vcproj +++ /dev/null @@ -1,428 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/xsd/dist/examples/cxx/parser/wildcard/wildcard-10.0.vcxproj b/xsd/dist/examples/cxx/parser/wildcard/wildcard-10.0.vcxproj deleted file mode 100644 index 749e901..0000000 --- a/xsd/dist/examples/cxx/parser/wildcard/wildcard-10.0.vcxproj +++ /dev/null @@ -1,205 +0,0 @@ - - - - - Debug - Win32 - - - Debug - x64 - - - Release - Win32 - - - Release - x64 - - - - wildcard - {9832425B-38D5-44EC-AED6-3ED4353B24EA} - wildcard - Win32Proj - - - - Application - MultiByte - - - Application - MultiByte - - - Application - MultiByte - - - Application - MultiByte - - - - - - - - - - - - - - - - - - - driver - driver - driver - driver - Debug\ - Debug\ - true - $(Platform)\$(Configuration)\ - $(Platform)\$(Configuration)\ - true - Release\ - Release\ - false - $(Platform)\$(Configuration)\ - $(Platform)\$(Configuration)\ - false - - - - Disabled - WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebug - - - Level3 - EditAndContinue - - - xerces-c_3D.lib;%(AdditionalDependencies) - $(TargetPath) - true - $(OutDir)driver.pdb - Console - false - - - MachineX86 - - - - - X64 - - - Disabled - WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebug - - - Level3 - ProgramDatabase - - - xerces-c_3D.lib;%(AdditionalDependencies) - $(TargetPath) - true - $(OutDir)driver.pdb - Console - false - - - MachineX64 - - - - - WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - MultiThreaded - - - Level3 - ProgramDatabase - - - xerces-c_3.lib;%(AdditionalDependencies) - $(TargetPath) - true - Console - true - true - false - - - MachineX86 - - - - - X64 - - - WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - MultiThreaded - - - Level3 - ProgramDatabase - - - xerces-c_3.lib;%(AdditionalDependencies) - $(TargetPath) - true - Console - true - true - false - - - MachineX64 - - - - - - - - - - - - xsd email.xsd - xsd cxx-parser email.xsd - email-pskel.hxx;email-pskel.cxx;%(Outputs) - xsd email.xsd - xsd cxx-parser email.xsd - email-pskel.hxx;email-pskel.cxx;%(Outputs) - xsd email.xsd - xsd cxx-parser email.xsd - email-pskel.hxx;email-pskel.cxx;%(Outputs) - xsd email.xsd - xsd cxx-parser email.xsd - email-pskel.hxx;email-pskel.cxx;%(Outputs) - - - - - - - - - \ No newline at end of file diff --git a/xsd/dist/examples/cxx/parser/wildcard/wildcard-10.0.vcxproj.filters b/xsd/dist/examples/cxx/parser/wildcard/wildcard-10.0.vcxproj.filters deleted file mode 100644 index 756239f..0000000 --- a/xsd/dist/examples/cxx/parser/wildcard/wildcard-10.0.vcxproj.filters +++ /dev/null @@ -1,38 +0,0 @@ - - - - - {F05001BC-BAEB-4D9D-89E4-D19B208F34BF} - cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx - - - {CDCB25B7-BCBA-4C74-828E-09B2D7860485} - h;hpp;hxx;hm;inl;inc;xsd - - - {1b27359f-6508-4bb0-96ed-b5a3fdb228c6} - xsd - - - - - Source Files - - - Source Files - - - - - Header Files - - - - - - - - Schema Files - - - \ No newline at end of file diff --git a/xsd/dist/examples/cxx/parser/wildcard/wildcard-7.1.vcproj b/xsd/dist/examples/cxx/parser/wildcard/wildcard-7.1.vcproj deleted file mode 100644 index a689a5f..0000000 --- a/xsd/dist/examples/cxx/parser/wildcard/wildcard-7.1.vcproj +++ /dev/null @@ -1,162 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/xsd/dist/examples/cxx/parser/wildcard/wildcard-8.0.vcproj b/xsd/dist/examples/cxx/parser/wildcard/wildcard-8.0.vcproj deleted file mode 100644 index a84eda5..0000000 --- a/xsd/dist/examples/cxx/parser/wildcard/wildcard-8.0.vcproj +++ /dev/null @@ -1,419 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/xsd/dist/examples/cxx/parser/wildcard/wildcard-9.0.vcproj b/xsd/dist/examples/cxx/parser/wildcard/wildcard-9.0.vcproj deleted file mode 100644 index a016883..0000000 --- a/xsd/dist/examples/cxx/parser/wildcard/wildcard-9.0.vcproj +++ /dev/null @@ -1,416 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/xsd/dist/examples/cxx/parser/wildcard/wildcard-vc10.vcxproj b/xsd/dist/examples/cxx/parser/wildcard/wildcard-vc10.vcxproj new file mode 100644 index 0000000..adb99cb --- /dev/null +++ b/xsd/dist/examples/cxx/parser/wildcard/wildcard-vc10.vcxproj @@ -0,0 +1,201 @@ + + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + wildcard + {9832425B-38D5-44EC-AED6-3ED4353B24EA} + wildcard + Win32Proj + + + + Application + MultiByte + + + Application + MultiByte + + + Application + MultiByte + + + Application + MultiByte + + + + + + + + + + + + + + + + + + + driver + driver + driver + driver + Debug\ + Debug\ + true + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + true + Release\ + Release\ + false + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + false + + + + Disabled + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebugDLL + + + Level3 + + + xerces-c_3D.lib;%(AdditionalDependencies) + $(TargetPath) + true + $(OutDir)driver.pdb + Console + false + + + MachineX86 + + + + + X64 + + + Disabled + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebugDLL + + + Level3 + + + xerces-c_3D.lib;%(AdditionalDependencies) + $(TargetPath) + true + $(OutDir)driver.pdb + Console + false + + + MachineX64 + + + + + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreadedDLL + + + Level3 + + + xerces-c_3.lib;%(AdditionalDependencies) + $(TargetPath) + true + Console + true + true + false + + + MachineX86 + + + + + X64 + + + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreadedDLL + + + Level3 + + + xerces-c_3.lib;%(AdditionalDependencies) + $(TargetPath) + true + Console + true + true + false + + + MachineX64 + + + + + + + + + + + + xsd email.xsd + xsd cxx-parser email.xsd + email-pskel.hxx;email-pskel.cxx;%(Outputs) + xsd email.xsd + xsd cxx-parser email.xsd + email-pskel.hxx;email-pskel.cxx;%(Outputs) + xsd email.xsd + xsd cxx-parser email.xsd + email-pskel.hxx;email-pskel.cxx;%(Outputs) + xsd email.xsd + xsd cxx-parser email.xsd + email-pskel.hxx;email-pskel.cxx;%(Outputs) + + + + + + + + + \ No newline at end of file diff --git a/xsd/dist/examples/cxx/parser/wildcard/wildcard-vc10.vcxproj.filters b/xsd/dist/examples/cxx/parser/wildcard/wildcard-vc10.vcxproj.filters new file mode 100644 index 0000000..756239f --- /dev/null +++ b/xsd/dist/examples/cxx/parser/wildcard/wildcard-vc10.vcxproj.filters @@ -0,0 +1,38 @@ + + + + + {F05001BC-BAEB-4D9D-89E4-D19B208F34BF} + cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {CDCB25B7-BCBA-4C74-828E-09B2D7860485} + h;hpp;hxx;hm;inl;inc;xsd + + + {1b27359f-6508-4bb0-96ed-b5a3fdb228c6} + xsd + + + + + Source Files + + + Source Files + + + + + Header Files + + + + + + + + Schema Files + + + \ No newline at end of file diff --git a/xsd/dist/examples/cxx/parser/wildcard/wildcard-vc11.vcxproj b/xsd/dist/examples/cxx/parser/wildcard/wildcard-vc11.vcxproj new file mode 100644 index 0000000..e422655 --- /dev/null +++ b/xsd/dist/examples/cxx/parser/wildcard/wildcard-vc11.vcxproj @@ -0,0 +1,205 @@ + + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + wildcard + {9832425B-38D5-44EC-AED6-3ED4353B24EA} + wildcard + Win32Proj + + + + Application + v110 + MultiByte + + + Application + v110 + MultiByte + + + Application + v110 + MultiByte + + + Application + v110 + MultiByte + + + + + + + + + + + + + + + + + + + driver + driver + driver + driver + Debug\ + Debug\ + true + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + true + Release\ + Release\ + false + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + false + + + + Disabled + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebugDLL + + + Level3 + + + xerces-c_3D.lib;%(AdditionalDependencies) + $(TargetPath) + true + $(OutDir)driver.pdb + Console + false + + + MachineX86 + + + + + X64 + + + Disabled + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebugDLL + + + Level3 + + + xerces-c_3D.lib;%(AdditionalDependencies) + $(TargetPath) + true + $(OutDir)driver.pdb + Console + false + + + MachineX64 + + + + + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreadedDLL + + + Level3 + + + xerces-c_3.lib;%(AdditionalDependencies) + $(TargetPath) + true + Console + true + true + false + + + MachineX86 + + + + + X64 + + + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreadedDLL + + + Level3 + + + xerces-c_3.lib;%(AdditionalDependencies) + $(TargetPath) + true + Console + true + true + false + + + MachineX64 + + + + + + + + + + + + xsd email.xsd + xsd cxx-parser email.xsd + email-pskel.hxx;email-pskel.cxx;%(Outputs) + xsd email.xsd + xsd cxx-parser email.xsd + email-pskel.hxx;email-pskel.cxx;%(Outputs) + xsd email.xsd + xsd cxx-parser email.xsd + email-pskel.hxx;email-pskel.cxx;%(Outputs) + xsd email.xsd + xsd cxx-parser email.xsd + email-pskel.hxx;email-pskel.cxx;%(Outputs) + + + + + + + + + \ No newline at end of file diff --git a/xsd/dist/examples/cxx/parser/wildcard/wildcard-vc11.vcxproj.filters b/xsd/dist/examples/cxx/parser/wildcard/wildcard-vc11.vcxproj.filters new file mode 100644 index 0000000..756239f --- /dev/null +++ b/xsd/dist/examples/cxx/parser/wildcard/wildcard-vc11.vcxproj.filters @@ -0,0 +1,38 @@ + + + + + {F05001BC-BAEB-4D9D-89E4-D19B208F34BF} + cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {CDCB25B7-BCBA-4C74-828E-09B2D7860485} + h;hpp;hxx;hm;inl;inc;xsd + + + {1b27359f-6508-4bb0-96ed-b5a3fdb228c6} + xsd + + + + + Source Files + + + Source Files + + + + + Header Files + + + + + + + + Schema Files + + + \ No newline at end of file diff --git a/xsd/dist/examples/cxx/parser/wildcard/wildcard-vc12.vcxproj b/xsd/dist/examples/cxx/parser/wildcard/wildcard-vc12.vcxproj new file mode 100644 index 0000000..e52e9dc --- /dev/null +++ b/xsd/dist/examples/cxx/parser/wildcard/wildcard-vc12.vcxproj @@ -0,0 +1,209 @@ + + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + wildcard + {9832425B-38D5-44EC-AED6-3ED4353B24EA} + wildcard + Win32Proj + + + + Application + v120 + MultiByte + + + Application + v120 + MultiByte + + + Application + v120 + MultiByte + + + Application + v120 + MultiByte + + + + + + + + + + + + + + + + + + + driver + driver + driver + driver + Debug\ + Debug\ + true + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + true + Release\ + Release\ + false + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + false + + + + Disabled + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebugDLL + + + Level3 + true + + + xerces-c_3D.lib;%(AdditionalDependencies) + $(TargetPath) + true + $(OutDir)driver.pdb + Console + false + + + MachineX86 + + + + + X64 + + + Disabled + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebugDLL + + + Level3 + true + + + xerces-c_3D.lib;%(AdditionalDependencies) + $(TargetPath) + true + $(OutDir)driver.pdb + Console + false + + + MachineX64 + + + + + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreadedDLL + + + Level3 + true + + + xerces-c_3.lib;%(AdditionalDependencies) + $(TargetPath) + true + Console + true + true + false + + + MachineX86 + + + + + X64 + + + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreadedDLL + + + Level3 + true + + + xerces-c_3.lib;%(AdditionalDependencies) + $(TargetPath) + true + Console + true + true + false + + + MachineX64 + + + + + + + + + + + + xsd email.xsd + xsd cxx-parser email.xsd + email-pskel.hxx;email-pskel.cxx;%(Outputs) + xsd email.xsd + xsd cxx-parser email.xsd + email-pskel.hxx;email-pskel.cxx;%(Outputs) + xsd email.xsd + xsd cxx-parser email.xsd + email-pskel.hxx;email-pskel.cxx;%(Outputs) + xsd email.xsd + xsd cxx-parser email.xsd + email-pskel.hxx;email-pskel.cxx;%(Outputs) + + + + + + + + + \ No newline at end of file diff --git a/xsd/dist/examples/cxx/parser/wildcard/wildcard-vc12.vcxproj.filters b/xsd/dist/examples/cxx/parser/wildcard/wildcard-vc12.vcxproj.filters new file mode 100644 index 0000000..756239f --- /dev/null +++ b/xsd/dist/examples/cxx/parser/wildcard/wildcard-vc12.vcxproj.filters @@ -0,0 +1,38 @@ + + + + + {F05001BC-BAEB-4D9D-89E4-D19B208F34BF} + cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {CDCB25B7-BCBA-4C74-828E-09B2D7860485} + h;hpp;hxx;hm;inl;inc;xsd + + + {1b27359f-6508-4bb0-96ed-b5a3fdb228c6} + xsd + + + + + Source Files + + + Source Files + + + + + Header Files + + + + + + + + Schema Files + + + \ No newline at end of file diff --git a/xsd/dist/examples/cxx/parser/wildcard/wildcard-vc8.vcproj b/xsd/dist/examples/cxx/parser/wildcard/wildcard-vc8.vcproj new file mode 100644 index 0000000..c255eac --- /dev/null +++ b/xsd/dist/examples/cxx/parser/wildcard/wildcard-vc8.vcproj @@ -0,0 +1,419 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/xsd/dist/examples/cxx/parser/wildcard/wildcard-vc9.vcproj b/xsd/dist/examples/cxx/parser/wildcard/wildcard-vc9.vcproj new file mode 100644 index 0000000..e481e43 --- /dev/null +++ b/xsd/dist/examples/cxx/parser/wildcard/wildcard-vc9.vcproj @@ -0,0 +1,416 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/xsd/dist/examples/cxx/parser/wildcard/wildcard-xerces2-7.1.vcproj b/xsd/dist/examples/cxx/parser/wildcard/wildcard-xerces2-7.1.vcproj deleted file mode 100644 index b1cca07..0000000 --- a/xsd/dist/examples/cxx/parser/wildcard/wildcard-xerces2-7.1.vcproj +++ /dev/null @@ -1,162 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/xsd/dist/examples/cxx/parser/wildcard/wildcard-xerces2-8.0.vcproj b/xsd/dist/examples/cxx/parser/wildcard/wildcard-xerces2-8.0.vcproj deleted file mode 100644 index 15a62f2..0000000 --- a/xsd/dist/examples/cxx/parser/wildcard/wildcard-xerces2-8.0.vcproj +++ /dev/null @@ -1,419 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/xsd/dist/examples/cxx/parser/wildcard/wildcard-xerces2-9.0.vcproj b/xsd/dist/examples/cxx/parser/wildcard/wildcard-xerces2-9.0.vcproj deleted file mode 100644 index 8ff8985..0000000 --- a/xsd/dist/examples/cxx/parser/wildcard/wildcard-xerces2-9.0.vcproj +++ /dev/null @@ -1,416 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/xsd/dist/examples/cxx/tree/binary/boost/boost-10.0.sln b/xsd/dist/examples/cxx/tree/binary/boost/boost-10.0.sln deleted file mode 100644 index de4071f..0000000 --- a/xsd/dist/examples/cxx/tree/binary/boost/boost-10.0.sln +++ /dev/null @@ -1,25 +0,0 @@ -Microsoft Visual Studio Solution File, Format Version 11.00 -# Visual Studio 2010 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "boost", "boost-10.0.vcxproj", "{0C3A70E2-F673-46B7-B23D-9888266918D5}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Win32 = Debug|Win32 - Debug|x64 = Debug|x64 - Release|Win32 = Release|Win32 - Release|x64 = Release|x64 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {0C3A70E2-F673-46B7-B23D-9888266918D5}.Debug|Win32.ActiveCfg = Debug|Win32 - {0C3A70E2-F673-46B7-B23D-9888266918D5}.Debug|Win32.Build.0 = Debug|Win32 - {0C3A70E2-F673-46B7-B23D-9888266918D5}.Debug|x64.ActiveCfg = Debug|x64 - {0C3A70E2-F673-46B7-B23D-9888266918D5}.Debug|x64.Build.0 = Debug|x64 - {0C3A70E2-F673-46B7-B23D-9888266918D5}.Release|Win32.ActiveCfg = Release|Win32 - {0C3A70E2-F673-46B7-B23D-9888266918D5}.Release|Win32.Build.0 = Release|Win32 - {0C3A70E2-F673-46B7-B23D-9888266918D5}.Release|x64.ActiveCfg = Release|x64 - {0C3A70E2-F673-46B7-B23D-9888266918D5}.Release|x64.Build.0 = Release|x64 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal diff --git a/xsd/dist/examples/cxx/tree/binary/boost/boost-10.0.vcxproj b/xsd/dist/examples/cxx/tree/binary/boost/boost-10.0.vcxproj deleted file mode 100644 index 8df3f37..0000000 --- a/xsd/dist/examples/cxx/tree/binary/boost/boost-10.0.vcxproj +++ /dev/null @@ -1,212 +0,0 @@ - - - - - Debug - Win32 - - - Debug - x64 - - - Release - Win32 - - - Release - x64 - - - - boost - {0C3A70E2-F673-46B7-B23D-9888266918D5} - boost - Win32Proj - - - - Application - MultiByte - - - Application - MultiByte - - - Application - MultiByte - - - Application - MultiByte - - - - - - - - - - - - - - - - - - - driver - driver - driver - driver - Debug\ - Debug\ - true - $(Platform)\$(Configuration)\ - $(Platform)\$(Configuration)\ - true - Release\ - Release\ - false - $(Platform)\$(Configuration)\ - $(Platform)\$(Configuration)\ - false - - - - Disabled - WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - true - - - Level3 - EditAndContinue - - - xerces-c_3D.lib;%(AdditionalDependencies) - $(TargetPath) - true - $(OutDir)driver.pdb - Console - false - - - MachineX86 - - - - - X64 - - - Disabled - WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - true - - - Level3 - ProgramDatabase - - - xerces-c_3D.lib;%(AdditionalDependencies) - $(TargetPath) - true - $(OutDir)driver.pdb - Console - false - - - MachineX64 - - - - - WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - MultiThreadedDLL - true - - - Level3 - ProgramDatabase - - - xerces-c_3.lib;%(AdditionalDependencies) - $(TargetPath) - true - Console - true - true - false - - - MachineX86 - - - - - X64 - - - WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - MultiThreadedDLL - true - - - Level3 - ProgramDatabase - - - xerces-c_3.lib;%(AdditionalDependencies) - $(TargetPath) - true - Console - true - true - false - - - MachineX64 - - - - - - - - - - - - - - - xsd library.xsd - xsd cxx-tree --generate-ostream --hxx-prologue-file library-prologue.hxx --generate-insertion boost::archive::text_oarchive --generate-extraction boost::archive::text_iarchive library.xsd - library.hxx;library.cxx;%(Outputs) - xsd library.xsd - xsd cxx-tree --generate-ostream --hxx-prologue-file library-prologue.hxx --generate-insertion boost::archive::text_oarchive --generate-extraction boost::archive::text_iarchive library.xsd - library.hxx;library.cxx;%(Outputs) - xsd library.xsd - xsd cxx-tree --generate-ostream --hxx-prologue-file library-prologue.hxx --generate-insertion boost::archive::text_oarchive --generate-extraction boost::archive::text_iarchive library.xsd - library.hxx;library.cxx;%(Outputs) - xsd library.xsd - xsd cxx-tree --generate-ostream --hxx-prologue-file library-prologue.hxx --generate-insertion boost::archive::text_oarchive --generate-extraction boost::archive::text_iarchive library.xsd - library.hxx;library.cxx;%(Outputs) - - - - - - - - - \ No newline at end of file diff --git a/xsd/dist/examples/cxx/tree/binary/boost/boost-10.0.vcxproj.filters b/xsd/dist/examples/cxx/tree/binary/boost/boost-10.0.vcxproj.filters deleted file mode 100644 index edb71a3..0000000 --- a/xsd/dist/examples/cxx/tree/binary/boost/boost-10.0.vcxproj.filters +++ /dev/null @@ -1,47 +0,0 @@ - - - - - {22FBBBBD-3A62-471C-867C-8B6F5B3531A9} - cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx - - - {BB6813A9-25E1-49A2-8FCC-FAC9FC4C27FB} - h;hpp;hxx;hm;inl;inc;xsd - - - {458e67fd-1629-41ef-9a2b-66709e69a9bf} - xsd - - - - - Source Files - - - Source Files - - - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - - - - - - Schema Files - - - \ No newline at end of file diff --git a/xsd/dist/examples/cxx/tree/binary/boost/boost-7.1.sln b/xsd/dist/examples/cxx/tree/binary/boost/boost-7.1.sln deleted file mode 100644 index a819e22..0000000 --- a/xsd/dist/examples/cxx/tree/binary/boost/boost-7.1.sln +++ /dev/null @@ -1,21 +0,0 @@ -Microsoft Visual Studio Solution File, Format Version 8.00 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "boost", "boost-7.1.vcproj", "{0C3A70E2-F673-46B7-B23D-9888266918D5}" - ProjectSection(ProjectDependencies) = postProject - EndProjectSection -EndProject -Global - GlobalSection(SolutionConfiguration) = preSolution - Debug = Debug - Release = Release - EndGlobalSection - GlobalSection(ProjectConfiguration) = postSolution - {0C3A70E2-F673-46B7-B23D-9888266918D5}.Debug.ActiveCfg = Debug|Win32 - {0C3A70E2-F673-46B7-B23D-9888266918D5}.Debug.Build.0 = Debug|Win32 - {0C3A70E2-F673-46B7-B23D-9888266918D5}.Release.ActiveCfg = Release|Win32 - {0C3A70E2-F673-46B7-B23D-9888266918D5}.Release.Build.0 = Release|Win32 - EndGlobalSection - GlobalSection(ExtensibilityGlobals) = postSolution - EndGlobalSection - GlobalSection(ExtensibilityAddIns) = postSolution - EndGlobalSection -EndGlobal diff --git a/xsd/dist/examples/cxx/tree/binary/boost/boost-7.1.vcproj b/xsd/dist/examples/cxx/tree/binary/boost/boost-7.1.vcproj deleted file mode 100644 index 1332c12..0000000 --- a/xsd/dist/examples/cxx/tree/binary/boost/boost-7.1.vcproj +++ /dev/null @@ -1,173 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/xsd/dist/examples/cxx/tree/binary/boost/boost-8.0.sln b/xsd/dist/examples/cxx/tree/binary/boost/boost-8.0.sln deleted file mode 100644 index 1cfe184..0000000 --- a/xsd/dist/examples/cxx/tree/binary/boost/boost-8.0.sln +++ /dev/null @@ -1,25 +0,0 @@ -Microsoft Visual Studio Solution File, Format Version 9.00 -# Visual Studio 2005 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "boost", "boost-8.0.vcproj", "{0C3A70E2-F673-46B7-B23D-9888266918D5}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Win32 = Debug|Win32 - Debug|x64 = Debug|x64 - Release|Win32 = Release|Win32 - Release|x64 = Release|x64 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {0C3A70E2-F673-46B7-B23D-9888266918D5}.Debug|Win32.ActiveCfg = Debug|Win32 - {0C3A70E2-F673-46B7-B23D-9888266918D5}.Debug|Win32.Build.0 = Debug|Win32 - {0C3A70E2-F673-46B7-B23D-9888266918D5}.Debug|x64.ActiveCfg = Debug|x64 - {0C3A70E2-F673-46B7-B23D-9888266918D5}.Debug|x64.Build.0 = Debug|x64 - {0C3A70E2-F673-46B7-B23D-9888266918D5}.Release|Win32.ActiveCfg = Release|Win32 - {0C3A70E2-F673-46B7-B23D-9888266918D5}.Release|Win32.Build.0 = Release|Win32 - {0C3A70E2-F673-46B7-B23D-9888266918D5}.Release|x64.ActiveCfg = Release|x64 - {0C3A70E2-F673-46B7-B23D-9888266918D5}.Release|x64.Build.0 = Release|x64 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal diff --git a/xsd/dist/examples/cxx/tree/binary/boost/boost-8.0.vcproj b/xsd/dist/examples/cxx/tree/binary/boost/boost-8.0.vcproj deleted file mode 100644 index 82d23ae..0000000 --- a/xsd/dist/examples/cxx/tree/binary/boost/boost-8.0.vcproj +++ /dev/null @@ -1,435 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/xsd/dist/examples/cxx/tree/binary/boost/boost-9.0.sln b/xsd/dist/examples/cxx/tree/binary/boost/boost-9.0.sln deleted file mode 100644 index b1c69ef..0000000 --- a/xsd/dist/examples/cxx/tree/binary/boost/boost-9.0.sln +++ /dev/null @@ -1,25 +0,0 @@ -Microsoft Visual Studio Solution File, Format Version 10.00 -# Visual Studio 2008 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "boost", "boost-9.0.vcproj", "{0C3A70E2-F673-46B7-B23D-9888266918D5}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Win32 = Debug|Win32 - Debug|x64 = Debug|x64 - Release|Win32 = Release|Win32 - Release|x64 = Release|x64 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {0C3A70E2-F673-46B7-B23D-9888266918D5}.Debug|Win32.ActiveCfg = Debug|Win32 - {0C3A70E2-F673-46B7-B23D-9888266918D5}.Debug|Win32.Build.0 = Debug|Win32 - {0C3A70E2-F673-46B7-B23D-9888266918D5}.Debug|x64.ActiveCfg = Debug|x64 - {0C3A70E2-F673-46B7-B23D-9888266918D5}.Debug|x64.Build.0 = Debug|x64 - {0C3A70E2-F673-46B7-B23D-9888266918D5}.Release|Win32.ActiveCfg = Release|Win32 - {0C3A70E2-F673-46B7-B23D-9888266918D5}.Release|Win32.Build.0 = Release|Win32 - {0C3A70E2-F673-46B7-B23D-9888266918D5}.Release|x64.ActiveCfg = Release|x64 - {0C3A70E2-F673-46B7-B23D-9888266918D5}.Release|x64.Build.0 = Release|x64 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal diff --git a/xsd/dist/examples/cxx/tree/binary/boost/boost-9.0.vcproj b/xsd/dist/examples/cxx/tree/binary/boost/boost-9.0.vcproj deleted file mode 100644 index f5369af..0000000 --- a/xsd/dist/examples/cxx/tree/binary/boost/boost-9.0.vcproj +++ /dev/null @@ -1,432 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/xsd/dist/examples/cxx/tree/binary/boost/boost-vc10.vcxproj b/xsd/dist/examples/cxx/tree/binary/boost/boost-vc10.vcxproj new file mode 100644 index 0000000..8834226 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/binary/boost/boost-vc10.vcxproj @@ -0,0 +1,208 @@ + + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + boost + {0C3A70E2-F673-46B7-B23D-9888266918D5} + boost + Win32Proj + + + + Application + MultiByte + + + Application + MultiByte + + + Application + MultiByte + + + Application + MultiByte + + + + + + + + + + + + + + + + + + + driver + driver + driver + driver + Debug\ + Debug\ + true + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + true + Release\ + Release\ + false + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + false + + + + Disabled + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebugDLL + true + + + Level3 + + + xerces-c_3D.lib;%(AdditionalDependencies) + $(TargetPath) + true + $(OutDir)driver.pdb + Console + false + + + MachineX86 + + + + + X64 + + + Disabled + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebugDLL + true + + + Level3 + + + xerces-c_3D.lib;%(AdditionalDependencies) + $(TargetPath) + true + $(OutDir)driver.pdb + Console + false + + + MachineX64 + + + + + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreadedDLL + true + + + Level3 + + + xerces-c_3.lib;%(AdditionalDependencies) + $(TargetPath) + true + Console + true + true + false + + + MachineX86 + + + + + X64 + + + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreadedDLL + true + + + Level3 + + + xerces-c_3.lib;%(AdditionalDependencies) + $(TargetPath) + true + Console + true + true + false + + + MachineX64 + + + + + + + + + + + + + + + xsd library.xsd + xsd cxx-tree --generate-ostream --hxx-prologue-file library-prologue.hxx --generate-insertion boost::archive::text_oarchive --generate-extraction boost::archive::text_iarchive library.xsd + library.hxx;library.cxx;%(Outputs) + xsd library.xsd + xsd cxx-tree --generate-ostream --hxx-prologue-file library-prologue.hxx --generate-insertion boost::archive::text_oarchive --generate-extraction boost::archive::text_iarchive library.xsd + library.hxx;library.cxx;%(Outputs) + xsd library.xsd + xsd cxx-tree --generate-ostream --hxx-prologue-file library-prologue.hxx --generate-insertion boost::archive::text_oarchive --generate-extraction boost::archive::text_iarchive library.xsd + library.hxx;library.cxx;%(Outputs) + xsd library.xsd + xsd cxx-tree --generate-ostream --hxx-prologue-file library-prologue.hxx --generate-insertion boost::archive::text_oarchive --generate-extraction boost::archive::text_iarchive library.xsd + library.hxx;library.cxx;%(Outputs) + + + + + + + + + \ No newline at end of file diff --git a/xsd/dist/examples/cxx/tree/binary/boost/boost-vc10.vcxproj.filters b/xsd/dist/examples/cxx/tree/binary/boost/boost-vc10.vcxproj.filters new file mode 100644 index 0000000..edb71a3 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/binary/boost/boost-vc10.vcxproj.filters @@ -0,0 +1,47 @@ + + + + + {22FBBBBD-3A62-471C-867C-8B6F5B3531A9} + cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {BB6813A9-25E1-49A2-8FCC-FAC9FC4C27FB} + h;hpp;hxx;hm;inl;inc;xsd + + + {458e67fd-1629-41ef-9a2b-66709e69a9bf} + xsd + + + + + Source Files + + + Source Files + + + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + + + + + + Schema Files + + + \ No newline at end of file diff --git a/xsd/dist/examples/cxx/tree/binary/boost/boost-vc11.vcxproj b/xsd/dist/examples/cxx/tree/binary/boost/boost-vc11.vcxproj new file mode 100644 index 0000000..73a65d5 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/binary/boost/boost-vc11.vcxproj @@ -0,0 +1,212 @@ + + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + boost + {0C3A70E2-F673-46B7-B23D-9888266918D5} + boost + Win32Proj + + + + Application + v110 + MultiByte + + + Application + v110 + MultiByte + + + Application + v110 + MultiByte + + + Application + v110 + MultiByte + + + + + + + + + + + + + + + + + + + driver + driver + driver + driver + Debug\ + Debug\ + true + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + true + Release\ + Release\ + false + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + false + + + + Disabled + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebugDLL + true + + + Level3 + + + xerces-c_3D.lib;%(AdditionalDependencies) + $(TargetPath) + true + $(OutDir)driver.pdb + Console + false + + + MachineX86 + + + + + X64 + + + Disabled + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebugDLL + true + + + Level3 + + + xerces-c_3D.lib;%(AdditionalDependencies) + $(TargetPath) + true + $(OutDir)driver.pdb + Console + false + + + MachineX64 + + + + + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreadedDLL + true + + + Level3 + + + xerces-c_3.lib;%(AdditionalDependencies) + $(TargetPath) + true + Console + true + true + false + + + MachineX86 + + + + + X64 + + + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreadedDLL + true + + + Level3 + + + xerces-c_3.lib;%(AdditionalDependencies) + $(TargetPath) + true + Console + true + true + false + + + MachineX64 + + + + + + + + + + + + + + + xsd library.xsd + xsd cxx-tree --generate-ostream --hxx-prologue-file library-prologue.hxx --generate-insertion boost::archive::text_oarchive --generate-extraction boost::archive::text_iarchive library.xsd + library.hxx;library.cxx;%(Outputs) + xsd library.xsd + xsd cxx-tree --generate-ostream --hxx-prologue-file library-prologue.hxx --generate-insertion boost::archive::text_oarchive --generate-extraction boost::archive::text_iarchive library.xsd + library.hxx;library.cxx;%(Outputs) + xsd library.xsd + xsd cxx-tree --generate-ostream --hxx-prologue-file library-prologue.hxx --generate-insertion boost::archive::text_oarchive --generate-extraction boost::archive::text_iarchive library.xsd + library.hxx;library.cxx;%(Outputs) + xsd library.xsd + xsd cxx-tree --generate-ostream --hxx-prologue-file library-prologue.hxx --generate-insertion boost::archive::text_oarchive --generate-extraction boost::archive::text_iarchive library.xsd + library.hxx;library.cxx;%(Outputs) + + + + + + + + + \ No newline at end of file diff --git a/xsd/dist/examples/cxx/tree/binary/boost/boost-vc11.vcxproj.filters b/xsd/dist/examples/cxx/tree/binary/boost/boost-vc11.vcxproj.filters new file mode 100644 index 0000000..edb71a3 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/binary/boost/boost-vc11.vcxproj.filters @@ -0,0 +1,47 @@ + + + + + {22FBBBBD-3A62-471C-867C-8B6F5B3531A9} + cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {BB6813A9-25E1-49A2-8FCC-FAC9FC4C27FB} + h;hpp;hxx;hm;inl;inc;xsd + + + {458e67fd-1629-41ef-9a2b-66709e69a9bf} + xsd + + + + + Source Files + + + Source Files + + + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + + + + + + Schema Files + + + \ No newline at end of file diff --git a/xsd/dist/examples/cxx/tree/binary/boost/boost-vc12.vcxproj b/xsd/dist/examples/cxx/tree/binary/boost/boost-vc12.vcxproj new file mode 100644 index 0000000..8c7d2c5 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/binary/boost/boost-vc12.vcxproj @@ -0,0 +1,216 @@ + + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + boost + {0C3A70E2-F673-46B7-B23D-9888266918D5} + boost + Win32Proj + + + + Application + v120 + MultiByte + + + Application + v120 + MultiByte + + + Application + v120 + MultiByte + + + Application + v120 + MultiByte + + + + + + + + + + + + + + + + + + + driver + driver + driver + driver + Debug\ + Debug\ + true + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + true + Release\ + Release\ + false + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + false + + + + Disabled + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebugDLL + true + + + Level3 + true + + + xerces-c_3D.lib;%(AdditionalDependencies) + $(TargetPath) + true + $(OutDir)driver.pdb + Console + false + + + MachineX86 + + + + + X64 + + + Disabled + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebugDLL + true + + + Level3 + true + + + xerces-c_3D.lib;%(AdditionalDependencies) + $(TargetPath) + true + $(OutDir)driver.pdb + Console + false + + + MachineX64 + + + + + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreadedDLL + true + + + Level3 + true + + + xerces-c_3.lib;%(AdditionalDependencies) + $(TargetPath) + true + Console + true + true + false + + + MachineX86 + + + + + X64 + + + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreadedDLL + true + + + Level3 + true + + + xerces-c_3.lib;%(AdditionalDependencies) + $(TargetPath) + true + Console + true + true + false + + + MachineX64 + + + + + + + + + + + + + + + xsd library.xsd + xsd cxx-tree --generate-ostream --hxx-prologue-file library-prologue.hxx --generate-insertion boost::archive::text_oarchive --generate-extraction boost::archive::text_iarchive library.xsd + library.hxx;library.cxx;%(Outputs) + xsd library.xsd + xsd cxx-tree --generate-ostream --hxx-prologue-file library-prologue.hxx --generate-insertion boost::archive::text_oarchive --generate-extraction boost::archive::text_iarchive library.xsd + library.hxx;library.cxx;%(Outputs) + xsd library.xsd + xsd cxx-tree --generate-ostream --hxx-prologue-file library-prologue.hxx --generate-insertion boost::archive::text_oarchive --generate-extraction boost::archive::text_iarchive library.xsd + library.hxx;library.cxx;%(Outputs) + xsd library.xsd + xsd cxx-tree --generate-ostream --hxx-prologue-file library-prologue.hxx --generate-insertion boost::archive::text_oarchive --generate-extraction boost::archive::text_iarchive library.xsd + library.hxx;library.cxx;%(Outputs) + + + + + + + + + \ No newline at end of file diff --git a/xsd/dist/examples/cxx/tree/binary/boost/boost-vc12.vcxproj.filters b/xsd/dist/examples/cxx/tree/binary/boost/boost-vc12.vcxproj.filters new file mode 100644 index 0000000..edb71a3 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/binary/boost/boost-vc12.vcxproj.filters @@ -0,0 +1,47 @@ + + + + + {22FBBBBD-3A62-471C-867C-8B6F5B3531A9} + cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {BB6813A9-25E1-49A2-8FCC-FAC9FC4C27FB} + h;hpp;hxx;hm;inl;inc;xsd + + + {458e67fd-1629-41ef-9a2b-66709e69a9bf} + xsd + + + + + Source Files + + + Source Files + + + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + + + + + + Schema Files + + + \ No newline at end of file diff --git a/xsd/dist/examples/cxx/tree/binary/boost/boost-vc8.vcproj b/xsd/dist/examples/cxx/tree/binary/boost/boost-vc8.vcproj new file mode 100644 index 0000000..82d23ae --- /dev/null +++ b/xsd/dist/examples/cxx/tree/binary/boost/boost-vc8.vcproj @@ -0,0 +1,435 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/xsd/dist/examples/cxx/tree/binary/boost/boost-vc9.vcproj b/xsd/dist/examples/cxx/tree/binary/boost/boost-vc9.vcproj new file mode 100644 index 0000000..f5369af --- /dev/null +++ b/xsd/dist/examples/cxx/tree/binary/boost/boost-vc9.vcproj @@ -0,0 +1,432 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/xsd/dist/examples/cxx/tree/binary/boost/boost-xerces2-7.1.sln b/xsd/dist/examples/cxx/tree/binary/boost/boost-xerces2-7.1.sln deleted file mode 100644 index f6493d6..0000000 --- a/xsd/dist/examples/cxx/tree/binary/boost/boost-xerces2-7.1.sln +++ /dev/null @@ -1,21 +0,0 @@ -Microsoft Visual Studio Solution File, Format Version 8.00 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "boost", "boost-xerces2-7.1.vcproj", "{0C3A70E2-F673-46B7-B23D-9888266918D5}" - ProjectSection(ProjectDependencies) = postProject - EndProjectSection -EndProject -Global - GlobalSection(SolutionConfiguration) = preSolution - Debug = Debug - Release = Release - EndGlobalSection - GlobalSection(ProjectConfiguration) = postSolution - {0C3A70E2-F673-46B7-B23D-9888266918D5}.Debug.ActiveCfg = Debug|Win32 - {0C3A70E2-F673-46B7-B23D-9888266918D5}.Debug.Build.0 = Debug|Win32 - {0C3A70E2-F673-46B7-B23D-9888266918D5}.Release.ActiveCfg = Release|Win32 - {0C3A70E2-F673-46B7-B23D-9888266918D5}.Release.Build.0 = Release|Win32 - EndGlobalSection - GlobalSection(ExtensibilityGlobals) = postSolution - EndGlobalSection - GlobalSection(ExtensibilityAddIns) = postSolution - EndGlobalSection -EndGlobal diff --git a/xsd/dist/examples/cxx/tree/binary/boost/boost-xerces2-7.1.vcproj b/xsd/dist/examples/cxx/tree/binary/boost/boost-xerces2-7.1.vcproj deleted file mode 100644 index 5081f38..0000000 --- a/xsd/dist/examples/cxx/tree/binary/boost/boost-xerces2-7.1.vcproj +++ /dev/null @@ -1,173 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/xsd/dist/examples/cxx/tree/binary/boost/boost-xerces2-8.0.sln b/xsd/dist/examples/cxx/tree/binary/boost/boost-xerces2-8.0.sln deleted file mode 100644 index 34ae78e..0000000 --- a/xsd/dist/examples/cxx/tree/binary/boost/boost-xerces2-8.0.sln +++ /dev/null @@ -1,25 +0,0 @@ -Microsoft Visual Studio Solution File, Format Version 9.00 -# Visual Studio 2005 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "boost", "boost-xerces2-8.0.vcproj", "{0C3A70E2-F673-46B7-B23D-9888266918D5}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Win32 = Debug|Win32 - Debug|x64 = Debug|x64 - Release|Win32 = Release|Win32 - Release|x64 = Release|x64 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {0C3A70E2-F673-46B7-B23D-9888266918D5}.Debug|Win32.ActiveCfg = Debug|Win32 - {0C3A70E2-F673-46B7-B23D-9888266918D5}.Debug|Win32.Build.0 = Debug|Win32 - {0C3A70E2-F673-46B7-B23D-9888266918D5}.Debug|x64.ActiveCfg = Debug|x64 - {0C3A70E2-F673-46B7-B23D-9888266918D5}.Debug|x64.Build.0 = Debug|x64 - {0C3A70E2-F673-46B7-B23D-9888266918D5}.Release|Win32.ActiveCfg = Release|Win32 - {0C3A70E2-F673-46B7-B23D-9888266918D5}.Release|Win32.Build.0 = Release|Win32 - {0C3A70E2-F673-46B7-B23D-9888266918D5}.Release|x64.ActiveCfg = Release|x64 - {0C3A70E2-F673-46B7-B23D-9888266918D5}.Release|x64.Build.0 = Release|x64 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal diff --git a/xsd/dist/examples/cxx/tree/binary/boost/boost-xerces2-8.0.vcproj b/xsd/dist/examples/cxx/tree/binary/boost/boost-xerces2-8.0.vcproj deleted file mode 100644 index a3910f4..0000000 --- a/xsd/dist/examples/cxx/tree/binary/boost/boost-xerces2-8.0.vcproj +++ /dev/null @@ -1,435 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/xsd/dist/examples/cxx/tree/binary/boost/boost-xerces2-9.0.sln b/xsd/dist/examples/cxx/tree/binary/boost/boost-xerces2-9.0.sln deleted file mode 100644 index 9e2d81e..0000000 --- a/xsd/dist/examples/cxx/tree/binary/boost/boost-xerces2-9.0.sln +++ /dev/null @@ -1,25 +0,0 @@ -Microsoft Visual Studio Solution File, Format Version 10.00 -# Visual Studio 2008 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "boost", "boost-xerces2-9.0.vcproj", "{0C3A70E2-F673-46B7-B23D-9888266918D5}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Win32 = Debug|Win32 - Debug|x64 = Debug|x64 - Release|Win32 = Release|Win32 - Release|x64 = Release|x64 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {0C3A70E2-F673-46B7-B23D-9888266918D5}.Debug|Win32.ActiveCfg = Debug|Win32 - {0C3A70E2-F673-46B7-B23D-9888266918D5}.Debug|Win32.Build.0 = Debug|Win32 - {0C3A70E2-F673-46B7-B23D-9888266918D5}.Debug|x64.ActiveCfg = Debug|x64 - {0C3A70E2-F673-46B7-B23D-9888266918D5}.Debug|x64.Build.0 = Debug|x64 - {0C3A70E2-F673-46B7-B23D-9888266918D5}.Release|Win32.ActiveCfg = Release|Win32 - {0C3A70E2-F673-46B7-B23D-9888266918D5}.Release|Win32.Build.0 = Release|Win32 - {0C3A70E2-F673-46B7-B23D-9888266918D5}.Release|x64.ActiveCfg = Release|x64 - {0C3A70E2-F673-46B7-B23D-9888266918D5}.Release|x64.Build.0 = Release|x64 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal diff --git a/xsd/dist/examples/cxx/tree/binary/boost/boost-xerces2-9.0.vcproj b/xsd/dist/examples/cxx/tree/binary/boost/boost-xerces2-9.0.vcproj deleted file mode 100644 index f1d01ef..0000000 --- a/xsd/dist/examples/cxx/tree/binary/boost/boost-xerces2-9.0.vcproj +++ /dev/null @@ -1,432 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/xsd/dist/examples/cxx/tree/binary/cdr/cdr-10.0.sln b/xsd/dist/examples/cxx/tree/binary/cdr/cdr-10.0.sln deleted file mode 100644 index d3bf523..0000000 --- a/xsd/dist/examples/cxx/tree/binary/cdr/cdr-10.0.sln +++ /dev/null @@ -1,25 +0,0 @@ -Microsoft Visual Studio Solution File, Format Version 11.00 -# Visual Studio 2010 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "cdr", "cdr-10.0.vcxproj", "{A8CC2814-5056-4953-8B4C-E52E72ADD36C}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Win32 = Debug|Win32 - Debug|x64 = Debug|x64 - Release|Win32 = Release|Win32 - Release|x64 = Release|x64 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {A8CC2814-5056-4953-8B4C-E52E72ADD36C}.Debug|Win32.ActiveCfg = Debug|Win32 - {A8CC2814-5056-4953-8B4C-E52E72ADD36C}.Debug|Win32.Build.0 = Debug|Win32 - {A8CC2814-5056-4953-8B4C-E52E72ADD36C}.Debug|x64.ActiveCfg = Debug|x64 - {A8CC2814-5056-4953-8B4C-E52E72ADD36C}.Debug|x64.Build.0 = Debug|x64 - {A8CC2814-5056-4953-8B4C-E52E72ADD36C}.Release|Win32.ActiveCfg = Release|Win32 - {A8CC2814-5056-4953-8B4C-E52E72ADD36C}.Release|Win32.Build.0 = Release|Win32 - {A8CC2814-5056-4953-8B4C-E52E72ADD36C}.Release|x64.ActiveCfg = Release|x64 - {A8CC2814-5056-4953-8B4C-E52E72ADD36C}.Release|x64.Build.0 = Release|x64 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal diff --git a/xsd/dist/examples/cxx/tree/binary/cdr/cdr-10.0.vcxproj b/xsd/dist/examples/cxx/tree/binary/cdr/cdr-10.0.vcxproj deleted file mode 100644 index a872d5f..0000000 --- a/xsd/dist/examples/cxx/tree/binary/cdr/cdr-10.0.vcxproj +++ /dev/null @@ -1,209 +0,0 @@ - - - - - Debug - Win32 - - - Debug - x64 - - - Release - Win32 - - - Release - x64 - - - - cdr - {A8CC2814-5056-4953-8B4C-E52E72ADD36C} - cdr - Win32Proj - - - - Application - MultiByte - - - Application - MultiByte - - - Application - MultiByte - - - Application - MultiByte - - - - - - - - - - - - - - - - - - - driver - driver - driver - driver - Debug\ - Debug\ - true - $(Platform)\$(Configuration)\ - $(Platform)\$(Configuration)\ - true - Release\ - Release\ - false - $(Platform)\$(Configuration)\ - $(Platform)\$(Configuration)\ - false - - - - Disabled - WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - true - - - Level3 - EditAndContinue - - - xerces-c_3D.lib;ACEd.lib;%(AdditionalDependencies) - $(TargetPath) - true - $(OutDir)driver.pdb - Console - false - - - MachineX86 - - - - - X64 - - - Disabled - WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - true - - - Level3 - ProgramDatabase - - - xerces-c_3D.lib;ACEd.lib;%(AdditionalDependencies) - $(TargetPath) - true - $(OutDir)driver.pdb - Console - false - - - MachineX64 - - - - - WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - MultiThreadedDLL - true - - - Level3 - ProgramDatabase - - - xerces-c_3.lib;ACE.lib;%(AdditionalDependencies) - $(TargetPath) - true - Console - true - true - false - - - MachineX86 - - - - - X64 - - - WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - MultiThreadedDLL - true - - - Level3 - ProgramDatabase - - - xerces-c_3.lib;ACE.lib;%(AdditionalDependencies) - $(TargetPath) - true - Console - true - true - false - - - MachineX64 - - - - - - - - - - - - xsd library.xsd - xsd cxx-tree --generate-ostream --generate-insertion ACE_OutputCDR --generate-extraction ACE_InputCDR library.xsd - library.hxx;library.cxx;%(Outputs) - xsd library.xsd - xsd cxx-tree --generate-ostream --generate-insertion ACE_OutputCDR --generate-extraction ACE_InputCDR library.xsd - library.hxx;library.cxx;%(Outputs) - xsd library.xsd - xsd cxx-tree --generate-ostream --generate-insertion ACE_OutputCDR --generate-extraction ACE_InputCDR library.xsd - library.hxx;library.cxx;%(Outputs) - xsd library.xsd - xsd cxx-tree --generate-ostream --generate-insertion ACE_OutputCDR --generate-extraction ACE_InputCDR library.xsd - library.hxx;library.cxx;%(Outputs) - - - - - - - - - \ No newline at end of file diff --git a/xsd/dist/examples/cxx/tree/binary/cdr/cdr-10.0.vcxproj.filters b/xsd/dist/examples/cxx/tree/binary/cdr/cdr-10.0.vcxproj.filters deleted file mode 100644 index 92ff3ee..0000000 --- a/xsd/dist/examples/cxx/tree/binary/cdr/cdr-10.0.vcxproj.filters +++ /dev/null @@ -1,38 +0,0 @@ - - - - - {50AA6317-04BE-45AB-98DD-7A32AEB710CF} - cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx - - - {E740B51E-A619-4888-B6B9-566A3C77C60B} - h;hpp;hxx;hm;inl;inc;xsd - - - {37283c57-4a32-48ed-823b-0efdf7cdcf51} - xsd - - - - - Source Files - - - Source Files - - - - - Header Files - - - - - - - - Schema Files - - - \ No newline at end of file diff --git a/xsd/dist/examples/cxx/tree/binary/cdr/cdr-7.1.sln b/xsd/dist/examples/cxx/tree/binary/cdr/cdr-7.1.sln deleted file mode 100644 index ba99300..0000000 --- a/xsd/dist/examples/cxx/tree/binary/cdr/cdr-7.1.sln +++ /dev/null @@ -1,21 +0,0 @@ -Microsoft Visual Studio Solution File, Format Version 8.00 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "cdr", "cdr-7.1.vcproj", "{A8CC2814-5056-4953-8B4C-E52E72ADD36C}" - ProjectSection(ProjectDependencies) = postProject - EndProjectSection -EndProject -Global - GlobalSection(SolutionConfiguration) = preSolution - Debug = Debug - Release = Release - EndGlobalSection - GlobalSection(ProjectConfiguration) = postSolution - {A8CC2814-5056-4953-8B4C-E52E72ADD36C}.Debug.ActiveCfg = Debug|Win32 - {A8CC2814-5056-4953-8B4C-E52E72ADD36C}.Debug.Build.0 = Debug|Win32 - {A8CC2814-5056-4953-8B4C-E52E72ADD36C}.Release.ActiveCfg = Release|Win32 - {A8CC2814-5056-4953-8B4C-E52E72ADD36C}.Release.Build.0 = Release|Win32 - EndGlobalSection - GlobalSection(ExtensibilityGlobals) = postSolution - EndGlobalSection - GlobalSection(ExtensibilityAddIns) = postSolution - EndGlobalSection -EndGlobal diff --git a/xsd/dist/examples/cxx/tree/binary/cdr/cdr-7.1.vcproj b/xsd/dist/examples/cxx/tree/binary/cdr/cdr-7.1.vcproj deleted file mode 100644 index 90cc1ef..0000000 --- a/xsd/dist/examples/cxx/tree/binary/cdr/cdr-7.1.vcproj +++ /dev/null @@ -1,164 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/xsd/dist/examples/cxx/tree/binary/cdr/cdr-8.0.sln b/xsd/dist/examples/cxx/tree/binary/cdr/cdr-8.0.sln deleted file mode 100644 index d56f85b..0000000 --- a/xsd/dist/examples/cxx/tree/binary/cdr/cdr-8.0.sln +++ /dev/null @@ -1,25 +0,0 @@ -Microsoft Visual Studio Solution File, Format Version 9.00 -# Visual Studio 2005 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "cdr", "cdr-8.0.vcproj", "{A8CC2814-5056-4953-8B4C-E52E72ADD36C}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Win32 = Debug|Win32 - Debug|x64 = Debug|x64 - Release|Win32 = Release|Win32 - Release|x64 = Release|x64 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {A8CC2814-5056-4953-8B4C-E52E72ADD36C}.Debug|Win32.ActiveCfg = Debug|Win32 - {A8CC2814-5056-4953-8B4C-E52E72ADD36C}.Debug|Win32.Build.0 = Debug|Win32 - {A8CC2814-5056-4953-8B4C-E52E72ADD36C}.Debug|x64.ActiveCfg = Debug|x64 - {A8CC2814-5056-4953-8B4C-E52E72ADD36C}.Debug|x64.Build.0 = Debug|x64 - {A8CC2814-5056-4953-8B4C-E52E72ADD36C}.Release|Win32.ActiveCfg = Release|Win32 - {A8CC2814-5056-4953-8B4C-E52E72ADD36C}.Release|Win32.Build.0 = Release|Win32 - {A8CC2814-5056-4953-8B4C-E52E72ADD36C}.Release|x64.ActiveCfg = Release|x64 - {A8CC2814-5056-4953-8B4C-E52E72ADD36C}.Release|x64.Build.0 = Release|x64 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal diff --git a/xsd/dist/examples/cxx/tree/binary/cdr/cdr-8.0.vcproj b/xsd/dist/examples/cxx/tree/binary/cdr/cdr-8.0.vcproj deleted file mode 100644 index d35171a..0000000 --- a/xsd/dist/examples/cxx/tree/binary/cdr/cdr-8.0.vcproj +++ /dev/null @@ -1,423 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/xsd/dist/examples/cxx/tree/binary/cdr/cdr-9.0.sln b/xsd/dist/examples/cxx/tree/binary/cdr/cdr-9.0.sln deleted file mode 100644 index 873085c..0000000 --- a/xsd/dist/examples/cxx/tree/binary/cdr/cdr-9.0.sln +++ /dev/null @@ -1,25 +0,0 @@ -Microsoft Visual Studio Solution File, Format Version 10.00 -# Visual Studio 2008 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "cdr", "cdr-9.0.vcproj", "{A8CC2814-5056-4953-8B4C-E52E72ADD36C}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Win32 = Debug|Win32 - Debug|x64 = Debug|x64 - Release|Win32 = Release|Win32 - Release|x64 = Release|x64 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {A8CC2814-5056-4953-8B4C-E52E72ADD36C}.Debug|Win32.ActiveCfg = Debug|Win32 - {A8CC2814-5056-4953-8B4C-E52E72ADD36C}.Debug|Win32.Build.0 = Debug|Win32 - {A8CC2814-5056-4953-8B4C-E52E72ADD36C}.Debug|x64.ActiveCfg = Debug|x64 - {A8CC2814-5056-4953-8B4C-E52E72ADD36C}.Debug|x64.Build.0 = Debug|x64 - {A8CC2814-5056-4953-8B4C-E52E72ADD36C}.Release|Win32.ActiveCfg = Release|Win32 - {A8CC2814-5056-4953-8B4C-E52E72ADD36C}.Release|Win32.Build.0 = Release|Win32 - {A8CC2814-5056-4953-8B4C-E52E72ADD36C}.Release|x64.ActiveCfg = Release|x64 - {A8CC2814-5056-4953-8B4C-E52E72ADD36C}.Release|x64.Build.0 = Release|x64 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal diff --git a/xsd/dist/examples/cxx/tree/binary/cdr/cdr-9.0.vcproj b/xsd/dist/examples/cxx/tree/binary/cdr/cdr-9.0.vcproj deleted file mode 100644 index f379d83..0000000 --- a/xsd/dist/examples/cxx/tree/binary/cdr/cdr-9.0.vcproj +++ /dev/null @@ -1,420 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/xsd/dist/examples/cxx/tree/binary/cdr/cdr-vc10.vcxproj b/xsd/dist/examples/cxx/tree/binary/cdr/cdr-vc10.vcxproj new file mode 100644 index 0000000..5acfa0e --- /dev/null +++ b/xsd/dist/examples/cxx/tree/binary/cdr/cdr-vc10.vcxproj @@ -0,0 +1,205 @@ + + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + cdr + {A8CC2814-5056-4953-8B4C-E52E72ADD36C} + cdr + Win32Proj + + + + Application + MultiByte + + + Application + MultiByte + + + Application + MultiByte + + + Application + MultiByte + + + + + + + + + + + + + + + + + + + driver + driver + driver + driver + Debug\ + Debug\ + true + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + true + Release\ + Release\ + false + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + false + + + + Disabled + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebugDLL + true + + + Level3 + + + xerces-c_3D.lib;ACEd.lib;%(AdditionalDependencies) + $(TargetPath) + true + $(OutDir)driver.pdb + Console + false + + + MachineX86 + + + + + X64 + + + Disabled + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebugDLL + true + + + Level3 + + + xerces-c_3D.lib;ACEd.lib;%(AdditionalDependencies) + $(TargetPath) + true + $(OutDir)driver.pdb + Console + false + + + MachineX64 + + + + + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreadedDLL + true + + + Level3 + + + xerces-c_3.lib;ACE.lib;%(AdditionalDependencies) + $(TargetPath) + true + Console + true + true + false + + + MachineX86 + + + + + X64 + + + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreadedDLL + true + + + Level3 + + + xerces-c_3.lib;ACE.lib;%(AdditionalDependencies) + $(TargetPath) + true + Console + true + true + false + + + MachineX64 + + + + + + + + + + + + xsd library.xsd + xsd cxx-tree --generate-ostream --generate-insertion ACE_OutputCDR --generate-extraction ACE_InputCDR library.xsd + library.hxx;library.cxx;%(Outputs) + xsd library.xsd + xsd cxx-tree --generate-ostream --generate-insertion ACE_OutputCDR --generate-extraction ACE_InputCDR library.xsd + library.hxx;library.cxx;%(Outputs) + xsd library.xsd + xsd cxx-tree --generate-ostream --generate-insertion ACE_OutputCDR --generate-extraction ACE_InputCDR library.xsd + library.hxx;library.cxx;%(Outputs) + xsd library.xsd + xsd cxx-tree --generate-ostream --generate-insertion ACE_OutputCDR --generate-extraction ACE_InputCDR library.xsd + library.hxx;library.cxx;%(Outputs) + + + + + + + + + \ No newline at end of file diff --git a/xsd/dist/examples/cxx/tree/binary/cdr/cdr-vc10.vcxproj.filters b/xsd/dist/examples/cxx/tree/binary/cdr/cdr-vc10.vcxproj.filters new file mode 100644 index 0000000..92ff3ee --- /dev/null +++ b/xsd/dist/examples/cxx/tree/binary/cdr/cdr-vc10.vcxproj.filters @@ -0,0 +1,38 @@ + + + + + {50AA6317-04BE-45AB-98DD-7A32AEB710CF} + cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {E740B51E-A619-4888-B6B9-566A3C77C60B} + h;hpp;hxx;hm;inl;inc;xsd + + + {37283c57-4a32-48ed-823b-0efdf7cdcf51} + xsd + + + + + Source Files + + + Source Files + + + + + Header Files + + + + + + + + Schema Files + + + \ No newline at end of file diff --git a/xsd/dist/examples/cxx/tree/binary/cdr/cdr-vc11.vcxproj b/xsd/dist/examples/cxx/tree/binary/cdr/cdr-vc11.vcxproj new file mode 100644 index 0000000..c87aa4b --- /dev/null +++ b/xsd/dist/examples/cxx/tree/binary/cdr/cdr-vc11.vcxproj @@ -0,0 +1,209 @@ + + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + cdr + {A8CC2814-5056-4953-8B4C-E52E72ADD36C} + cdr + Win32Proj + + + + Application + v110 + MultiByte + + + Application + v110 + MultiByte + + + Application + v110 + MultiByte + + + Application + v110 + MultiByte + + + + + + + + + + + + + + + + + + + driver + driver + driver + driver + Debug\ + Debug\ + true + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + true + Release\ + Release\ + false + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + false + + + + Disabled + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebugDLL + true + + + Level3 + + + xerces-c_3D.lib;ACEd.lib;%(AdditionalDependencies) + $(TargetPath) + true + $(OutDir)driver.pdb + Console + false + + + MachineX86 + + + + + X64 + + + Disabled + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebugDLL + true + + + Level3 + + + xerces-c_3D.lib;ACEd.lib;%(AdditionalDependencies) + $(TargetPath) + true + $(OutDir)driver.pdb + Console + false + + + MachineX64 + + + + + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreadedDLL + true + + + Level3 + + + xerces-c_3.lib;ACE.lib;%(AdditionalDependencies) + $(TargetPath) + true + Console + true + true + false + + + MachineX86 + + + + + X64 + + + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreadedDLL + true + + + Level3 + + + xerces-c_3.lib;ACE.lib;%(AdditionalDependencies) + $(TargetPath) + true + Console + true + true + false + + + MachineX64 + + + + + + + + + + + + xsd library.xsd + xsd cxx-tree --generate-ostream --generate-insertion ACE_OutputCDR --generate-extraction ACE_InputCDR library.xsd + library.hxx;library.cxx;%(Outputs) + xsd library.xsd + xsd cxx-tree --generate-ostream --generate-insertion ACE_OutputCDR --generate-extraction ACE_InputCDR library.xsd + library.hxx;library.cxx;%(Outputs) + xsd library.xsd + xsd cxx-tree --generate-ostream --generate-insertion ACE_OutputCDR --generate-extraction ACE_InputCDR library.xsd + library.hxx;library.cxx;%(Outputs) + xsd library.xsd + xsd cxx-tree --generate-ostream --generate-insertion ACE_OutputCDR --generate-extraction ACE_InputCDR library.xsd + library.hxx;library.cxx;%(Outputs) + + + + + + + + + \ No newline at end of file diff --git a/xsd/dist/examples/cxx/tree/binary/cdr/cdr-vc11.vcxproj.filters b/xsd/dist/examples/cxx/tree/binary/cdr/cdr-vc11.vcxproj.filters new file mode 100644 index 0000000..92ff3ee --- /dev/null +++ b/xsd/dist/examples/cxx/tree/binary/cdr/cdr-vc11.vcxproj.filters @@ -0,0 +1,38 @@ + + + + + {50AA6317-04BE-45AB-98DD-7A32AEB710CF} + cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {E740B51E-A619-4888-B6B9-566A3C77C60B} + h;hpp;hxx;hm;inl;inc;xsd + + + {37283c57-4a32-48ed-823b-0efdf7cdcf51} + xsd + + + + + Source Files + + + Source Files + + + + + Header Files + + + + + + + + Schema Files + + + \ No newline at end of file diff --git a/xsd/dist/examples/cxx/tree/binary/cdr/cdr-vc12.vcxproj b/xsd/dist/examples/cxx/tree/binary/cdr/cdr-vc12.vcxproj new file mode 100644 index 0000000..e0d6496 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/binary/cdr/cdr-vc12.vcxproj @@ -0,0 +1,213 @@ + + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + cdr + {A8CC2814-5056-4953-8B4C-E52E72ADD36C} + cdr + Win32Proj + + + + Application + v120 + MultiByte + + + Application + v120 + MultiByte + + + Application + v120 + MultiByte + + + Application + v120 + MultiByte + + + + + + + + + + + + + + + + + + + driver + driver + driver + driver + Debug\ + Debug\ + true + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + true + Release\ + Release\ + false + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + false + + + + Disabled + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebugDLL + true + + + Level3 + true + + + xerces-c_3D.lib;ACEd.lib;%(AdditionalDependencies) + $(TargetPath) + true + $(OutDir)driver.pdb + Console + false + + + MachineX86 + + + + + X64 + + + Disabled + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebugDLL + true + + + Level3 + true + + + xerces-c_3D.lib;ACEd.lib;%(AdditionalDependencies) + $(TargetPath) + true + $(OutDir)driver.pdb + Console + false + + + MachineX64 + + + + + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreadedDLL + true + + + Level3 + true + + + xerces-c_3.lib;ACE.lib;%(AdditionalDependencies) + $(TargetPath) + true + Console + true + true + false + + + MachineX86 + + + + + X64 + + + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreadedDLL + true + + + Level3 + true + + + xerces-c_3.lib;ACE.lib;%(AdditionalDependencies) + $(TargetPath) + true + Console + true + true + false + + + MachineX64 + + + + + + + + + + + + xsd library.xsd + xsd cxx-tree --generate-ostream --generate-insertion ACE_OutputCDR --generate-extraction ACE_InputCDR library.xsd + library.hxx;library.cxx;%(Outputs) + xsd library.xsd + xsd cxx-tree --generate-ostream --generate-insertion ACE_OutputCDR --generate-extraction ACE_InputCDR library.xsd + library.hxx;library.cxx;%(Outputs) + xsd library.xsd + xsd cxx-tree --generate-ostream --generate-insertion ACE_OutputCDR --generate-extraction ACE_InputCDR library.xsd + library.hxx;library.cxx;%(Outputs) + xsd library.xsd + xsd cxx-tree --generate-ostream --generate-insertion ACE_OutputCDR --generate-extraction ACE_InputCDR library.xsd + library.hxx;library.cxx;%(Outputs) + + + + + + + + + \ No newline at end of file diff --git a/xsd/dist/examples/cxx/tree/binary/cdr/cdr-vc12.vcxproj.filters b/xsd/dist/examples/cxx/tree/binary/cdr/cdr-vc12.vcxproj.filters new file mode 100644 index 0000000..92ff3ee --- /dev/null +++ b/xsd/dist/examples/cxx/tree/binary/cdr/cdr-vc12.vcxproj.filters @@ -0,0 +1,38 @@ + + + + + {50AA6317-04BE-45AB-98DD-7A32AEB710CF} + cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {E740B51E-A619-4888-B6B9-566A3C77C60B} + h;hpp;hxx;hm;inl;inc;xsd + + + {37283c57-4a32-48ed-823b-0efdf7cdcf51} + xsd + + + + + Source Files + + + Source Files + + + + + Header Files + + + + + + + + Schema Files + + + \ No newline at end of file diff --git a/xsd/dist/examples/cxx/tree/binary/cdr/cdr-vc8.vcproj b/xsd/dist/examples/cxx/tree/binary/cdr/cdr-vc8.vcproj new file mode 100644 index 0000000..d35171a --- /dev/null +++ b/xsd/dist/examples/cxx/tree/binary/cdr/cdr-vc8.vcproj @@ -0,0 +1,423 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/xsd/dist/examples/cxx/tree/binary/cdr/cdr-vc9.vcproj b/xsd/dist/examples/cxx/tree/binary/cdr/cdr-vc9.vcproj new file mode 100644 index 0000000..f379d83 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/binary/cdr/cdr-vc9.vcproj @@ -0,0 +1,420 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/xsd/dist/examples/cxx/tree/binary/cdr/cdr-xerces2-7.1.sln b/xsd/dist/examples/cxx/tree/binary/cdr/cdr-xerces2-7.1.sln deleted file mode 100644 index c704679..0000000 --- a/xsd/dist/examples/cxx/tree/binary/cdr/cdr-xerces2-7.1.sln +++ /dev/null @@ -1,21 +0,0 @@ -Microsoft Visual Studio Solution File, Format Version 8.00 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "cdr", "cdr-xerces2-7.1.vcproj", "{A8CC2814-5056-4953-8B4C-E52E72ADD36C}" - ProjectSection(ProjectDependencies) = postProject - EndProjectSection -EndProject -Global - GlobalSection(SolutionConfiguration) = preSolution - Debug = Debug - Release = Release - EndGlobalSection - GlobalSection(ProjectConfiguration) = postSolution - {A8CC2814-5056-4953-8B4C-E52E72ADD36C}.Debug.ActiveCfg = Debug|Win32 - {A8CC2814-5056-4953-8B4C-E52E72ADD36C}.Debug.Build.0 = Debug|Win32 - {A8CC2814-5056-4953-8B4C-E52E72ADD36C}.Release.ActiveCfg = Release|Win32 - {A8CC2814-5056-4953-8B4C-E52E72ADD36C}.Release.Build.0 = Release|Win32 - EndGlobalSection - GlobalSection(ExtensibilityGlobals) = postSolution - EndGlobalSection - GlobalSection(ExtensibilityAddIns) = postSolution - EndGlobalSection -EndGlobal diff --git a/xsd/dist/examples/cxx/tree/binary/cdr/cdr-xerces2-7.1.vcproj b/xsd/dist/examples/cxx/tree/binary/cdr/cdr-xerces2-7.1.vcproj deleted file mode 100644 index 1723d58..0000000 --- a/xsd/dist/examples/cxx/tree/binary/cdr/cdr-xerces2-7.1.vcproj +++ /dev/null @@ -1,164 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/xsd/dist/examples/cxx/tree/binary/cdr/cdr-xerces2-8.0.sln b/xsd/dist/examples/cxx/tree/binary/cdr/cdr-xerces2-8.0.sln deleted file mode 100644 index 3ffce8e..0000000 --- a/xsd/dist/examples/cxx/tree/binary/cdr/cdr-xerces2-8.0.sln +++ /dev/null @@ -1,25 +0,0 @@ -Microsoft Visual Studio Solution File, Format Version 9.00 -# Visual Studio 2005 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "cdr", "cdr-xerces2-8.0.vcproj", "{A8CC2814-5056-4953-8B4C-E52E72ADD36C}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Win32 = Debug|Win32 - Debug|x64 = Debug|x64 - Release|Win32 = Release|Win32 - Release|x64 = Release|x64 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {A8CC2814-5056-4953-8B4C-E52E72ADD36C}.Debug|Win32.ActiveCfg = Debug|Win32 - {A8CC2814-5056-4953-8B4C-E52E72ADD36C}.Debug|Win32.Build.0 = Debug|Win32 - {A8CC2814-5056-4953-8B4C-E52E72ADD36C}.Debug|x64.ActiveCfg = Debug|x64 - {A8CC2814-5056-4953-8B4C-E52E72ADD36C}.Debug|x64.Build.0 = Debug|x64 - {A8CC2814-5056-4953-8B4C-E52E72ADD36C}.Release|Win32.ActiveCfg = Release|Win32 - {A8CC2814-5056-4953-8B4C-E52E72ADD36C}.Release|Win32.Build.0 = Release|Win32 - {A8CC2814-5056-4953-8B4C-E52E72ADD36C}.Release|x64.ActiveCfg = Release|x64 - {A8CC2814-5056-4953-8B4C-E52E72ADD36C}.Release|x64.Build.0 = Release|x64 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal diff --git a/xsd/dist/examples/cxx/tree/binary/cdr/cdr-xerces2-8.0.vcproj b/xsd/dist/examples/cxx/tree/binary/cdr/cdr-xerces2-8.0.vcproj deleted file mode 100644 index 2b469a2..0000000 --- a/xsd/dist/examples/cxx/tree/binary/cdr/cdr-xerces2-8.0.vcproj +++ /dev/null @@ -1,423 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/xsd/dist/examples/cxx/tree/binary/cdr/cdr-xerces2-9.0.sln b/xsd/dist/examples/cxx/tree/binary/cdr/cdr-xerces2-9.0.sln deleted file mode 100644 index 2ec0fbd..0000000 --- a/xsd/dist/examples/cxx/tree/binary/cdr/cdr-xerces2-9.0.sln +++ /dev/null @@ -1,25 +0,0 @@ -Microsoft Visual Studio Solution File, Format Version 10.00 -# Visual Studio 2008 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "cdr", "cdr-xerces2-9.0.vcproj", "{A8CC2814-5056-4953-8B4C-E52E72ADD36C}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Win32 = Debug|Win32 - Debug|x64 = Debug|x64 - Release|Win32 = Release|Win32 - Release|x64 = Release|x64 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {A8CC2814-5056-4953-8B4C-E52E72ADD36C}.Debug|Win32.ActiveCfg = Debug|Win32 - {A8CC2814-5056-4953-8B4C-E52E72ADD36C}.Debug|Win32.Build.0 = Debug|Win32 - {A8CC2814-5056-4953-8B4C-E52E72ADD36C}.Debug|x64.ActiveCfg = Debug|x64 - {A8CC2814-5056-4953-8B4C-E52E72ADD36C}.Debug|x64.Build.0 = Debug|x64 - {A8CC2814-5056-4953-8B4C-E52E72ADD36C}.Release|Win32.ActiveCfg = Release|Win32 - {A8CC2814-5056-4953-8B4C-E52E72ADD36C}.Release|Win32.Build.0 = Release|Win32 - {A8CC2814-5056-4953-8B4C-E52E72ADD36C}.Release|x64.ActiveCfg = Release|x64 - {A8CC2814-5056-4953-8B4C-E52E72ADD36C}.Release|x64.Build.0 = Release|x64 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal diff --git a/xsd/dist/examples/cxx/tree/binary/cdr/cdr-xerces2-9.0.vcproj b/xsd/dist/examples/cxx/tree/binary/cdr/cdr-xerces2-9.0.vcproj deleted file mode 100644 index 21d8cd9..0000000 --- a/xsd/dist/examples/cxx/tree/binary/cdr/cdr-xerces2-9.0.vcproj +++ /dev/null @@ -1,420 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/xsd/dist/examples/cxx/tree/binary/xdr/xdr-10.0.sln b/xsd/dist/examples/cxx/tree/binary/xdr/xdr-10.0.sln deleted file mode 100644 index 0477aa1..0000000 --- a/xsd/dist/examples/cxx/tree/binary/xdr/xdr-10.0.sln +++ /dev/null @@ -1,25 +0,0 @@ -Microsoft Visual Studio Solution File, Format Version 11.00 -# Visual Studio 2010 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "xdr", "xdr-10.0.vcxproj", "{D9696808-1B73-43C9-A3BB-18DD29776EC5}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Win32 = Debug|Win32 - Debug|x64 = Debug|x64 - Release|Win32 = Release|Win32 - Release|x64 = Release|x64 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {D9696808-1B73-43C9-A3BB-18DD29776EC5}.Debug|Win32.ActiveCfg = Debug|Win32 - {D9696808-1B73-43C9-A3BB-18DD29776EC5}.Debug|Win32.Build.0 = Debug|Win32 - {D9696808-1B73-43C9-A3BB-18DD29776EC5}.Debug|x64.ActiveCfg = Debug|x64 - {D9696808-1B73-43C9-A3BB-18DD29776EC5}.Debug|x64.Build.0 = Debug|x64 - {D9696808-1B73-43C9-A3BB-18DD29776EC5}.Release|Win32.ActiveCfg = Release|Win32 - {D9696808-1B73-43C9-A3BB-18DD29776EC5}.Release|Win32.Build.0 = Release|Win32 - {D9696808-1B73-43C9-A3BB-18DD29776EC5}.Release|x64.ActiveCfg = Release|x64 - {D9696808-1B73-43C9-A3BB-18DD29776EC5}.Release|x64.Build.0 = Release|x64 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal diff --git a/xsd/dist/examples/cxx/tree/binary/xdr/xdr-10.0.vcxproj b/xsd/dist/examples/cxx/tree/binary/xdr/xdr-10.0.vcxproj deleted file mode 100644 index 1033991..0000000 --- a/xsd/dist/examples/cxx/tree/binary/xdr/xdr-10.0.vcxproj +++ /dev/null @@ -1,209 +0,0 @@ - - - - - Debug - Win32 - - - Debug - x64 - - - Release - Win32 - - - Release - x64 - - - - xdr - {D9696808-1B73-43C9-A3BB-18DD29776EC5} - xdr - Win32Proj - - - - Application - MultiByte - - - Application - MultiByte - - - Application - MultiByte - - - Application - MultiByte - - - - - - - - - - - - - - - - - - - driver - driver - driver - driver - Debug\ - Debug\ - true - $(Platform)\$(Configuration)\ - $(Platform)\$(Configuration)\ - true - Release\ - Release\ - false - $(Platform)\$(Configuration)\ - $(Platform)\$(Configuration)\ - false - - - - Disabled - WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - true - - - Level3 - EditAndContinue - - - xerces-c_3D.lib;%(AdditionalDependencies) - $(TargetPath) - true - $(OutDir)driver.pdb - Console - false - - - MachineX86 - - - - - X64 - - - Disabled - WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - true - - - Level3 - ProgramDatabase - - - xerces-c_3D.lib;%(AdditionalDependencies) - $(TargetPath) - true - $(OutDir)driver.pdb - Console - false - - - MachineX64 - - - - - WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - MultiThreadedDLL - true - - - Level3 - ProgramDatabase - - - xerces-c_3.lib;%(AdditionalDependencies) - $(TargetPath) - true - Console - true - true - false - - - MachineX86 - - - - - X64 - - - WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - MultiThreadedDLL - true - - - Level3 - ProgramDatabase - - - xerces-c_3.lib;%(AdditionalDependencies) - $(TargetPath) - true - Console - true - true - false - - - MachineX64 - - - - - - - - - - - - xsd library.xsd - xsd cxx-tree --generate-ostream --generate-insertion XDR --generate-extraction XDR library.xsd - library.hxx;library.cxx;%(Outputs) - xsd library.xsd - xsd cxx-tree --generate-ostream --generate-insertion XDR --generate-extraction XDR library.xsd - library.hxx;library.cxx;%(Outputs) - xsd library.xsd - xsd cxx-tree --generate-ostream --generate-insertion XDR --generate-extraction XDR library.xsd - library.hxx;library.cxx;%(Outputs) - xsd library.xsd - xsd cxx-tree --generate-ostream --generate-insertion XDR --generate-extraction XDR library.xsd - library.hxx;library.cxx;%(Outputs) - - - - - - - - - \ No newline at end of file diff --git a/xsd/dist/examples/cxx/tree/binary/xdr/xdr-10.0.vcxproj.filters b/xsd/dist/examples/cxx/tree/binary/xdr/xdr-10.0.vcxproj.filters deleted file mode 100644 index c9e491f..0000000 --- a/xsd/dist/examples/cxx/tree/binary/xdr/xdr-10.0.vcxproj.filters +++ /dev/null @@ -1,38 +0,0 @@ - - - - - {C5A0E74B-63C1-41E3-B291-B85FCC86FDF7} - cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx - - - {FC110C72-7935-49D5-B25E-F96C87BA49E4} - h;hpp;hxx;hm;inl;inc;xsd - - - {b7ff65c1-ff9c-4e2d-869b-e4925d838adb} - xsd - - - - - Source Files - - - Source Files - - - - - Header Files - - - - - - - - Schema Files - - - \ No newline at end of file diff --git a/xsd/dist/examples/cxx/tree/binary/xdr/xdr-7.1.sln b/xsd/dist/examples/cxx/tree/binary/xdr/xdr-7.1.sln deleted file mode 100644 index 0a3d261..0000000 --- a/xsd/dist/examples/cxx/tree/binary/xdr/xdr-7.1.sln +++ /dev/null @@ -1,21 +0,0 @@ -Microsoft Visual Studio Solution File, Format Version 8.00 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "xdr", "xdr-7.1.vcproj", "{D9696808-1B73-43C9-A3BB-18DD29776EC5}" - ProjectSection(ProjectDependencies) = postProject - EndProjectSection -EndProject -Global - GlobalSection(SolutionConfiguration) = preSolution - Debug = Debug - Release = Release - EndGlobalSection - GlobalSection(ProjectConfiguration) = postSolution - {D9696808-1B73-43C9-A3BB-18DD29776EC5}.Debug.ActiveCfg = Debug|Win32 - {D9696808-1B73-43C9-A3BB-18DD29776EC5}.Debug.Build.0 = Debug|Win32 - {D9696808-1B73-43C9-A3BB-18DD29776EC5}.Release.ActiveCfg = Release|Win32 - {D9696808-1B73-43C9-A3BB-18DD29776EC5}.Release.Build.0 = Release|Win32 - EndGlobalSection - GlobalSection(ExtensibilityGlobals) = postSolution - EndGlobalSection - GlobalSection(ExtensibilityAddIns) = postSolution - EndGlobalSection -EndGlobal diff --git a/xsd/dist/examples/cxx/tree/binary/xdr/xdr-7.1.vcproj b/xsd/dist/examples/cxx/tree/binary/xdr/xdr-7.1.vcproj deleted file mode 100644 index 8d43d7f..0000000 --- a/xsd/dist/examples/cxx/tree/binary/xdr/xdr-7.1.vcproj +++ /dev/null @@ -1,164 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/xsd/dist/examples/cxx/tree/binary/xdr/xdr-8.0.sln b/xsd/dist/examples/cxx/tree/binary/xdr/xdr-8.0.sln deleted file mode 100644 index 139be58..0000000 --- a/xsd/dist/examples/cxx/tree/binary/xdr/xdr-8.0.sln +++ /dev/null @@ -1,25 +0,0 @@ -Microsoft Visual Studio Solution File, Format Version 9.00 -# Visual Studio 2005 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "xdr", "xdr-8.0.vcproj", "{D9696808-1B73-43C9-A3BB-18DD29776EC5}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Win32 = Debug|Win32 - Debug|x64 = Debug|x64 - Release|Win32 = Release|Win32 - Release|x64 = Release|x64 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {D9696808-1B73-43C9-A3BB-18DD29776EC5}.Debug|Win32.ActiveCfg = Debug|Win32 - {D9696808-1B73-43C9-A3BB-18DD29776EC5}.Debug|Win32.Build.0 = Debug|Win32 - {D9696808-1B73-43C9-A3BB-18DD29776EC5}.Debug|x64.ActiveCfg = Debug|x64 - {D9696808-1B73-43C9-A3BB-18DD29776EC5}.Debug|x64.Build.0 = Debug|x64 - {D9696808-1B73-43C9-A3BB-18DD29776EC5}.Release|Win32.ActiveCfg = Release|Win32 - {D9696808-1B73-43C9-A3BB-18DD29776EC5}.Release|Win32.Build.0 = Release|Win32 - {D9696808-1B73-43C9-A3BB-18DD29776EC5}.Release|x64.ActiveCfg = Release|x64 - {D9696808-1B73-43C9-A3BB-18DD29776EC5}.Release|x64.Build.0 = Release|x64 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal diff --git a/xsd/dist/examples/cxx/tree/binary/xdr/xdr-8.0.vcproj b/xsd/dist/examples/cxx/tree/binary/xdr/xdr-8.0.vcproj deleted file mode 100644 index f83c026..0000000 --- a/xsd/dist/examples/cxx/tree/binary/xdr/xdr-8.0.vcproj +++ /dev/null @@ -1,423 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/xsd/dist/examples/cxx/tree/binary/xdr/xdr-9.0.sln b/xsd/dist/examples/cxx/tree/binary/xdr/xdr-9.0.sln deleted file mode 100644 index 65f094f..0000000 --- a/xsd/dist/examples/cxx/tree/binary/xdr/xdr-9.0.sln +++ /dev/null @@ -1,25 +0,0 @@ -Microsoft Visual Studio Solution File, Format Version 10.00 -# Visual Studio 2008 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "xdr", "xdr-9.0.vcproj", "{D9696808-1B73-43C9-A3BB-18DD29776EC5}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Win32 = Debug|Win32 - Debug|x64 = Debug|x64 - Release|Win32 = Release|Win32 - Release|x64 = Release|x64 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {D9696808-1B73-43C9-A3BB-18DD29776EC5}.Debug|Win32.ActiveCfg = Debug|Win32 - {D9696808-1B73-43C9-A3BB-18DD29776EC5}.Debug|Win32.Build.0 = Debug|Win32 - {D9696808-1B73-43C9-A3BB-18DD29776EC5}.Debug|x64.ActiveCfg = Debug|x64 - {D9696808-1B73-43C9-A3BB-18DD29776EC5}.Debug|x64.Build.0 = Debug|x64 - {D9696808-1B73-43C9-A3BB-18DD29776EC5}.Release|Win32.ActiveCfg = Release|Win32 - {D9696808-1B73-43C9-A3BB-18DD29776EC5}.Release|Win32.Build.0 = Release|Win32 - {D9696808-1B73-43C9-A3BB-18DD29776EC5}.Release|x64.ActiveCfg = Release|x64 - {D9696808-1B73-43C9-A3BB-18DD29776EC5}.Release|x64.Build.0 = Release|x64 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal diff --git a/xsd/dist/examples/cxx/tree/binary/xdr/xdr-9.0.vcproj b/xsd/dist/examples/cxx/tree/binary/xdr/xdr-9.0.vcproj deleted file mode 100644 index 34ca6b4..0000000 --- a/xsd/dist/examples/cxx/tree/binary/xdr/xdr-9.0.vcproj +++ /dev/null @@ -1,420 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/xsd/dist/examples/cxx/tree/binary/xdr/xdr-vc10.vcxproj b/xsd/dist/examples/cxx/tree/binary/xdr/xdr-vc10.vcxproj new file mode 100644 index 0000000..a8cad53 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/binary/xdr/xdr-vc10.vcxproj @@ -0,0 +1,205 @@ + + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + xdr + {D9696808-1B73-43C9-A3BB-18DD29776EC5} + xdr + Win32Proj + + + + Application + MultiByte + + + Application + MultiByte + + + Application + MultiByte + + + Application + MultiByte + + + + + + + + + + + + + + + + + + + driver + driver + driver + driver + Debug\ + Debug\ + true + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + true + Release\ + Release\ + false + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + false + + + + Disabled + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebugDLL + true + + + Level3 + + + xerces-c_3D.lib;%(AdditionalDependencies) + $(TargetPath) + true + $(OutDir)driver.pdb + Console + false + + + MachineX86 + + + + + X64 + + + Disabled + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebugDLL + true + + + Level3 + + + xerces-c_3D.lib;%(AdditionalDependencies) + $(TargetPath) + true + $(OutDir)driver.pdb + Console + false + + + MachineX64 + + + + + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreadedDLL + true + + + Level3 + + + xerces-c_3.lib;%(AdditionalDependencies) + $(TargetPath) + true + Console + true + true + false + + + MachineX86 + + + + + X64 + + + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreadedDLL + true + + + Level3 + + + xerces-c_3.lib;%(AdditionalDependencies) + $(TargetPath) + true + Console + true + true + false + + + MachineX64 + + + + + + + + + + + + xsd library.xsd + xsd cxx-tree --generate-ostream --generate-insertion XDR --generate-extraction XDR library.xsd + library.hxx;library.cxx;%(Outputs) + xsd library.xsd + xsd cxx-tree --generate-ostream --generate-insertion XDR --generate-extraction XDR library.xsd + library.hxx;library.cxx;%(Outputs) + xsd library.xsd + xsd cxx-tree --generate-ostream --generate-insertion XDR --generate-extraction XDR library.xsd + library.hxx;library.cxx;%(Outputs) + xsd library.xsd + xsd cxx-tree --generate-ostream --generate-insertion XDR --generate-extraction XDR library.xsd + library.hxx;library.cxx;%(Outputs) + + + + + + + + + \ No newline at end of file diff --git a/xsd/dist/examples/cxx/tree/binary/xdr/xdr-vc10.vcxproj.filters b/xsd/dist/examples/cxx/tree/binary/xdr/xdr-vc10.vcxproj.filters new file mode 100644 index 0000000..c9e491f --- /dev/null +++ b/xsd/dist/examples/cxx/tree/binary/xdr/xdr-vc10.vcxproj.filters @@ -0,0 +1,38 @@ + + + + + {C5A0E74B-63C1-41E3-B291-B85FCC86FDF7} + cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {FC110C72-7935-49D5-B25E-F96C87BA49E4} + h;hpp;hxx;hm;inl;inc;xsd + + + {b7ff65c1-ff9c-4e2d-869b-e4925d838adb} + xsd + + + + + Source Files + + + Source Files + + + + + Header Files + + + + + + + + Schema Files + + + \ No newline at end of file diff --git a/xsd/dist/examples/cxx/tree/binary/xdr/xdr-vc11.vcxproj b/xsd/dist/examples/cxx/tree/binary/xdr/xdr-vc11.vcxproj new file mode 100644 index 0000000..5c9f9d5 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/binary/xdr/xdr-vc11.vcxproj @@ -0,0 +1,209 @@ + + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + xdr + {D9696808-1B73-43C9-A3BB-18DD29776EC5} + xdr + Win32Proj + + + + Application + v110 + MultiByte + + + Application + v110 + MultiByte + + + Application + v110 + MultiByte + + + Application + v110 + MultiByte + + + + + + + + + + + + + + + + + + + driver + driver + driver + driver + Debug\ + Debug\ + true + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + true + Release\ + Release\ + false + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + false + + + + Disabled + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebugDLL + true + + + Level3 + + + xerces-c_3D.lib;%(AdditionalDependencies) + $(TargetPath) + true + $(OutDir)driver.pdb + Console + false + + + MachineX86 + + + + + X64 + + + Disabled + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebugDLL + true + + + Level3 + + + xerces-c_3D.lib;%(AdditionalDependencies) + $(TargetPath) + true + $(OutDir)driver.pdb + Console + false + + + MachineX64 + + + + + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreadedDLL + true + + + Level3 + + + xerces-c_3.lib;%(AdditionalDependencies) + $(TargetPath) + true + Console + true + true + false + + + MachineX86 + + + + + X64 + + + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreadedDLL + true + + + Level3 + + + xerces-c_3.lib;%(AdditionalDependencies) + $(TargetPath) + true + Console + true + true + false + + + MachineX64 + + + + + + + + + + + + xsd library.xsd + xsd cxx-tree --generate-ostream --generate-insertion XDR --generate-extraction XDR library.xsd + library.hxx;library.cxx;%(Outputs) + xsd library.xsd + xsd cxx-tree --generate-ostream --generate-insertion XDR --generate-extraction XDR library.xsd + library.hxx;library.cxx;%(Outputs) + xsd library.xsd + xsd cxx-tree --generate-ostream --generate-insertion XDR --generate-extraction XDR library.xsd + library.hxx;library.cxx;%(Outputs) + xsd library.xsd + xsd cxx-tree --generate-ostream --generate-insertion XDR --generate-extraction XDR library.xsd + library.hxx;library.cxx;%(Outputs) + + + + + + + + + \ No newline at end of file diff --git a/xsd/dist/examples/cxx/tree/binary/xdr/xdr-vc11.vcxproj.filters b/xsd/dist/examples/cxx/tree/binary/xdr/xdr-vc11.vcxproj.filters new file mode 100644 index 0000000..c9e491f --- /dev/null +++ b/xsd/dist/examples/cxx/tree/binary/xdr/xdr-vc11.vcxproj.filters @@ -0,0 +1,38 @@ + + + + + {C5A0E74B-63C1-41E3-B291-B85FCC86FDF7} + cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {FC110C72-7935-49D5-B25E-F96C87BA49E4} + h;hpp;hxx;hm;inl;inc;xsd + + + {b7ff65c1-ff9c-4e2d-869b-e4925d838adb} + xsd + + + + + Source Files + + + Source Files + + + + + Header Files + + + + + + + + Schema Files + + + \ No newline at end of file diff --git a/xsd/dist/examples/cxx/tree/binary/xdr/xdr-vc12.vcxproj b/xsd/dist/examples/cxx/tree/binary/xdr/xdr-vc12.vcxproj new file mode 100644 index 0000000..e3be342 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/binary/xdr/xdr-vc12.vcxproj @@ -0,0 +1,213 @@ + + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + xdr + {D9696808-1B73-43C9-A3BB-18DD29776EC5} + xdr + Win32Proj + + + + Application + v120 + MultiByte + + + Application + v120 + MultiByte + + + Application + v120 + MultiByte + + + Application + v120 + MultiByte + + + + + + + + + + + + + + + + + + + driver + driver + driver + driver + Debug\ + Debug\ + true + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + true + Release\ + Release\ + false + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + false + + + + Disabled + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebugDLL + true + + + Level3 + true + + + xerces-c_3D.lib;%(AdditionalDependencies) + $(TargetPath) + true + $(OutDir)driver.pdb + Console + false + + + MachineX86 + + + + + X64 + + + Disabled + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebugDLL + true + + + Level3 + true + + + xerces-c_3D.lib;%(AdditionalDependencies) + $(TargetPath) + true + $(OutDir)driver.pdb + Console + false + + + MachineX64 + + + + + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreadedDLL + true + + + Level3 + true + + + xerces-c_3.lib;%(AdditionalDependencies) + $(TargetPath) + true + Console + true + true + false + + + MachineX86 + + + + + X64 + + + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreadedDLL + true + + + Level3 + true + + + xerces-c_3.lib;%(AdditionalDependencies) + $(TargetPath) + true + Console + true + true + false + + + MachineX64 + + + + + + + + + + + + xsd library.xsd + xsd cxx-tree --generate-ostream --generate-insertion XDR --generate-extraction XDR library.xsd + library.hxx;library.cxx;%(Outputs) + xsd library.xsd + xsd cxx-tree --generate-ostream --generate-insertion XDR --generate-extraction XDR library.xsd + library.hxx;library.cxx;%(Outputs) + xsd library.xsd + xsd cxx-tree --generate-ostream --generate-insertion XDR --generate-extraction XDR library.xsd + library.hxx;library.cxx;%(Outputs) + xsd library.xsd + xsd cxx-tree --generate-ostream --generate-insertion XDR --generate-extraction XDR library.xsd + library.hxx;library.cxx;%(Outputs) + + + + + + + + + \ No newline at end of file diff --git a/xsd/dist/examples/cxx/tree/binary/xdr/xdr-vc12.vcxproj.filters b/xsd/dist/examples/cxx/tree/binary/xdr/xdr-vc12.vcxproj.filters new file mode 100644 index 0000000..c9e491f --- /dev/null +++ b/xsd/dist/examples/cxx/tree/binary/xdr/xdr-vc12.vcxproj.filters @@ -0,0 +1,38 @@ + + + + + {C5A0E74B-63C1-41E3-B291-B85FCC86FDF7} + cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {FC110C72-7935-49D5-B25E-F96C87BA49E4} + h;hpp;hxx;hm;inl;inc;xsd + + + {b7ff65c1-ff9c-4e2d-869b-e4925d838adb} + xsd + + + + + Source Files + + + Source Files + + + + + Header Files + + + + + + + + Schema Files + + + \ No newline at end of file diff --git a/xsd/dist/examples/cxx/tree/binary/xdr/xdr-vc8.vcproj b/xsd/dist/examples/cxx/tree/binary/xdr/xdr-vc8.vcproj new file mode 100644 index 0000000..f83c026 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/binary/xdr/xdr-vc8.vcproj @@ -0,0 +1,423 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/xsd/dist/examples/cxx/tree/binary/xdr/xdr-vc9.vcproj b/xsd/dist/examples/cxx/tree/binary/xdr/xdr-vc9.vcproj new file mode 100644 index 0000000..34ca6b4 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/binary/xdr/xdr-vc9.vcproj @@ -0,0 +1,420 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/xsd/dist/examples/cxx/tree/binary/xdr/xdr-xerces2-7.1.sln b/xsd/dist/examples/cxx/tree/binary/xdr/xdr-xerces2-7.1.sln deleted file mode 100644 index 5526613..0000000 --- a/xsd/dist/examples/cxx/tree/binary/xdr/xdr-xerces2-7.1.sln +++ /dev/null @@ -1,21 +0,0 @@ -Microsoft Visual Studio Solution File, Format Version 8.00 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "xdr", "xdr-xerces2-7.1.vcproj", "{D9696808-1B73-43C9-A3BB-18DD29776EC5}" - ProjectSection(ProjectDependencies) = postProject - EndProjectSection -EndProject -Global - GlobalSection(SolutionConfiguration) = preSolution - Debug = Debug - Release = Release - EndGlobalSection - GlobalSection(ProjectConfiguration) = postSolution - {D9696808-1B73-43C9-A3BB-18DD29776EC5}.Debug.ActiveCfg = Debug|Win32 - {D9696808-1B73-43C9-A3BB-18DD29776EC5}.Debug.Build.0 = Debug|Win32 - {D9696808-1B73-43C9-A3BB-18DD29776EC5}.Release.ActiveCfg = Release|Win32 - {D9696808-1B73-43C9-A3BB-18DD29776EC5}.Release.Build.0 = Release|Win32 - EndGlobalSection - GlobalSection(ExtensibilityGlobals) = postSolution - EndGlobalSection - GlobalSection(ExtensibilityAddIns) = postSolution - EndGlobalSection -EndGlobal diff --git a/xsd/dist/examples/cxx/tree/binary/xdr/xdr-xerces2-7.1.vcproj b/xsd/dist/examples/cxx/tree/binary/xdr/xdr-xerces2-7.1.vcproj deleted file mode 100644 index c592fbd..0000000 --- a/xsd/dist/examples/cxx/tree/binary/xdr/xdr-xerces2-7.1.vcproj +++ /dev/null @@ -1,164 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/xsd/dist/examples/cxx/tree/binary/xdr/xdr-xerces2-8.0.sln b/xsd/dist/examples/cxx/tree/binary/xdr/xdr-xerces2-8.0.sln deleted file mode 100644 index 9ee2ee2..0000000 --- a/xsd/dist/examples/cxx/tree/binary/xdr/xdr-xerces2-8.0.sln +++ /dev/null @@ -1,25 +0,0 @@ -Microsoft Visual Studio Solution File, Format Version 9.00 -# Visual Studio 2005 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "xdr", "xdr-xerces2-8.0.vcproj", "{D9696808-1B73-43C9-A3BB-18DD29776EC5}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Win32 = Debug|Win32 - Debug|x64 = Debug|x64 - Release|Win32 = Release|Win32 - Release|x64 = Release|x64 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {D9696808-1B73-43C9-A3BB-18DD29776EC5}.Debug|Win32.ActiveCfg = Debug|Win32 - {D9696808-1B73-43C9-A3BB-18DD29776EC5}.Debug|Win32.Build.0 = Debug|Win32 - {D9696808-1B73-43C9-A3BB-18DD29776EC5}.Debug|x64.ActiveCfg = Debug|x64 - {D9696808-1B73-43C9-A3BB-18DD29776EC5}.Debug|x64.Build.0 = Debug|x64 - {D9696808-1B73-43C9-A3BB-18DD29776EC5}.Release|Win32.ActiveCfg = Release|Win32 - {D9696808-1B73-43C9-A3BB-18DD29776EC5}.Release|Win32.Build.0 = Release|Win32 - {D9696808-1B73-43C9-A3BB-18DD29776EC5}.Release|x64.ActiveCfg = Release|x64 - {D9696808-1B73-43C9-A3BB-18DD29776EC5}.Release|x64.Build.0 = Release|x64 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal diff --git a/xsd/dist/examples/cxx/tree/binary/xdr/xdr-xerces2-8.0.vcproj b/xsd/dist/examples/cxx/tree/binary/xdr/xdr-xerces2-8.0.vcproj deleted file mode 100644 index 23f2030..0000000 --- a/xsd/dist/examples/cxx/tree/binary/xdr/xdr-xerces2-8.0.vcproj +++ /dev/null @@ -1,423 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/xsd/dist/examples/cxx/tree/binary/xdr/xdr-xerces2-9.0.sln b/xsd/dist/examples/cxx/tree/binary/xdr/xdr-xerces2-9.0.sln deleted file mode 100644 index 6e0a25a..0000000 --- a/xsd/dist/examples/cxx/tree/binary/xdr/xdr-xerces2-9.0.sln +++ /dev/null @@ -1,25 +0,0 @@ -Microsoft Visual Studio Solution File, Format Version 10.00 -# Visual Studio 2008 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "xdr", "xdr-xerces2-9.0.vcproj", "{D9696808-1B73-43C9-A3BB-18DD29776EC5}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Win32 = Debug|Win32 - Debug|x64 = Debug|x64 - Release|Win32 = Release|Win32 - Release|x64 = Release|x64 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {D9696808-1B73-43C9-A3BB-18DD29776EC5}.Debug|Win32.ActiveCfg = Debug|Win32 - {D9696808-1B73-43C9-A3BB-18DD29776EC5}.Debug|Win32.Build.0 = Debug|Win32 - {D9696808-1B73-43C9-A3BB-18DD29776EC5}.Debug|x64.ActiveCfg = Debug|x64 - {D9696808-1B73-43C9-A3BB-18DD29776EC5}.Debug|x64.Build.0 = Debug|x64 - {D9696808-1B73-43C9-A3BB-18DD29776EC5}.Release|Win32.ActiveCfg = Release|Win32 - {D9696808-1B73-43C9-A3BB-18DD29776EC5}.Release|Win32.Build.0 = Release|Win32 - {D9696808-1B73-43C9-A3BB-18DD29776EC5}.Release|x64.ActiveCfg = Release|x64 - {D9696808-1B73-43C9-A3BB-18DD29776EC5}.Release|x64.Build.0 = Release|x64 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal diff --git a/xsd/dist/examples/cxx/tree/binary/xdr/xdr-xerces2-9.0.vcproj b/xsd/dist/examples/cxx/tree/binary/xdr/xdr-xerces2-9.0.vcproj deleted file mode 100644 index 75b0331..0000000 --- a/xsd/dist/examples/cxx/tree/binary/xdr/xdr-xerces2-9.0.vcproj +++ /dev/null @@ -1,420 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/xsd/dist/examples/cxx/tree/caching/caching-10.0.vcxproj b/xsd/dist/examples/cxx/tree/caching/caching-10.0.vcxproj deleted file mode 100644 index 286ed09..0000000 --- a/xsd/dist/examples/cxx/tree/caching/caching-10.0.vcxproj +++ /dev/null @@ -1,209 +0,0 @@ - - - - - Debug - Win32 - - - Debug - x64 - - - Release - Win32 - - - Release - x64 - - - - caching - {932D8CD0-4E11-4C3A-9084-4D30DE75C2B7} - caching - Win32Proj - - - - Application - MultiByte - - - Application - MultiByte - - - Application - MultiByte - - - Application - MultiByte - - - - - - - - - - - - - - - - - - - driver - driver - driver - driver - Debug\ - Debug\ - true - $(Platform)\$(Configuration)\ - $(Platform)\$(Configuration)\ - true - Release\ - Release\ - false - $(Platform)\$(Configuration)\ - $(Platform)\$(Configuration)\ - false - - - - Disabled - WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - true - - - Level3 - EditAndContinue - - - xerces-c_3D.lib;%(AdditionalDependencies) - $(TargetPath) - true - $(OutDir)driver.pdb - Console - false - - - MachineX86 - - - - - X64 - - - Disabled - WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - true - - - Level3 - ProgramDatabase - - - xerces-c_3D.lib;%(AdditionalDependencies) - $(TargetPath) - true - $(OutDir)driver.pdb - Console - false - - - MachineX64 - - - - - WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - MultiThreadedDLL - true - - - Level3 - ProgramDatabase - - - xerces-c_3.lib;%(AdditionalDependencies) - $(TargetPath) - true - Console - true - true - false - - - MachineX86 - - - - - X64 - - - WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - MultiThreadedDLL - true - - - Level3 - ProgramDatabase - - - xerces-c_3.lib;%(AdditionalDependencies) - $(TargetPath) - true - Console - true - true - false - - - MachineX64 - - - - - - - - - - - - xsd library.xsd - xsd cxx-tree library.xsd - library.hxx;library.cxx;%(Outputs) - xsd library.xsd - xsd cxx-tree library.xsd - library.hxx;library.cxx;%(Outputs) - xsd library.xsd - xsd cxx-tree library.xsd - library.hxx;library.cxx;%(Outputs) - xsd library.xsd - xsd cxx-tree library.xsd - library.hxx;library.cxx;%(Outputs) - - - - - - - - - \ No newline at end of file diff --git a/xsd/dist/examples/cxx/tree/caching/caching-10.0.vcxproj.filters b/xsd/dist/examples/cxx/tree/caching/caching-10.0.vcxproj.filters deleted file mode 100644 index 07ab0e9..0000000 --- a/xsd/dist/examples/cxx/tree/caching/caching-10.0.vcxproj.filters +++ /dev/null @@ -1,38 +0,0 @@ - - - - - {8953E6CC-4E46-4D97-9704-CE8F76672843} - cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx - - - {AA1A2DB4-3798-4A0C-9339-FAA57753A0AC} - h;hpp;hxx;hm;inl;inc;xsd - - - {88b19602-75bf-44d6-a995-f5e213e36528} - xsd - - - - - Source Files - - - Source Files - - - - - Header Files - - - - - - - - Schema Files - - - \ No newline at end of file diff --git a/xsd/dist/examples/cxx/tree/caching/caching-7.1.vcproj b/xsd/dist/examples/cxx/tree/caching/caching-7.1.vcproj deleted file mode 100644 index 6301d32..0000000 --- a/xsd/dist/examples/cxx/tree/caching/caching-7.1.vcproj +++ /dev/null @@ -1,164 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/xsd/dist/examples/cxx/tree/caching/caching-8.0.vcproj b/xsd/dist/examples/cxx/tree/caching/caching-8.0.vcproj deleted file mode 100644 index 3d75cb6..0000000 --- a/xsd/dist/examples/cxx/tree/caching/caching-8.0.vcproj +++ /dev/null @@ -1,423 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/xsd/dist/examples/cxx/tree/caching/caching-9.0.vcproj b/xsd/dist/examples/cxx/tree/caching/caching-9.0.vcproj deleted file mode 100644 index b356172..0000000 --- a/xsd/dist/examples/cxx/tree/caching/caching-9.0.vcproj +++ /dev/null @@ -1,420 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/xsd/dist/examples/cxx/tree/caching/caching-vc10.vcxproj b/xsd/dist/examples/cxx/tree/caching/caching-vc10.vcxproj new file mode 100644 index 0000000..7bb6670 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/caching/caching-vc10.vcxproj @@ -0,0 +1,205 @@ + + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + caching + {932D8CD0-4E11-4C3A-9084-4D30DE75C2B7} + caching + Win32Proj + + + + Application + MultiByte + + + Application + MultiByte + + + Application + MultiByte + + + Application + MultiByte + + + + + + + + + + + + + + + + + + + driver + driver + driver + driver + Debug\ + Debug\ + true + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + true + Release\ + Release\ + false + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + false + + + + Disabled + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebugDLL + true + + + Level3 + + + xerces-c_3D.lib;%(AdditionalDependencies) + $(TargetPath) + true + $(OutDir)driver.pdb + Console + false + + + MachineX86 + + + + + X64 + + + Disabled + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebugDLL + true + + + Level3 + + + xerces-c_3D.lib;%(AdditionalDependencies) + $(TargetPath) + true + $(OutDir)driver.pdb + Console + false + + + MachineX64 + + + + + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreadedDLL + true + + + Level3 + + + xerces-c_3.lib;%(AdditionalDependencies) + $(TargetPath) + true + Console + true + true + false + + + MachineX86 + + + + + X64 + + + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreadedDLL + true + + + Level3 + + + xerces-c_3.lib;%(AdditionalDependencies) + $(TargetPath) + true + Console + true + true + false + + + MachineX64 + + + + + + + + + + + + xsd library.xsd + xsd cxx-tree library.xsd + library.hxx;library.cxx;%(Outputs) + xsd library.xsd + xsd cxx-tree library.xsd + library.hxx;library.cxx;%(Outputs) + xsd library.xsd + xsd cxx-tree library.xsd + library.hxx;library.cxx;%(Outputs) + xsd library.xsd + xsd cxx-tree library.xsd + library.hxx;library.cxx;%(Outputs) + + + + + + + + + \ No newline at end of file diff --git a/xsd/dist/examples/cxx/tree/caching/caching-vc10.vcxproj.filters b/xsd/dist/examples/cxx/tree/caching/caching-vc10.vcxproj.filters new file mode 100644 index 0000000..07ab0e9 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/caching/caching-vc10.vcxproj.filters @@ -0,0 +1,38 @@ + + + + + {8953E6CC-4E46-4D97-9704-CE8F76672843} + cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {AA1A2DB4-3798-4A0C-9339-FAA57753A0AC} + h;hpp;hxx;hm;inl;inc;xsd + + + {88b19602-75bf-44d6-a995-f5e213e36528} + xsd + + + + + Source Files + + + Source Files + + + + + Header Files + + + + + + + + Schema Files + + + \ No newline at end of file diff --git a/xsd/dist/examples/cxx/tree/caching/caching-vc11.vcxproj b/xsd/dist/examples/cxx/tree/caching/caching-vc11.vcxproj new file mode 100644 index 0000000..1e8d543 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/caching/caching-vc11.vcxproj @@ -0,0 +1,209 @@ + + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + caching + {932D8CD0-4E11-4C3A-9084-4D30DE75C2B7} + caching + Win32Proj + + + + Application + v110 + MultiByte + + + Application + v110 + MultiByte + + + Application + v110 + MultiByte + + + Application + v110 + MultiByte + + + + + + + + + + + + + + + + + + + driver + driver + driver + driver + Debug\ + Debug\ + true + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + true + Release\ + Release\ + false + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + false + + + + Disabled + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebugDLL + true + + + Level3 + + + xerces-c_3D.lib;%(AdditionalDependencies) + $(TargetPath) + true + $(OutDir)driver.pdb + Console + false + + + MachineX86 + + + + + X64 + + + Disabled + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebugDLL + true + + + Level3 + + + xerces-c_3D.lib;%(AdditionalDependencies) + $(TargetPath) + true + $(OutDir)driver.pdb + Console + false + + + MachineX64 + + + + + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreadedDLL + true + + + Level3 + + + xerces-c_3.lib;%(AdditionalDependencies) + $(TargetPath) + true + Console + true + true + false + + + MachineX86 + + + + + X64 + + + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreadedDLL + true + + + Level3 + + + xerces-c_3.lib;%(AdditionalDependencies) + $(TargetPath) + true + Console + true + true + false + + + MachineX64 + + + + + + + + + + + + xsd library.xsd + xsd cxx-tree library.xsd + library.hxx;library.cxx;%(Outputs) + xsd library.xsd + xsd cxx-tree library.xsd + library.hxx;library.cxx;%(Outputs) + xsd library.xsd + xsd cxx-tree library.xsd + library.hxx;library.cxx;%(Outputs) + xsd library.xsd + xsd cxx-tree library.xsd + library.hxx;library.cxx;%(Outputs) + + + + + + + + + \ No newline at end of file diff --git a/xsd/dist/examples/cxx/tree/caching/caching-vc11.vcxproj.filters b/xsd/dist/examples/cxx/tree/caching/caching-vc11.vcxproj.filters new file mode 100644 index 0000000..07ab0e9 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/caching/caching-vc11.vcxproj.filters @@ -0,0 +1,38 @@ + + + + + {8953E6CC-4E46-4D97-9704-CE8F76672843} + cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {AA1A2DB4-3798-4A0C-9339-FAA57753A0AC} + h;hpp;hxx;hm;inl;inc;xsd + + + {88b19602-75bf-44d6-a995-f5e213e36528} + xsd + + + + + Source Files + + + Source Files + + + + + Header Files + + + + + + + + Schema Files + + + \ No newline at end of file diff --git a/xsd/dist/examples/cxx/tree/caching/caching-vc12.vcxproj b/xsd/dist/examples/cxx/tree/caching/caching-vc12.vcxproj new file mode 100644 index 0000000..304d2c2 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/caching/caching-vc12.vcxproj @@ -0,0 +1,213 @@ + + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + caching + {932D8CD0-4E11-4C3A-9084-4D30DE75C2B7} + caching + Win32Proj + + + + Application + v120 + MultiByte + + + Application + v120 + MultiByte + + + Application + v120 + MultiByte + + + Application + v120 + MultiByte + + + + + + + + + + + + + + + + + + + driver + driver + driver + driver + Debug\ + Debug\ + true + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + true + Release\ + Release\ + false + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + false + + + + Disabled + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebugDLL + true + + + Level3 + true + + + xerces-c_3D.lib;%(AdditionalDependencies) + $(TargetPath) + true + $(OutDir)driver.pdb + Console + false + + + MachineX86 + + + + + X64 + + + Disabled + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebugDLL + true + + + Level3 + true + + + xerces-c_3D.lib;%(AdditionalDependencies) + $(TargetPath) + true + $(OutDir)driver.pdb + Console + false + + + MachineX64 + + + + + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreadedDLL + true + + + Level3 + true + + + xerces-c_3.lib;%(AdditionalDependencies) + $(TargetPath) + true + Console + true + true + false + + + MachineX86 + + + + + X64 + + + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreadedDLL + true + + + Level3 + true + + + xerces-c_3.lib;%(AdditionalDependencies) + $(TargetPath) + true + Console + true + true + false + + + MachineX64 + + + + + + + + + + + + xsd library.xsd + xsd cxx-tree library.xsd + library.hxx;library.cxx;%(Outputs) + xsd library.xsd + xsd cxx-tree library.xsd + library.hxx;library.cxx;%(Outputs) + xsd library.xsd + xsd cxx-tree library.xsd + library.hxx;library.cxx;%(Outputs) + xsd library.xsd + xsd cxx-tree library.xsd + library.hxx;library.cxx;%(Outputs) + + + + + + + + + \ No newline at end of file diff --git a/xsd/dist/examples/cxx/tree/caching/caching-vc12.vcxproj.filters b/xsd/dist/examples/cxx/tree/caching/caching-vc12.vcxproj.filters new file mode 100644 index 0000000..07ab0e9 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/caching/caching-vc12.vcxproj.filters @@ -0,0 +1,38 @@ + + + + + {8953E6CC-4E46-4D97-9704-CE8F76672843} + cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {AA1A2DB4-3798-4A0C-9339-FAA57753A0AC} + h;hpp;hxx;hm;inl;inc;xsd + + + {88b19602-75bf-44d6-a995-f5e213e36528} + xsd + + + + + Source Files + + + Source Files + + + + + Header Files + + + + + + + + Schema Files + + + \ No newline at end of file diff --git a/xsd/dist/examples/cxx/tree/caching/caching-vc8.vcproj b/xsd/dist/examples/cxx/tree/caching/caching-vc8.vcproj new file mode 100644 index 0000000..3d75cb6 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/caching/caching-vc8.vcproj @@ -0,0 +1,423 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/xsd/dist/examples/cxx/tree/caching/caching-vc9.vcproj b/xsd/dist/examples/cxx/tree/caching/caching-vc9.vcproj new file mode 100644 index 0000000..b356172 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/caching/caching-vc9.vcproj @@ -0,0 +1,420 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/xsd/dist/examples/cxx/tree/caching/caching-xerces2-7.1.vcproj b/xsd/dist/examples/cxx/tree/caching/caching-xerces2-7.1.vcproj deleted file mode 100644 index e280f2f..0000000 --- a/xsd/dist/examples/cxx/tree/caching/caching-xerces2-7.1.vcproj +++ /dev/null @@ -1,164 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/xsd/dist/examples/cxx/tree/caching/caching-xerces2-8.0.vcproj b/xsd/dist/examples/cxx/tree/caching/caching-xerces2-8.0.vcproj deleted file mode 100644 index 07d9da5..0000000 --- a/xsd/dist/examples/cxx/tree/caching/caching-xerces2-8.0.vcproj +++ /dev/null @@ -1,423 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/xsd/dist/examples/cxx/tree/caching/caching-xerces2-9.0.vcproj b/xsd/dist/examples/cxx/tree/caching/caching-xerces2-9.0.vcproj deleted file mode 100644 index 07c61ca..0000000 --- a/xsd/dist/examples/cxx/tree/caching/caching-xerces2-9.0.vcproj +++ /dev/null @@ -1,420 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/xsd/dist/examples/cxx/tree/compression/compression-10.0.sln b/xsd/dist/examples/cxx/tree/compression/compression-10.0.sln deleted file mode 100644 index 5e7c35f..0000000 --- a/xsd/dist/examples/cxx/tree/compression/compression-10.0.sln +++ /dev/null @@ -1,25 +0,0 @@ -Microsoft Visual Studio Solution File, Format Version 11.00 -# Visual Studio 2010 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "compression", "compression-10.0.vcxproj", "{AA385EB4-7352-4865-9C5C-9F0DE7BA0060}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Win32 = Debug|Win32 - Debug|x64 = Debug|x64 - Release|Win32 = Release|Win32 - Release|x64 = Release|x64 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {AA385EB4-7352-4865-9C5C-9F0DE7BA0060}.Debug|Win32.ActiveCfg = Debug|Win32 - {AA385EB4-7352-4865-9C5C-9F0DE7BA0060}.Debug|Win32.Build.0 = Debug|Win32 - {AA385EB4-7352-4865-9C5C-9F0DE7BA0060}.Debug|x64.ActiveCfg = Debug|x64 - {AA385EB4-7352-4865-9C5C-9F0DE7BA0060}.Debug|x64.Build.0 = Debug|x64 - {AA385EB4-7352-4865-9C5C-9F0DE7BA0060}.Release|Win32.ActiveCfg = Release|Win32 - {AA385EB4-7352-4865-9C5C-9F0DE7BA0060}.Release|Win32.Build.0 = Release|Win32 - {AA385EB4-7352-4865-9C5C-9F0DE7BA0060}.Release|x64.ActiveCfg = Release|x64 - {AA385EB4-7352-4865-9C5C-9F0DE7BA0060}.Release|x64.Build.0 = Release|x64 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal diff --git a/xsd/dist/examples/cxx/tree/compression/compression-10.0.vcxproj b/xsd/dist/examples/cxx/tree/compression/compression-10.0.vcxproj deleted file mode 100644 index 3ecb3ab..0000000 --- a/xsd/dist/examples/cxx/tree/compression/compression-10.0.vcxproj +++ /dev/null @@ -1,213 +0,0 @@ - - - - - Debug - Win32 - - - Debug - x64 - - - Release - Win32 - - - Release - x64 - - - - compression - {AA385EB4-7352-4865-9C5C-9F0DE7BA0060} - compression - Win32Proj - - - - Application - MultiByte - - - Application - MultiByte - - - Application - MultiByte - - - Application - MultiByte - - - - - - - - - - - - - - - - - - - driver - driver - driver - driver - Debug\ - Debug\ - true - $(Platform)\$(Configuration)\ - $(Platform)\$(Configuration)\ - true - Release\ - Release\ - false - $(Platform)\$(Configuration)\ - $(Platform)\$(Configuration)\ - false - - - - Disabled - WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - true - - - Level3 - EditAndContinue - - - xerces-c_3D.lib;zdll.lib;%(AdditionalDependencies) - $(TargetPath) - true - $(OutDir)driver.pdb - Console - false - - - MachineX86 - - - - - X64 - - - Disabled - WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - true - - - Level3 - ProgramDatabase - - - xerces-c_3D.lib;zdll.lib;%(AdditionalDependencies) - $(TargetPath) - true - $(OutDir)driver.pdb - Console - false - - - MachineX64 - - - - - WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - MultiThreadedDLL - true - - - Level3 - ProgramDatabase - - - xerces-c_3.lib;zdll.lib;%(AdditionalDependencies) - $(TargetPath) - true - Console - true - true - false - - - MachineX86 - - - - - X64 - - - WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - MultiThreadedDLL - true - - - Level3 - ProgramDatabase - - - xerces-c_3.lib;zdll.lib;%(AdditionalDependencies) - $(TargetPath) - true - Console - true - true - false - - - MachineX64 - - - - - - - - - - - - - - - - xsd library.xsd - xsd cxx-tree --generate-ostream --generate-serialization library.xsd - library.hxx;library.cxx;%(Outputs) - xsd library.xsd - xsd cxx-tree --generate-ostream --generate-serialization library.xsd - library.hxx;library.cxx;%(Outputs) - xsd library.xsd - xsd cxx-tree --generate-ostream --generate-serialization library.xsd - library.hxx;library.cxx;%(Outputs) - xsd library.xsd - xsd cxx-tree --generate-ostream --generate-serialization library.xsd - library.hxx;library.cxx;%(Outputs) - - - - - - - - - \ No newline at end of file diff --git a/xsd/dist/examples/cxx/tree/compression/compression-10.0.vcxproj.filters b/xsd/dist/examples/cxx/tree/compression/compression-10.0.vcxproj.filters deleted file mode 100644 index 0156a51..0000000 --- a/xsd/dist/examples/cxx/tree/compression/compression-10.0.vcxproj.filters +++ /dev/null @@ -1,50 +0,0 @@ - - - - - {E38C94E8-B473-4B88-9C42-BD34C81BC24B} - cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx - - - {408177AE-D480-4933-AED3-705D39F15C9F} - h;hpp;hxx;hm;inl;inc;xsd - - - {0e78ae69-359d-42ea-8a3c-c60040f3aa2c} - xsd - - - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - - - Header Files - - - Header Files - - - Header Files - - - - - - - - Schema Files - - - \ No newline at end of file diff --git a/xsd/dist/examples/cxx/tree/compression/compression-7.1.sln b/xsd/dist/examples/cxx/tree/compression/compression-7.1.sln deleted file mode 100644 index fbb90b5..0000000 --- a/xsd/dist/examples/cxx/tree/compression/compression-7.1.sln +++ /dev/null @@ -1,21 +0,0 @@ -Microsoft Visual Studio Solution File, Format Version 8.00 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "compression", "compression-7.1.vcproj", "{AA385EB4-7352-4865-9C5C-9F0DE7BA0060}" - ProjectSection(ProjectDependencies) = postProject - EndProjectSection -EndProject -Global - GlobalSection(SolutionConfiguration) = preSolution - Debug = Debug - Release = Release - EndGlobalSection - GlobalSection(ProjectConfiguration) = postSolution - {AA385EB4-7352-4865-9C5C-9F0DE7BA0060}.Debug.ActiveCfg = Debug|Win32 - {AA385EB4-7352-4865-9C5C-9F0DE7BA0060}.Debug.Build.0 = Debug|Win32 - {AA385EB4-7352-4865-9C5C-9F0DE7BA0060}.Release.ActiveCfg = Release|Win32 - {AA385EB4-7352-4865-9C5C-9F0DE7BA0060}.Release.Build.0 = Release|Win32 - EndGlobalSection - GlobalSection(ExtensibilityGlobals) = postSolution - EndGlobalSection - GlobalSection(ExtensibilityAddIns) = postSolution - EndGlobalSection -EndGlobal diff --git a/xsd/dist/examples/cxx/tree/compression/compression-7.1.vcproj b/xsd/dist/examples/cxx/tree/compression/compression-7.1.vcproj deleted file mode 100644 index fddab79..0000000 --- a/xsd/dist/examples/cxx/tree/compression/compression-7.1.vcproj +++ /dev/null @@ -1,176 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/xsd/dist/examples/cxx/tree/compression/compression-8.0.sln b/xsd/dist/examples/cxx/tree/compression/compression-8.0.sln deleted file mode 100644 index 5b0f577..0000000 --- a/xsd/dist/examples/cxx/tree/compression/compression-8.0.sln +++ /dev/null @@ -1,25 +0,0 @@ -Microsoft Visual Studio Solution File, Format Version 9.00 -# Visual Studio 2005 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "compression", "compression-8.0.vcproj", "{AA385EB4-7352-4865-9C5C-9F0DE7BA0060}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Win32 = Debug|Win32 - Debug|x64 = Debug|x64 - Release|Win32 = Release|Win32 - Release|x64 = Release|x64 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {AA385EB4-7352-4865-9C5C-9F0DE7BA0060}.Debug|Win32.ActiveCfg = Debug|Win32 - {AA385EB4-7352-4865-9C5C-9F0DE7BA0060}.Debug|Win32.Build.0 = Debug|Win32 - {AA385EB4-7352-4865-9C5C-9F0DE7BA0060}.Debug|x64.ActiveCfg = Debug|x64 - {AA385EB4-7352-4865-9C5C-9F0DE7BA0060}.Debug|x64.Build.0 = Debug|x64 - {AA385EB4-7352-4865-9C5C-9F0DE7BA0060}.Release|Win32.ActiveCfg = Release|Win32 - {AA385EB4-7352-4865-9C5C-9F0DE7BA0060}.Release|Win32.Build.0 = Release|Win32 - {AA385EB4-7352-4865-9C5C-9F0DE7BA0060}.Release|x64.ActiveCfg = Release|x64 - {AA385EB4-7352-4865-9C5C-9F0DE7BA0060}.Release|x64.Build.0 = Release|x64 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal diff --git a/xsd/dist/examples/cxx/tree/compression/compression-8.0.vcproj b/xsd/dist/examples/cxx/tree/compression/compression-8.0.vcproj deleted file mode 100644 index 85b45d8..0000000 --- a/xsd/dist/examples/cxx/tree/compression/compression-8.0.vcproj +++ /dev/null @@ -1,435 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/xsd/dist/examples/cxx/tree/compression/compression-9.0.sln b/xsd/dist/examples/cxx/tree/compression/compression-9.0.sln deleted file mode 100644 index 73d32a6..0000000 --- a/xsd/dist/examples/cxx/tree/compression/compression-9.0.sln +++ /dev/null @@ -1,25 +0,0 @@ -Microsoft Visual Studio Solution File, Format Version 10.00 -# Visual Studio 2008 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "compression", "compression-9.0.vcproj", "{AA385EB4-7352-4865-9C5C-9F0DE7BA0060}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Win32 = Debug|Win32 - Debug|x64 = Debug|x64 - Release|Win32 = Release|Win32 - Release|x64 = Release|x64 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {AA385EB4-7352-4865-9C5C-9F0DE7BA0060}.Debug|Win32.ActiveCfg = Debug|Win32 - {AA385EB4-7352-4865-9C5C-9F0DE7BA0060}.Debug|Win32.Build.0 = Debug|Win32 - {AA385EB4-7352-4865-9C5C-9F0DE7BA0060}.Debug|x64.ActiveCfg = Debug|x64 - {AA385EB4-7352-4865-9C5C-9F0DE7BA0060}.Debug|x64.Build.0 = Debug|x64 - {AA385EB4-7352-4865-9C5C-9F0DE7BA0060}.Release|Win32.ActiveCfg = Release|Win32 - {AA385EB4-7352-4865-9C5C-9F0DE7BA0060}.Release|Win32.Build.0 = Release|Win32 - {AA385EB4-7352-4865-9C5C-9F0DE7BA0060}.Release|x64.ActiveCfg = Release|x64 - {AA385EB4-7352-4865-9C5C-9F0DE7BA0060}.Release|x64.Build.0 = Release|x64 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal diff --git a/xsd/dist/examples/cxx/tree/compression/compression-9.0.vcproj b/xsd/dist/examples/cxx/tree/compression/compression-9.0.vcproj deleted file mode 100644 index 92ea1da..0000000 --- a/xsd/dist/examples/cxx/tree/compression/compression-9.0.vcproj +++ /dev/null @@ -1,432 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/xsd/dist/examples/cxx/tree/compression/compression-vc10.vcxproj b/xsd/dist/examples/cxx/tree/compression/compression-vc10.vcxproj new file mode 100644 index 0000000..0f084fb --- /dev/null +++ b/xsd/dist/examples/cxx/tree/compression/compression-vc10.vcxproj @@ -0,0 +1,209 @@ + + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + compression + {AA385EB4-7352-4865-9C5C-9F0DE7BA0060} + compression + Win32Proj + + + + Application + MultiByte + + + Application + MultiByte + + + Application + MultiByte + + + Application + MultiByte + + + + + + + + + + + + + + + + + + + driver + driver + driver + driver + Debug\ + Debug\ + true + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + true + Release\ + Release\ + false + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + false + + + + Disabled + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebugDLL + true + + + Level3 + + + xerces-c_3D.lib;zdll.lib;%(AdditionalDependencies) + $(TargetPath) + true + $(OutDir)driver.pdb + Console + false + + + MachineX86 + + + + + X64 + + + Disabled + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebugDLL + true + + + Level3 + + + xerces-c_3D.lib;zdll.lib;%(AdditionalDependencies) + $(TargetPath) + true + $(OutDir)driver.pdb + Console + false + + + MachineX64 + + + + + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreadedDLL + true + + + Level3 + + + xerces-c_3.lib;zdll.lib;%(AdditionalDependencies) + $(TargetPath) + true + Console + true + true + false + + + MachineX86 + + + + + X64 + + + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreadedDLL + true + + + Level3 + + + xerces-c_3.lib;zdll.lib;%(AdditionalDependencies) + $(TargetPath) + true + Console + true + true + false + + + MachineX64 + + + + + + + + + + + + + + + + xsd library.xsd + xsd cxx-tree --generate-ostream --generate-serialization library.xsd + library.hxx;library.cxx;%(Outputs) + xsd library.xsd + xsd cxx-tree --generate-ostream --generate-serialization library.xsd + library.hxx;library.cxx;%(Outputs) + xsd library.xsd + xsd cxx-tree --generate-ostream --generate-serialization library.xsd + library.hxx;library.cxx;%(Outputs) + xsd library.xsd + xsd cxx-tree --generate-ostream --generate-serialization library.xsd + library.hxx;library.cxx;%(Outputs) + + + + + + + + + \ No newline at end of file diff --git a/xsd/dist/examples/cxx/tree/compression/compression-vc10.vcxproj.filters b/xsd/dist/examples/cxx/tree/compression/compression-vc10.vcxproj.filters new file mode 100644 index 0000000..0156a51 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/compression/compression-vc10.vcxproj.filters @@ -0,0 +1,50 @@ + + + + + {E38C94E8-B473-4B88-9C42-BD34C81BC24B} + cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {408177AE-D480-4933-AED3-705D39F15C9F} + h;hpp;hxx;hm;inl;inc;xsd + + + {0e78ae69-359d-42ea-8a3c-c60040f3aa2c} + xsd + + + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + + + Header Files + + + Header Files + + + Header Files + + + + + + + + Schema Files + + + \ No newline at end of file diff --git a/xsd/dist/examples/cxx/tree/compression/compression-vc11.vcxproj b/xsd/dist/examples/cxx/tree/compression/compression-vc11.vcxproj new file mode 100644 index 0000000..76c9887 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/compression/compression-vc11.vcxproj @@ -0,0 +1,213 @@ + + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + compression + {AA385EB4-7352-4865-9C5C-9F0DE7BA0060} + compression + Win32Proj + + + + Application + v110 + MultiByte + + + Application + v110 + MultiByte + + + Application + v110 + MultiByte + + + Application + v110 + MultiByte + + + + + + + + + + + + + + + + + + + driver + driver + driver + driver + Debug\ + Debug\ + true + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + true + Release\ + Release\ + false + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + false + + + + Disabled + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebugDLL + true + + + Level3 + + + xerces-c_3D.lib;zdll.lib;%(AdditionalDependencies) + $(TargetPath) + true + $(OutDir)driver.pdb + Console + false + + + MachineX86 + + + + + X64 + + + Disabled + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebugDLL + true + + + Level3 + + + xerces-c_3D.lib;zdll.lib;%(AdditionalDependencies) + $(TargetPath) + true + $(OutDir)driver.pdb + Console + false + + + MachineX64 + + + + + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreadedDLL + true + + + Level3 + + + xerces-c_3.lib;zdll.lib;%(AdditionalDependencies) + $(TargetPath) + true + Console + true + true + false + + + MachineX86 + + + + + X64 + + + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreadedDLL + true + + + Level3 + + + xerces-c_3.lib;zdll.lib;%(AdditionalDependencies) + $(TargetPath) + true + Console + true + true + false + + + MachineX64 + + + + + + + + + + + + + + + + xsd library.xsd + xsd cxx-tree --generate-ostream --generate-serialization library.xsd + library.hxx;library.cxx;%(Outputs) + xsd library.xsd + xsd cxx-tree --generate-ostream --generate-serialization library.xsd + library.hxx;library.cxx;%(Outputs) + xsd library.xsd + xsd cxx-tree --generate-ostream --generate-serialization library.xsd + library.hxx;library.cxx;%(Outputs) + xsd library.xsd + xsd cxx-tree --generate-ostream --generate-serialization library.xsd + library.hxx;library.cxx;%(Outputs) + + + + + + + + + \ No newline at end of file diff --git a/xsd/dist/examples/cxx/tree/compression/compression-vc11.vcxproj.filters b/xsd/dist/examples/cxx/tree/compression/compression-vc11.vcxproj.filters new file mode 100644 index 0000000..0156a51 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/compression/compression-vc11.vcxproj.filters @@ -0,0 +1,50 @@ + + + + + {E38C94E8-B473-4B88-9C42-BD34C81BC24B} + cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {408177AE-D480-4933-AED3-705D39F15C9F} + h;hpp;hxx;hm;inl;inc;xsd + + + {0e78ae69-359d-42ea-8a3c-c60040f3aa2c} + xsd + + + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + + + Header Files + + + Header Files + + + Header Files + + + + + + + + Schema Files + + + \ No newline at end of file diff --git a/xsd/dist/examples/cxx/tree/compression/compression-vc12.vcxproj b/xsd/dist/examples/cxx/tree/compression/compression-vc12.vcxproj new file mode 100644 index 0000000..1e7a3b7 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/compression/compression-vc12.vcxproj @@ -0,0 +1,217 @@ + + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + compression + {AA385EB4-7352-4865-9C5C-9F0DE7BA0060} + compression + Win32Proj + + + + Application + v120 + MultiByte + + + Application + v120 + MultiByte + + + Application + v120 + MultiByte + + + Application + v120 + MultiByte + + + + + + + + + + + + + + + + + + + driver + driver + driver + driver + Debug\ + Debug\ + true + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + true + Release\ + Release\ + false + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + false + + + + Disabled + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebugDLL + true + + + Level3 + true + + + xerces-c_3D.lib;zdll.lib;%(AdditionalDependencies) + $(TargetPath) + true + $(OutDir)driver.pdb + Console + false + + + MachineX86 + + + + + X64 + + + Disabled + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebugDLL + true + + + Level3 + true + + + xerces-c_3D.lib;zdll.lib;%(AdditionalDependencies) + $(TargetPath) + true + $(OutDir)driver.pdb + Console + false + + + MachineX64 + + + + + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreadedDLL + true + + + Level3 + true + + + xerces-c_3.lib;zdll.lib;%(AdditionalDependencies) + $(TargetPath) + true + Console + true + true + false + + + MachineX86 + + + + + X64 + + + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreadedDLL + true + + + Level3 + true + + + xerces-c_3.lib;zdll.lib;%(AdditionalDependencies) + $(TargetPath) + true + Console + true + true + false + + + MachineX64 + + + + + + + + + + + + + + + + xsd library.xsd + xsd cxx-tree --generate-ostream --generate-serialization library.xsd + library.hxx;library.cxx;%(Outputs) + xsd library.xsd + xsd cxx-tree --generate-ostream --generate-serialization library.xsd + library.hxx;library.cxx;%(Outputs) + xsd library.xsd + xsd cxx-tree --generate-ostream --generate-serialization library.xsd + library.hxx;library.cxx;%(Outputs) + xsd library.xsd + xsd cxx-tree --generate-ostream --generate-serialization library.xsd + library.hxx;library.cxx;%(Outputs) + + + + + + + + + \ No newline at end of file diff --git a/xsd/dist/examples/cxx/tree/compression/compression-vc12.vcxproj.filters b/xsd/dist/examples/cxx/tree/compression/compression-vc12.vcxproj.filters new file mode 100644 index 0000000..0156a51 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/compression/compression-vc12.vcxproj.filters @@ -0,0 +1,50 @@ + + + + + {E38C94E8-B473-4B88-9C42-BD34C81BC24B} + cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {408177AE-D480-4933-AED3-705D39F15C9F} + h;hpp;hxx;hm;inl;inc;xsd + + + {0e78ae69-359d-42ea-8a3c-c60040f3aa2c} + xsd + + + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + + + Header Files + + + Header Files + + + Header Files + + + + + + + + Schema Files + + + \ No newline at end of file diff --git a/xsd/dist/examples/cxx/tree/compression/compression-vc8.vcproj b/xsd/dist/examples/cxx/tree/compression/compression-vc8.vcproj new file mode 100644 index 0000000..85b45d8 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/compression/compression-vc8.vcproj @@ -0,0 +1,435 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/xsd/dist/examples/cxx/tree/compression/compression-vc9.vcproj b/xsd/dist/examples/cxx/tree/compression/compression-vc9.vcproj new file mode 100644 index 0000000..92ea1da --- /dev/null +++ b/xsd/dist/examples/cxx/tree/compression/compression-vc9.vcproj @@ -0,0 +1,432 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/xsd/dist/examples/cxx/tree/compression/compression-xerces2-7.1.sln b/xsd/dist/examples/cxx/tree/compression/compression-xerces2-7.1.sln deleted file mode 100644 index b37e3eb..0000000 --- a/xsd/dist/examples/cxx/tree/compression/compression-xerces2-7.1.sln +++ /dev/null @@ -1,21 +0,0 @@ -Microsoft Visual Studio Solution File, Format Version 8.00 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "compression", "compression-xerces2-7.1.vcproj", "{AA385EB4-7352-4865-9C5C-9F0DE7BA0060}" - ProjectSection(ProjectDependencies) = postProject - EndProjectSection -EndProject -Global - GlobalSection(SolutionConfiguration) = preSolution - Debug = Debug - Release = Release - EndGlobalSection - GlobalSection(ProjectConfiguration) = postSolution - {AA385EB4-7352-4865-9C5C-9F0DE7BA0060}.Debug.ActiveCfg = Debug|Win32 - {AA385EB4-7352-4865-9C5C-9F0DE7BA0060}.Debug.Build.0 = Debug|Win32 - {AA385EB4-7352-4865-9C5C-9F0DE7BA0060}.Release.ActiveCfg = Release|Win32 - {AA385EB4-7352-4865-9C5C-9F0DE7BA0060}.Release.Build.0 = Release|Win32 - EndGlobalSection - GlobalSection(ExtensibilityGlobals) = postSolution - EndGlobalSection - GlobalSection(ExtensibilityAddIns) = postSolution - EndGlobalSection -EndGlobal diff --git a/xsd/dist/examples/cxx/tree/compression/compression-xerces2-7.1.vcproj b/xsd/dist/examples/cxx/tree/compression/compression-xerces2-7.1.vcproj deleted file mode 100644 index e361b62..0000000 --- a/xsd/dist/examples/cxx/tree/compression/compression-xerces2-7.1.vcproj +++ /dev/null @@ -1,176 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/xsd/dist/examples/cxx/tree/compression/compression-xerces2-8.0.sln b/xsd/dist/examples/cxx/tree/compression/compression-xerces2-8.0.sln deleted file mode 100644 index a6ef4ed..0000000 --- a/xsd/dist/examples/cxx/tree/compression/compression-xerces2-8.0.sln +++ /dev/null @@ -1,25 +0,0 @@ -Microsoft Visual Studio Solution File, Format Version 9.00 -# Visual Studio 2005 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "compression", "compression-xerces2-8.0.vcproj", "{AA385EB4-7352-4865-9C5C-9F0DE7BA0060}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Win32 = Debug|Win32 - Debug|x64 = Debug|x64 - Release|Win32 = Release|Win32 - Release|x64 = Release|x64 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {AA385EB4-7352-4865-9C5C-9F0DE7BA0060}.Debug|Win32.ActiveCfg = Debug|Win32 - {AA385EB4-7352-4865-9C5C-9F0DE7BA0060}.Debug|Win32.Build.0 = Debug|Win32 - {AA385EB4-7352-4865-9C5C-9F0DE7BA0060}.Debug|x64.ActiveCfg = Debug|x64 - {AA385EB4-7352-4865-9C5C-9F0DE7BA0060}.Debug|x64.Build.0 = Debug|x64 - {AA385EB4-7352-4865-9C5C-9F0DE7BA0060}.Release|Win32.ActiveCfg = Release|Win32 - {AA385EB4-7352-4865-9C5C-9F0DE7BA0060}.Release|Win32.Build.0 = Release|Win32 - {AA385EB4-7352-4865-9C5C-9F0DE7BA0060}.Release|x64.ActiveCfg = Release|x64 - {AA385EB4-7352-4865-9C5C-9F0DE7BA0060}.Release|x64.Build.0 = Release|x64 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal diff --git a/xsd/dist/examples/cxx/tree/compression/compression-xerces2-8.0.vcproj b/xsd/dist/examples/cxx/tree/compression/compression-xerces2-8.0.vcproj deleted file mode 100644 index fb651f6..0000000 --- a/xsd/dist/examples/cxx/tree/compression/compression-xerces2-8.0.vcproj +++ /dev/null @@ -1,435 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/xsd/dist/examples/cxx/tree/compression/compression-xerces2-9.0.sln b/xsd/dist/examples/cxx/tree/compression/compression-xerces2-9.0.sln deleted file mode 100644 index 69eb3e3..0000000 --- a/xsd/dist/examples/cxx/tree/compression/compression-xerces2-9.0.sln +++ /dev/null @@ -1,25 +0,0 @@ -Microsoft Visual Studio Solution File, Format Version 10.00 -# Visual Studio 2008 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "compression", "compression-xerces2-9.0.vcproj", "{AA385EB4-7352-4865-9C5C-9F0DE7BA0060}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Win32 = Debug|Win32 - Debug|x64 = Debug|x64 - Release|Win32 = Release|Win32 - Release|x64 = Release|x64 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {AA385EB4-7352-4865-9C5C-9F0DE7BA0060}.Debug|Win32.ActiveCfg = Debug|Win32 - {AA385EB4-7352-4865-9C5C-9F0DE7BA0060}.Debug|Win32.Build.0 = Debug|Win32 - {AA385EB4-7352-4865-9C5C-9F0DE7BA0060}.Debug|x64.ActiveCfg = Debug|x64 - {AA385EB4-7352-4865-9C5C-9F0DE7BA0060}.Debug|x64.Build.0 = Debug|x64 - {AA385EB4-7352-4865-9C5C-9F0DE7BA0060}.Release|Win32.ActiveCfg = Release|Win32 - {AA385EB4-7352-4865-9C5C-9F0DE7BA0060}.Release|Win32.Build.0 = Release|Win32 - {AA385EB4-7352-4865-9C5C-9F0DE7BA0060}.Release|x64.ActiveCfg = Release|x64 - {AA385EB4-7352-4865-9C5C-9F0DE7BA0060}.Release|x64.Build.0 = Release|x64 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal diff --git a/xsd/dist/examples/cxx/tree/compression/compression-xerces2-9.0.vcproj b/xsd/dist/examples/cxx/tree/compression/compression-xerces2-9.0.vcproj deleted file mode 100644 index 7c95a2a..0000000 --- a/xsd/dist/examples/cxx/tree/compression/compression-xerces2-9.0.vcproj +++ /dev/null @@ -1,432 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/xsd/dist/examples/cxx/tree/custom/calendar/calendar-10.0.sln b/xsd/dist/examples/cxx/tree/custom/calendar/calendar-10.0.sln deleted file mode 100644 index 70b733c..0000000 --- a/xsd/dist/examples/cxx/tree/custom/calendar/calendar-10.0.sln +++ /dev/null @@ -1,25 +0,0 @@ -Microsoft Visual Studio Solution File, Format Version 11.00 -# Visual Studio 2010 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "calendar", "calendar-10.0.vcxproj", "{2DB41EF7-0BED-45BA-A311-44D2719BFE09}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Win32 = Debug|Win32 - Debug|x64 = Debug|x64 - Release|Win32 = Release|Win32 - Release|x64 = Release|x64 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {2DB41EF7-0BED-45BA-A311-44D2719BFE09}.Debug|Win32.ActiveCfg = Debug|Win32 - {2DB41EF7-0BED-45BA-A311-44D2719BFE09}.Debug|Win32.Build.0 = Debug|Win32 - {2DB41EF7-0BED-45BA-A311-44D2719BFE09}.Debug|x64.ActiveCfg = Debug|x64 - {2DB41EF7-0BED-45BA-A311-44D2719BFE09}.Debug|x64.Build.0 = Debug|x64 - {2DB41EF7-0BED-45BA-A311-44D2719BFE09}.Release|Win32.ActiveCfg = Release|Win32 - {2DB41EF7-0BED-45BA-A311-44D2719BFE09}.Release|Win32.Build.0 = Release|Win32 - {2DB41EF7-0BED-45BA-A311-44D2719BFE09}.Release|x64.ActiveCfg = Release|x64 - {2DB41EF7-0BED-45BA-A311-44D2719BFE09}.Release|x64.Build.0 = Release|x64 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal diff --git a/xsd/dist/examples/cxx/tree/custom/calendar/calendar-10.0.vcxproj b/xsd/dist/examples/cxx/tree/custom/calendar/calendar-10.0.vcxproj deleted file mode 100644 index 7dc3711..0000000 --- a/xsd/dist/examples/cxx/tree/custom/calendar/calendar-10.0.vcxproj +++ /dev/null @@ -1,233 +0,0 @@ - - - - - Debug - Win32 - - - Debug - x64 - - - Release - Win32 - - - Release - x64 - - - - calendar - {2DB41EF7-0BED-45BA-A311-44D2719BFE09} - calendar - Win32Proj - - - - Application - MultiByte - - - Application - MultiByte - - - Application - MultiByte - - - Application - MultiByte - - - - - - - - - - - - - - - - - - - driver - driver - driver - driver - Debug\ - Debug\ - true - true - $(Platform)\$(Configuration)\ - $(Platform)\$(Configuration)\ - true - true - Release\ - Release\ - false - $(Platform)\$(Configuration)\ - $(Platform)\$(Configuration)\ - false - - - - xsd xml-schema.xsd - xsd cxx-tree --generate-xml-schema --custom-type date --hxx-epilogue "#include \"xml-schema-custom.hxx\"" xml-schema.xsd - - - Disabled - WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebug - true - - - Level3 - EditAndContinue - - - xerces-c_3D.lib;%(AdditionalDependencies) - $(TargetPath) - true - $(OutDir)driver.pdb - Console - false - - - MachineX86 - - - - - xsd xml-schema.xsd - xsd cxx-tree --generate-xml-schema --custom-type date --hxx-epilogue "#include \"xml-schema-custom.hxx\"" xml-schema.xsd - - - X64 - - - Disabled - WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebug - true - - - Level3 - ProgramDatabase - - - xerces-c_3D.lib;%(AdditionalDependencies) - $(TargetPath) - true - $(OutDir)driver.pdb - Console - false - - - MachineX64 - - - - - xsd xml-schema.xsd - xsd cxx-tree --generate-xml-schema --custom-type date --hxx-epilogue "#include \"xml-schema-custom.hxx\"" xml-schema.xsd - - - WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - MultiThreaded - true - - - Level3 - ProgramDatabase - - - xerces-c_3.lib;%(AdditionalDependencies) - $(TargetPath) - true - Console - true - true - false - - - MachineX86 - - - - - xsd xml-schema.xsd - xsd cxx-tree --generate-xml-schema --custom-type date --hxx-epilogue "#include \"xml-schema-custom.hxx\"" xml-schema.xsd - - - X64 - - - WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - MultiThreaded - true - - - Level3 - ProgramDatabase - - - xerces-c_3.lib;%(AdditionalDependencies) - $(TargetPath) - true - Console - true - true - false - - - MachineX64 - - - - - - - - - - - - - - - - - - - xsd calendar.xsd - xsd cxx-tree --generate-inline --extern-xml-schema xml-schema.xsd calendar.xsd - xml-schema.hxx;%(AdditionalInputs) - calendar.hxx;calendar.ixx;calendar.cxx;%(Outputs) - xsd calendar.xsd - xsd cxx-tree --generate-inline --extern-xml-schema xml-schema.xsd calendar.xsd - xml-schema.hxx;%(AdditionalInputs) - calendar.hxx;calendar.ixx;calendar.cxx;%(Outputs) - xsd calendar.xsd - xsd cxx-tree --generate-inline --extern-xml-schema xml-schema.xsd calendar.xsd - calendar.hxx;calendar.ixx;calendar.cxx;%(Outputs) - xsd calendar.xsd - xsd cxx-tree --generate-inline --extern-xml-schema xml-schema.xsd calendar.xsd - calendar.hxx;calendar.ixx;calendar.cxx;%(Outputs) - - - - - - \ No newline at end of file diff --git a/xsd/dist/examples/cxx/tree/custom/calendar/calendar-10.0.vcxproj.filters b/xsd/dist/examples/cxx/tree/custom/calendar/calendar-10.0.vcxproj.filters deleted file mode 100644 index 943a2dc..0000000 --- a/xsd/dist/examples/cxx/tree/custom/calendar/calendar-10.0.vcxproj.filters +++ /dev/null @@ -1,54 +0,0 @@ - - - - - {1F206676-7422-4DD5-94C3-7B9B2EC9C2D6} - cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx - - - {8D4FED5E-FA2A-44AB-94AC-C8F302E2E1F3} - h;hpp;hxx;hm;inl;inc;xsd - - - {5c4bcf4f-9ad2-4a82-adfb-91528fe6f2e5} - ixx - - - {df5d1e63-29c7-4626-853a-34fc5c7f7443} - xsd - - - - - Source Files - - - Source Files - - - Source Files - - - - - Header Files - - - Header Files - - - Header Files - - - - - Inline Files - - - - - - Schema Files - - - \ No newline at end of file diff --git a/xsd/dist/examples/cxx/tree/custom/calendar/calendar-7.1.sln b/xsd/dist/examples/cxx/tree/custom/calendar/calendar-7.1.sln deleted file mode 100644 index fb9c8e9..0000000 --- a/xsd/dist/examples/cxx/tree/custom/calendar/calendar-7.1.sln +++ /dev/null @@ -1,21 +0,0 @@ -Microsoft Visual Studio Solution File, Format Version 8.00 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "calendar", "calendar-7.1.vcproj", "{2DB41EF7-0BED-45BA-A311-44D2719BFE09}" - ProjectSection(ProjectDependencies) = postProject - EndProjectSection -EndProject -Global - GlobalSection(SolutionConfiguration) = preSolution - Debug = Debug - Release = Release - EndGlobalSection - GlobalSection(ProjectConfiguration) = postSolution - {2DB41EF7-0BED-45BA-A311-44D2719BFE09}.Debug.ActiveCfg = Debug|Win32 - {2DB41EF7-0BED-45BA-A311-44D2719BFE09}.Debug.Build.0 = Debug|Win32 - {2DB41EF7-0BED-45BA-A311-44D2719BFE09}.Release.ActiveCfg = Release|Win32 - {2DB41EF7-0BED-45BA-A311-44D2719BFE09}.Release.Build.0 = Release|Win32 - EndGlobalSection - GlobalSection(ExtensibilityGlobals) = postSolution - EndGlobalSection - GlobalSection(ExtensibilityAddIns) = postSolution - EndGlobalSection -EndGlobal diff --git a/xsd/dist/examples/cxx/tree/custom/calendar/calendar-7.1.vcproj b/xsd/dist/examples/cxx/tree/custom/calendar/calendar-7.1.vcproj deleted file mode 100644 index c307908..0000000 --- a/xsd/dist/examples/cxx/tree/custom/calendar/calendar-7.1.vcproj +++ /dev/null @@ -1,186 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/xsd/dist/examples/cxx/tree/custom/calendar/calendar-8.0.sln b/xsd/dist/examples/cxx/tree/custom/calendar/calendar-8.0.sln deleted file mode 100644 index 52f98df..0000000 --- a/xsd/dist/examples/cxx/tree/custom/calendar/calendar-8.0.sln +++ /dev/null @@ -1,25 +0,0 @@ -Microsoft Visual Studio Solution File, Format Version 9.00 -# Visual Studio 2005 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "calendar", "calendar-8.0.vcproj", "{2DB41EF7-0BED-45BA-A311-44D2719BFE09}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Win32 = Debug|Win32 - Debug|x64 = Debug|x64 - Release|Win32 = Release|Win32 - Release|x64 = Release|x64 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {2DB41EF7-0BED-45BA-A311-44D2719BFE09}.Debug|Win32.ActiveCfg = Debug|Win32 - {2DB41EF7-0BED-45BA-A311-44D2719BFE09}.Debug|Win32.Build.0 = Debug|Win32 - {2DB41EF7-0BED-45BA-A311-44D2719BFE09}.Debug|x64.ActiveCfg = Debug|x64 - {2DB41EF7-0BED-45BA-A311-44D2719BFE09}.Debug|x64.Build.0 = Debug|x64 - {2DB41EF7-0BED-45BA-A311-44D2719BFE09}.Release|Win32.ActiveCfg = Release|Win32 - {2DB41EF7-0BED-45BA-A311-44D2719BFE09}.Release|Win32.Build.0 = Release|Win32 - {2DB41EF7-0BED-45BA-A311-44D2719BFE09}.Release|x64.ActiveCfg = Release|x64 - {2DB41EF7-0BED-45BA-A311-44D2719BFE09}.Release|x64.Build.0 = Release|x64 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal diff --git a/xsd/dist/examples/cxx/tree/custom/calendar/calendar-8.0.vcproj b/xsd/dist/examples/cxx/tree/custom/calendar/calendar-8.0.vcproj deleted file mode 100644 index e04807f..0000000 --- a/xsd/dist/examples/cxx/tree/custom/calendar/calendar-8.0.vcproj +++ /dev/null @@ -1,456 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/xsd/dist/examples/cxx/tree/custom/calendar/calendar-9.0.sln b/xsd/dist/examples/cxx/tree/custom/calendar/calendar-9.0.sln deleted file mode 100644 index ddaadad..0000000 --- a/xsd/dist/examples/cxx/tree/custom/calendar/calendar-9.0.sln +++ /dev/null @@ -1,25 +0,0 @@ -Microsoft Visual Studio Solution File, Format Version 10.00 -# Visual Studio 2008 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "calendar", "calendar-9.0.vcproj", "{2DB41EF7-0BED-45BA-A311-44D2719BFE09}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Win32 = Debug|Win32 - Debug|x64 = Debug|x64 - Release|Win32 = Release|Win32 - Release|x64 = Release|x64 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {2DB41EF7-0BED-45BA-A311-44D2719BFE09}.Debug|Win32.ActiveCfg = Debug|Win32 - {2DB41EF7-0BED-45BA-A311-44D2719BFE09}.Debug|Win32.Build.0 = Debug|Win32 - {2DB41EF7-0BED-45BA-A311-44D2719BFE09}.Debug|x64.ActiveCfg = Debug|x64 - {2DB41EF7-0BED-45BA-A311-44D2719BFE09}.Debug|x64.Build.0 = Debug|x64 - {2DB41EF7-0BED-45BA-A311-44D2719BFE09}.Release|Win32.ActiveCfg = Release|Win32 - {2DB41EF7-0BED-45BA-A311-44D2719BFE09}.Release|Win32.Build.0 = Release|Win32 - {2DB41EF7-0BED-45BA-A311-44D2719BFE09}.Release|x64.ActiveCfg = Release|x64 - {2DB41EF7-0BED-45BA-A311-44D2719BFE09}.Release|x64.Build.0 = Release|x64 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal diff --git a/xsd/dist/examples/cxx/tree/custom/calendar/calendar-9.0.vcproj b/xsd/dist/examples/cxx/tree/custom/calendar/calendar-9.0.vcproj deleted file mode 100644 index d3a189a..0000000 --- a/xsd/dist/examples/cxx/tree/custom/calendar/calendar-9.0.vcproj +++ /dev/null @@ -1,453 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/xsd/dist/examples/cxx/tree/custom/calendar/calendar-vc10.vcxproj b/xsd/dist/examples/cxx/tree/custom/calendar/calendar-vc10.vcxproj new file mode 100644 index 0000000..5d66876 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/custom/calendar/calendar-vc10.vcxproj @@ -0,0 +1,229 @@ + + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + calendar + {2DB41EF7-0BED-45BA-A311-44D2719BFE09} + calendar + Win32Proj + + + + Application + MultiByte + + + Application + MultiByte + + + Application + MultiByte + + + Application + MultiByte + + + + + + + + + + + + + + + + + + + driver + driver + driver + driver + Debug\ + Debug\ + true + true + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + true + true + Release\ + Release\ + false + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + false + + + + xsd xml-schema.xsd + xsd cxx-tree --generate-xml-schema --custom-type date --hxx-epilogue "#include \"xml-schema-custom.hxx\"" xml-schema.xsd + + + Disabled + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebugDLL + true + + + Level3 + + + xerces-c_3D.lib;%(AdditionalDependencies) + $(TargetPath) + true + $(OutDir)driver.pdb + Console + false + + + MachineX86 + + + + + xsd xml-schema.xsd + xsd cxx-tree --generate-xml-schema --custom-type date --hxx-epilogue "#include \"xml-schema-custom.hxx\"" xml-schema.xsd + + + X64 + + + Disabled + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebugDLL + true + + + Level3 + + + xerces-c_3D.lib;%(AdditionalDependencies) + $(TargetPath) + true + $(OutDir)driver.pdb + Console + false + + + MachineX64 + + + + + xsd xml-schema.xsd + xsd cxx-tree --generate-xml-schema --custom-type date --hxx-epilogue "#include \"xml-schema-custom.hxx\"" xml-schema.xsd + + + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreadedDLL + true + + + Level3 + + + xerces-c_3.lib;%(AdditionalDependencies) + $(TargetPath) + true + Console + true + true + false + + + MachineX86 + + + + + xsd xml-schema.xsd + xsd cxx-tree --generate-xml-schema --custom-type date --hxx-epilogue "#include \"xml-schema-custom.hxx\"" xml-schema.xsd + + + X64 + + + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreadedDLL + true + + + Level3 + + + xerces-c_3.lib;%(AdditionalDependencies) + $(TargetPath) + true + Console + true + true + false + + + MachineX64 + + + + + + + + + + + + + + + + + + + xsd calendar.xsd + xsd cxx-tree --generate-inline --extern-xml-schema xml-schema.xsd calendar.xsd + xml-schema.hxx;%(AdditionalInputs) + calendar.hxx;calendar.ixx;calendar.cxx;%(Outputs) + xsd calendar.xsd + xsd cxx-tree --generate-inline --extern-xml-schema xml-schema.xsd calendar.xsd + xml-schema.hxx;%(AdditionalInputs) + calendar.hxx;calendar.ixx;calendar.cxx;%(Outputs) + xsd calendar.xsd + xsd cxx-tree --generate-inline --extern-xml-schema xml-schema.xsd calendar.xsd + calendar.hxx;calendar.ixx;calendar.cxx;%(Outputs) + xsd calendar.xsd + xsd cxx-tree --generate-inline --extern-xml-schema xml-schema.xsd calendar.xsd + calendar.hxx;calendar.ixx;calendar.cxx;%(Outputs) + + + + + + \ No newline at end of file diff --git a/xsd/dist/examples/cxx/tree/custom/calendar/calendar-vc10.vcxproj.filters b/xsd/dist/examples/cxx/tree/custom/calendar/calendar-vc10.vcxproj.filters new file mode 100644 index 0000000..943a2dc --- /dev/null +++ b/xsd/dist/examples/cxx/tree/custom/calendar/calendar-vc10.vcxproj.filters @@ -0,0 +1,54 @@ + + + + + {1F206676-7422-4DD5-94C3-7B9B2EC9C2D6} + cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {8D4FED5E-FA2A-44AB-94AC-C8F302E2E1F3} + h;hpp;hxx;hm;inl;inc;xsd + + + {5c4bcf4f-9ad2-4a82-adfb-91528fe6f2e5} + ixx + + + {df5d1e63-29c7-4626-853a-34fc5c7f7443} + xsd + + + + + Source Files + + + Source Files + + + Source Files + + + + + Header Files + + + Header Files + + + Header Files + + + + + Inline Files + + + + + + Schema Files + + + \ No newline at end of file diff --git a/xsd/dist/examples/cxx/tree/custom/calendar/calendar-vc11.vcxproj b/xsd/dist/examples/cxx/tree/custom/calendar/calendar-vc11.vcxproj new file mode 100644 index 0000000..aea4aab --- /dev/null +++ b/xsd/dist/examples/cxx/tree/custom/calendar/calendar-vc11.vcxproj @@ -0,0 +1,233 @@ + + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + calendar + {2DB41EF7-0BED-45BA-A311-44D2719BFE09} + calendar + Win32Proj + + + + Application + v110 + MultiByte + + + Application + v110 + MultiByte + + + Application + v110 + MultiByte + + + Application + v110 + MultiByte + + + + + + + + + + + + + + + + + + + driver + driver + driver + driver + Debug\ + Debug\ + true + true + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + true + true + Release\ + Release\ + false + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + false + + + + xsd xml-schema.xsd + xsd cxx-tree --generate-xml-schema --custom-type date --hxx-epilogue "#include \"xml-schema-custom.hxx\"" xml-schema.xsd + + + Disabled + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebugDLL + true + + + Level3 + + + xerces-c_3D.lib;%(AdditionalDependencies) + $(TargetPath) + true + $(OutDir)driver.pdb + Console + false + + + MachineX86 + + + + + xsd xml-schema.xsd + xsd cxx-tree --generate-xml-schema --custom-type date --hxx-epilogue "#include \"xml-schema-custom.hxx\"" xml-schema.xsd + + + X64 + + + Disabled + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebugDLL + true + + + Level3 + + + xerces-c_3D.lib;%(AdditionalDependencies) + $(TargetPath) + true + $(OutDir)driver.pdb + Console + false + + + MachineX64 + + + + + xsd xml-schema.xsd + xsd cxx-tree --generate-xml-schema --custom-type date --hxx-epilogue "#include \"xml-schema-custom.hxx\"" xml-schema.xsd + + + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreadedDLL + true + + + Level3 + + + xerces-c_3.lib;%(AdditionalDependencies) + $(TargetPath) + true + Console + true + true + false + + + MachineX86 + + + + + xsd xml-schema.xsd + xsd cxx-tree --generate-xml-schema --custom-type date --hxx-epilogue "#include \"xml-schema-custom.hxx\"" xml-schema.xsd + + + X64 + + + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreadedDLL + true + + + Level3 + + + xerces-c_3.lib;%(AdditionalDependencies) + $(TargetPath) + true + Console + true + true + false + + + MachineX64 + + + + + + + + + + + + + + + + + + + xsd calendar.xsd + xsd cxx-tree --generate-inline --extern-xml-schema xml-schema.xsd calendar.xsd + xml-schema.hxx;%(AdditionalInputs) + calendar.hxx;calendar.ixx;calendar.cxx;%(Outputs) + xsd calendar.xsd + xsd cxx-tree --generate-inline --extern-xml-schema xml-schema.xsd calendar.xsd + xml-schema.hxx;%(AdditionalInputs) + calendar.hxx;calendar.ixx;calendar.cxx;%(Outputs) + xsd calendar.xsd + xsd cxx-tree --generate-inline --extern-xml-schema xml-schema.xsd calendar.xsd + calendar.hxx;calendar.ixx;calendar.cxx;%(Outputs) + xsd calendar.xsd + xsd cxx-tree --generate-inline --extern-xml-schema xml-schema.xsd calendar.xsd + calendar.hxx;calendar.ixx;calendar.cxx;%(Outputs) + + + + + + \ No newline at end of file diff --git a/xsd/dist/examples/cxx/tree/custom/calendar/calendar-vc11.vcxproj.filters b/xsd/dist/examples/cxx/tree/custom/calendar/calendar-vc11.vcxproj.filters new file mode 100644 index 0000000..943a2dc --- /dev/null +++ b/xsd/dist/examples/cxx/tree/custom/calendar/calendar-vc11.vcxproj.filters @@ -0,0 +1,54 @@ + + + + + {1F206676-7422-4DD5-94C3-7B9B2EC9C2D6} + cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {8D4FED5E-FA2A-44AB-94AC-C8F302E2E1F3} + h;hpp;hxx;hm;inl;inc;xsd + + + {5c4bcf4f-9ad2-4a82-adfb-91528fe6f2e5} + ixx + + + {df5d1e63-29c7-4626-853a-34fc5c7f7443} + xsd + + + + + Source Files + + + Source Files + + + Source Files + + + + + Header Files + + + Header Files + + + Header Files + + + + + Inline Files + + + + + + Schema Files + + + \ No newline at end of file diff --git a/xsd/dist/examples/cxx/tree/custom/calendar/calendar-vc12.vcxproj b/xsd/dist/examples/cxx/tree/custom/calendar/calendar-vc12.vcxproj new file mode 100644 index 0000000..d259aa3 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/custom/calendar/calendar-vc12.vcxproj @@ -0,0 +1,237 @@ + + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + calendar + {2DB41EF7-0BED-45BA-A311-44D2719BFE09} + calendar + Win32Proj + + + + Application + v120 + MultiByte + + + Application + v120 + MultiByte + + + Application + v120 + MultiByte + + + Application + v120 + MultiByte + + + + + + + + + + + + + + + + + + + driver + driver + driver + driver + Debug\ + Debug\ + true + true + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + true + true + Release\ + Release\ + false + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + false + + + + xsd xml-schema.xsd + xsd cxx-tree --generate-xml-schema --custom-type date --hxx-epilogue "#include \"xml-schema-custom.hxx\"" xml-schema.xsd + + + Disabled + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebugDLL + true + + + Level3 + true + + + xerces-c_3D.lib;%(AdditionalDependencies) + $(TargetPath) + true + $(OutDir)driver.pdb + Console + false + + + MachineX86 + + + + + xsd xml-schema.xsd + xsd cxx-tree --generate-xml-schema --custom-type date --hxx-epilogue "#include \"xml-schema-custom.hxx\"" xml-schema.xsd + + + X64 + + + Disabled + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebugDLL + true + + + Level3 + true + + + xerces-c_3D.lib;%(AdditionalDependencies) + $(TargetPath) + true + $(OutDir)driver.pdb + Console + false + + + MachineX64 + + + + + xsd xml-schema.xsd + xsd cxx-tree --generate-xml-schema --custom-type date --hxx-epilogue "#include \"xml-schema-custom.hxx\"" xml-schema.xsd + + + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreadedDLL + true + + + Level3 + true + + + xerces-c_3.lib;%(AdditionalDependencies) + $(TargetPath) + true + Console + true + true + false + + + MachineX86 + + + + + xsd xml-schema.xsd + xsd cxx-tree --generate-xml-schema --custom-type date --hxx-epilogue "#include \"xml-schema-custom.hxx\"" xml-schema.xsd + + + X64 + + + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreadedDLL + true + + + Level3 + true + + + xerces-c_3.lib;%(AdditionalDependencies) + $(TargetPath) + true + Console + true + true + false + + + MachineX64 + + + + + + + + + + + + + + + + + + + xsd calendar.xsd + xsd cxx-tree --generate-inline --extern-xml-schema xml-schema.xsd calendar.xsd + xml-schema.hxx;%(AdditionalInputs) + calendar.hxx;calendar.ixx;calendar.cxx;%(Outputs) + xsd calendar.xsd + xsd cxx-tree --generate-inline --extern-xml-schema xml-schema.xsd calendar.xsd + xml-schema.hxx;%(AdditionalInputs) + calendar.hxx;calendar.ixx;calendar.cxx;%(Outputs) + xsd calendar.xsd + xsd cxx-tree --generate-inline --extern-xml-schema xml-schema.xsd calendar.xsd + calendar.hxx;calendar.ixx;calendar.cxx;%(Outputs) + xsd calendar.xsd + xsd cxx-tree --generate-inline --extern-xml-schema xml-schema.xsd calendar.xsd + calendar.hxx;calendar.ixx;calendar.cxx;%(Outputs) + + + + + + \ No newline at end of file diff --git a/xsd/dist/examples/cxx/tree/custom/calendar/calendar-vc12.vcxproj.filters b/xsd/dist/examples/cxx/tree/custom/calendar/calendar-vc12.vcxproj.filters new file mode 100644 index 0000000..943a2dc --- /dev/null +++ b/xsd/dist/examples/cxx/tree/custom/calendar/calendar-vc12.vcxproj.filters @@ -0,0 +1,54 @@ + + + + + {1F206676-7422-4DD5-94C3-7B9B2EC9C2D6} + cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {8D4FED5E-FA2A-44AB-94AC-C8F302E2E1F3} + h;hpp;hxx;hm;inl;inc;xsd + + + {5c4bcf4f-9ad2-4a82-adfb-91528fe6f2e5} + ixx + + + {df5d1e63-29c7-4626-853a-34fc5c7f7443} + xsd + + + + + Source Files + + + Source Files + + + Source Files + + + + + Header Files + + + Header Files + + + Header Files + + + + + Inline Files + + + + + + Schema Files + + + \ No newline at end of file diff --git a/xsd/dist/examples/cxx/tree/custom/calendar/calendar-vc8.vcproj b/xsd/dist/examples/cxx/tree/custom/calendar/calendar-vc8.vcproj new file mode 100644 index 0000000..ea4e64d --- /dev/null +++ b/xsd/dist/examples/cxx/tree/custom/calendar/calendar-vc8.vcproj @@ -0,0 +1,456 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/xsd/dist/examples/cxx/tree/custom/calendar/calendar-vc9.vcproj b/xsd/dist/examples/cxx/tree/custom/calendar/calendar-vc9.vcproj new file mode 100644 index 0000000..6f0186e --- /dev/null +++ b/xsd/dist/examples/cxx/tree/custom/calendar/calendar-vc9.vcproj @@ -0,0 +1,453 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/xsd/dist/examples/cxx/tree/custom/calendar/calendar-xerces2-7.1.sln b/xsd/dist/examples/cxx/tree/custom/calendar/calendar-xerces2-7.1.sln deleted file mode 100644 index efc2856..0000000 --- a/xsd/dist/examples/cxx/tree/custom/calendar/calendar-xerces2-7.1.sln +++ /dev/null @@ -1,21 +0,0 @@ -Microsoft Visual Studio Solution File, Format Version 8.00 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "calendar", "calendar-xerces2-7.1.vcproj", "{2DB41EF7-0BED-45BA-A311-44D2719BFE09}" - ProjectSection(ProjectDependencies) = postProject - EndProjectSection -EndProject -Global - GlobalSection(SolutionConfiguration) = preSolution - Debug = Debug - Release = Release - EndGlobalSection - GlobalSection(ProjectConfiguration) = postSolution - {2DB41EF7-0BED-45BA-A311-44D2719BFE09}.Debug.ActiveCfg = Debug|Win32 - {2DB41EF7-0BED-45BA-A311-44D2719BFE09}.Debug.Build.0 = Debug|Win32 - {2DB41EF7-0BED-45BA-A311-44D2719BFE09}.Release.ActiveCfg = Release|Win32 - {2DB41EF7-0BED-45BA-A311-44D2719BFE09}.Release.Build.0 = Release|Win32 - EndGlobalSection - GlobalSection(ExtensibilityGlobals) = postSolution - EndGlobalSection - GlobalSection(ExtensibilityAddIns) = postSolution - EndGlobalSection -EndGlobal diff --git a/xsd/dist/examples/cxx/tree/custom/calendar/calendar-xerces2-7.1.vcproj b/xsd/dist/examples/cxx/tree/custom/calendar/calendar-xerces2-7.1.vcproj deleted file mode 100644 index 46f54ea..0000000 --- a/xsd/dist/examples/cxx/tree/custom/calendar/calendar-xerces2-7.1.vcproj +++ /dev/null @@ -1,186 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/xsd/dist/examples/cxx/tree/custom/calendar/calendar-xerces2-8.0.sln b/xsd/dist/examples/cxx/tree/custom/calendar/calendar-xerces2-8.0.sln deleted file mode 100644 index 5701549..0000000 --- a/xsd/dist/examples/cxx/tree/custom/calendar/calendar-xerces2-8.0.sln +++ /dev/null @@ -1,25 +0,0 @@ -Microsoft Visual Studio Solution File, Format Version 9.00 -# Visual Studio 2005 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "calendar", "calendar-xerces2-8.0.vcproj", "{2DB41EF7-0BED-45BA-A311-44D2719BFE09}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Win32 = Debug|Win32 - Debug|x64 = Debug|x64 - Release|Win32 = Release|Win32 - Release|x64 = Release|x64 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {2DB41EF7-0BED-45BA-A311-44D2719BFE09}.Debug|Win32.ActiveCfg = Debug|Win32 - {2DB41EF7-0BED-45BA-A311-44D2719BFE09}.Debug|Win32.Build.0 = Debug|Win32 - {2DB41EF7-0BED-45BA-A311-44D2719BFE09}.Debug|x64.ActiveCfg = Debug|x64 - {2DB41EF7-0BED-45BA-A311-44D2719BFE09}.Debug|x64.Build.0 = Debug|x64 - {2DB41EF7-0BED-45BA-A311-44D2719BFE09}.Release|Win32.ActiveCfg = Release|Win32 - {2DB41EF7-0BED-45BA-A311-44D2719BFE09}.Release|Win32.Build.0 = Release|Win32 - {2DB41EF7-0BED-45BA-A311-44D2719BFE09}.Release|x64.ActiveCfg = Release|x64 - {2DB41EF7-0BED-45BA-A311-44D2719BFE09}.Release|x64.Build.0 = Release|x64 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal diff --git a/xsd/dist/examples/cxx/tree/custom/calendar/calendar-xerces2-8.0.vcproj b/xsd/dist/examples/cxx/tree/custom/calendar/calendar-xerces2-8.0.vcproj deleted file mode 100644 index 7ba96cc..0000000 --- a/xsd/dist/examples/cxx/tree/custom/calendar/calendar-xerces2-8.0.vcproj +++ /dev/null @@ -1,456 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/xsd/dist/examples/cxx/tree/custom/calendar/calendar-xerces2-9.0.sln b/xsd/dist/examples/cxx/tree/custom/calendar/calendar-xerces2-9.0.sln deleted file mode 100644 index 982fa39..0000000 --- a/xsd/dist/examples/cxx/tree/custom/calendar/calendar-xerces2-9.0.sln +++ /dev/null @@ -1,25 +0,0 @@ -Microsoft Visual Studio Solution File, Format Version 10.00 -# Visual Studio 2008 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "calendar", "calendar-xerces2-9.0.vcproj", "{2DB41EF7-0BED-45BA-A311-44D2719BFE09}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Win32 = Debug|Win32 - Debug|x64 = Debug|x64 - Release|Win32 = Release|Win32 - Release|x64 = Release|x64 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {2DB41EF7-0BED-45BA-A311-44D2719BFE09}.Debug|Win32.ActiveCfg = Debug|Win32 - {2DB41EF7-0BED-45BA-A311-44D2719BFE09}.Debug|Win32.Build.0 = Debug|Win32 - {2DB41EF7-0BED-45BA-A311-44D2719BFE09}.Debug|x64.ActiveCfg = Debug|x64 - {2DB41EF7-0BED-45BA-A311-44D2719BFE09}.Debug|x64.Build.0 = Debug|x64 - {2DB41EF7-0BED-45BA-A311-44D2719BFE09}.Release|Win32.ActiveCfg = Release|Win32 - {2DB41EF7-0BED-45BA-A311-44D2719BFE09}.Release|Win32.Build.0 = Release|Win32 - {2DB41EF7-0BED-45BA-A311-44D2719BFE09}.Release|x64.ActiveCfg = Release|x64 - {2DB41EF7-0BED-45BA-A311-44D2719BFE09}.Release|x64.Build.0 = Release|x64 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal diff --git a/xsd/dist/examples/cxx/tree/custom/calendar/calendar-xerces2-9.0.vcproj b/xsd/dist/examples/cxx/tree/custom/calendar/calendar-xerces2-9.0.vcproj deleted file mode 100644 index a100668..0000000 --- a/xsd/dist/examples/cxx/tree/custom/calendar/calendar-xerces2-9.0.vcproj +++ /dev/null @@ -1,453 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/xsd/dist/examples/cxx/tree/custom/comments/comments-10.0.vcxproj b/xsd/dist/examples/cxx/tree/custom/comments/comments-10.0.vcxproj deleted file mode 100644 index e6ad6e5..0000000 --- a/xsd/dist/examples/cxx/tree/custom/comments/comments-10.0.vcxproj +++ /dev/null @@ -1,235 +0,0 @@ - - - - - Debug - Win32 - - - Debug - x64 - - - Release - Win32 - - - Release - x64 - - - - comments - {262E34D2-48D2-4657-9DB2-F01FFDCEA295} - comments - Win32Proj - - - - Application - MultiByte - - - Application - MultiByte - - - Application - MultiByte - - - Application - MultiByte - - - - - - - - - - - - - - - - - - - driver - driver - driver - driver - Debug\ - Debug\ - true - true - $(Platform)\$(Configuration)\ - $(Platform)\$(Configuration)\ - true - true - Release\ - Release\ - false - $(Platform)\$(Configuration)\ - $(Platform)\$(Configuration)\ - false - - - - xsd xml-schema.xsd - xsd cxx-tree --generate-xml-schema --generate-serialization --custom-type anyType=/type_base --hxx-epilogue "#include \"xml-schema-custom.hxx\"" xml-schema.xsd - - - Disabled - WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebug - true - - - Level3 - EditAndContinue - - - xerces-c_3D.lib;%(AdditionalDependencies) - $(TargetPath) - true - $(OutDir)driver.pdb - Console - false - - - MachineX86 - - - - - xsd xml-schema.xsd - xsd cxx-tree --generate-xml-schema --generate-serialization --custom-type anyType=/type_base --hxx-epilogue "#include \"xml-schema-custom.hxx\"" xml-schema.xsd - - - X64 - - - Disabled - WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebug - true - - - Level3 - ProgramDatabase - - - xerces-c_3D.lib;%(AdditionalDependencies) - $(TargetPath) - true - $(OutDir)driver.pdb - Console - false - - - MachineX64 - - - - - xsd xml-schema.xsd - xsd cxx-tree --generate-xml-schema --generate-serialization --custom-type anyType=/type_base --hxx-epilogue "#include \"xml-schema-custom.hxx\"" xml-schema.xsd - - - WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - MultiThreaded - true - - - Level3 - ProgramDatabase - - - xerces-c_3.lib;%(AdditionalDependencies) - $(TargetPath) - true - Console - true - true - false - - - MachineX86 - - - - - xsd xml-schema.xsd - xsd cxx-tree --generate-xml-schema --generate-serialization --custom-type anyType=/type_base --hxx-epilogue "#include \"xml-schema-custom.hxx\"" xml-schema.xsd - - - X64 - - - WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - MultiThreaded - true - - - Level3 - ProgramDatabase - - - xerces-c_3.lib;%(AdditionalDependencies) - $(TargetPath) - true - Console - true - true - false - - - MachineX64 - - - - - - - - - - - - - - - - - - - - - xsd people.xsd - xsd cxx-tree --generate-inline --generate-serialization --extern-xml-schema xml-schema.xsd people.xsd - xml-schema.hxx;%(AdditionalInputs) - people.hxx;people.ixx;people.cxx;%(Outputs) - xsd people.xsd - xsd cxx-tree --generate-inline --generate-serialization --extern-xml-schema xml-schema.xsd people.xsd - xml-schema.hxx;%(AdditionalInputs) - people.hxx;people.ixx;people.cxx;%(Outputs) - xsd people.xsd - xsd cxx-tree --generate-inline --generate-serialization --extern-xml-schema xml-schema.xsd people.xsd - people.hxx;people.ixx;people.cxx;%(Outputs) - xsd people.xsd - xsd cxx-tree --generate-inline --generate-serialization --extern-xml-schema xml-schema.xsd people.xsd - people.hxx;people.ixx;people.cxx;%(Outputs) - - - - - - \ No newline at end of file diff --git a/xsd/dist/examples/cxx/tree/custom/comments/comments-10.0.vcxproj.filters b/xsd/dist/examples/cxx/tree/custom/comments/comments-10.0.vcxproj.filters deleted file mode 100644 index 934cabe..0000000 --- a/xsd/dist/examples/cxx/tree/custom/comments/comments-10.0.vcxproj.filters +++ /dev/null @@ -1,60 +0,0 @@ - - - - - {97CD019E-CFDE-4879-AB8C-97DB3B526F92} - cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx - - - {8E3E001B-1C7C-4383-A18D-B83AA525773F} - h;hpp;hxx;hm;inl;inc;xsd - - - {07ed52c5-d0a0-4659-9a65-2ee052612d2c} - ixx - - - {515a4811-9a34-429e-9c6d-3b771934d8db} - xsd - - - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - - - Inline Files - - - - - - Schema Files - - - \ No newline at end of file diff --git a/xsd/dist/examples/cxx/tree/custom/comments/comments-7.1.vcproj b/xsd/dist/examples/cxx/tree/custom/comments/comments-7.1.vcproj deleted file mode 100644 index 6d282c5..0000000 --- a/xsd/dist/examples/cxx/tree/custom/comments/comments-7.1.vcproj +++ /dev/null @@ -1,192 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/xsd/dist/examples/cxx/tree/custom/comments/comments-8.0.vcproj b/xsd/dist/examples/cxx/tree/custom/comments/comments-8.0.vcproj deleted file mode 100644 index 1ddca35..0000000 --- a/xsd/dist/examples/cxx/tree/custom/comments/comments-8.0.vcproj +++ /dev/null @@ -1,464 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/xsd/dist/examples/cxx/tree/custom/comments/comments-9.0.vcproj b/xsd/dist/examples/cxx/tree/custom/comments/comments-9.0.vcproj deleted file mode 100644 index 54d1925..0000000 --- a/xsd/dist/examples/cxx/tree/custom/comments/comments-9.0.vcproj +++ /dev/null @@ -1,461 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/xsd/dist/examples/cxx/tree/custom/comments/comments-vc10.vcxproj b/xsd/dist/examples/cxx/tree/custom/comments/comments-vc10.vcxproj new file mode 100644 index 0000000..3e7e6b4 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/custom/comments/comments-vc10.vcxproj @@ -0,0 +1,231 @@ + + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + comments + {262E34D2-48D2-4657-9DB2-F01FFDCEA295} + comments + Win32Proj + + + + Application + MultiByte + + + Application + MultiByte + + + Application + MultiByte + + + Application + MultiByte + + + + + + + + + + + + + + + + + + + driver + driver + driver + driver + Debug\ + Debug\ + true + true + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + true + true + Release\ + Release\ + false + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + false + + + + xsd xml-schema.xsd + xsd cxx-tree --generate-xml-schema --generate-serialization --custom-type anyType=/type_base --hxx-epilogue "#include \"xml-schema-custom.hxx\"" xml-schema.xsd + + + Disabled + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebugDLL + true + + + Level3 + + + xerces-c_3D.lib;%(AdditionalDependencies) + $(TargetPath) + true + $(OutDir)driver.pdb + Console + false + + + MachineX86 + + + + + xsd xml-schema.xsd + xsd cxx-tree --generate-xml-schema --generate-serialization --custom-type anyType=/type_base --hxx-epilogue "#include \"xml-schema-custom.hxx\"" xml-schema.xsd + + + X64 + + + Disabled + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebugDLL + true + + + Level3 + + + xerces-c_3D.lib;%(AdditionalDependencies) + $(TargetPath) + true + $(OutDir)driver.pdb + Console + false + + + MachineX64 + + + + + xsd xml-schema.xsd + xsd cxx-tree --generate-xml-schema --generate-serialization --custom-type anyType=/type_base --hxx-epilogue "#include \"xml-schema-custom.hxx\"" xml-schema.xsd + + + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreadedDLL + true + + + Level3 + + + xerces-c_3.lib;%(AdditionalDependencies) + $(TargetPath) + true + Console + true + true + false + + + MachineX86 + + + + + xsd xml-schema.xsd + xsd cxx-tree --generate-xml-schema --generate-serialization --custom-type anyType=/type_base --hxx-epilogue "#include \"xml-schema-custom.hxx\"" xml-schema.xsd + + + X64 + + + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreadedDLL + true + + + Level3 + + + xerces-c_3.lib;%(AdditionalDependencies) + $(TargetPath) + true + Console + true + true + false + + + MachineX64 + + + + + + + + + + + + + + + + + + + + + xsd people.xsd + xsd cxx-tree --generate-inline --generate-serialization --extern-xml-schema xml-schema.xsd people.xsd + xml-schema.hxx;%(AdditionalInputs) + people.hxx;people.ixx;people.cxx;%(Outputs) + xsd people.xsd + xsd cxx-tree --generate-inline --generate-serialization --extern-xml-schema xml-schema.xsd people.xsd + xml-schema.hxx;%(AdditionalInputs) + people.hxx;people.ixx;people.cxx;%(Outputs) + xsd people.xsd + xsd cxx-tree --generate-inline --generate-serialization --extern-xml-schema xml-schema.xsd people.xsd + people.hxx;people.ixx;people.cxx;%(Outputs) + xsd people.xsd + xsd cxx-tree --generate-inline --generate-serialization --extern-xml-schema xml-schema.xsd people.xsd + people.hxx;people.ixx;people.cxx;%(Outputs) + + + + + + \ No newline at end of file diff --git a/xsd/dist/examples/cxx/tree/custom/comments/comments-vc10.vcxproj.filters b/xsd/dist/examples/cxx/tree/custom/comments/comments-vc10.vcxproj.filters new file mode 100644 index 0000000..934cabe --- /dev/null +++ b/xsd/dist/examples/cxx/tree/custom/comments/comments-vc10.vcxproj.filters @@ -0,0 +1,60 @@ + + + + + {97CD019E-CFDE-4879-AB8C-97DB3B526F92} + cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {8E3E001B-1C7C-4383-A18D-B83AA525773F} + h;hpp;hxx;hm;inl;inc;xsd + + + {07ed52c5-d0a0-4659-9a65-2ee052612d2c} + ixx + + + {515a4811-9a34-429e-9c6d-3b771934d8db} + xsd + + + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + + + Inline Files + + + + + + Schema Files + + + \ No newline at end of file diff --git a/xsd/dist/examples/cxx/tree/custom/comments/comments-vc11.vcxproj b/xsd/dist/examples/cxx/tree/custom/comments/comments-vc11.vcxproj new file mode 100644 index 0000000..b96f28e --- /dev/null +++ b/xsd/dist/examples/cxx/tree/custom/comments/comments-vc11.vcxproj @@ -0,0 +1,235 @@ + + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + comments + {262E34D2-48D2-4657-9DB2-F01FFDCEA295} + comments + Win32Proj + + + + Application + v110 + MultiByte + + + Application + v110 + MultiByte + + + Application + v110 + MultiByte + + + Application + v110 + MultiByte + + + + + + + + + + + + + + + + + + + driver + driver + driver + driver + Debug\ + Debug\ + true + true + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + true + true + Release\ + Release\ + false + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + false + + + + xsd xml-schema.xsd + xsd cxx-tree --generate-xml-schema --generate-serialization --custom-type anyType=/type_base --hxx-epilogue "#include \"xml-schema-custom.hxx\"" xml-schema.xsd + + + Disabled + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebugDLL + true + + + Level3 + + + xerces-c_3D.lib;%(AdditionalDependencies) + $(TargetPath) + true + $(OutDir)driver.pdb + Console + false + + + MachineX86 + + + + + xsd xml-schema.xsd + xsd cxx-tree --generate-xml-schema --generate-serialization --custom-type anyType=/type_base --hxx-epilogue "#include \"xml-schema-custom.hxx\"" xml-schema.xsd + + + X64 + + + Disabled + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebugDLL + true + + + Level3 + + + xerces-c_3D.lib;%(AdditionalDependencies) + $(TargetPath) + true + $(OutDir)driver.pdb + Console + false + + + MachineX64 + + + + + xsd xml-schema.xsd + xsd cxx-tree --generate-xml-schema --generate-serialization --custom-type anyType=/type_base --hxx-epilogue "#include \"xml-schema-custom.hxx\"" xml-schema.xsd + + + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreadedDLL + true + + + Level3 + + + xerces-c_3.lib;%(AdditionalDependencies) + $(TargetPath) + true + Console + true + true + false + + + MachineX86 + + + + + xsd xml-schema.xsd + xsd cxx-tree --generate-xml-schema --generate-serialization --custom-type anyType=/type_base --hxx-epilogue "#include \"xml-schema-custom.hxx\"" xml-schema.xsd + + + X64 + + + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreadedDLL + true + + + Level3 + + + xerces-c_3.lib;%(AdditionalDependencies) + $(TargetPath) + true + Console + true + true + false + + + MachineX64 + + + + + + + + + + + + + + + + + + + + + xsd people.xsd + xsd cxx-tree --generate-inline --generate-serialization --extern-xml-schema xml-schema.xsd people.xsd + xml-schema.hxx;%(AdditionalInputs) + people.hxx;people.ixx;people.cxx;%(Outputs) + xsd people.xsd + xsd cxx-tree --generate-inline --generate-serialization --extern-xml-schema xml-schema.xsd people.xsd + xml-schema.hxx;%(AdditionalInputs) + people.hxx;people.ixx;people.cxx;%(Outputs) + xsd people.xsd + xsd cxx-tree --generate-inline --generate-serialization --extern-xml-schema xml-schema.xsd people.xsd + people.hxx;people.ixx;people.cxx;%(Outputs) + xsd people.xsd + xsd cxx-tree --generate-inline --generate-serialization --extern-xml-schema xml-schema.xsd people.xsd + people.hxx;people.ixx;people.cxx;%(Outputs) + + + + + + \ No newline at end of file diff --git a/xsd/dist/examples/cxx/tree/custom/comments/comments-vc11.vcxproj.filters b/xsd/dist/examples/cxx/tree/custom/comments/comments-vc11.vcxproj.filters new file mode 100644 index 0000000..934cabe --- /dev/null +++ b/xsd/dist/examples/cxx/tree/custom/comments/comments-vc11.vcxproj.filters @@ -0,0 +1,60 @@ + + + + + {97CD019E-CFDE-4879-AB8C-97DB3B526F92} + cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {8E3E001B-1C7C-4383-A18D-B83AA525773F} + h;hpp;hxx;hm;inl;inc;xsd + + + {07ed52c5-d0a0-4659-9a65-2ee052612d2c} + ixx + + + {515a4811-9a34-429e-9c6d-3b771934d8db} + xsd + + + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + + + Inline Files + + + + + + Schema Files + + + \ No newline at end of file diff --git a/xsd/dist/examples/cxx/tree/custom/comments/comments-vc12.vcxproj b/xsd/dist/examples/cxx/tree/custom/comments/comments-vc12.vcxproj new file mode 100644 index 0000000..e237ff8 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/custom/comments/comments-vc12.vcxproj @@ -0,0 +1,239 @@ + + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + comments + {262E34D2-48D2-4657-9DB2-F01FFDCEA295} + comments + Win32Proj + + + + Application + v120 + MultiByte + + + Application + v120 + MultiByte + + + Application + v120 + MultiByte + + + Application + v120 + MultiByte + + + + + + + + + + + + + + + + + + + driver + driver + driver + driver + Debug\ + Debug\ + true + true + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + true + true + Release\ + Release\ + false + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + false + + + + xsd xml-schema.xsd + xsd cxx-tree --generate-xml-schema --generate-serialization --custom-type anyType=/type_base --hxx-epilogue "#include \"xml-schema-custom.hxx\"" xml-schema.xsd + + + Disabled + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebugDLL + true + + + Level3 + true + + + xerces-c_3D.lib;%(AdditionalDependencies) + $(TargetPath) + true + $(OutDir)driver.pdb + Console + false + + + MachineX86 + + + + + xsd xml-schema.xsd + xsd cxx-tree --generate-xml-schema --generate-serialization --custom-type anyType=/type_base --hxx-epilogue "#include \"xml-schema-custom.hxx\"" xml-schema.xsd + + + X64 + + + Disabled + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebugDLL + true + + + Level3 + true + + + xerces-c_3D.lib;%(AdditionalDependencies) + $(TargetPath) + true + $(OutDir)driver.pdb + Console + false + + + MachineX64 + + + + + xsd xml-schema.xsd + xsd cxx-tree --generate-xml-schema --generate-serialization --custom-type anyType=/type_base --hxx-epilogue "#include \"xml-schema-custom.hxx\"" xml-schema.xsd + + + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreadedDLL + true + + + Level3 + true + + + xerces-c_3.lib;%(AdditionalDependencies) + $(TargetPath) + true + Console + true + true + false + + + MachineX86 + + + + + xsd xml-schema.xsd + xsd cxx-tree --generate-xml-schema --generate-serialization --custom-type anyType=/type_base --hxx-epilogue "#include \"xml-schema-custom.hxx\"" xml-schema.xsd + + + X64 + + + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreadedDLL + true + + + Level3 + true + + + xerces-c_3.lib;%(AdditionalDependencies) + $(TargetPath) + true + Console + true + true + false + + + MachineX64 + + + + + + + + + + + + + + + + + + + + + xsd people.xsd + xsd cxx-tree --generate-inline --generate-serialization --extern-xml-schema xml-schema.xsd people.xsd + xml-schema.hxx;%(AdditionalInputs) + people.hxx;people.ixx;people.cxx;%(Outputs) + xsd people.xsd + xsd cxx-tree --generate-inline --generate-serialization --extern-xml-schema xml-schema.xsd people.xsd + xml-schema.hxx;%(AdditionalInputs) + people.hxx;people.ixx;people.cxx;%(Outputs) + xsd people.xsd + xsd cxx-tree --generate-inline --generate-serialization --extern-xml-schema xml-schema.xsd people.xsd + people.hxx;people.ixx;people.cxx;%(Outputs) + xsd people.xsd + xsd cxx-tree --generate-inline --generate-serialization --extern-xml-schema xml-schema.xsd people.xsd + people.hxx;people.ixx;people.cxx;%(Outputs) + + + + + + \ No newline at end of file diff --git a/xsd/dist/examples/cxx/tree/custom/comments/comments-vc12.vcxproj.filters b/xsd/dist/examples/cxx/tree/custom/comments/comments-vc12.vcxproj.filters new file mode 100644 index 0000000..934cabe --- /dev/null +++ b/xsd/dist/examples/cxx/tree/custom/comments/comments-vc12.vcxproj.filters @@ -0,0 +1,60 @@ + + + + + {97CD019E-CFDE-4879-AB8C-97DB3B526F92} + cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {8E3E001B-1C7C-4383-A18D-B83AA525773F} + h;hpp;hxx;hm;inl;inc;xsd + + + {07ed52c5-d0a0-4659-9a65-2ee052612d2c} + ixx + + + {515a4811-9a34-429e-9c6d-3b771934d8db} + xsd + + + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + + + Inline Files + + + + + + Schema Files + + + \ No newline at end of file diff --git a/xsd/dist/examples/cxx/tree/custom/comments/comments-vc8.vcproj b/xsd/dist/examples/cxx/tree/custom/comments/comments-vc8.vcproj new file mode 100644 index 0000000..2093acf --- /dev/null +++ b/xsd/dist/examples/cxx/tree/custom/comments/comments-vc8.vcproj @@ -0,0 +1,464 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/xsd/dist/examples/cxx/tree/custom/comments/comments-vc9.vcproj b/xsd/dist/examples/cxx/tree/custom/comments/comments-vc9.vcproj new file mode 100644 index 0000000..43281c6 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/custom/comments/comments-vc9.vcproj @@ -0,0 +1,461 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/xsd/dist/examples/cxx/tree/custom/comments/comments-xerces2-7.1.vcproj b/xsd/dist/examples/cxx/tree/custom/comments/comments-xerces2-7.1.vcproj deleted file mode 100644 index 390f2d9..0000000 --- a/xsd/dist/examples/cxx/tree/custom/comments/comments-xerces2-7.1.vcproj +++ /dev/null @@ -1,192 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/xsd/dist/examples/cxx/tree/custom/comments/comments-xerces2-8.0.vcproj b/xsd/dist/examples/cxx/tree/custom/comments/comments-xerces2-8.0.vcproj deleted file mode 100644 index 137eff8..0000000 --- a/xsd/dist/examples/cxx/tree/custom/comments/comments-xerces2-8.0.vcproj +++ /dev/null @@ -1,464 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/xsd/dist/examples/cxx/tree/custom/comments/comments-xerces2-9.0.vcproj b/xsd/dist/examples/cxx/tree/custom/comments/comments-xerces2-9.0.vcproj deleted file mode 100644 index e1f238f..0000000 --- a/xsd/dist/examples/cxx/tree/custom/comments/comments-xerces2-9.0.vcproj +++ /dev/null @@ -1,461 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/xsd/dist/examples/cxx/tree/custom/comments/makefile b/xsd/dist/examples/cxx/tree/custom/comments/makefile index 963f262..4c231c6 100644 --- a/xsd/dist/examples/cxx/tree/custom/comments/makefile +++ b/xsd/dist/examples/cxx/tree/custom/comments/makefile @@ -22,9 +22,15 @@ people.cxx people.ixx people.hxx: people.xsd # Generate header for XML Schema namespace. # XML_SCHEMA_XSDFLAGS := --generate-xml-schema --generate-serialization \ ---custom-type anyType=/type_base \ --hxx-epilogue '\#include "xml-schema-custom.hxx"' +ifneq ($(shell uname -o),Msys) +XML_SCHEMA_XSDFLAGS += --custom-type anyType=/type_base +else +# Prevent MSYS from converting / to Windows path. +XML_SCHEMA_XSDFLAGS += --custom-type anyType=//type_base +endif + xml-schema.hxx: $(XSD) cxx-tree $(XML_SCHEMA_XSDFLAGS) xml-schema.xsd diff --git a/xsd/dist/examples/cxx/tree/custom/contacts/contacts-10.0.vcxproj b/xsd/dist/examples/cxx/tree/custom/contacts/contacts-10.0.vcxproj deleted file mode 100644 index 6d02858..0000000 --- a/xsd/dist/examples/cxx/tree/custom/contacts/contacts-10.0.vcxproj +++ /dev/null @@ -1,212 +0,0 @@ - - - - - Debug - Win32 - - - Debug - x64 - - - Release - Win32 - - - Release - x64 - - - - contacts - {9FB807C1-53EE-4E71-812F-89E8BE6FCB43} - contacts - Win32Proj - - - - Application - MultiByte - - - Application - MultiByte - - - Application - MultiByte - - - Application - MultiByte - - - - - - - - - - - - - - - - - - - driver - driver - driver - driver - Debug\ - Debug\ - true - $(Platform)\$(Configuration)\ - $(Platform)\$(Configuration)\ - true - Release\ - Release\ - false - $(Platform)\$(Configuration)\ - $(Platform)\$(Configuration)\ - false - - - - Disabled - WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebug - true - - - Level3 - EditAndContinue - - - xerces-c_3D.lib;%(AdditionalDependencies) - $(TargetPath) - true - $(OutDir)driver.pdb - Console - false - - - MachineX86 - - - - - X64 - - - Disabled - WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebug - true - - - Level3 - ProgramDatabase - - - xerces-c_3D.lib;%(AdditionalDependencies) - $(TargetPath) - true - $(OutDir)driver.pdb - Console - false - - - MachineX64 - - - - - WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - MultiThreaded - true - - - Level3 - ProgramDatabase - - - xerces-c_3.lib;%(AdditionalDependencies) - $(TargetPath) - true - Console - true - true - false - - - MachineX86 - - - - - X64 - - - WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - MultiThreaded - true - - - Level3 - ProgramDatabase - - - xerces-c_3.lib;%(AdditionalDependencies) - $(TargetPath) - true - Console - true - true - false - - - MachineX64 - - - - - - - - - - - - - - - - - - xsd contacts.xsd - xsd cxx-tree --generate-inline --custom-type contact=/contact_base --hxx-epilogue "#include \"contacts-custom.hxx\"" contacts.xsd - contacts.hxx;contacts.ixx;contacts.cxx;%(Outputs) - xsd contacts.xsd - xsd cxx-tree --generate-inline --custom-type contact=/contact_base --hxx-epilogue "#include \"contacts-custom.hxx\"" contacts.xsd - contacts.hxx;contacts.ixx;contacts.cxx;%(Outputs) - xsd contacts.xsd - xsd cxx-tree --generate-inline --custom-type contact=/contact_base --hxx-epilogue "#include \"contacts-custom.hxx\"" contacts.xsd - contacts.hxx;contacts.ixx;contacts.cxx;%(Outputs) - xsd contacts.xsd - xsd cxx-tree --generate-inline --custom-type contact=/contact_base --hxx-epilogue "#include \"contacts-custom.hxx\"" contacts.xsd - contacts.hxx;contacts.ixx;contacts.cxx;%(Outputs) - - - - - - \ No newline at end of file diff --git a/xsd/dist/examples/cxx/tree/custom/contacts/contacts-10.0.vcxproj.filters b/xsd/dist/examples/cxx/tree/custom/contacts/contacts-10.0.vcxproj.filters deleted file mode 100644 index 4435f19..0000000 --- a/xsd/dist/examples/cxx/tree/custom/contacts/contacts-10.0.vcxproj.filters +++ /dev/null @@ -1,51 +0,0 @@ - - - - - {2E28B5D5-6E1D-434A-BFE2-2162751B243B} - cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx - - - {92523A51-9884-450F-A581-5618AB14A9E3} - h;hpp;hxx;hm;inl;inc;xsd - - - {63214694-d62f-4e29-965b-bc5ecd1ac8b8} - ixx - - - {8b44177f-b842-4c6c-bfb8-c25e433bc0a3} - xsd - - - - - Source Files - - - Source Files - - - Source Files - - - - - Header Files - - - Header Files - - - - - Inline Files - - - - - - Schema Files - - - \ No newline at end of file diff --git a/xsd/dist/examples/cxx/tree/custom/contacts/contacts-7.1.vcproj b/xsd/dist/examples/cxx/tree/custom/contacts/contacts-7.1.vcproj deleted file mode 100644 index 7b2fc6a..0000000 --- a/xsd/dist/examples/cxx/tree/custom/contacts/contacts-7.1.vcproj +++ /dev/null @@ -1,177 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/xsd/dist/examples/cxx/tree/custom/contacts/contacts-8.0.vcproj b/xsd/dist/examples/cxx/tree/custom/contacts/contacts-8.0.vcproj deleted file mode 100644 index e98d06f..0000000 --- a/xsd/dist/examples/cxx/tree/custom/contacts/contacts-8.0.vcproj +++ /dev/null @@ -1,440 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/xsd/dist/examples/cxx/tree/custom/contacts/contacts-9.0.vcproj b/xsd/dist/examples/cxx/tree/custom/contacts/contacts-9.0.vcproj deleted file mode 100644 index 0d1c90f..0000000 --- a/xsd/dist/examples/cxx/tree/custom/contacts/contacts-9.0.vcproj +++ /dev/null @@ -1,437 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/xsd/dist/examples/cxx/tree/custom/contacts/contacts-vc10.vcxproj b/xsd/dist/examples/cxx/tree/custom/contacts/contacts-vc10.vcxproj new file mode 100644 index 0000000..e43ef84 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/custom/contacts/contacts-vc10.vcxproj @@ -0,0 +1,208 @@ + + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + contacts + {9FB807C1-53EE-4E71-812F-89E8BE6FCB43} + contacts + Win32Proj + + + + Application + MultiByte + + + Application + MultiByte + + + Application + MultiByte + + + Application + MultiByte + + + + + + + + + + + + + + + + + + + driver + driver + driver + driver + Debug\ + Debug\ + true + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + true + Release\ + Release\ + false + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + false + + + + Disabled + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebugDLL + true + + + Level3 + + + xerces-c_3D.lib;%(AdditionalDependencies) + $(TargetPath) + true + $(OutDir)driver.pdb + Console + false + + + MachineX86 + + + + + X64 + + + Disabled + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebugDLL + true + + + Level3 + + + xerces-c_3D.lib;%(AdditionalDependencies) + $(TargetPath) + true + $(OutDir)driver.pdb + Console + false + + + MachineX64 + + + + + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreadedDLL + true + + + Level3 + + + xerces-c_3.lib;%(AdditionalDependencies) + $(TargetPath) + true + Console + true + true + false + + + MachineX86 + + + + + X64 + + + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreadedDLL + true + + + Level3 + + + xerces-c_3.lib;%(AdditionalDependencies) + $(TargetPath) + true + Console + true + true + false + + + MachineX64 + + + + + + + + + + + + + + + + + + xsd contacts.xsd + xsd cxx-tree --generate-inline --custom-type contact=/contact_base --hxx-epilogue "#include \"contacts-custom.hxx\"" contacts.xsd + contacts.hxx;contacts.ixx;contacts.cxx;%(Outputs) + xsd contacts.xsd + xsd cxx-tree --generate-inline --custom-type contact=/contact_base --hxx-epilogue "#include \"contacts-custom.hxx\"" contacts.xsd + contacts.hxx;contacts.ixx;contacts.cxx;%(Outputs) + xsd contacts.xsd + xsd cxx-tree --generate-inline --custom-type contact=/contact_base --hxx-epilogue "#include \"contacts-custom.hxx\"" contacts.xsd + contacts.hxx;contacts.ixx;contacts.cxx;%(Outputs) + xsd contacts.xsd + xsd cxx-tree --generate-inline --custom-type contact=/contact_base --hxx-epilogue "#include \"contacts-custom.hxx\"" contacts.xsd + contacts.hxx;contacts.ixx;contacts.cxx;%(Outputs) + + + + + + \ No newline at end of file diff --git a/xsd/dist/examples/cxx/tree/custom/contacts/contacts-vc10.vcxproj.filters b/xsd/dist/examples/cxx/tree/custom/contacts/contacts-vc10.vcxproj.filters new file mode 100644 index 0000000..4435f19 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/custom/contacts/contacts-vc10.vcxproj.filters @@ -0,0 +1,51 @@ + + + + + {2E28B5D5-6E1D-434A-BFE2-2162751B243B} + cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {92523A51-9884-450F-A581-5618AB14A9E3} + h;hpp;hxx;hm;inl;inc;xsd + + + {63214694-d62f-4e29-965b-bc5ecd1ac8b8} + ixx + + + {8b44177f-b842-4c6c-bfb8-c25e433bc0a3} + xsd + + + + + Source Files + + + Source Files + + + Source Files + + + + + Header Files + + + Header Files + + + + + Inline Files + + + + + + Schema Files + + + \ No newline at end of file diff --git a/xsd/dist/examples/cxx/tree/custom/contacts/contacts-vc11.vcxproj b/xsd/dist/examples/cxx/tree/custom/contacts/contacts-vc11.vcxproj new file mode 100644 index 0000000..0059939 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/custom/contacts/contacts-vc11.vcxproj @@ -0,0 +1,212 @@ + + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + contacts + {9FB807C1-53EE-4E71-812F-89E8BE6FCB43} + contacts + Win32Proj + + + + Application + v110 + MultiByte + + + Application + v110 + MultiByte + + + Application + v110 + MultiByte + + + Application + v110 + MultiByte + + + + + + + + + + + + + + + + + + + driver + driver + driver + driver + Debug\ + Debug\ + true + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + true + Release\ + Release\ + false + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + false + + + + Disabled + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebugDLL + true + + + Level3 + + + xerces-c_3D.lib;%(AdditionalDependencies) + $(TargetPath) + true + $(OutDir)driver.pdb + Console + false + + + MachineX86 + + + + + X64 + + + Disabled + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebugDLL + true + + + Level3 + + + xerces-c_3D.lib;%(AdditionalDependencies) + $(TargetPath) + true + $(OutDir)driver.pdb + Console + false + + + MachineX64 + + + + + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreadedDLL + true + + + Level3 + + + xerces-c_3.lib;%(AdditionalDependencies) + $(TargetPath) + true + Console + true + true + false + + + MachineX86 + + + + + X64 + + + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreadedDLL + true + + + Level3 + + + xerces-c_3.lib;%(AdditionalDependencies) + $(TargetPath) + true + Console + true + true + false + + + MachineX64 + + + + + + + + + + + + + + + + + + xsd contacts.xsd + xsd cxx-tree --generate-inline --custom-type contact=/contact_base --hxx-epilogue "#include \"contacts-custom.hxx\"" contacts.xsd + contacts.hxx;contacts.ixx;contacts.cxx;%(Outputs) + xsd contacts.xsd + xsd cxx-tree --generate-inline --custom-type contact=/contact_base --hxx-epilogue "#include \"contacts-custom.hxx\"" contacts.xsd + contacts.hxx;contacts.ixx;contacts.cxx;%(Outputs) + xsd contacts.xsd + xsd cxx-tree --generate-inline --custom-type contact=/contact_base --hxx-epilogue "#include \"contacts-custom.hxx\"" contacts.xsd + contacts.hxx;contacts.ixx;contacts.cxx;%(Outputs) + xsd contacts.xsd + xsd cxx-tree --generate-inline --custom-type contact=/contact_base --hxx-epilogue "#include \"contacts-custom.hxx\"" contacts.xsd + contacts.hxx;contacts.ixx;contacts.cxx;%(Outputs) + + + + + + \ No newline at end of file diff --git a/xsd/dist/examples/cxx/tree/custom/contacts/contacts-vc11.vcxproj.filters b/xsd/dist/examples/cxx/tree/custom/contacts/contacts-vc11.vcxproj.filters new file mode 100644 index 0000000..4435f19 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/custom/contacts/contacts-vc11.vcxproj.filters @@ -0,0 +1,51 @@ + + + + + {2E28B5D5-6E1D-434A-BFE2-2162751B243B} + cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {92523A51-9884-450F-A581-5618AB14A9E3} + h;hpp;hxx;hm;inl;inc;xsd + + + {63214694-d62f-4e29-965b-bc5ecd1ac8b8} + ixx + + + {8b44177f-b842-4c6c-bfb8-c25e433bc0a3} + xsd + + + + + Source Files + + + Source Files + + + Source Files + + + + + Header Files + + + Header Files + + + + + Inline Files + + + + + + Schema Files + + + \ No newline at end of file diff --git a/xsd/dist/examples/cxx/tree/custom/contacts/contacts-vc12.vcxproj b/xsd/dist/examples/cxx/tree/custom/contacts/contacts-vc12.vcxproj new file mode 100644 index 0000000..f955bda --- /dev/null +++ b/xsd/dist/examples/cxx/tree/custom/contacts/contacts-vc12.vcxproj @@ -0,0 +1,216 @@ + + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + contacts + {9FB807C1-53EE-4E71-812F-89E8BE6FCB43} + contacts + Win32Proj + + + + Application + v120 + MultiByte + + + Application + v120 + MultiByte + + + Application + v120 + MultiByte + + + Application + v120 + MultiByte + + + + + + + + + + + + + + + + + + + driver + driver + driver + driver + Debug\ + Debug\ + true + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + true + Release\ + Release\ + false + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + false + + + + Disabled + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebugDLL + true + + + Level3 + true + + + xerces-c_3D.lib;%(AdditionalDependencies) + $(TargetPath) + true + $(OutDir)driver.pdb + Console + false + + + MachineX86 + + + + + X64 + + + Disabled + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebugDLL + true + + + Level3 + true + + + xerces-c_3D.lib;%(AdditionalDependencies) + $(TargetPath) + true + $(OutDir)driver.pdb + Console + false + + + MachineX64 + + + + + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreadedDLL + true + + + Level3 + true + + + xerces-c_3.lib;%(AdditionalDependencies) + $(TargetPath) + true + Console + true + true + false + + + MachineX86 + + + + + X64 + + + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreadedDLL + true + + + Level3 + true + + + xerces-c_3.lib;%(AdditionalDependencies) + $(TargetPath) + true + Console + true + true + false + + + MachineX64 + + + + + + + + + + + + + + + + + + xsd contacts.xsd + xsd cxx-tree --generate-inline --custom-type contact=/contact_base --hxx-epilogue "#include \"contacts-custom.hxx\"" contacts.xsd + contacts.hxx;contacts.ixx;contacts.cxx;%(Outputs) + xsd contacts.xsd + xsd cxx-tree --generate-inline --custom-type contact=/contact_base --hxx-epilogue "#include \"contacts-custom.hxx\"" contacts.xsd + contacts.hxx;contacts.ixx;contacts.cxx;%(Outputs) + xsd contacts.xsd + xsd cxx-tree --generate-inline --custom-type contact=/contact_base --hxx-epilogue "#include \"contacts-custom.hxx\"" contacts.xsd + contacts.hxx;contacts.ixx;contacts.cxx;%(Outputs) + xsd contacts.xsd + xsd cxx-tree --generate-inline --custom-type contact=/contact_base --hxx-epilogue "#include \"contacts-custom.hxx\"" contacts.xsd + contacts.hxx;contacts.ixx;contacts.cxx;%(Outputs) + + + + + + \ No newline at end of file diff --git a/xsd/dist/examples/cxx/tree/custom/contacts/contacts-vc12.vcxproj.filters b/xsd/dist/examples/cxx/tree/custom/contacts/contacts-vc12.vcxproj.filters new file mode 100644 index 0000000..4435f19 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/custom/contacts/contacts-vc12.vcxproj.filters @@ -0,0 +1,51 @@ + + + + + {2E28B5D5-6E1D-434A-BFE2-2162751B243B} + cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {92523A51-9884-450F-A581-5618AB14A9E3} + h;hpp;hxx;hm;inl;inc;xsd + + + {63214694-d62f-4e29-965b-bc5ecd1ac8b8} + ixx + + + {8b44177f-b842-4c6c-bfb8-c25e433bc0a3} + xsd + + + + + Source Files + + + Source Files + + + Source Files + + + + + Header Files + + + Header Files + + + + + Inline Files + + + + + + Schema Files + + + \ No newline at end of file diff --git a/xsd/dist/examples/cxx/tree/custom/contacts/contacts-vc8.vcproj b/xsd/dist/examples/cxx/tree/custom/contacts/contacts-vc8.vcproj new file mode 100644 index 0000000..a7985ee --- /dev/null +++ b/xsd/dist/examples/cxx/tree/custom/contacts/contacts-vc8.vcproj @@ -0,0 +1,440 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/xsd/dist/examples/cxx/tree/custom/contacts/contacts-vc9.vcproj b/xsd/dist/examples/cxx/tree/custom/contacts/contacts-vc9.vcproj new file mode 100644 index 0000000..6305933 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/custom/contacts/contacts-vc9.vcproj @@ -0,0 +1,437 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/xsd/dist/examples/cxx/tree/custom/contacts/contacts-xerces2-7.1.vcproj b/xsd/dist/examples/cxx/tree/custom/contacts/contacts-xerces2-7.1.vcproj deleted file mode 100644 index 315cdaa..0000000 --- a/xsd/dist/examples/cxx/tree/custom/contacts/contacts-xerces2-7.1.vcproj +++ /dev/null @@ -1,177 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/xsd/dist/examples/cxx/tree/custom/contacts/contacts-xerces2-8.0.vcproj b/xsd/dist/examples/cxx/tree/custom/contacts/contacts-xerces2-8.0.vcproj deleted file mode 100644 index 08fe9cb..0000000 --- a/xsd/dist/examples/cxx/tree/custom/contacts/contacts-xerces2-8.0.vcproj +++ /dev/null @@ -1,440 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/xsd/dist/examples/cxx/tree/custom/contacts/contacts-xerces2-9.0.vcproj b/xsd/dist/examples/cxx/tree/custom/contacts/contacts-xerces2-9.0.vcproj deleted file mode 100644 index 08d30cc..0000000 --- a/xsd/dist/examples/cxx/tree/custom/contacts/contacts-xerces2-9.0.vcproj +++ /dev/null @@ -1,437 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/xsd/dist/examples/cxx/tree/custom/contacts/makefile b/xsd/dist/examples/cxx/tree/custom/contacts/makefile index 8155d0e..845f6c3 100644 --- a/xsd/dist/examples/cxx/tree/custom/contacts/makefile +++ b/xsd/dist/examples/cxx/tree/custom/contacts/makefile @@ -4,9 +4,15 @@ include $(root)/build/cxx/rules.make include $(root)/build/xsd/tree-rules.make -override XSDFLAGS += --generate-inline --custom-type contact=/contact_base \ +override XSDFLAGS += --generate-inline \ --hxx-epilogue '\#include "contacts-custom.hxx"' +ifneq ($(shell uname -o),Msys) +override XSDFLAGS += --custom-type contact=/contact_base +else +# Prevent MSYS from converting / to Windows path. +override XSDFLAGS += --custom-type contact=//contact_base +endif # Build. # diff --git a/xsd/dist/examples/cxx/tree/custom/custom-10.0.sln b/xsd/dist/examples/cxx/tree/custom/custom-10.0.sln deleted file mode 100644 index ae089e7..0000000 --- a/xsd/dist/examples/cxx/tree/custom/custom-10.0.sln +++ /dev/null @@ -1,75 +0,0 @@ -Microsoft Visual Studio Solution File, Format Version 11.00 -# Visual Studio 2010 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "contacts", "contacts\contacts-10.0.vcxproj", "{9FB807C1-53EE-4E71-812F-89E8BE6FCB43}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "taxonomy", "taxonomy\taxonomy-10.0.vcxproj", "{B3108E70-7B4E-4DDA-8872-0DC4AFDCB2D9}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "wildcard", "wildcard\wildcard-10.0.vcxproj", "{6CE6CDEC-F8DE-42D0-80F8-E71C0DD8F897}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "comments", "comments\comments-10.0.vcxproj", "{262E34D2-48D2-4657-9DB2-F01FFDCEA295}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "double", "double\double-10.0.vcxproj", "{CCE6AE91-39AC-49B6-8763-742B65FCD92E}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mixed", "mixed\mixed-10.0.vcxproj", "{26CE0C08-7621-403A-88A7-206E64F32C66}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Win32 = Debug|Win32 - Debug|x64 = Debug|x64 - Release|Win32 = Release|Win32 - Release|x64 = Release|x64 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {9FB807C1-53EE-4E71-812F-89E8BE6FCB43}.Debug|Win32.ActiveCfg = Debug|Win32 - {9FB807C1-53EE-4E71-812F-89E8BE6FCB43}.Debug|Win32.Build.0 = Debug|Win32 - {9FB807C1-53EE-4E71-812F-89E8BE6FCB43}.Debug|x64.ActiveCfg = Debug|x64 - {9FB807C1-53EE-4E71-812F-89E8BE6FCB43}.Debug|x64.Build.0 = Debug|x64 - {9FB807C1-53EE-4E71-812F-89E8BE6FCB43}.Release|Win32.ActiveCfg = Release|Win32 - {9FB807C1-53EE-4E71-812F-89E8BE6FCB43}.Release|Win32.Build.0 = Release|Win32 - {9FB807C1-53EE-4E71-812F-89E8BE6FCB43}.Release|x64.ActiveCfg = Release|x64 - {9FB807C1-53EE-4E71-812F-89E8BE6FCB43}.Release|x64.Build.0 = Release|x64 - {B3108E70-7B4E-4DDA-8872-0DC4AFDCB2D9}.Debug|Win32.ActiveCfg = Debug|Win32 - {B3108E70-7B4E-4DDA-8872-0DC4AFDCB2D9}.Debug|Win32.Build.0 = Debug|Win32 - {B3108E70-7B4E-4DDA-8872-0DC4AFDCB2D9}.Debug|x64.ActiveCfg = Debug|x64 - {B3108E70-7B4E-4DDA-8872-0DC4AFDCB2D9}.Debug|x64.Build.0 = Debug|x64 - {B3108E70-7B4E-4DDA-8872-0DC4AFDCB2D9}.Release|Win32.ActiveCfg = Release|Win32 - {B3108E70-7B4E-4DDA-8872-0DC4AFDCB2D9}.Release|Win32.Build.0 = Release|Win32 - {B3108E70-7B4E-4DDA-8872-0DC4AFDCB2D9}.Release|x64.ActiveCfg = Release|x64 - {B3108E70-7B4E-4DDA-8872-0DC4AFDCB2D9}.Release|x64.Build.0 = Release|x64 - {6CE6CDEC-F8DE-42D0-80F8-E71C0DD8F897}.Debug|Win32.ActiveCfg = Debug|Win32 - {6CE6CDEC-F8DE-42D0-80F8-E71C0DD8F897}.Debug|Win32.Build.0 = Debug|Win32 - {6CE6CDEC-F8DE-42D0-80F8-E71C0DD8F897}.Debug|x64.ActiveCfg = Debug|x64 - {6CE6CDEC-F8DE-42D0-80F8-E71C0DD8F897}.Debug|x64.Build.0 = Debug|x64 - {6CE6CDEC-F8DE-42D0-80F8-E71C0DD8F897}.Release|Win32.ActiveCfg = Release|Win32 - {6CE6CDEC-F8DE-42D0-80F8-E71C0DD8F897}.Release|Win32.Build.0 = Release|Win32 - {6CE6CDEC-F8DE-42D0-80F8-E71C0DD8F897}.Release|x64.ActiveCfg = Release|x64 - {6CE6CDEC-F8DE-42D0-80F8-E71C0DD8F897}.Release|x64.Build.0 = Release|x64 - {262E34D2-48D2-4657-9DB2-F01FFDCEA295}.Debug|Win32.ActiveCfg = Debug|Win32 - {262E34D2-48D2-4657-9DB2-F01FFDCEA295}.Debug|Win32.Build.0 = Debug|Win32 - {262E34D2-48D2-4657-9DB2-F01FFDCEA295}.Debug|x64.ActiveCfg = Debug|x64 - {262E34D2-48D2-4657-9DB2-F01FFDCEA295}.Debug|x64.Build.0 = Debug|x64 - {262E34D2-48D2-4657-9DB2-F01FFDCEA295}.Release|Win32.ActiveCfg = Release|Win32 - {262E34D2-48D2-4657-9DB2-F01FFDCEA295}.Release|Win32.Build.0 = Release|Win32 - {262E34D2-48D2-4657-9DB2-F01FFDCEA295}.Release|x64.ActiveCfg = Release|x64 - {262E34D2-48D2-4657-9DB2-F01FFDCEA295}.Release|x64.Build.0 = Release|x64 - {CCE6AE91-39AC-49B6-8763-742B65FCD92E}.Debug|Win32.ActiveCfg = Debug|Win32 - {CCE6AE91-39AC-49B6-8763-742B65FCD92E}.Debug|Win32.Build.0 = Debug|Win32 - {CCE6AE91-39AC-49B6-8763-742B65FCD92E}.Debug|x64.ActiveCfg = Debug|x64 - {CCE6AE91-39AC-49B6-8763-742B65FCD92E}.Debug|x64.Build.0 = Debug|x64 - {CCE6AE91-39AC-49B6-8763-742B65FCD92E}.Release|Win32.ActiveCfg = Release|Win32 - {CCE6AE91-39AC-49B6-8763-742B65FCD92E}.Release|Win32.Build.0 = Release|Win32 - {CCE6AE91-39AC-49B6-8763-742B65FCD92E}.Release|x64.ActiveCfg = Release|x64 - {CCE6AE91-39AC-49B6-8763-742B65FCD92E}.Release|x64.Build.0 = Release|x64 - {26CE0C08-7621-403A-88A7-206E64F32C66}.Debug|Win32.ActiveCfg = Debug|Win32 - {26CE0C08-7621-403A-88A7-206E64F32C66}.Debug|Win32.Build.0 = Debug|Win32 - {26CE0C08-7621-403A-88A7-206E64F32C66}.Debug|x64.ActiveCfg = Debug|x64 - {26CE0C08-7621-403A-88A7-206E64F32C66}.Debug|x64.Build.0 = Debug|x64 - {26CE0C08-7621-403A-88A7-206E64F32C66}.Release|Win32.ActiveCfg = Release|Win32 - {26CE0C08-7621-403A-88A7-206E64F32C66}.Release|Win32.Build.0 = Release|Win32 - {26CE0C08-7621-403A-88A7-206E64F32C66}.Release|x64.ActiveCfg = Release|x64 - {26CE0C08-7621-403A-88A7-206E64F32C66}.Release|x64.Build.0 = Release|x64 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal diff --git a/xsd/dist/examples/cxx/tree/custom/custom-7.1.sln b/xsd/dist/examples/cxx/tree/custom/custom-7.1.sln deleted file mode 100644 index 86f7196..0000000 --- a/xsd/dist/examples/cxx/tree/custom/custom-7.1.sln +++ /dev/null @@ -1,61 +0,0 @@ -Microsoft Visual Studio Solution File, Format Version 8.00 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "contacts", "contacts\contacts-7.1.vcproj", "{9FB807C1-53EE-4E71-812F-89E8BE6FCB43}" - ProjectSection(ProjectDependencies) = postProject - EndProjectSection -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "taxonomy", "taxonomy\taxonomy-7.1.vcproj", "{B3108E70-7B4E-4DDA-8872-0DC4AFDCB2D9}" - ProjectSection(ProjectDependencies) = postProject - EndProjectSection -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "wildcard", "wildcard\wildcard-7.1.vcproj", "{6CE6CDEC-F8DE-42D0-80F8-E71C0DD8F897}" - ProjectSection(ProjectDependencies) = postProject - EndProjectSection -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "comments", "comments\comments-7.1.vcproj", "{262E34D2-48D2-4657-9DB2-F01FFDCEA295}" - ProjectSection(ProjectDependencies) = postProject - EndProjectSection -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "double", "double\double-7.1.vcproj", "{CCE6AE91-39AC-49B6-8763-742B65FCD92E}" - ProjectSection(ProjectDependencies) = postProject - EndProjectSection -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mixed", "mixed\mixed-7.1.vcproj", "{26CE0C08-7621-403A-88A7-206E64F32C66}" - ProjectSection(ProjectDependencies) = postProject - EndProjectSection -EndProject -Global - GlobalSection(SolutionConfiguration) = preSolution - Debug = Debug - Release = Release - EndGlobalSection - GlobalSection(ProjectConfiguration) = postSolution - {9FB807C1-53EE-4E71-812F-89E8BE6FCB43}.Debug.ActiveCfg = Debug|Win32 - {9FB807C1-53EE-4E71-812F-89E8BE6FCB43}.Debug.Build.0 = Debug|Win32 - {9FB807C1-53EE-4E71-812F-89E8BE6FCB43}.Release.ActiveCfg = Release|Win32 - {9FB807C1-53EE-4E71-812F-89E8BE6FCB43}.Release.Build.0 = Release|Win32 - {B3108E70-7B4E-4DDA-8872-0DC4AFDCB2D9}.Debug.ActiveCfg = Debug|Win32 - {B3108E70-7B4E-4DDA-8872-0DC4AFDCB2D9}.Debug.Build.0 = Debug|Win32 - {B3108E70-7B4E-4DDA-8872-0DC4AFDCB2D9}.Release.ActiveCfg = Release|Win32 - {B3108E70-7B4E-4DDA-8872-0DC4AFDCB2D9}.Release.Build.0 = Release|Win32 - {6CE6CDEC-F8DE-42D0-80F8-E71C0DD8F897}.Debug.ActiveCfg = Debug|Win32 - {6CE6CDEC-F8DE-42D0-80F8-E71C0DD8F897}.Debug.Build.0 = Debug|Win32 - {6CE6CDEC-F8DE-42D0-80F8-E71C0DD8F897}.Release.ActiveCfg = Release|Win32 - {6CE6CDEC-F8DE-42D0-80F8-E71C0DD8F897}.Release.Build.0 = Release|Win32 - {262E34D2-48D2-4657-9DB2-F01FFDCEA295}.Debug.ActiveCfg = Debug|Win32 - {262E34D2-48D2-4657-9DB2-F01FFDCEA295}.Debug.Build.0 = Debug|Win32 - {262E34D2-48D2-4657-9DB2-F01FFDCEA295}.Release.ActiveCfg = Release|Win32 - {262E34D2-48D2-4657-9DB2-F01FFDCEA295}.Release.Build.0 = Release|Win32 - {CCE6AE91-39AC-49B6-8763-742B65FCD92E}.Debug.ActiveCfg = Debug|Win32 - {CCE6AE91-39AC-49B6-8763-742B65FCD92E}.Debug.Build.0 = Debug|Win32 - {CCE6AE91-39AC-49B6-8763-742B65FCD92E}.Release.ActiveCfg = Release|Win32 - {CCE6AE91-39AC-49B6-8763-742B65FCD92E}.Release.Build.0 = Release|Win32 - {26CE0C08-7621-403A-88A7-206E64F32C66}.Debug.ActiveCfg = Debug|Win32 - {26CE0C08-7621-403A-88A7-206E64F32C66}.Debug.Build.0 = Debug|Win32 - {26CE0C08-7621-403A-88A7-206E64F32C66}.Release.ActiveCfg = Release|Win32 - {26CE0C08-7621-403A-88A7-206E64F32C66}.Release.Build.0 = Release|Win32 - EndGlobalSection - GlobalSection(ExtensibilityGlobals) = postSolution - EndGlobalSection - GlobalSection(ExtensibilityAddIns) = postSolution - EndGlobalSection -EndGlobal diff --git a/xsd/dist/examples/cxx/tree/custom/custom-8.0.sln b/xsd/dist/examples/cxx/tree/custom/custom-8.0.sln deleted file mode 100644 index 7faee8d..0000000 --- a/xsd/dist/examples/cxx/tree/custom/custom-8.0.sln +++ /dev/null @@ -1,75 +0,0 @@ -Microsoft Visual Studio Solution File, Format Version 9.00 -# Visual Studio 2005 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "contacts", "contacts\contacts-8.0.vcproj", "{9FB807C1-53EE-4E71-812F-89E8BE6FCB43}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "taxonomy", "taxonomy\taxonomy-8.0.vcproj", "{B3108E70-7B4E-4DDA-8872-0DC4AFDCB2D9}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "wildcard", "wildcard\wildcard-8.0.vcproj", "{6CE6CDEC-F8DE-42D0-80F8-E71C0DD8F897}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "comments", "comments\comments-8.0.vcproj", "{262E34D2-48D2-4657-9DB2-F01FFDCEA295}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "double", "double\double-8.0.vcproj", "{CCE6AE91-39AC-49B6-8763-742B65FCD92E}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mixed", "mixed\mixed-8.0.vcproj", "{26CE0C08-7621-403A-88A7-206E64F32C66}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Win32 = Debug|Win32 - Debug|x64 = Debug|x64 - Release|Win32 = Release|Win32 - Release|x64 = Release|x64 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {9FB807C1-53EE-4E71-812F-89E8BE6FCB43}.Debug|Win32.ActiveCfg = Debug|Win32 - {9FB807C1-53EE-4E71-812F-89E8BE6FCB43}.Debug|Win32.Build.0 = Debug|Win32 - {9FB807C1-53EE-4E71-812F-89E8BE6FCB43}.Debug|x64.ActiveCfg = Debug|x64 - {9FB807C1-53EE-4E71-812F-89E8BE6FCB43}.Debug|x64.Build.0 = Debug|x64 - {9FB807C1-53EE-4E71-812F-89E8BE6FCB43}.Release|Win32.ActiveCfg = Release|Win32 - {9FB807C1-53EE-4E71-812F-89E8BE6FCB43}.Release|Win32.Build.0 = Release|Win32 - {9FB807C1-53EE-4E71-812F-89E8BE6FCB43}.Release|x64.ActiveCfg = Release|x64 - {9FB807C1-53EE-4E71-812F-89E8BE6FCB43}.Release|x64.Build.0 = Release|x64 - {B3108E70-7B4E-4DDA-8872-0DC4AFDCB2D9}.Debug|Win32.ActiveCfg = Debug|Win32 - {B3108E70-7B4E-4DDA-8872-0DC4AFDCB2D9}.Debug|Win32.Build.0 = Debug|Win32 - {B3108E70-7B4E-4DDA-8872-0DC4AFDCB2D9}.Debug|x64.ActiveCfg = Debug|x64 - {B3108E70-7B4E-4DDA-8872-0DC4AFDCB2D9}.Debug|x64.Build.0 = Debug|x64 - {B3108E70-7B4E-4DDA-8872-0DC4AFDCB2D9}.Release|Win32.ActiveCfg = Release|Win32 - {B3108E70-7B4E-4DDA-8872-0DC4AFDCB2D9}.Release|Win32.Build.0 = Release|Win32 - {B3108E70-7B4E-4DDA-8872-0DC4AFDCB2D9}.Release|x64.ActiveCfg = Release|x64 - {B3108E70-7B4E-4DDA-8872-0DC4AFDCB2D9}.Release|x64.Build.0 = Release|x64 - {6CE6CDEC-F8DE-42D0-80F8-E71C0DD8F897}.Debug|Win32.ActiveCfg = Debug|Win32 - {6CE6CDEC-F8DE-42D0-80F8-E71C0DD8F897}.Debug|Win32.Build.0 = Debug|Win32 - {6CE6CDEC-F8DE-42D0-80F8-E71C0DD8F897}.Debug|x64.ActiveCfg = Debug|x64 - {6CE6CDEC-F8DE-42D0-80F8-E71C0DD8F897}.Debug|x64.Build.0 = Debug|x64 - {6CE6CDEC-F8DE-42D0-80F8-E71C0DD8F897}.Release|Win32.ActiveCfg = Release|Win32 - {6CE6CDEC-F8DE-42D0-80F8-E71C0DD8F897}.Release|Win32.Build.0 = Release|Win32 - {6CE6CDEC-F8DE-42D0-80F8-E71C0DD8F897}.Release|x64.ActiveCfg = Release|x64 - {6CE6CDEC-F8DE-42D0-80F8-E71C0DD8F897}.Release|x64.Build.0 = Release|x64 - {262E34D2-48D2-4657-9DB2-F01FFDCEA295}.Debug|Win32.ActiveCfg = Debug|Win32 - {262E34D2-48D2-4657-9DB2-F01FFDCEA295}.Debug|Win32.Build.0 = Debug|Win32 - {262E34D2-48D2-4657-9DB2-F01FFDCEA295}.Debug|x64.ActiveCfg = Debug|x64 - {262E34D2-48D2-4657-9DB2-F01FFDCEA295}.Debug|x64.Build.0 = Debug|x64 - {262E34D2-48D2-4657-9DB2-F01FFDCEA295}.Release|Win32.ActiveCfg = Release|Win32 - {262E34D2-48D2-4657-9DB2-F01FFDCEA295}.Release|Win32.Build.0 = Release|Win32 - {262E34D2-48D2-4657-9DB2-F01FFDCEA295}.Release|x64.ActiveCfg = Release|x64 - {262E34D2-48D2-4657-9DB2-F01FFDCEA295}.Release|x64.Build.0 = Release|x64 - {CCE6AE91-39AC-49B6-8763-742B65FCD92E}.Debug|Win32.ActiveCfg = Debug|Win32 - {CCE6AE91-39AC-49B6-8763-742B65FCD92E}.Debug|Win32.Build.0 = Debug|Win32 - {CCE6AE91-39AC-49B6-8763-742B65FCD92E}.Debug|x64.ActiveCfg = Debug|x64 - {CCE6AE91-39AC-49B6-8763-742B65FCD92E}.Debug|x64.Build.0 = Debug|x64 - {CCE6AE91-39AC-49B6-8763-742B65FCD92E}.Release|Win32.ActiveCfg = Release|Win32 - {CCE6AE91-39AC-49B6-8763-742B65FCD92E}.Release|Win32.Build.0 = Release|Win32 - {CCE6AE91-39AC-49B6-8763-742B65FCD92E}.Release|x64.ActiveCfg = Release|x64 - {CCE6AE91-39AC-49B6-8763-742B65FCD92E}.Release|x64.Build.0 = Release|x64 - {26CE0C08-7621-403A-88A7-206E64F32C66}.Debug|Win32.ActiveCfg = Debug|Win32 - {26CE0C08-7621-403A-88A7-206E64F32C66}.Debug|Win32.Build.0 = Debug|Win32 - {26CE0C08-7621-403A-88A7-206E64F32C66}.Debug|x64.ActiveCfg = Debug|x64 - {26CE0C08-7621-403A-88A7-206E64F32C66}.Debug|x64.Build.0 = Debug|x64 - {26CE0C08-7621-403A-88A7-206E64F32C66}.Release|Win32.ActiveCfg = Release|Win32 - {26CE0C08-7621-403A-88A7-206E64F32C66}.Release|Win32.Build.0 = Release|Win32 - {26CE0C08-7621-403A-88A7-206E64F32C66}.Release|x64.ActiveCfg = Release|x64 - {26CE0C08-7621-403A-88A7-206E64F32C66}.Release|x64.Build.0 = Release|x64 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal diff --git a/xsd/dist/examples/cxx/tree/custom/custom-9.0.sln b/xsd/dist/examples/cxx/tree/custom/custom-9.0.sln deleted file mode 100644 index 2def79a..0000000 --- a/xsd/dist/examples/cxx/tree/custom/custom-9.0.sln +++ /dev/null @@ -1,75 +0,0 @@ -Microsoft Visual Studio Solution File, Format Version 10.00 -# Visual Studio 2008 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "contacts", "contacts\contacts-9.0.vcproj", "{9FB807C1-53EE-4E71-812F-89E8BE6FCB43}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "taxonomy", "taxonomy\taxonomy-9.0.vcproj", "{B3108E70-7B4E-4DDA-8872-0DC4AFDCB2D9}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "wildcard", "wildcard\wildcard-9.0.vcproj", "{6CE6CDEC-F8DE-42D0-80F8-E71C0DD8F897}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "comments", "comments\comments-9.0.vcproj", "{262E34D2-48D2-4657-9DB2-F01FFDCEA295}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "double", "double\double-9.0.vcproj", "{CCE6AE91-39AC-49B6-8763-742B65FCD92E}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mixed", "mixed\mixed-9.0.vcproj", "{26CE0C08-7621-403A-88A7-206E64F32C66}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Win32 = Debug|Win32 - Debug|x64 = Debug|x64 - Release|Win32 = Release|Win32 - Release|x64 = Release|x64 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {9FB807C1-53EE-4E71-812F-89E8BE6FCB43}.Debug|Win32.ActiveCfg = Debug|Win32 - {9FB807C1-53EE-4E71-812F-89E8BE6FCB43}.Debug|Win32.Build.0 = Debug|Win32 - {9FB807C1-53EE-4E71-812F-89E8BE6FCB43}.Debug|x64.ActiveCfg = Debug|x64 - {9FB807C1-53EE-4E71-812F-89E8BE6FCB43}.Debug|x64.Build.0 = Debug|x64 - {9FB807C1-53EE-4E71-812F-89E8BE6FCB43}.Release|Win32.ActiveCfg = Release|Win32 - {9FB807C1-53EE-4E71-812F-89E8BE6FCB43}.Release|Win32.Build.0 = Release|Win32 - {9FB807C1-53EE-4E71-812F-89E8BE6FCB43}.Release|x64.ActiveCfg = Release|x64 - {9FB807C1-53EE-4E71-812F-89E8BE6FCB43}.Release|x64.Build.0 = Release|x64 - {B3108E70-7B4E-4DDA-8872-0DC4AFDCB2D9}.Debug|Win32.ActiveCfg = Debug|Win32 - {B3108E70-7B4E-4DDA-8872-0DC4AFDCB2D9}.Debug|Win32.Build.0 = Debug|Win32 - {B3108E70-7B4E-4DDA-8872-0DC4AFDCB2D9}.Debug|x64.ActiveCfg = Debug|x64 - {B3108E70-7B4E-4DDA-8872-0DC4AFDCB2D9}.Debug|x64.Build.0 = Debug|x64 - {B3108E70-7B4E-4DDA-8872-0DC4AFDCB2D9}.Release|Win32.ActiveCfg = Release|Win32 - {B3108E70-7B4E-4DDA-8872-0DC4AFDCB2D9}.Release|Win32.Build.0 = Release|Win32 - {B3108E70-7B4E-4DDA-8872-0DC4AFDCB2D9}.Release|x64.ActiveCfg = Release|x64 - {B3108E70-7B4E-4DDA-8872-0DC4AFDCB2D9}.Release|x64.Build.0 = Release|x64 - {6CE6CDEC-F8DE-42D0-80F8-E71C0DD8F897}.Debug|Win32.ActiveCfg = Debug|Win32 - {6CE6CDEC-F8DE-42D0-80F8-E71C0DD8F897}.Debug|Win32.Build.0 = Debug|Win32 - {6CE6CDEC-F8DE-42D0-80F8-E71C0DD8F897}.Debug|x64.ActiveCfg = Debug|x64 - {6CE6CDEC-F8DE-42D0-80F8-E71C0DD8F897}.Debug|x64.Build.0 = Debug|x64 - {6CE6CDEC-F8DE-42D0-80F8-E71C0DD8F897}.Release|Win32.ActiveCfg = Release|Win32 - {6CE6CDEC-F8DE-42D0-80F8-E71C0DD8F897}.Release|Win32.Build.0 = Release|Win32 - {6CE6CDEC-F8DE-42D0-80F8-E71C0DD8F897}.Release|x64.ActiveCfg = Release|x64 - {6CE6CDEC-F8DE-42D0-80F8-E71C0DD8F897}.Release|x64.Build.0 = Release|x64 - {262E34D2-48D2-4657-9DB2-F01FFDCEA295}.Debug|Win32.ActiveCfg = Debug|Win32 - {262E34D2-48D2-4657-9DB2-F01FFDCEA295}.Debug|Win32.Build.0 = Debug|Win32 - {262E34D2-48D2-4657-9DB2-F01FFDCEA295}.Debug|x64.ActiveCfg = Debug|x64 - {262E34D2-48D2-4657-9DB2-F01FFDCEA295}.Debug|x64.Build.0 = Debug|x64 - {262E34D2-48D2-4657-9DB2-F01FFDCEA295}.Release|Win32.ActiveCfg = Release|Win32 - {262E34D2-48D2-4657-9DB2-F01FFDCEA295}.Release|Win32.Build.0 = Release|Win32 - {262E34D2-48D2-4657-9DB2-F01FFDCEA295}.Release|x64.ActiveCfg = Release|x64 - {262E34D2-48D2-4657-9DB2-F01FFDCEA295}.Release|x64.Build.0 = Release|x64 - {CCE6AE91-39AC-49B6-8763-742B65FCD92E}.Debug|Win32.ActiveCfg = Debug|Win32 - {CCE6AE91-39AC-49B6-8763-742B65FCD92E}.Debug|Win32.Build.0 = Debug|Win32 - {CCE6AE91-39AC-49B6-8763-742B65FCD92E}.Debug|x64.ActiveCfg = Debug|x64 - {CCE6AE91-39AC-49B6-8763-742B65FCD92E}.Debug|x64.Build.0 = Debug|x64 - {CCE6AE91-39AC-49B6-8763-742B65FCD92E}.Release|Win32.ActiveCfg = Release|Win32 - {CCE6AE91-39AC-49B6-8763-742B65FCD92E}.Release|Win32.Build.0 = Release|Win32 - {CCE6AE91-39AC-49B6-8763-742B65FCD92E}.Release|x64.ActiveCfg = Release|x64 - {CCE6AE91-39AC-49B6-8763-742B65FCD92E}.Release|x64.Build.0 = Release|x64 - {26CE0C08-7621-403A-88A7-206E64F32C66}.Debug|Win32.ActiveCfg = Debug|Win32 - {26CE0C08-7621-403A-88A7-206E64F32C66}.Debug|Win32.Build.0 = Debug|Win32 - {26CE0C08-7621-403A-88A7-206E64F32C66}.Debug|x64.ActiveCfg = Debug|x64 - {26CE0C08-7621-403A-88A7-206E64F32C66}.Debug|x64.Build.0 = Debug|x64 - {26CE0C08-7621-403A-88A7-206E64F32C66}.Release|Win32.ActiveCfg = Release|Win32 - {26CE0C08-7621-403A-88A7-206E64F32C66}.Release|Win32.Build.0 = Release|Win32 - {26CE0C08-7621-403A-88A7-206E64F32C66}.Release|x64.ActiveCfg = Release|x64 - {26CE0C08-7621-403A-88A7-206E64F32C66}.Release|x64.Build.0 = Release|x64 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal diff --git a/xsd/dist/examples/cxx/tree/custom/custom-xerces2-7.1.sln b/xsd/dist/examples/cxx/tree/custom/custom-xerces2-7.1.sln deleted file mode 100644 index f5ace2f..0000000 --- a/xsd/dist/examples/cxx/tree/custom/custom-xerces2-7.1.sln +++ /dev/null @@ -1,61 +0,0 @@ -Microsoft Visual Studio Solution File, Format Version 8.00 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "contacts", "contacts\contacts-xerces2-7.1.vcproj", "{9FB807C1-53EE-4E71-812F-89E8BE6FCB43}" - ProjectSection(ProjectDependencies) = postProject - EndProjectSection -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "taxonomy", "taxonomy\taxonomy-xerces2-7.1.vcproj", "{B3108E70-7B4E-4DDA-8872-0DC4AFDCB2D9}" - ProjectSection(ProjectDependencies) = postProject - EndProjectSection -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "wildcard", "wildcard\wildcard-xerces2-7.1.vcproj", "{6CE6CDEC-F8DE-42D0-80F8-E71C0DD8F897}" - ProjectSection(ProjectDependencies) = postProject - EndProjectSection -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "comments", "comments\comments-xerces2-7.1.vcproj", "{262E34D2-48D2-4657-9DB2-F01FFDCEA295}" - ProjectSection(ProjectDependencies) = postProject - EndProjectSection -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "double", "double\double-xerces2-7.1.vcproj", "{CCE6AE91-39AC-49B6-8763-742B65FCD92E}" - ProjectSection(ProjectDependencies) = postProject - EndProjectSection -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mixed", "mixed\mixed-xerces2-7.1.vcproj", "{26CE0C08-7621-403A-88A7-206E64F32C66}" - ProjectSection(ProjectDependencies) = postProject - EndProjectSection -EndProject -Global - GlobalSection(SolutionConfiguration) = preSolution - Debug = Debug - Release = Release - EndGlobalSection - GlobalSection(ProjectConfiguration) = postSolution - {9FB807C1-53EE-4E71-812F-89E8BE6FCB43}.Debug.ActiveCfg = Debug|Win32 - {9FB807C1-53EE-4E71-812F-89E8BE6FCB43}.Debug.Build.0 = Debug|Win32 - {9FB807C1-53EE-4E71-812F-89E8BE6FCB43}.Release.ActiveCfg = Release|Win32 - {9FB807C1-53EE-4E71-812F-89E8BE6FCB43}.Release.Build.0 = Release|Win32 - {B3108E70-7B4E-4DDA-8872-0DC4AFDCB2D9}.Debug.ActiveCfg = Debug|Win32 - {B3108E70-7B4E-4DDA-8872-0DC4AFDCB2D9}.Debug.Build.0 = Debug|Win32 - {B3108E70-7B4E-4DDA-8872-0DC4AFDCB2D9}.Release.ActiveCfg = Release|Win32 - {B3108E70-7B4E-4DDA-8872-0DC4AFDCB2D9}.Release.Build.0 = Release|Win32 - {6CE6CDEC-F8DE-42D0-80F8-E71C0DD8F897}.Debug.ActiveCfg = Debug|Win32 - {6CE6CDEC-F8DE-42D0-80F8-E71C0DD8F897}.Debug.Build.0 = Debug|Win32 - {6CE6CDEC-F8DE-42D0-80F8-E71C0DD8F897}.Release.ActiveCfg = Release|Win32 - {6CE6CDEC-F8DE-42D0-80F8-E71C0DD8F897}.Release.Build.0 = Release|Win32 - {262E34D2-48D2-4657-9DB2-F01FFDCEA295}.Debug.ActiveCfg = Debug|Win32 - {262E34D2-48D2-4657-9DB2-F01FFDCEA295}.Debug.Build.0 = Debug|Win32 - {262E34D2-48D2-4657-9DB2-F01FFDCEA295}.Release.ActiveCfg = Release|Win32 - {262E34D2-48D2-4657-9DB2-F01FFDCEA295}.Release.Build.0 = Release|Win32 - {CCE6AE91-39AC-49B6-8763-742B65FCD92E}.Debug.ActiveCfg = Debug|Win32 - {CCE6AE91-39AC-49B6-8763-742B65FCD92E}.Debug.Build.0 = Debug|Win32 - {CCE6AE91-39AC-49B6-8763-742B65FCD92E}.Release.ActiveCfg = Release|Win32 - {CCE6AE91-39AC-49B6-8763-742B65FCD92E}.Release.Build.0 = Release|Win32 - {26CE0C08-7621-403A-88A7-206E64F32C66}.Debug.ActiveCfg = Debug|Win32 - {26CE0C08-7621-403A-88A7-206E64F32C66}.Debug.Build.0 = Debug|Win32 - {26CE0C08-7621-403A-88A7-206E64F32C66}.Release.ActiveCfg = Release|Win32 - {26CE0C08-7621-403A-88A7-206E64F32C66}.Release.Build.0 = Release|Win32 - EndGlobalSection - GlobalSection(ExtensibilityGlobals) = postSolution - EndGlobalSection - GlobalSection(ExtensibilityAddIns) = postSolution - EndGlobalSection -EndGlobal diff --git a/xsd/dist/examples/cxx/tree/custom/custom-xerces2-8.0.sln b/xsd/dist/examples/cxx/tree/custom/custom-xerces2-8.0.sln deleted file mode 100644 index b3e013c..0000000 --- a/xsd/dist/examples/cxx/tree/custom/custom-xerces2-8.0.sln +++ /dev/null @@ -1,75 +0,0 @@ -Microsoft Visual Studio Solution File, Format Version 9.00 -# Visual Studio 2005 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "contacts", "contacts\contacts-xerces2-8.0.vcproj", "{9FB807C1-53EE-4E71-812F-89E8BE6FCB43}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "taxonomy", "taxonomy\taxonomy-xerces2-8.0.vcproj", "{B3108E70-7B4E-4DDA-8872-0DC4AFDCB2D9}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "wildcard", "wildcard\wildcard-xerces2-8.0.vcproj", "{6CE6CDEC-F8DE-42D0-80F8-E71C0DD8F897}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "comments", "comments\comments-xerces2-8.0.vcproj", "{262E34D2-48D2-4657-9DB2-F01FFDCEA295}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "double", "double\double-xerces2-8.0.vcproj", "{CCE6AE91-39AC-49B6-8763-742B65FCD92E}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mixed", "mixed\mixed-xerces2-8.0.vcproj", "{26CE0C08-7621-403A-88A7-206E64F32C66}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Win32 = Debug|Win32 - Debug|x64 = Debug|x64 - Release|Win32 = Release|Win32 - Release|x64 = Release|x64 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {9FB807C1-53EE-4E71-812F-89E8BE6FCB43}.Debug|Win32.ActiveCfg = Debug|Win32 - {9FB807C1-53EE-4E71-812F-89E8BE6FCB43}.Debug|Win32.Build.0 = Debug|Win32 - {9FB807C1-53EE-4E71-812F-89E8BE6FCB43}.Debug|x64.ActiveCfg = Debug|x64 - {9FB807C1-53EE-4E71-812F-89E8BE6FCB43}.Debug|x64.Build.0 = Debug|x64 - {9FB807C1-53EE-4E71-812F-89E8BE6FCB43}.Release|Win32.ActiveCfg = Release|Win32 - {9FB807C1-53EE-4E71-812F-89E8BE6FCB43}.Release|Win32.Build.0 = Release|Win32 - {9FB807C1-53EE-4E71-812F-89E8BE6FCB43}.Release|x64.ActiveCfg = Release|x64 - {9FB807C1-53EE-4E71-812F-89E8BE6FCB43}.Release|x64.Build.0 = Release|x64 - {B3108E70-7B4E-4DDA-8872-0DC4AFDCB2D9}.Debug|Win32.ActiveCfg = Debug|Win32 - {B3108E70-7B4E-4DDA-8872-0DC4AFDCB2D9}.Debug|Win32.Build.0 = Debug|Win32 - {B3108E70-7B4E-4DDA-8872-0DC4AFDCB2D9}.Debug|x64.ActiveCfg = Debug|x64 - {B3108E70-7B4E-4DDA-8872-0DC4AFDCB2D9}.Debug|x64.Build.0 = Debug|x64 - {B3108E70-7B4E-4DDA-8872-0DC4AFDCB2D9}.Release|Win32.ActiveCfg = Release|Win32 - {B3108E70-7B4E-4DDA-8872-0DC4AFDCB2D9}.Release|Win32.Build.0 = Release|Win32 - {B3108E70-7B4E-4DDA-8872-0DC4AFDCB2D9}.Release|x64.ActiveCfg = Release|x64 - {B3108E70-7B4E-4DDA-8872-0DC4AFDCB2D9}.Release|x64.Build.0 = Release|x64 - {6CE6CDEC-F8DE-42D0-80F8-E71C0DD8F897}.Debug|Win32.ActiveCfg = Debug|Win32 - {6CE6CDEC-F8DE-42D0-80F8-E71C0DD8F897}.Debug|Win32.Build.0 = Debug|Win32 - {6CE6CDEC-F8DE-42D0-80F8-E71C0DD8F897}.Debug|x64.ActiveCfg = Debug|x64 - {6CE6CDEC-F8DE-42D0-80F8-E71C0DD8F897}.Debug|x64.Build.0 = Debug|x64 - {6CE6CDEC-F8DE-42D0-80F8-E71C0DD8F897}.Release|Win32.ActiveCfg = Release|Win32 - {6CE6CDEC-F8DE-42D0-80F8-E71C0DD8F897}.Release|Win32.Build.0 = Release|Win32 - {6CE6CDEC-F8DE-42D0-80F8-E71C0DD8F897}.Release|x64.ActiveCfg = Release|x64 - {6CE6CDEC-F8DE-42D0-80F8-E71C0DD8F897}.Release|x64.Build.0 = Release|x64 - {262E34D2-48D2-4657-9DB2-F01FFDCEA295}.Debug|Win32.ActiveCfg = Debug|Win32 - {262E34D2-48D2-4657-9DB2-F01FFDCEA295}.Debug|Win32.Build.0 = Debug|Win32 - {262E34D2-48D2-4657-9DB2-F01FFDCEA295}.Debug|x64.ActiveCfg = Debug|x64 - {262E34D2-48D2-4657-9DB2-F01FFDCEA295}.Debug|x64.Build.0 = Debug|x64 - {262E34D2-48D2-4657-9DB2-F01FFDCEA295}.Release|Win32.ActiveCfg = Release|Win32 - {262E34D2-48D2-4657-9DB2-F01FFDCEA295}.Release|Win32.Build.0 = Release|Win32 - {262E34D2-48D2-4657-9DB2-F01FFDCEA295}.Release|x64.ActiveCfg = Release|x64 - {262E34D2-48D2-4657-9DB2-F01FFDCEA295}.Release|x64.Build.0 = Release|x64 - {CCE6AE91-39AC-49B6-8763-742B65FCD92E}.Debug|Win32.ActiveCfg = Debug|Win32 - {CCE6AE91-39AC-49B6-8763-742B65FCD92E}.Debug|Win32.Build.0 = Debug|Win32 - {CCE6AE91-39AC-49B6-8763-742B65FCD92E}.Debug|x64.ActiveCfg = Debug|x64 - {CCE6AE91-39AC-49B6-8763-742B65FCD92E}.Debug|x64.Build.0 = Debug|x64 - {CCE6AE91-39AC-49B6-8763-742B65FCD92E}.Release|Win32.ActiveCfg = Release|Win32 - {CCE6AE91-39AC-49B6-8763-742B65FCD92E}.Release|Win32.Build.0 = Release|Win32 - {CCE6AE91-39AC-49B6-8763-742B65FCD92E}.Release|x64.ActiveCfg = Release|x64 - {CCE6AE91-39AC-49B6-8763-742B65FCD92E}.Release|x64.Build.0 = Release|x64 - {26CE0C08-7621-403A-88A7-206E64F32C66}.Debug|Win32.ActiveCfg = Debug|Win32 - {26CE0C08-7621-403A-88A7-206E64F32C66}.Debug|Win32.Build.0 = Debug|Win32 - {26CE0C08-7621-403A-88A7-206E64F32C66}.Debug|x64.ActiveCfg = Debug|x64 - {26CE0C08-7621-403A-88A7-206E64F32C66}.Debug|x64.Build.0 = Debug|x64 - {26CE0C08-7621-403A-88A7-206E64F32C66}.Release|Win32.ActiveCfg = Release|Win32 - {26CE0C08-7621-403A-88A7-206E64F32C66}.Release|Win32.Build.0 = Release|Win32 - {26CE0C08-7621-403A-88A7-206E64F32C66}.Release|x64.ActiveCfg = Release|x64 - {26CE0C08-7621-403A-88A7-206E64F32C66}.Release|x64.Build.0 = Release|x64 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal diff --git a/xsd/dist/examples/cxx/tree/custom/custom-xerces2-9.0.sln b/xsd/dist/examples/cxx/tree/custom/custom-xerces2-9.0.sln deleted file mode 100644 index ec151cc..0000000 --- a/xsd/dist/examples/cxx/tree/custom/custom-xerces2-9.0.sln +++ /dev/null @@ -1,75 +0,0 @@ -Microsoft Visual Studio Solution File, Format Version 10.00 -# Visual Studio 2008 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "contacts", "contacts\contacts-xerces2-9.0.vcproj", "{9FB807C1-53EE-4E71-812F-89E8BE6FCB43}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "taxonomy", "taxonomy\taxonomy-xerces2-9.0.vcproj", "{B3108E70-7B4E-4DDA-8872-0DC4AFDCB2D9}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "wildcard", "wildcard\wildcard-xerces2-9.0.vcproj", "{6CE6CDEC-F8DE-42D0-80F8-E71C0DD8F897}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "comments", "comments\comments-xerces2-9.0.vcproj", "{262E34D2-48D2-4657-9DB2-F01FFDCEA295}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "double", "double\double-xerces2-9.0.vcproj", "{CCE6AE91-39AC-49B6-8763-742B65FCD92E}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mixed", "mixed\mixed-xerces2-9.0.vcproj", "{26CE0C08-7621-403A-88A7-206E64F32C66}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Win32 = Debug|Win32 - Debug|x64 = Debug|x64 - Release|Win32 = Release|Win32 - Release|x64 = Release|x64 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {9FB807C1-53EE-4E71-812F-89E8BE6FCB43}.Debug|Win32.ActiveCfg = Debug|Win32 - {9FB807C1-53EE-4E71-812F-89E8BE6FCB43}.Debug|Win32.Build.0 = Debug|Win32 - {9FB807C1-53EE-4E71-812F-89E8BE6FCB43}.Debug|x64.ActiveCfg = Debug|x64 - {9FB807C1-53EE-4E71-812F-89E8BE6FCB43}.Debug|x64.Build.0 = Debug|x64 - {9FB807C1-53EE-4E71-812F-89E8BE6FCB43}.Release|Win32.ActiveCfg = Release|Win32 - {9FB807C1-53EE-4E71-812F-89E8BE6FCB43}.Release|Win32.Build.0 = Release|Win32 - {9FB807C1-53EE-4E71-812F-89E8BE6FCB43}.Release|x64.ActiveCfg = Release|x64 - {9FB807C1-53EE-4E71-812F-89E8BE6FCB43}.Release|x64.Build.0 = Release|x64 - {B3108E70-7B4E-4DDA-8872-0DC4AFDCB2D9}.Debug|Win32.ActiveCfg = Debug|Win32 - {B3108E70-7B4E-4DDA-8872-0DC4AFDCB2D9}.Debug|Win32.Build.0 = Debug|Win32 - {B3108E70-7B4E-4DDA-8872-0DC4AFDCB2D9}.Debug|x64.ActiveCfg = Debug|x64 - {B3108E70-7B4E-4DDA-8872-0DC4AFDCB2D9}.Debug|x64.Build.0 = Debug|x64 - {B3108E70-7B4E-4DDA-8872-0DC4AFDCB2D9}.Release|Win32.ActiveCfg = Release|Win32 - {B3108E70-7B4E-4DDA-8872-0DC4AFDCB2D9}.Release|Win32.Build.0 = Release|Win32 - {B3108E70-7B4E-4DDA-8872-0DC4AFDCB2D9}.Release|x64.ActiveCfg = Release|x64 - {B3108E70-7B4E-4DDA-8872-0DC4AFDCB2D9}.Release|x64.Build.0 = Release|x64 - {6CE6CDEC-F8DE-42D0-80F8-E71C0DD8F897}.Debug|Win32.ActiveCfg = Debug|Win32 - {6CE6CDEC-F8DE-42D0-80F8-E71C0DD8F897}.Debug|Win32.Build.0 = Debug|Win32 - {6CE6CDEC-F8DE-42D0-80F8-E71C0DD8F897}.Debug|x64.ActiveCfg = Debug|x64 - {6CE6CDEC-F8DE-42D0-80F8-E71C0DD8F897}.Debug|x64.Build.0 = Debug|x64 - {6CE6CDEC-F8DE-42D0-80F8-E71C0DD8F897}.Release|Win32.ActiveCfg = Release|Win32 - {6CE6CDEC-F8DE-42D0-80F8-E71C0DD8F897}.Release|Win32.Build.0 = Release|Win32 - {6CE6CDEC-F8DE-42D0-80F8-E71C0DD8F897}.Release|x64.ActiveCfg = Release|x64 - {6CE6CDEC-F8DE-42D0-80F8-E71C0DD8F897}.Release|x64.Build.0 = Release|x64 - {262E34D2-48D2-4657-9DB2-F01FFDCEA295}.Debug|Win32.ActiveCfg = Debug|Win32 - {262E34D2-48D2-4657-9DB2-F01FFDCEA295}.Debug|Win32.Build.0 = Debug|Win32 - {262E34D2-48D2-4657-9DB2-F01FFDCEA295}.Debug|x64.ActiveCfg = Debug|x64 - {262E34D2-48D2-4657-9DB2-F01FFDCEA295}.Debug|x64.Build.0 = Debug|x64 - {262E34D2-48D2-4657-9DB2-F01FFDCEA295}.Release|Win32.ActiveCfg = Release|Win32 - {262E34D2-48D2-4657-9DB2-F01FFDCEA295}.Release|Win32.Build.0 = Release|Win32 - {262E34D2-48D2-4657-9DB2-F01FFDCEA295}.Release|x64.ActiveCfg = Release|x64 - {262E34D2-48D2-4657-9DB2-F01FFDCEA295}.Release|x64.Build.0 = Release|x64 - {CCE6AE91-39AC-49B6-8763-742B65FCD92E}.Debug|Win32.ActiveCfg = Debug|Win32 - {CCE6AE91-39AC-49B6-8763-742B65FCD92E}.Debug|Win32.Build.0 = Debug|Win32 - {CCE6AE91-39AC-49B6-8763-742B65FCD92E}.Debug|x64.ActiveCfg = Debug|x64 - {CCE6AE91-39AC-49B6-8763-742B65FCD92E}.Debug|x64.Build.0 = Debug|x64 - {CCE6AE91-39AC-49B6-8763-742B65FCD92E}.Release|Win32.ActiveCfg = Release|Win32 - {CCE6AE91-39AC-49B6-8763-742B65FCD92E}.Release|Win32.Build.0 = Release|Win32 - {CCE6AE91-39AC-49B6-8763-742B65FCD92E}.Release|x64.ActiveCfg = Release|x64 - {CCE6AE91-39AC-49B6-8763-742B65FCD92E}.Release|x64.Build.0 = Release|x64 - {26CE0C08-7621-403A-88A7-206E64F32C66}.Debug|Win32.ActiveCfg = Debug|Win32 - {26CE0C08-7621-403A-88A7-206E64F32C66}.Debug|Win32.Build.0 = Debug|Win32 - {26CE0C08-7621-403A-88A7-206E64F32C66}.Debug|x64.ActiveCfg = Debug|x64 - {26CE0C08-7621-403A-88A7-206E64F32C66}.Debug|x64.Build.0 = Debug|x64 - {26CE0C08-7621-403A-88A7-206E64F32C66}.Release|Win32.ActiveCfg = Release|Win32 - {26CE0C08-7621-403A-88A7-206E64F32C66}.Release|Win32.Build.0 = Release|Win32 - {26CE0C08-7621-403A-88A7-206E64F32C66}.Release|x64.ActiveCfg = Release|x64 - {26CE0C08-7621-403A-88A7-206E64F32C66}.Release|x64.Build.0 = Release|x64 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal diff --git a/xsd/dist/examples/cxx/tree/custom/double/double-10.0.vcxproj b/xsd/dist/examples/cxx/tree/custom/double/double-10.0.vcxproj deleted file mode 100644 index 6f25ea6..0000000 --- a/xsd/dist/examples/cxx/tree/custom/double/double-10.0.vcxproj +++ /dev/null @@ -1,233 +0,0 @@ - - - - - Debug - Win32 - - - Debug - x64 - - - Release - Win32 - - - Release - x64 - - - - double - {CCE6AE91-39AC-49B6-8763-742B65FCD92E} - double - Win32Proj - - - - Application - MultiByte - - - Application - MultiByte - - - Application - MultiByte - - - Application - MultiByte - - - - - - - - - - - - - - - - - - - driver - driver - driver - driver - Debug\ - Debug\ - true - true - $(Platform)\$(Configuration)\ - $(Platform)\$(Configuration)\ - true - true - Release\ - Release\ - false - $(Platform)\$(Configuration)\ - $(Platform)\$(Configuration)\ - false - - - - xsd xml-schema.xsd - xsd cxx-tree --generate-xml-schema --generate-serialization --custom-type double=double --hxx-epilogue "#include \"double-custom.hxx\"" xml-schema.xsd - - - Disabled - WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebug - true - - - Level3 - EditAndContinue - - - xerces-c_3D.lib;%(AdditionalDependencies) - $(TargetPath) - true - $(OutDir)driver.pdb - Console - false - - - MachineX86 - - - - - xsd xml-schema.xsd - xsd cxx-tree --generate-xml-schema --generate-serialization --custom-type double=double --hxx-epilogue "#include \"double-custom.hxx\"" xml-schema.xsd - - - X64 - - - Disabled - WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebug - true - - - Level3 - ProgramDatabase - - - xerces-c_3D.lib;%(AdditionalDependencies) - $(TargetPath) - true - $(OutDir)driver.pdb - Console - false - - - MachineX64 - - - - - xsd xml-schema.xsd - xsd cxx-tree --generate-xml-schema --generate-serialization --custom-type double=double --hxx-epilogue "#include \"double-custom.hxx\"" xml-schema.xsd - - - WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - MultiThreaded - true - - - Level3 - ProgramDatabase - - - xerces-c_3.lib;%(AdditionalDependencies) - $(TargetPath) - true - Console - true - true - false - - - MachineX86 - - - - - xsd xml-schema.xsd - xsd cxx-tree --generate-xml-schema --generate-serialization --custom-type double=double --hxx-epilogue "#include \"double-custom.hxx\"" xml-schema.xsd - - - X64 - - - WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - MultiThreaded - true - - - Level3 - ProgramDatabase - - - xerces-c_3.lib;%(AdditionalDependencies) - $(TargetPath) - true - Console - true - true - false - - - MachineX64 - - - - - - - - - - - - - - - - - - - xsd order.xsd - xsd cxx-tree --generate-inline --generate-serialization --extern-xml-schema xml-schema.xsd order.xsd - xml-schema.hxx;%(AdditionalInputs) - order.hxx;order.ixx;order.cxx;%(Outputs) - xsd order.xsd - xsd cxx-tree --generate-inline --generate-serialization --extern-xml-schema xml-schema.xsd order.xsd - xml-schema.hxx;%(AdditionalInputs) - order.hxx;order.ixx;order.cxx;%(Outputs) - xsd order.xsd - xsd cxx-tree --generate-inline --generate-serialization --extern-xml-schema xml-schema.xsd order.xsd - order.hxx;order.ixx;order.cxx;%(Outputs) - xsd order.xsd - xsd cxx-tree --generate-inline --generate-serialization --extern-xml-schema xml-schema.xsd order.xsd - order.hxx;order.ixx;order.cxx;%(Outputs) - - - - - - \ No newline at end of file diff --git a/xsd/dist/examples/cxx/tree/custom/double/double-10.0.vcxproj.filters b/xsd/dist/examples/cxx/tree/custom/double/double-10.0.vcxproj.filters deleted file mode 100644 index b36f95b..0000000 --- a/xsd/dist/examples/cxx/tree/custom/double/double-10.0.vcxproj.filters +++ /dev/null @@ -1,54 +0,0 @@ - - - - - {9AB5F296-2836-4A71-A39E-8D63EECB86D8} - cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx - - - {CDC85F55-DEE6-4EB3-9B72-1CBDDA21CFBE} - h;hpp;hxx;hm;inl;inc;xsd - - - {69c0bc69-f38e-42f7-8c11-cd6c1a121574} - ixx - - - {bad36e63-36c2-4233-87a2-68af084d612a} - xsd - - - - - Source Files - - - Source Files - - - Source Files - - - - - Header Files - - - Header Files - - - Header Files - - - - - Inline Files - - - - - - Schema Files - - - \ No newline at end of file diff --git a/xsd/dist/examples/cxx/tree/custom/double/double-7.1.vcproj b/xsd/dist/examples/cxx/tree/custom/double/double-7.1.vcproj deleted file mode 100644 index ccaa903..0000000 --- a/xsd/dist/examples/cxx/tree/custom/double/double-7.1.vcproj +++ /dev/null @@ -1,186 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/xsd/dist/examples/cxx/tree/custom/double/double-8.0.vcproj b/xsd/dist/examples/cxx/tree/custom/double/double-8.0.vcproj deleted file mode 100644 index ea63b9f..0000000 --- a/xsd/dist/examples/cxx/tree/custom/double/double-8.0.vcproj +++ /dev/null @@ -1,456 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/xsd/dist/examples/cxx/tree/custom/double/double-9.0.vcproj b/xsd/dist/examples/cxx/tree/custom/double/double-9.0.vcproj deleted file mode 100644 index 15b599b..0000000 --- a/xsd/dist/examples/cxx/tree/custom/double/double-9.0.vcproj +++ /dev/null @@ -1,453 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/xsd/dist/examples/cxx/tree/custom/double/double-vc10.vcxproj b/xsd/dist/examples/cxx/tree/custom/double/double-vc10.vcxproj new file mode 100644 index 0000000..fcedc48 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/custom/double/double-vc10.vcxproj @@ -0,0 +1,229 @@ + + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + double + {CCE6AE91-39AC-49B6-8763-742B65FCD92E} + double + Win32Proj + + + + Application + MultiByte + + + Application + MultiByte + + + Application + MultiByte + + + Application + MultiByte + + + + + + + + + + + + + + + + + + + driver + driver + driver + driver + Debug\ + Debug\ + true + true + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + true + true + Release\ + Release\ + false + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + false + + + + xsd xml-schema.xsd + xsd cxx-tree --generate-xml-schema --generate-serialization --custom-type double=double --hxx-epilogue "#include \"double-custom.hxx\"" xml-schema.xsd + + + Disabled + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebugDLL + true + + + Level3 + + + xerces-c_3D.lib;%(AdditionalDependencies) + $(TargetPath) + true + $(OutDir)driver.pdb + Console + false + + + MachineX86 + + + + + xsd xml-schema.xsd + xsd cxx-tree --generate-xml-schema --generate-serialization --custom-type double=double --hxx-epilogue "#include \"double-custom.hxx\"" xml-schema.xsd + + + X64 + + + Disabled + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebugDLL + true + + + Level3 + + + xerces-c_3D.lib;%(AdditionalDependencies) + $(TargetPath) + true + $(OutDir)driver.pdb + Console + false + + + MachineX64 + + + + + xsd xml-schema.xsd + xsd cxx-tree --generate-xml-schema --generate-serialization --custom-type double=double --hxx-epilogue "#include \"double-custom.hxx\"" xml-schema.xsd + + + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreadedDLL + true + + + Level3 + + + xerces-c_3.lib;%(AdditionalDependencies) + $(TargetPath) + true + Console + true + true + false + + + MachineX86 + + + + + xsd xml-schema.xsd + xsd cxx-tree --generate-xml-schema --generate-serialization --custom-type double=double --hxx-epilogue "#include \"double-custom.hxx\"" xml-schema.xsd + + + X64 + + + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreadedDLL + true + + + Level3 + + + xerces-c_3.lib;%(AdditionalDependencies) + $(TargetPath) + true + Console + true + true + false + + + MachineX64 + + + + + + + + + + + + + + + + + + + xsd order.xsd + xsd cxx-tree --generate-inline --generate-serialization --extern-xml-schema xml-schema.xsd order.xsd + xml-schema.hxx;%(AdditionalInputs) + order.hxx;order.ixx;order.cxx;%(Outputs) + xsd order.xsd + xsd cxx-tree --generate-inline --generate-serialization --extern-xml-schema xml-schema.xsd order.xsd + xml-schema.hxx;%(AdditionalInputs) + order.hxx;order.ixx;order.cxx;%(Outputs) + xsd order.xsd + xsd cxx-tree --generate-inline --generate-serialization --extern-xml-schema xml-schema.xsd order.xsd + order.hxx;order.ixx;order.cxx;%(Outputs) + xsd order.xsd + xsd cxx-tree --generate-inline --generate-serialization --extern-xml-schema xml-schema.xsd order.xsd + order.hxx;order.ixx;order.cxx;%(Outputs) + + + + + + \ No newline at end of file diff --git a/xsd/dist/examples/cxx/tree/custom/double/double-vc10.vcxproj.filters b/xsd/dist/examples/cxx/tree/custom/double/double-vc10.vcxproj.filters new file mode 100644 index 0000000..b36f95b --- /dev/null +++ b/xsd/dist/examples/cxx/tree/custom/double/double-vc10.vcxproj.filters @@ -0,0 +1,54 @@ + + + + + {9AB5F296-2836-4A71-A39E-8D63EECB86D8} + cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {CDC85F55-DEE6-4EB3-9B72-1CBDDA21CFBE} + h;hpp;hxx;hm;inl;inc;xsd + + + {69c0bc69-f38e-42f7-8c11-cd6c1a121574} + ixx + + + {bad36e63-36c2-4233-87a2-68af084d612a} + xsd + + + + + Source Files + + + Source Files + + + Source Files + + + + + Header Files + + + Header Files + + + Header Files + + + + + Inline Files + + + + + + Schema Files + + + \ No newline at end of file diff --git a/xsd/dist/examples/cxx/tree/custom/double/double-vc11.vcxproj b/xsd/dist/examples/cxx/tree/custom/double/double-vc11.vcxproj new file mode 100644 index 0000000..eebb33b --- /dev/null +++ b/xsd/dist/examples/cxx/tree/custom/double/double-vc11.vcxproj @@ -0,0 +1,233 @@ + + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + double + {CCE6AE91-39AC-49B6-8763-742B65FCD92E} + double + Win32Proj + + + + Application + v110 + MultiByte + + + Application + v110 + MultiByte + + + Application + v110 + MultiByte + + + Application + v110 + MultiByte + + + + + + + + + + + + + + + + + + + driver + driver + driver + driver + Debug\ + Debug\ + true + true + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + true + true + Release\ + Release\ + false + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + false + + + + xsd xml-schema.xsd + xsd cxx-tree --generate-xml-schema --generate-serialization --custom-type double=double --hxx-epilogue "#include \"double-custom.hxx\"" xml-schema.xsd + + + Disabled + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebugDLL + true + + + Level3 + + + xerces-c_3D.lib;%(AdditionalDependencies) + $(TargetPath) + true + $(OutDir)driver.pdb + Console + false + + + MachineX86 + + + + + xsd xml-schema.xsd + xsd cxx-tree --generate-xml-schema --generate-serialization --custom-type double=double --hxx-epilogue "#include \"double-custom.hxx\"" xml-schema.xsd + + + X64 + + + Disabled + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebugDLL + true + + + Level3 + + + xerces-c_3D.lib;%(AdditionalDependencies) + $(TargetPath) + true + $(OutDir)driver.pdb + Console + false + + + MachineX64 + + + + + xsd xml-schema.xsd + xsd cxx-tree --generate-xml-schema --generate-serialization --custom-type double=double --hxx-epilogue "#include \"double-custom.hxx\"" xml-schema.xsd + + + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreadedDLL + true + + + Level3 + + + xerces-c_3.lib;%(AdditionalDependencies) + $(TargetPath) + true + Console + true + true + false + + + MachineX86 + + + + + xsd xml-schema.xsd + xsd cxx-tree --generate-xml-schema --generate-serialization --custom-type double=double --hxx-epilogue "#include \"double-custom.hxx\"" xml-schema.xsd + + + X64 + + + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreadedDLL + true + + + Level3 + + + xerces-c_3.lib;%(AdditionalDependencies) + $(TargetPath) + true + Console + true + true + false + + + MachineX64 + + + + + + + + + + + + + + + + + + + xsd order.xsd + xsd cxx-tree --generate-inline --generate-serialization --extern-xml-schema xml-schema.xsd order.xsd + xml-schema.hxx;%(AdditionalInputs) + order.hxx;order.ixx;order.cxx;%(Outputs) + xsd order.xsd + xsd cxx-tree --generate-inline --generate-serialization --extern-xml-schema xml-schema.xsd order.xsd + xml-schema.hxx;%(AdditionalInputs) + order.hxx;order.ixx;order.cxx;%(Outputs) + xsd order.xsd + xsd cxx-tree --generate-inline --generate-serialization --extern-xml-schema xml-schema.xsd order.xsd + order.hxx;order.ixx;order.cxx;%(Outputs) + xsd order.xsd + xsd cxx-tree --generate-inline --generate-serialization --extern-xml-schema xml-schema.xsd order.xsd + order.hxx;order.ixx;order.cxx;%(Outputs) + + + + + + \ No newline at end of file diff --git a/xsd/dist/examples/cxx/tree/custom/double/double-vc11.vcxproj.filters b/xsd/dist/examples/cxx/tree/custom/double/double-vc11.vcxproj.filters new file mode 100644 index 0000000..b36f95b --- /dev/null +++ b/xsd/dist/examples/cxx/tree/custom/double/double-vc11.vcxproj.filters @@ -0,0 +1,54 @@ + + + + + {9AB5F296-2836-4A71-A39E-8D63EECB86D8} + cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {CDC85F55-DEE6-4EB3-9B72-1CBDDA21CFBE} + h;hpp;hxx;hm;inl;inc;xsd + + + {69c0bc69-f38e-42f7-8c11-cd6c1a121574} + ixx + + + {bad36e63-36c2-4233-87a2-68af084d612a} + xsd + + + + + Source Files + + + Source Files + + + Source Files + + + + + Header Files + + + Header Files + + + Header Files + + + + + Inline Files + + + + + + Schema Files + + + \ No newline at end of file diff --git a/xsd/dist/examples/cxx/tree/custom/double/double-vc12.vcxproj b/xsd/dist/examples/cxx/tree/custom/double/double-vc12.vcxproj new file mode 100644 index 0000000..537153e --- /dev/null +++ b/xsd/dist/examples/cxx/tree/custom/double/double-vc12.vcxproj @@ -0,0 +1,237 @@ + + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + double + {CCE6AE91-39AC-49B6-8763-742B65FCD92E} + double + Win32Proj + + + + Application + v120 + MultiByte + + + Application + v120 + MultiByte + + + Application + v120 + MultiByte + + + Application + v120 + MultiByte + + + + + + + + + + + + + + + + + + + driver + driver + driver + driver + Debug\ + Debug\ + true + true + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + true + true + Release\ + Release\ + false + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + false + + + + xsd xml-schema.xsd + xsd cxx-tree --generate-xml-schema --generate-serialization --custom-type double=double --hxx-epilogue "#include \"double-custom.hxx\"" xml-schema.xsd + + + Disabled + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebugDLL + true + + + Level3 + true + + + xerces-c_3D.lib;%(AdditionalDependencies) + $(TargetPath) + true + $(OutDir)driver.pdb + Console + false + + + MachineX86 + + + + + xsd xml-schema.xsd + xsd cxx-tree --generate-xml-schema --generate-serialization --custom-type double=double --hxx-epilogue "#include \"double-custom.hxx\"" xml-schema.xsd + + + X64 + + + Disabled + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebugDLL + true + + + Level3 + true + + + xerces-c_3D.lib;%(AdditionalDependencies) + $(TargetPath) + true + $(OutDir)driver.pdb + Console + false + + + MachineX64 + + + + + xsd xml-schema.xsd + xsd cxx-tree --generate-xml-schema --generate-serialization --custom-type double=double --hxx-epilogue "#include \"double-custom.hxx\"" xml-schema.xsd + + + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreadedDLL + true + + + Level3 + true + + + xerces-c_3.lib;%(AdditionalDependencies) + $(TargetPath) + true + Console + true + true + false + + + MachineX86 + + + + + xsd xml-schema.xsd + xsd cxx-tree --generate-xml-schema --generate-serialization --custom-type double=double --hxx-epilogue "#include \"double-custom.hxx\"" xml-schema.xsd + + + X64 + + + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreadedDLL + true + + + Level3 + true + + + xerces-c_3.lib;%(AdditionalDependencies) + $(TargetPath) + true + Console + true + true + false + + + MachineX64 + + + + + + + + + + + + + + + + + + + xsd order.xsd + xsd cxx-tree --generate-inline --generate-serialization --extern-xml-schema xml-schema.xsd order.xsd + xml-schema.hxx;%(AdditionalInputs) + order.hxx;order.ixx;order.cxx;%(Outputs) + xsd order.xsd + xsd cxx-tree --generate-inline --generate-serialization --extern-xml-schema xml-schema.xsd order.xsd + xml-schema.hxx;%(AdditionalInputs) + order.hxx;order.ixx;order.cxx;%(Outputs) + xsd order.xsd + xsd cxx-tree --generate-inline --generate-serialization --extern-xml-schema xml-schema.xsd order.xsd + order.hxx;order.ixx;order.cxx;%(Outputs) + xsd order.xsd + xsd cxx-tree --generate-inline --generate-serialization --extern-xml-schema xml-schema.xsd order.xsd + order.hxx;order.ixx;order.cxx;%(Outputs) + + + + + + \ No newline at end of file diff --git a/xsd/dist/examples/cxx/tree/custom/double/double-vc12.vcxproj.filters b/xsd/dist/examples/cxx/tree/custom/double/double-vc12.vcxproj.filters new file mode 100644 index 0000000..b36f95b --- /dev/null +++ b/xsd/dist/examples/cxx/tree/custom/double/double-vc12.vcxproj.filters @@ -0,0 +1,54 @@ + + + + + {9AB5F296-2836-4A71-A39E-8D63EECB86D8} + cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {CDC85F55-DEE6-4EB3-9B72-1CBDDA21CFBE} + h;hpp;hxx;hm;inl;inc;xsd + + + {69c0bc69-f38e-42f7-8c11-cd6c1a121574} + ixx + + + {bad36e63-36c2-4233-87a2-68af084d612a} + xsd + + + + + Source Files + + + Source Files + + + Source Files + + + + + Header Files + + + Header Files + + + Header Files + + + + + Inline Files + + + + + + Schema Files + + + \ No newline at end of file diff --git a/xsd/dist/examples/cxx/tree/custom/double/double-vc8.vcproj b/xsd/dist/examples/cxx/tree/custom/double/double-vc8.vcproj new file mode 100644 index 0000000..39a1945 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/custom/double/double-vc8.vcproj @@ -0,0 +1,456 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/xsd/dist/examples/cxx/tree/custom/double/double-vc9.vcproj b/xsd/dist/examples/cxx/tree/custom/double/double-vc9.vcproj new file mode 100644 index 0000000..8cb6e4e --- /dev/null +++ b/xsd/dist/examples/cxx/tree/custom/double/double-vc9.vcproj @@ -0,0 +1,453 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/xsd/dist/examples/cxx/tree/custom/double/double-xerces2-7.1.vcproj b/xsd/dist/examples/cxx/tree/custom/double/double-xerces2-7.1.vcproj deleted file mode 100644 index d4a28aa..0000000 --- a/xsd/dist/examples/cxx/tree/custom/double/double-xerces2-7.1.vcproj +++ /dev/null @@ -1,186 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/xsd/dist/examples/cxx/tree/custom/double/double-xerces2-8.0.vcproj b/xsd/dist/examples/cxx/tree/custom/double/double-xerces2-8.0.vcproj deleted file mode 100644 index 8dcfb74..0000000 --- a/xsd/dist/examples/cxx/tree/custom/double/double-xerces2-8.0.vcproj +++ /dev/null @@ -1,456 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/xsd/dist/examples/cxx/tree/custom/double/double-xerces2-9.0.vcproj b/xsd/dist/examples/cxx/tree/custom/double/double-xerces2-9.0.vcproj deleted file mode 100644 index 0915560..0000000 --- a/xsd/dist/examples/cxx/tree/custom/double/double-xerces2-9.0.vcproj +++ /dev/null @@ -1,453 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/xsd/dist/examples/cxx/tree/custom/mixed/makefile b/xsd/dist/examples/cxx/tree/custom/mixed/makefile index a5ea87e..c5dac63 100644 --- a/xsd/dist/examples/cxx/tree/custom/mixed/makefile +++ b/xsd/dist/examples/cxx/tree/custom/mixed/makefile @@ -5,7 +5,14 @@ include $(root)/build/xsd/tree-rules.make override XSDFLAGS += --generate-inline --generate-serialization \ ---custom-type bio=/bio_base --hxx-epilogue '\#include "people-custom.hxx"' +--hxx-epilogue '\#include "people-custom.hxx"' + +ifneq ($(shell uname -o),Msys) +override XSDFLAGS += --custom-type bio=/bio_base +else +# Prevent MSYS from converting / to Windows path. +override XSDFLAGS += --custom-type bio=//bio_base +endif # Build. diff --git a/xsd/dist/examples/cxx/tree/custom/mixed/mixed-10.0.vcxproj b/xsd/dist/examples/cxx/tree/custom/mixed/mixed-10.0.vcxproj deleted file mode 100644 index 9071bcc..0000000 --- a/xsd/dist/examples/cxx/tree/custom/mixed/mixed-10.0.vcxproj +++ /dev/null @@ -1,212 +0,0 @@ - - - - - Debug - Win32 - - - Debug - x64 - - - Release - Win32 - - - Release - x64 - - - - mixed - {26CE0C08-7621-403A-88A7-206E64F32C66} - mixed - Win32Proj - - - - Application - MultiByte - - - Application - MultiByte - - - Application - MultiByte - - - Application - MultiByte - - - - - - - - - - - - - - - - - - - driver - driver - driver - driver - Debug\ - Debug\ - true - $(Platform)\$(Configuration)\ - $(Platform)\$(Configuration)\ - true - Release\ - Release\ - false - $(Platform)\$(Configuration)\ - $(Platform)\$(Configuration)\ - false - - - - Disabled - WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebug - true - - - Level3 - EditAndContinue - - - xerces-c_3D.lib;%(AdditionalDependencies) - $(TargetPath) - true - $(OutDir)driver.pdb - Console - false - - - MachineX86 - - - - - X64 - - - Disabled - WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebug - true - - - Level3 - ProgramDatabase - - - xerces-c_3D.lib;%(AdditionalDependencies) - $(TargetPath) - true - $(OutDir)driver.pdb - Console - false - - - MachineX64 - - - - - WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - MultiThreaded - true - - - Level3 - ProgramDatabase - - - xerces-c_3.lib;%(AdditionalDependencies) - $(TargetPath) - true - Console - true - true - false - - - MachineX86 - - - - - X64 - - - WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - MultiThreaded - true - - - Level3 - ProgramDatabase - - - xerces-c_3.lib;%(AdditionalDependencies) - $(TargetPath) - true - Console - true - true - false - - - MachineX64 - - - - - - - - - - - - - - - - - - xsd people.xsd - xsd cxx-tree --generate-inline --generate-serialization --custom-type bio=/bio_base --hxx-epilogue "#include \"people-custom.hxx\"" people.xsd - people.hxx;people.ixx;people.cxx;%(Outputs) - xsd people.xsd - xsd cxx-tree --generate-inline --generate-serialization --custom-type bio=/bio_base --hxx-epilogue "#include \"people-custom.hxx\"" people.xsd - people.hxx;people.ixx;people.cxx;%(Outputs) - xsd people.xsd - xsd cxx-tree --generate-inline --generate-serialization --custom-type bio=/bio_base --hxx-epilogue "#include \"people-custom.hxx\"" people.xsd - people.hxx;people.ixx;people.cxx;%(Outputs) - xsd people.xsd - xsd cxx-tree --generate-inline --generate-serialization --custom-type bio=/bio_base --hxx-epilogue "#include \"people-custom.hxx\"" people.xsd - people.hxx;people.ixx;people.cxx;%(Outputs) - - - - - - \ No newline at end of file diff --git a/xsd/dist/examples/cxx/tree/custom/mixed/mixed-10.0.vcxproj.filters b/xsd/dist/examples/cxx/tree/custom/mixed/mixed-10.0.vcxproj.filters deleted file mode 100644 index 1f317e1..0000000 --- a/xsd/dist/examples/cxx/tree/custom/mixed/mixed-10.0.vcxproj.filters +++ /dev/null @@ -1,51 +0,0 @@ - - - - - {CBA3D0E2-DDB8-4ABE-8B5A-7A28191CA323} - cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx - - - {54846A6A-25CD-4C8C-A5F1-2DAC77554F47} - h;hpp;hxx;hm;inl;inc;xsd - - - {ba5c74eb-b935-4573-98b5-2987ed135ec6} - ixx - - - {b02fd6d3-59e2-4819-9c5b-66ef2b5834a0} - xsd - - - - - Source Files - - - Source Files - - - Source Files - - - - - Header Files - - - Header Files - - - - - Inline Files - - - - - - Schema Files - - - \ No newline at end of file diff --git a/xsd/dist/examples/cxx/tree/custom/mixed/mixed-7.1.vcproj b/xsd/dist/examples/cxx/tree/custom/mixed/mixed-7.1.vcproj deleted file mode 100644 index 7f155fd..0000000 --- a/xsd/dist/examples/cxx/tree/custom/mixed/mixed-7.1.vcproj +++ /dev/null @@ -1,177 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/xsd/dist/examples/cxx/tree/custom/mixed/mixed-8.0.vcproj b/xsd/dist/examples/cxx/tree/custom/mixed/mixed-8.0.vcproj deleted file mode 100644 index ce238d4..0000000 --- a/xsd/dist/examples/cxx/tree/custom/mixed/mixed-8.0.vcproj +++ /dev/null @@ -1,440 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/xsd/dist/examples/cxx/tree/custom/mixed/mixed-9.0.vcproj b/xsd/dist/examples/cxx/tree/custom/mixed/mixed-9.0.vcproj deleted file mode 100644 index 5e3c6da..0000000 --- a/xsd/dist/examples/cxx/tree/custom/mixed/mixed-9.0.vcproj +++ /dev/null @@ -1,437 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/xsd/dist/examples/cxx/tree/custom/mixed/mixed-vc10.vcxproj b/xsd/dist/examples/cxx/tree/custom/mixed/mixed-vc10.vcxproj new file mode 100644 index 0000000..86258d4 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/custom/mixed/mixed-vc10.vcxproj @@ -0,0 +1,208 @@ + + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + mixed + {26CE0C08-7621-403A-88A7-206E64F32C66} + mixed + Win32Proj + + + + Application + MultiByte + + + Application + MultiByte + + + Application + MultiByte + + + Application + MultiByte + + + + + + + + + + + + + + + + + + + driver + driver + driver + driver + Debug\ + Debug\ + true + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + true + Release\ + Release\ + false + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + false + + + + Disabled + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebugDLL + true + + + Level3 + + + xerces-c_3D.lib;%(AdditionalDependencies) + $(TargetPath) + true + $(OutDir)driver.pdb + Console + false + + + MachineX86 + + + + + X64 + + + Disabled + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebugDLL + true + + + Level3 + + + xerces-c_3D.lib;%(AdditionalDependencies) + $(TargetPath) + true + $(OutDir)driver.pdb + Console + false + + + MachineX64 + + + + + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreadedDLL + true + + + Level3 + + + xerces-c_3.lib;%(AdditionalDependencies) + $(TargetPath) + true + Console + true + true + false + + + MachineX86 + + + + + X64 + + + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreadedDLL + true + + + Level3 + + + xerces-c_3.lib;%(AdditionalDependencies) + $(TargetPath) + true + Console + true + true + false + + + MachineX64 + + + + + + + + + + + + + + + + + + xsd people.xsd + xsd cxx-tree --generate-inline --generate-serialization --custom-type bio=/bio_base --hxx-epilogue "#include \"people-custom.hxx\"" people.xsd + people.hxx;people.ixx;people.cxx;%(Outputs) + xsd people.xsd + xsd cxx-tree --generate-inline --generate-serialization --custom-type bio=/bio_base --hxx-epilogue "#include \"people-custom.hxx\"" people.xsd + people.hxx;people.ixx;people.cxx;%(Outputs) + xsd people.xsd + xsd cxx-tree --generate-inline --generate-serialization --custom-type bio=/bio_base --hxx-epilogue "#include \"people-custom.hxx\"" people.xsd + people.hxx;people.ixx;people.cxx;%(Outputs) + xsd people.xsd + xsd cxx-tree --generate-inline --generate-serialization --custom-type bio=/bio_base --hxx-epilogue "#include \"people-custom.hxx\"" people.xsd + people.hxx;people.ixx;people.cxx;%(Outputs) + + + + + + \ No newline at end of file diff --git a/xsd/dist/examples/cxx/tree/custom/mixed/mixed-vc10.vcxproj.filters b/xsd/dist/examples/cxx/tree/custom/mixed/mixed-vc10.vcxproj.filters new file mode 100644 index 0000000..1f317e1 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/custom/mixed/mixed-vc10.vcxproj.filters @@ -0,0 +1,51 @@ + + + + + {CBA3D0E2-DDB8-4ABE-8B5A-7A28191CA323} + cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {54846A6A-25CD-4C8C-A5F1-2DAC77554F47} + h;hpp;hxx;hm;inl;inc;xsd + + + {ba5c74eb-b935-4573-98b5-2987ed135ec6} + ixx + + + {b02fd6d3-59e2-4819-9c5b-66ef2b5834a0} + xsd + + + + + Source Files + + + Source Files + + + Source Files + + + + + Header Files + + + Header Files + + + + + Inline Files + + + + + + Schema Files + + + \ No newline at end of file diff --git a/xsd/dist/examples/cxx/tree/custom/mixed/mixed-vc11.vcxproj b/xsd/dist/examples/cxx/tree/custom/mixed/mixed-vc11.vcxproj new file mode 100644 index 0000000..9afcc81 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/custom/mixed/mixed-vc11.vcxproj @@ -0,0 +1,212 @@ + + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + mixed + {26CE0C08-7621-403A-88A7-206E64F32C66} + mixed + Win32Proj + + + + Application + v110 + MultiByte + + + Application + v110 + MultiByte + + + Application + v110 + MultiByte + + + Application + v110 + MultiByte + + + + + + + + + + + + + + + + + + + driver + driver + driver + driver + Debug\ + Debug\ + true + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + true + Release\ + Release\ + false + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + false + + + + Disabled + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebugDLL + true + + + Level3 + + + xerces-c_3D.lib;%(AdditionalDependencies) + $(TargetPath) + true + $(OutDir)driver.pdb + Console + false + + + MachineX86 + + + + + X64 + + + Disabled + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebugDLL + true + + + Level3 + + + xerces-c_3D.lib;%(AdditionalDependencies) + $(TargetPath) + true + $(OutDir)driver.pdb + Console + false + + + MachineX64 + + + + + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreadedDLL + true + + + Level3 + + + xerces-c_3.lib;%(AdditionalDependencies) + $(TargetPath) + true + Console + true + true + false + + + MachineX86 + + + + + X64 + + + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreadedDLL + true + + + Level3 + + + xerces-c_3.lib;%(AdditionalDependencies) + $(TargetPath) + true + Console + true + true + false + + + MachineX64 + + + + + + + + + + + + + + + + + + xsd people.xsd + xsd cxx-tree --generate-inline --generate-serialization --custom-type bio=/bio_base --hxx-epilogue "#include \"people-custom.hxx\"" people.xsd + people.hxx;people.ixx;people.cxx;%(Outputs) + xsd people.xsd + xsd cxx-tree --generate-inline --generate-serialization --custom-type bio=/bio_base --hxx-epilogue "#include \"people-custom.hxx\"" people.xsd + people.hxx;people.ixx;people.cxx;%(Outputs) + xsd people.xsd + xsd cxx-tree --generate-inline --generate-serialization --custom-type bio=/bio_base --hxx-epilogue "#include \"people-custom.hxx\"" people.xsd + people.hxx;people.ixx;people.cxx;%(Outputs) + xsd people.xsd + xsd cxx-tree --generate-inline --generate-serialization --custom-type bio=/bio_base --hxx-epilogue "#include \"people-custom.hxx\"" people.xsd + people.hxx;people.ixx;people.cxx;%(Outputs) + + + + + + \ No newline at end of file diff --git a/xsd/dist/examples/cxx/tree/custom/mixed/mixed-vc11.vcxproj.filters b/xsd/dist/examples/cxx/tree/custom/mixed/mixed-vc11.vcxproj.filters new file mode 100644 index 0000000..1f317e1 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/custom/mixed/mixed-vc11.vcxproj.filters @@ -0,0 +1,51 @@ + + + + + {CBA3D0E2-DDB8-4ABE-8B5A-7A28191CA323} + cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {54846A6A-25CD-4C8C-A5F1-2DAC77554F47} + h;hpp;hxx;hm;inl;inc;xsd + + + {ba5c74eb-b935-4573-98b5-2987ed135ec6} + ixx + + + {b02fd6d3-59e2-4819-9c5b-66ef2b5834a0} + xsd + + + + + Source Files + + + Source Files + + + Source Files + + + + + Header Files + + + Header Files + + + + + Inline Files + + + + + + Schema Files + + + \ No newline at end of file diff --git a/xsd/dist/examples/cxx/tree/custom/mixed/mixed-vc12.vcxproj b/xsd/dist/examples/cxx/tree/custom/mixed/mixed-vc12.vcxproj new file mode 100644 index 0000000..a7b4f73 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/custom/mixed/mixed-vc12.vcxproj @@ -0,0 +1,216 @@ + + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + mixed + {26CE0C08-7621-403A-88A7-206E64F32C66} + mixed + Win32Proj + + + + Application + v120 + MultiByte + + + Application + v120 + MultiByte + + + Application + v120 + MultiByte + + + Application + v120 + MultiByte + + + + + + + + + + + + + + + + + + + driver + driver + driver + driver + Debug\ + Debug\ + true + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + true + Release\ + Release\ + false + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + false + + + + Disabled + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebugDLL + true + + + Level3 + true + + + xerces-c_3D.lib;%(AdditionalDependencies) + $(TargetPath) + true + $(OutDir)driver.pdb + Console + false + + + MachineX86 + + + + + X64 + + + Disabled + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebugDLL + true + + + Level3 + true + + + xerces-c_3D.lib;%(AdditionalDependencies) + $(TargetPath) + true + $(OutDir)driver.pdb + Console + false + + + MachineX64 + + + + + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreadedDLL + true + + + Level3 + true + + + xerces-c_3.lib;%(AdditionalDependencies) + $(TargetPath) + true + Console + true + true + false + + + MachineX86 + + + + + X64 + + + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreadedDLL + true + + + Level3 + true + + + xerces-c_3.lib;%(AdditionalDependencies) + $(TargetPath) + true + Console + true + true + false + + + MachineX64 + + + + + + + + + + + + + + + + + + xsd people.xsd + xsd cxx-tree --generate-inline --generate-serialization --custom-type bio=/bio_base --hxx-epilogue "#include \"people-custom.hxx\"" people.xsd + people.hxx;people.ixx;people.cxx;%(Outputs) + xsd people.xsd + xsd cxx-tree --generate-inline --generate-serialization --custom-type bio=/bio_base --hxx-epilogue "#include \"people-custom.hxx\"" people.xsd + people.hxx;people.ixx;people.cxx;%(Outputs) + xsd people.xsd + xsd cxx-tree --generate-inline --generate-serialization --custom-type bio=/bio_base --hxx-epilogue "#include \"people-custom.hxx\"" people.xsd + people.hxx;people.ixx;people.cxx;%(Outputs) + xsd people.xsd + xsd cxx-tree --generate-inline --generate-serialization --custom-type bio=/bio_base --hxx-epilogue "#include \"people-custom.hxx\"" people.xsd + people.hxx;people.ixx;people.cxx;%(Outputs) + + + + + + \ No newline at end of file diff --git a/xsd/dist/examples/cxx/tree/custom/mixed/mixed-vc12.vcxproj.filters b/xsd/dist/examples/cxx/tree/custom/mixed/mixed-vc12.vcxproj.filters new file mode 100644 index 0000000..1f317e1 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/custom/mixed/mixed-vc12.vcxproj.filters @@ -0,0 +1,51 @@ + + + + + {CBA3D0E2-DDB8-4ABE-8B5A-7A28191CA323} + cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {54846A6A-25CD-4C8C-A5F1-2DAC77554F47} + h;hpp;hxx;hm;inl;inc;xsd + + + {ba5c74eb-b935-4573-98b5-2987ed135ec6} + ixx + + + {b02fd6d3-59e2-4819-9c5b-66ef2b5834a0} + xsd + + + + + Source Files + + + Source Files + + + Source Files + + + + + Header Files + + + Header Files + + + + + Inline Files + + + + + + Schema Files + + + \ No newline at end of file diff --git a/xsd/dist/examples/cxx/tree/custom/mixed/mixed-vc8.vcproj b/xsd/dist/examples/cxx/tree/custom/mixed/mixed-vc8.vcproj new file mode 100644 index 0000000..a02149b --- /dev/null +++ b/xsd/dist/examples/cxx/tree/custom/mixed/mixed-vc8.vcproj @@ -0,0 +1,440 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/xsd/dist/examples/cxx/tree/custom/mixed/mixed-vc9.vcproj b/xsd/dist/examples/cxx/tree/custom/mixed/mixed-vc9.vcproj new file mode 100644 index 0000000..331c786 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/custom/mixed/mixed-vc9.vcproj @@ -0,0 +1,437 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/xsd/dist/examples/cxx/tree/custom/mixed/mixed-xerces2-7.1.vcproj b/xsd/dist/examples/cxx/tree/custom/mixed/mixed-xerces2-7.1.vcproj deleted file mode 100644 index 148bc8f..0000000 --- a/xsd/dist/examples/cxx/tree/custom/mixed/mixed-xerces2-7.1.vcproj +++ /dev/null @@ -1,177 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/xsd/dist/examples/cxx/tree/custom/mixed/mixed-xerces2-8.0.vcproj b/xsd/dist/examples/cxx/tree/custom/mixed/mixed-xerces2-8.0.vcproj deleted file mode 100644 index 94715cf..0000000 --- a/xsd/dist/examples/cxx/tree/custom/mixed/mixed-xerces2-8.0.vcproj +++ /dev/null @@ -1,440 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/xsd/dist/examples/cxx/tree/custom/mixed/mixed-xerces2-9.0.vcproj b/xsd/dist/examples/cxx/tree/custom/mixed/mixed-xerces2-9.0.vcproj deleted file mode 100644 index bee87ae..0000000 --- a/xsd/dist/examples/cxx/tree/custom/mixed/mixed-xerces2-9.0.vcproj +++ /dev/null @@ -1,437 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/xsd/dist/examples/cxx/tree/custom/taxonomy/taxonomy-10.0.vcxproj b/xsd/dist/examples/cxx/tree/custom/taxonomy/taxonomy-10.0.vcxproj deleted file mode 100644 index 56302f7..0000000 --- a/xsd/dist/examples/cxx/tree/custom/taxonomy/taxonomy-10.0.vcxproj +++ /dev/null @@ -1,214 +0,0 @@ - - - - - Debug - Win32 - - - Debug - x64 - - - Release - Win32 - - - Release - x64 - - - - taxonomy - {B3108E70-7B4E-4DDA-8872-0DC4AFDCB2D9} - taxonomy - Win32Proj - - - - Application - MultiByte - - - Application - MultiByte - - - Application - MultiByte - - - Application - MultiByte - - - - - - - - - - - - - - - - - - - driver - driver - driver - driver - Debug\ - Debug\ - true - $(Platform)\$(Configuration)\ - $(Platform)\$(Configuration)\ - true - Release\ - Release\ - false - $(Platform)\$(Configuration)\ - $(Platform)\$(Configuration)\ - false - - - - Disabled - WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebug - true - - - Level3 - EditAndContinue - - - xerces-c_3D.lib;%(AdditionalDependencies) - $(TargetPath) - true - $(OutDir)driver.pdb - Console - false - - - MachineX86 - - - - - X64 - - - Disabled - WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebug - true - - - Level3 - ProgramDatabase - - - xerces-c_3D.lib;%(AdditionalDependencies) - $(TargetPath) - true - $(OutDir)driver.pdb - Console - false - - - MachineX64 - - - - - WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - MultiThreaded - true - - - Level3 - ProgramDatabase - - - xerces-c_3.lib;%(AdditionalDependencies) - $(TargetPath) - true - Console - true - true - false - - - MachineX86 - - - - - X64 - - - WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - MultiThreaded - true - - - Level3 - ProgramDatabase - - - xerces-c_3.lib;%(AdditionalDependencies) - $(TargetPath) - true - Console - true - true - false - - - MachineX64 - - - - - - - - - - - - - - - - - - - - xsd people.xsd - xsd cxx-tree --generate-inline --generate-forward --generate-polymorphic --polymorphic-type person --custom-type "person=person_impl<person_base>/person_base" --custom-type "superman=superman_impl<superman_base>/superman_base" --custom-type "batman=batman_impl<batman_base>/batman_base" --fwd-prologue "#include \"people-custom-fwd.hxx\"" --hxx-prologue "#include \"people-custom.hxx\"" people.xsd - people-fwd.hxx;people.hxx;people.ixx;people.cxx;%(Outputs) - xsd people.xsd - xsd cxx-tree --generate-inline --generate-forward --generate-polymorphic --polymorphic-type person --custom-type "person=person_impl<person_base>/person_base" --custom-type "superman=superman_impl<superman_base>/superman_base" --custom-type "batman=batman_impl<batman_base>/batman_base" --fwd-prologue "#include \"people-custom-fwd.hxx\"" --hxx-prologue "#include \"people-custom.hxx\"" people.xsd - people-fwd.hxx;people.hxx;people.ixx;people.cxx;%(Outputs) - xsd people.xsd - xsd cxx-tree --generate-inline --generate-forward --generate-polymorphic --polymorphic-type person --custom-type "person=person_impl<person_base>/person_base" --custom-type "superman=superman_impl<superman_base>/superman_base" --custom-type "batman=batman_impl<batman_base>/batman_base" --fwd-prologue "#include \"people-custom-fwd.hxx\"" --hxx-prologue "#include \"people-custom.hxx\"" people.xsd - people-fwd.hxx;people.hxx;people.ixx;people.cxx;%(Outputs) - xsd people.xsd - xsd cxx-tree --generate-inline --generate-forward --generate-polymorphic --polymorphic-type person --custom-type "person=person_impl<person_base>/person_base" --custom-type "superman=superman_impl<superman_base>/superman_base" --custom-type "batman=batman_impl<batman_base>/batman_base" --fwd-prologue "#include \"people-custom-fwd.hxx\"" --hxx-prologue "#include \"people-custom.hxx\"" people.xsd - people-fwd.hxx;people.hxx;people.ixx;people.cxx;%(Outputs) - - - - - - \ No newline at end of file diff --git a/xsd/dist/examples/cxx/tree/custom/taxonomy/taxonomy-10.0.vcxproj.filters b/xsd/dist/examples/cxx/tree/custom/taxonomy/taxonomy-10.0.vcxproj.filters deleted file mode 100644 index 78058c3..0000000 --- a/xsd/dist/examples/cxx/tree/custom/taxonomy/taxonomy-10.0.vcxproj.filters +++ /dev/null @@ -1,57 +0,0 @@ - - - - - {E2FFBF97-01E8-483D-8B32-D8D6F065E4C7} - cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx - - - {0B3DDFAD-4254-48B9-BB24-1FC92DD1E7F6} - h;hpp;hxx;hm;inl;inc;xsd - - - {a33f9d45-baba-483a-83c4-9421790f7d92} - ixx - - - {0c14530b-7a4b-4841-864e-e8da7ae18eea} - xsd - - - - - Source Files - - - Source Files - - - Source Files - - - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - - - Inline Files - - - - - - Schema Files - - - \ No newline at end of file diff --git a/xsd/dist/examples/cxx/tree/custom/taxonomy/taxonomy-7.1.vcproj b/xsd/dist/examples/cxx/tree/custom/taxonomy/taxonomy-7.1.vcproj deleted file mode 100644 index 2f8b136..0000000 --- a/xsd/dist/examples/cxx/tree/custom/taxonomy/taxonomy-7.1.vcproj +++ /dev/null @@ -1,183 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/xsd/dist/examples/cxx/tree/custom/taxonomy/taxonomy-8.0.vcproj b/xsd/dist/examples/cxx/tree/custom/taxonomy/taxonomy-8.0.vcproj deleted file mode 100644 index 72fe0ba..0000000 --- a/xsd/dist/examples/cxx/tree/custom/taxonomy/taxonomy-8.0.vcproj +++ /dev/null @@ -1,448 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/xsd/dist/examples/cxx/tree/custom/taxonomy/taxonomy-9.0.vcproj b/xsd/dist/examples/cxx/tree/custom/taxonomy/taxonomy-9.0.vcproj deleted file mode 100644 index fa728e2..0000000 --- a/xsd/dist/examples/cxx/tree/custom/taxonomy/taxonomy-9.0.vcproj +++ /dev/null @@ -1,445 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/xsd/dist/examples/cxx/tree/custom/taxonomy/taxonomy-vc10.vcxproj b/xsd/dist/examples/cxx/tree/custom/taxonomy/taxonomy-vc10.vcxproj new file mode 100644 index 0000000..24040c6 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/custom/taxonomy/taxonomy-vc10.vcxproj @@ -0,0 +1,210 @@ + + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + taxonomy + {B3108E70-7B4E-4DDA-8872-0DC4AFDCB2D9} + taxonomy + Win32Proj + + + + Application + MultiByte + + + Application + MultiByte + + + Application + MultiByte + + + Application + MultiByte + + + + + + + + + + + + + + + + + + + driver + driver + driver + driver + Debug\ + Debug\ + true + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + true + Release\ + Release\ + false + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + false + + + + Disabled + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebugDLL + true + + + Level3 + + + xerces-c_3D.lib;%(AdditionalDependencies) + $(TargetPath) + true + $(OutDir)driver.pdb + Console + false + + + MachineX86 + + + + + X64 + + + Disabled + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebugDLL + true + + + Level3 + + + xerces-c_3D.lib;%(AdditionalDependencies) + $(TargetPath) + true + $(OutDir)driver.pdb + Console + false + + + MachineX64 + + + + + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreadedDLL + true + + + Level3 + + + xerces-c_3.lib;%(AdditionalDependencies) + $(TargetPath) + true + Console + true + true + false + + + MachineX86 + + + + + X64 + + + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreadedDLL + true + + + Level3 + + + xerces-c_3.lib;%(AdditionalDependencies) + $(TargetPath) + true + Console + true + true + false + + + MachineX64 + + + + + + + + + + + + + + + + + + + + xsd people.xsd + xsd cxx-tree --generate-inline --generate-forward --generate-polymorphic --polymorphic-type person --custom-type "person=person_impl<person_base>/person_base" --custom-type "superman=superman_impl<superman_base>/superman_base" --custom-type "batman=batman_impl<batman_base>/batman_base" --fwd-prologue "#include \"people-custom-fwd.hxx\"" --hxx-prologue "#include \"people-custom.hxx\"" people.xsd + people-fwd.hxx;people.hxx;people.ixx;people.cxx;%(Outputs) + xsd people.xsd + xsd cxx-tree --generate-inline --generate-forward --generate-polymorphic --polymorphic-type person --custom-type "person=person_impl<person_base>/person_base" --custom-type "superman=superman_impl<superman_base>/superman_base" --custom-type "batman=batman_impl<batman_base>/batman_base" --fwd-prologue "#include \"people-custom-fwd.hxx\"" --hxx-prologue "#include \"people-custom.hxx\"" people.xsd + people-fwd.hxx;people.hxx;people.ixx;people.cxx;%(Outputs) + xsd people.xsd + xsd cxx-tree --generate-inline --generate-forward --generate-polymorphic --polymorphic-type person --custom-type "person=person_impl<person_base>/person_base" --custom-type "superman=superman_impl<superman_base>/superman_base" --custom-type "batman=batman_impl<batman_base>/batman_base" --fwd-prologue "#include \"people-custom-fwd.hxx\"" --hxx-prologue "#include \"people-custom.hxx\"" people.xsd + people-fwd.hxx;people.hxx;people.ixx;people.cxx;%(Outputs) + xsd people.xsd + xsd cxx-tree --generate-inline --generate-forward --generate-polymorphic --polymorphic-type person --custom-type "person=person_impl<person_base>/person_base" --custom-type "superman=superman_impl<superman_base>/superman_base" --custom-type "batman=batman_impl<batman_base>/batman_base" --fwd-prologue "#include \"people-custom-fwd.hxx\"" --hxx-prologue "#include \"people-custom.hxx\"" people.xsd + people-fwd.hxx;people.hxx;people.ixx;people.cxx;%(Outputs) + + + + + + \ No newline at end of file diff --git a/xsd/dist/examples/cxx/tree/custom/taxonomy/taxonomy-vc10.vcxproj.filters b/xsd/dist/examples/cxx/tree/custom/taxonomy/taxonomy-vc10.vcxproj.filters new file mode 100644 index 0000000..78058c3 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/custom/taxonomy/taxonomy-vc10.vcxproj.filters @@ -0,0 +1,57 @@ + + + + + {E2FFBF97-01E8-483D-8B32-D8D6F065E4C7} + cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {0B3DDFAD-4254-48B9-BB24-1FC92DD1E7F6} + h;hpp;hxx;hm;inl;inc;xsd + + + {a33f9d45-baba-483a-83c4-9421790f7d92} + ixx + + + {0c14530b-7a4b-4841-864e-e8da7ae18eea} + xsd + + + + + Source Files + + + Source Files + + + Source Files + + + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + + + Inline Files + + + + + + Schema Files + + + \ No newline at end of file diff --git a/xsd/dist/examples/cxx/tree/custom/taxonomy/taxonomy-vc11.vcxproj b/xsd/dist/examples/cxx/tree/custom/taxonomy/taxonomy-vc11.vcxproj new file mode 100644 index 0000000..f10b12a --- /dev/null +++ b/xsd/dist/examples/cxx/tree/custom/taxonomy/taxonomy-vc11.vcxproj @@ -0,0 +1,214 @@ + + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + taxonomy + {B3108E70-7B4E-4DDA-8872-0DC4AFDCB2D9} + taxonomy + Win32Proj + + + + Application + v110 + MultiByte + + + Application + v110 + MultiByte + + + Application + v110 + MultiByte + + + Application + v110 + MultiByte + + + + + + + + + + + + + + + + + + + driver + driver + driver + driver + Debug\ + Debug\ + true + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + true + Release\ + Release\ + false + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + false + + + + Disabled + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebugDLL + true + + + Level3 + + + xerces-c_3D.lib;%(AdditionalDependencies) + $(TargetPath) + true + $(OutDir)driver.pdb + Console + false + + + MachineX86 + + + + + X64 + + + Disabled + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebugDLL + true + + + Level3 + + + xerces-c_3D.lib;%(AdditionalDependencies) + $(TargetPath) + true + $(OutDir)driver.pdb + Console + false + + + MachineX64 + + + + + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreadedDLL + true + + + Level3 + + + xerces-c_3.lib;%(AdditionalDependencies) + $(TargetPath) + true + Console + true + true + false + + + MachineX86 + + + + + X64 + + + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreadedDLL + true + + + Level3 + + + xerces-c_3.lib;%(AdditionalDependencies) + $(TargetPath) + true + Console + true + true + false + + + MachineX64 + + + + + + + + + + + + + + + + + + + + xsd people.xsd + xsd cxx-tree --generate-inline --generate-forward --generate-polymorphic --polymorphic-type person --custom-type "person=person_impl<person_base>/person_base" --custom-type "superman=superman_impl<superman_base>/superman_base" --custom-type "batman=batman_impl<batman_base>/batman_base" --fwd-prologue "#include \"people-custom-fwd.hxx\"" --hxx-prologue "#include \"people-custom.hxx\"" people.xsd + people-fwd.hxx;people.hxx;people.ixx;people.cxx;%(Outputs) + xsd people.xsd + xsd cxx-tree --generate-inline --generate-forward --generate-polymorphic --polymorphic-type person --custom-type "person=person_impl<person_base>/person_base" --custom-type "superman=superman_impl<superman_base>/superman_base" --custom-type "batman=batman_impl<batman_base>/batman_base" --fwd-prologue "#include \"people-custom-fwd.hxx\"" --hxx-prologue "#include \"people-custom.hxx\"" people.xsd + people-fwd.hxx;people.hxx;people.ixx;people.cxx;%(Outputs) + xsd people.xsd + xsd cxx-tree --generate-inline --generate-forward --generate-polymorphic --polymorphic-type person --custom-type "person=person_impl<person_base>/person_base" --custom-type "superman=superman_impl<superman_base>/superman_base" --custom-type "batman=batman_impl<batman_base>/batman_base" --fwd-prologue "#include \"people-custom-fwd.hxx\"" --hxx-prologue "#include \"people-custom.hxx\"" people.xsd + people-fwd.hxx;people.hxx;people.ixx;people.cxx;%(Outputs) + xsd people.xsd + xsd cxx-tree --generate-inline --generate-forward --generate-polymorphic --polymorphic-type person --custom-type "person=person_impl<person_base>/person_base" --custom-type "superman=superman_impl<superman_base>/superman_base" --custom-type "batman=batman_impl<batman_base>/batman_base" --fwd-prologue "#include \"people-custom-fwd.hxx\"" --hxx-prologue "#include \"people-custom.hxx\"" people.xsd + people-fwd.hxx;people.hxx;people.ixx;people.cxx;%(Outputs) + + + + + + \ No newline at end of file diff --git a/xsd/dist/examples/cxx/tree/custom/taxonomy/taxonomy-vc11.vcxproj.filters b/xsd/dist/examples/cxx/tree/custom/taxonomy/taxonomy-vc11.vcxproj.filters new file mode 100644 index 0000000..78058c3 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/custom/taxonomy/taxonomy-vc11.vcxproj.filters @@ -0,0 +1,57 @@ + + + + + {E2FFBF97-01E8-483D-8B32-D8D6F065E4C7} + cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {0B3DDFAD-4254-48B9-BB24-1FC92DD1E7F6} + h;hpp;hxx;hm;inl;inc;xsd + + + {a33f9d45-baba-483a-83c4-9421790f7d92} + ixx + + + {0c14530b-7a4b-4841-864e-e8da7ae18eea} + xsd + + + + + Source Files + + + Source Files + + + Source Files + + + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + + + Inline Files + + + + + + Schema Files + + + \ No newline at end of file diff --git a/xsd/dist/examples/cxx/tree/custom/taxonomy/taxonomy-vc12.vcxproj b/xsd/dist/examples/cxx/tree/custom/taxonomy/taxonomy-vc12.vcxproj new file mode 100644 index 0000000..c5579d9 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/custom/taxonomy/taxonomy-vc12.vcxproj @@ -0,0 +1,218 @@ + + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + taxonomy + {B3108E70-7B4E-4DDA-8872-0DC4AFDCB2D9} + taxonomy + Win32Proj + + + + Application + v120 + MultiByte + + + Application + v120 + MultiByte + + + Application + v120 + MultiByte + + + Application + v120 + MultiByte + + + + + + + + + + + + + + + + + + + driver + driver + driver + driver + Debug\ + Debug\ + true + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + true + Release\ + Release\ + false + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + false + + + + Disabled + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebugDLL + true + + + Level3 + true + + + xerces-c_3D.lib;%(AdditionalDependencies) + $(TargetPath) + true + $(OutDir)driver.pdb + Console + false + + + MachineX86 + + + + + X64 + + + Disabled + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebugDLL + true + + + Level3 + true + + + xerces-c_3D.lib;%(AdditionalDependencies) + $(TargetPath) + true + $(OutDir)driver.pdb + Console + false + + + MachineX64 + + + + + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreadedDLL + true + + + Level3 + true + + + xerces-c_3.lib;%(AdditionalDependencies) + $(TargetPath) + true + Console + true + true + false + + + MachineX86 + + + + + X64 + + + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreadedDLL + true + + + Level3 + true + + + xerces-c_3.lib;%(AdditionalDependencies) + $(TargetPath) + true + Console + true + true + false + + + MachineX64 + + + + + + + + + + + + + + + + + + + + xsd people.xsd + xsd cxx-tree --generate-inline --generate-forward --generate-polymorphic --polymorphic-type person --custom-type "person=person_impl<person_base>/person_base" --custom-type "superman=superman_impl<superman_base>/superman_base" --custom-type "batman=batman_impl<batman_base>/batman_base" --fwd-prologue "#include \"people-custom-fwd.hxx\"" --hxx-prologue "#include \"people-custom.hxx\"" people.xsd + people-fwd.hxx;people.hxx;people.ixx;people.cxx;%(Outputs) + xsd people.xsd + xsd cxx-tree --generate-inline --generate-forward --generate-polymorphic --polymorphic-type person --custom-type "person=person_impl<person_base>/person_base" --custom-type "superman=superman_impl<superman_base>/superman_base" --custom-type "batman=batman_impl<batman_base>/batman_base" --fwd-prologue "#include \"people-custom-fwd.hxx\"" --hxx-prologue "#include \"people-custom.hxx\"" people.xsd + people-fwd.hxx;people.hxx;people.ixx;people.cxx;%(Outputs) + xsd people.xsd + xsd cxx-tree --generate-inline --generate-forward --generate-polymorphic --polymorphic-type person --custom-type "person=person_impl<person_base>/person_base" --custom-type "superman=superman_impl<superman_base>/superman_base" --custom-type "batman=batman_impl<batman_base>/batman_base" --fwd-prologue "#include \"people-custom-fwd.hxx\"" --hxx-prologue "#include \"people-custom.hxx\"" people.xsd + people-fwd.hxx;people.hxx;people.ixx;people.cxx;%(Outputs) + xsd people.xsd + xsd cxx-tree --generate-inline --generate-forward --generate-polymorphic --polymorphic-type person --custom-type "person=person_impl<person_base>/person_base" --custom-type "superman=superman_impl<superman_base>/superman_base" --custom-type "batman=batman_impl<batman_base>/batman_base" --fwd-prologue "#include \"people-custom-fwd.hxx\"" --hxx-prologue "#include \"people-custom.hxx\"" people.xsd + people-fwd.hxx;people.hxx;people.ixx;people.cxx;%(Outputs) + + + + + + \ No newline at end of file diff --git a/xsd/dist/examples/cxx/tree/custom/taxonomy/taxonomy-vc12.vcxproj.filters b/xsd/dist/examples/cxx/tree/custom/taxonomy/taxonomy-vc12.vcxproj.filters new file mode 100644 index 0000000..78058c3 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/custom/taxonomy/taxonomy-vc12.vcxproj.filters @@ -0,0 +1,57 @@ + + + + + {E2FFBF97-01E8-483D-8B32-D8D6F065E4C7} + cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {0B3DDFAD-4254-48B9-BB24-1FC92DD1E7F6} + h;hpp;hxx;hm;inl;inc;xsd + + + {a33f9d45-baba-483a-83c4-9421790f7d92} + ixx + + + {0c14530b-7a4b-4841-864e-e8da7ae18eea} + xsd + + + + + Source Files + + + Source Files + + + Source Files + + + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + + + Inline Files + + + + + + Schema Files + + + \ No newline at end of file diff --git a/xsd/dist/examples/cxx/tree/custom/taxonomy/taxonomy-vc8.vcproj b/xsd/dist/examples/cxx/tree/custom/taxonomy/taxonomy-vc8.vcproj new file mode 100644 index 0000000..74744f4 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/custom/taxonomy/taxonomy-vc8.vcproj @@ -0,0 +1,448 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/xsd/dist/examples/cxx/tree/custom/taxonomy/taxonomy-vc9.vcproj b/xsd/dist/examples/cxx/tree/custom/taxonomy/taxonomy-vc9.vcproj new file mode 100644 index 0000000..1ff90d3 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/custom/taxonomy/taxonomy-vc9.vcproj @@ -0,0 +1,445 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/xsd/dist/examples/cxx/tree/custom/taxonomy/taxonomy-xerces2-7.1.vcproj b/xsd/dist/examples/cxx/tree/custom/taxonomy/taxonomy-xerces2-7.1.vcproj deleted file mode 100644 index bb699b1..0000000 --- a/xsd/dist/examples/cxx/tree/custom/taxonomy/taxonomy-xerces2-7.1.vcproj +++ /dev/null @@ -1,183 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/xsd/dist/examples/cxx/tree/custom/taxonomy/taxonomy-xerces2-8.0.vcproj b/xsd/dist/examples/cxx/tree/custom/taxonomy/taxonomy-xerces2-8.0.vcproj deleted file mode 100644 index f3a8e6a..0000000 --- a/xsd/dist/examples/cxx/tree/custom/taxonomy/taxonomy-xerces2-8.0.vcproj +++ /dev/null @@ -1,448 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/xsd/dist/examples/cxx/tree/custom/taxonomy/taxonomy-xerces2-9.0.vcproj b/xsd/dist/examples/cxx/tree/custom/taxonomy/taxonomy-xerces2-9.0.vcproj deleted file mode 100644 index 77eb684..0000000 --- a/xsd/dist/examples/cxx/tree/custom/taxonomy/taxonomy-xerces2-9.0.vcproj +++ /dev/null @@ -1,445 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/xsd/dist/examples/cxx/tree/custom/wildcard/makefile b/xsd/dist/examples/cxx/tree/custom/wildcard/makefile index 20ea1d2..f7561a2 100644 --- a/xsd/dist/examples/cxx/tree/custom/wildcard/makefile +++ b/xsd/dist/examples/cxx/tree/custom/wildcard/makefile @@ -5,8 +5,14 @@ include $(root)/build/xsd/tree-rules.make override XSDFLAGS += --generate-inline --generate-ostream \ ---generate-serialization --custom-type data=/data_base \ ---hxx-epilogue '\#include "wildcard-custom.hxx"' +--generate-serialization --hxx-epilogue '\#include "wildcard-custom.hxx"' + +ifneq ($(shell uname -o),Msys) +override XSDFLAGS += --custom-type data=/data_base +else +# Prevent MSYS from converting / to Windows path. +override XSDFLAGS += --custom-type data=//data_base +endif # Build. diff --git a/xsd/dist/examples/cxx/tree/custom/wildcard/wildcard-10.0.vcxproj b/xsd/dist/examples/cxx/tree/custom/wildcard/wildcard-10.0.vcxproj deleted file mode 100644 index 5356b27..0000000 --- a/xsd/dist/examples/cxx/tree/custom/wildcard/wildcard-10.0.vcxproj +++ /dev/null @@ -1,212 +0,0 @@ - - - - - Debug - Win32 - - - Debug - x64 - - - Release - Win32 - - - Release - x64 - - - - wildcard - {6CE6CDEC-F8DE-42D0-80F8-E71C0DD8F897} - wildcard - Win32Proj - - - - Application - MultiByte - - - Application - MultiByte - - - Application - MultiByte - - - Application - MultiByte - - - - - - - - - - - - - - - - - - - driver - driver - driver - driver - Debug\ - Debug\ - true - $(Platform)\$(Configuration)\ - $(Platform)\$(Configuration)\ - true - Release\ - Release\ - false - $(Platform)\$(Configuration)\ - $(Platform)\$(Configuration)\ - false - - - - Disabled - WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebug - true - - - Level3 - EditAndContinue - - - xerces-c_3D.lib;%(AdditionalDependencies) - $(TargetPath) - true - $(OutDir)driver.pdb - Console - false - - - MachineX86 - - - - - X64 - - - Disabled - WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebug - true - - - Level3 - ProgramDatabase - - - xerces-c_3D.lib;%(AdditionalDependencies) - $(TargetPath) - true - $(OutDir)driver.pdb - Console - false - - - MachineX64 - - - - - WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - MultiThreaded - true - - - Level3 - ProgramDatabase - - - xerces-c_3.lib;%(AdditionalDependencies) - $(TargetPath) - true - Console - true - true - false - - - MachineX86 - - - - - X64 - - - WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - MultiThreaded - true - - - Level3 - ProgramDatabase - - - xerces-c_3.lib;%(AdditionalDependencies) - $(TargetPath) - true - Console - true - true - false - - - MachineX64 - - - - - - - - - - - - - - - - - - xsd wildcard.xsd - xsd cxx-tree --generate-inline --generate-ostream --generate-serialization --custom-type data=/data_base --hxx-epilogue "#include \"wildcard-custom.hxx\"" wildcard.xsd - wildcard.hxx;wildcard.ixx;wildcard.cxx;%(Outputs) - xsd wildcard.xsd - xsd cxx-tree --generate-inline --generate-ostream --generate-serialization --custom-type data=/data_base --hxx-epilogue "#include \"wildcard-custom.hxx\"" wildcard.xsd - wildcard.hxx;wildcard.ixx;wildcard.cxx;%(Outputs) - xsd wildcard.xsd - xsd cxx-tree --generate-inline --generate-ostream --generate-serialization --custom-type data=/data_base --hxx-epilogue "#include \"wildcard-custom.hxx\"" wildcard.xsd - wildcard.hxx;wildcard.ixx;wildcard.cxx;%(Outputs) - xsd wildcard.xsd - xsd cxx-tree --generate-inline --generate-ostream --generate-serialization --custom-type data=/data_base --hxx-epilogue "#include \"wildcard-custom.hxx\"" wildcard.xsd - wildcard.hxx;wildcard.ixx;wildcard.cxx;%(Outputs) - - - - - - \ No newline at end of file diff --git a/xsd/dist/examples/cxx/tree/custom/wildcard/wildcard-10.0.vcxproj.filters b/xsd/dist/examples/cxx/tree/custom/wildcard/wildcard-10.0.vcxproj.filters deleted file mode 100644 index b67a77a..0000000 --- a/xsd/dist/examples/cxx/tree/custom/wildcard/wildcard-10.0.vcxproj.filters +++ /dev/null @@ -1,51 +0,0 @@ - - - - - {426B0A1E-659E-40E5-B93B-EF76EBBE0C0A} - cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx - - - {42AF0399-9A66-43B2-94AA-DBF9BEEF1E92} - h;hpp;hxx;hm;inl;inc;xsd - - - {0e336f4b-1f4c-4838-9a6a-183c80df8b67} - ixx - - - {228a47a0-93d7-4c99-9486-a589705ee401} - xsd - - - - - Source Files - - - Source Files - - - Source Files - - - - - Header Files - - - Header Files - - - - - Inline Files - - - - - - Schema Files - - - \ No newline at end of file diff --git a/xsd/dist/examples/cxx/tree/custom/wildcard/wildcard-7.1.vcproj b/xsd/dist/examples/cxx/tree/custom/wildcard/wildcard-7.1.vcproj deleted file mode 100644 index 0dc9881..0000000 --- a/xsd/dist/examples/cxx/tree/custom/wildcard/wildcard-7.1.vcproj +++ /dev/null @@ -1,177 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/xsd/dist/examples/cxx/tree/custom/wildcard/wildcard-8.0.vcproj b/xsd/dist/examples/cxx/tree/custom/wildcard/wildcard-8.0.vcproj deleted file mode 100644 index bfd4bb6..0000000 --- a/xsd/dist/examples/cxx/tree/custom/wildcard/wildcard-8.0.vcproj +++ /dev/null @@ -1,440 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/xsd/dist/examples/cxx/tree/custom/wildcard/wildcard-9.0.vcproj b/xsd/dist/examples/cxx/tree/custom/wildcard/wildcard-9.0.vcproj deleted file mode 100644 index 6254390..0000000 --- a/xsd/dist/examples/cxx/tree/custom/wildcard/wildcard-9.0.vcproj +++ /dev/null @@ -1,437 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/xsd/dist/examples/cxx/tree/custom/wildcard/wildcard-vc10.vcxproj b/xsd/dist/examples/cxx/tree/custom/wildcard/wildcard-vc10.vcxproj new file mode 100644 index 0000000..7076dd6 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/custom/wildcard/wildcard-vc10.vcxproj @@ -0,0 +1,208 @@ + + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + wildcard + {6CE6CDEC-F8DE-42D0-80F8-E71C0DD8F897} + wildcard + Win32Proj + + + + Application + MultiByte + + + Application + MultiByte + + + Application + MultiByte + + + Application + MultiByte + + + + + + + + + + + + + + + + + + + driver + driver + driver + driver + Debug\ + Debug\ + true + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + true + Release\ + Release\ + false + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + false + + + + Disabled + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebugDLL + true + + + Level3 + + + xerces-c_3D.lib;%(AdditionalDependencies) + $(TargetPath) + true + $(OutDir)driver.pdb + Console + false + + + MachineX86 + + + + + X64 + + + Disabled + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebugDLL + true + + + Level3 + + + xerces-c_3D.lib;%(AdditionalDependencies) + $(TargetPath) + true + $(OutDir)driver.pdb + Console + false + + + MachineX64 + + + + + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreadedDLL + true + + + Level3 + + + xerces-c_3.lib;%(AdditionalDependencies) + $(TargetPath) + true + Console + true + true + false + + + MachineX86 + + + + + X64 + + + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreadedDLL + true + + + Level3 + + + xerces-c_3.lib;%(AdditionalDependencies) + $(TargetPath) + true + Console + true + true + false + + + MachineX64 + + + + + + + + + + + + + + + + + + xsd wildcard.xsd + xsd cxx-tree --generate-inline --generate-ostream --generate-serialization --custom-type data=/data_base --hxx-epilogue "#include \"wildcard-custom.hxx\"" wildcard.xsd + wildcard.hxx;wildcard.ixx;wildcard.cxx;%(Outputs) + xsd wildcard.xsd + xsd cxx-tree --generate-inline --generate-ostream --generate-serialization --custom-type data=/data_base --hxx-epilogue "#include \"wildcard-custom.hxx\"" wildcard.xsd + wildcard.hxx;wildcard.ixx;wildcard.cxx;%(Outputs) + xsd wildcard.xsd + xsd cxx-tree --generate-inline --generate-ostream --generate-serialization --custom-type data=/data_base --hxx-epilogue "#include \"wildcard-custom.hxx\"" wildcard.xsd + wildcard.hxx;wildcard.ixx;wildcard.cxx;%(Outputs) + xsd wildcard.xsd + xsd cxx-tree --generate-inline --generate-ostream --generate-serialization --custom-type data=/data_base --hxx-epilogue "#include \"wildcard-custom.hxx\"" wildcard.xsd + wildcard.hxx;wildcard.ixx;wildcard.cxx;%(Outputs) + + + + + + \ No newline at end of file diff --git a/xsd/dist/examples/cxx/tree/custom/wildcard/wildcard-vc10.vcxproj.filters b/xsd/dist/examples/cxx/tree/custom/wildcard/wildcard-vc10.vcxproj.filters new file mode 100644 index 0000000..b67a77a --- /dev/null +++ b/xsd/dist/examples/cxx/tree/custom/wildcard/wildcard-vc10.vcxproj.filters @@ -0,0 +1,51 @@ + + + + + {426B0A1E-659E-40E5-B93B-EF76EBBE0C0A} + cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {42AF0399-9A66-43B2-94AA-DBF9BEEF1E92} + h;hpp;hxx;hm;inl;inc;xsd + + + {0e336f4b-1f4c-4838-9a6a-183c80df8b67} + ixx + + + {228a47a0-93d7-4c99-9486-a589705ee401} + xsd + + + + + Source Files + + + Source Files + + + Source Files + + + + + Header Files + + + Header Files + + + + + Inline Files + + + + + + Schema Files + + + \ No newline at end of file diff --git a/xsd/dist/examples/cxx/tree/custom/wildcard/wildcard-vc11.vcxproj b/xsd/dist/examples/cxx/tree/custom/wildcard/wildcard-vc11.vcxproj new file mode 100644 index 0000000..da17a00 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/custom/wildcard/wildcard-vc11.vcxproj @@ -0,0 +1,212 @@ + + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + wildcard + {6CE6CDEC-F8DE-42D0-80F8-E71C0DD8F897} + wildcard + Win32Proj + + + + Application + v110 + MultiByte + + + Application + v110 + MultiByte + + + Application + v110 + MultiByte + + + Application + v110 + MultiByte + + + + + + + + + + + + + + + + + + + driver + driver + driver + driver + Debug\ + Debug\ + true + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + true + Release\ + Release\ + false + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + false + + + + Disabled + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebugDLL + true + + + Level3 + + + xerces-c_3D.lib;%(AdditionalDependencies) + $(TargetPath) + true + $(OutDir)driver.pdb + Console + false + + + MachineX86 + + + + + X64 + + + Disabled + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebugDLL + true + + + Level3 + + + xerces-c_3D.lib;%(AdditionalDependencies) + $(TargetPath) + true + $(OutDir)driver.pdb + Console + false + + + MachineX64 + + + + + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreadedDLL + true + + + Level3 + + + xerces-c_3.lib;%(AdditionalDependencies) + $(TargetPath) + true + Console + true + true + false + + + MachineX86 + + + + + X64 + + + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreadedDLL + true + + + Level3 + + + xerces-c_3.lib;%(AdditionalDependencies) + $(TargetPath) + true + Console + true + true + false + + + MachineX64 + + + + + + + + + + + + + + + + + + xsd wildcard.xsd + xsd cxx-tree --generate-inline --generate-ostream --generate-serialization --custom-type data=/data_base --hxx-epilogue "#include \"wildcard-custom.hxx\"" wildcard.xsd + wildcard.hxx;wildcard.ixx;wildcard.cxx;%(Outputs) + xsd wildcard.xsd + xsd cxx-tree --generate-inline --generate-ostream --generate-serialization --custom-type data=/data_base --hxx-epilogue "#include \"wildcard-custom.hxx\"" wildcard.xsd + wildcard.hxx;wildcard.ixx;wildcard.cxx;%(Outputs) + xsd wildcard.xsd + xsd cxx-tree --generate-inline --generate-ostream --generate-serialization --custom-type data=/data_base --hxx-epilogue "#include \"wildcard-custom.hxx\"" wildcard.xsd + wildcard.hxx;wildcard.ixx;wildcard.cxx;%(Outputs) + xsd wildcard.xsd + xsd cxx-tree --generate-inline --generate-ostream --generate-serialization --custom-type data=/data_base --hxx-epilogue "#include \"wildcard-custom.hxx\"" wildcard.xsd + wildcard.hxx;wildcard.ixx;wildcard.cxx;%(Outputs) + + + + + + \ No newline at end of file diff --git a/xsd/dist/examples/cxx/tree/custom/wildcard/wildcard-vc11.vcxproj.filters b/xsd/dist/examples/cxx/tree/custom/wildcard/wildcard-vc11.vcxproj.filters new file mode 100644 index 0000000..b67a77a --- /dev/null +++ b/xsd/dist/examples/cxx/tree/custom/wildcard/wildcard-vc11.vcxproj.filters @@ -0,0 +1,51 @@ + + + + + {426B0A1E-659E-40E5-B93B-EF76EBBE0C0A} + cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {42AF0399-9A66-43B2-94AA-DBF9BEEF1E92} + h;hpp;hxx;hm;inl;inc;xsd + + + {0e336f4b-1f4c-4838-9a6a-183c80df8b67} + ixx + + + {228a47a0-93d7-4c99-9486-a589705ee401} + xsd + + + + + Source Files + + + Source Files + + + Source Files + + + + + Header Files + + + Header Files + + + + + Inline Files + + + + + + Schema Files + + + \ No newline at end of file diff --git a/xsd/dist/examples/cxx/tree/custom/wildcard/wildcard-vc12.vcxproj b/xsd/dist/examples/cxx/tree/custom/wildcard/wildcard-vc12.vcxproj new file mode 100644 index 0000000..a6ff440 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/custom/wildcard/wildcard-vc12.vcxproj @@ -0,0 +1,216 @@ + + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + wildcard + {6CE6CDEC-F8DE-42D0-80F8-E71C0DD8F897} + wildcard + Win32Proj + + + + Application + v120 + MultiByte + + + Application + v120 + MultiByte + + + Application + v120 + MultiByte + + + Application + v120 + MultiByte + + + + + + + + + + + + + + + + + + + driver + driver + driver + driver + Debug\ + Debug\ + true + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + true + Release\ + Release\ + false + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + false + + + + Disabled + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebugDLL + true + + + Level3 + true + + + xerces-c_3D.lib;%(AdditionalDependencies) + $(TargetPath) + true + $(OutDir)driver.pdb + Console + false + + + MachineX86 + + + + + X64 + + + Disabled + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebugDLL + true + + + Level3 + true + + + xerces-c_3D.lib;%(AdditionalDependencies) + $(TargetPath) + true + $(OutDir)driver.pdb + Console + false + + + MachineX64 + + + + + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreadedDLL + true + + + Level3 + true + + + xerces-c_3.lib;%(AdditionalDependencies) + $(TargetPath) + true + Console + true + true + false + + + MachineX86 + + + + + X64 + + + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreadedDLL + true + + + Level3 + true + + + xerces-c_3.lib;%(AdditionalDependencies) + $(TargetPath) + true + Console + true + true + false + + + MachineX64 + + + + + + + + + + + + + + + + + + xsd wildcard.xsd + xsd cxx-tree --generate-inline --generate-ostream --generate-serialization --custom-type data=/data_base --hxx-epilogue "#include \"wildcard-custom.hxx\"" wildcard.xsd + wildcard.hxx;wildcard.ixx;wildcard.cxx;%(Outputs) + xsd wildcard.xsd + xsd cxx-tree --generate-inline --generate-ostream --generate-serialization --custom-type data=/data_base --hxx-epilogue "#include \"wildcard-custom.hxx\"" wildcard.xsd + wildcard.hxx;wildcard.ixx;wildcard.cxx;%(Outputs) + xsd wildcard.xsd + xsd cxx-tree --generate-inline --generate-ostream --generate-serialization --custom-type data=/data_base --hxx-epilogue "#include \"wildcard-custom.hxx\"" wildcard.xsd + wildcard.hxx;wildcard.ixx;wildcard.cxx;%(Outputs) + xsd wildcard.xsd + xsd cxx-tree --generate-inline --generate-ostream --generate-serialization --custom-type data=/data_base --hxx-epilogue "#include \"wildcard-custom.hxx\"" wildcard.xsd + wildcard.hxx;wildcard.ixx;wildcard.cxx;%(Outputs) + + + + + + \ No newline at end of file diff --git a/xsd/dist/examples/cxx/tree/custom/wildcard/wildcard-vc12.vcxproj.filters b/xsd/dist/examples/cxx/tree/custom/wildcard/wildcard-vc12.vcxproj.filters new file mode 100644 index 0000000..b67a77a --- /dev/null +++ b/xsd/dist/examples/cxx/tree/custom/wildcard/wildcard-vc12.vcxproj.filters @@ -0,0 +1,51 @@ + + + + + {426B0A1E-659E-40E5-B93B-EF76EBBE0C0A} + cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {42AF0399-9A66-43B2-94AA-DBF9BEEF1E92} + h;hpp;hxx;hm;inl;inc;xsd + + + {0e336f4b-1f4c-4838-9a6a-183c80df8b67} + ixx + + + {228a47a0-93d7-4c99-9486-a589705ee401} + xsd + + + + + Source Files + + + Source Files + + + Source Files + + + + + Header Files + + + Header Files + + + + + Inline Files + + + + + + Schema Files + + + \ No newline at end of file diff --git a/xsd/dist/examples/cxx/tree/custom/wildcard/wildcard-vc8.vcproj b/xsd/dist/examples/cxx/tree/custom/wildcard/wildcard-vc8.vcproj new file mode 100644 index 0000000..917fddd --- /dev/null +++ b/xsd/dist/examples/cxx/tree/custom/wildcard/wildcard-vc8.vcproj @@ -0,0 +1,440 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/xsd/dist/examples/cxx/tree/custom/wildcard/wildcard-vc9.vcproj b/xsd/dist/examples/cxx/tree/custom/wildcard/wildcard-vc9.vcproj new file mode 100644 index 0000000..16cab0c --- /dev/null +++ b/xsd/dist/examples/cxx/tree/custom/wildcard/wildcard-vc9.vcproj @@ -0,0 +1,437 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/xsd/dist/examples/cxx/tree/custom/wildcard/wildcard-xerces2-7.1.vcproj b/xsd/dist/examples/cxx/tree/custom/wildcard/wildcard-xerces2-7.1.vcproj deleted file mode 100644 index 2433f70..0000000 --- a/xsd/dist/examples/cxx/tree/custom/wildcard/wildcard-xerces2-7.1.vcproj +++ /dev/null @@ -1,177 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/xsd/dist/examples/cxx/tree/custom/wildcard/wildcard-xerces2-8.0.vcproj b/xsd/dist/examples/cxx/tree/custom/wildcard/wildcard-xerces2-8.0.vcproj deleted file mode 100644 index 7f982c7..0000000 --- a/xsd/dist/examples/cxx/tree/custom/wildcard/wildcard-xerces2-8.0.vcproj +++ /dev/null @@ -1,440 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/xsd/dist/examples/cxx/tree/custom/wildcard/wildcard-xerces2-9.0.vcproj b/xsd/dist/examples/cxx/tree/custom/wildcard/wildcard-xerces2-9.0.vcproj deleted file mode 100644 index d475ac5..0000000 --- a/xsd/dist/examples/cxx/tree/custom/wildcard/wildcard-xerces2-9.0.vcproj +++ /dev/null @@ -1,437 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/xsd/dist/examples/cxx/tree/dbxml/dbxml-10.0.sln b/xsd/dist/examples/cxx/tree/dbxml/dbxml-10.0.sln deleted file mode 100644 index fc08f1f..0000000 --- a/xsd/dist/examples/cxx/tree/dbxml/dbxml-10.0.sln +++ /dev/null @@ -1,25 +0,0 @@ -Microsoft Visual Studio Solution File, Format Version 11.00 -# Visual Studio 2010 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "dbxml", "dbxml-10.0.vcxproj", "{96CDC9C8-FC31-40B8-BDD0-1751712ED704}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Win32 = Debug|Win32 - Debug|x64 = Debug|x64 - Release|Win32 = Release|Win32 - Release|x64 = Release|x64 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {96CDC9C8-FC31-40B8-BDD0-1751712ED704}.Debug|Win32.ActiveCfg = Debug|Win32 - {96CDC9C8-FC31-40B8-BDD0-1751712ED704}.Debug|Win32.Build.0 = Debug|Win32 - {96CDC9C8-FC31-40B8-BDD0-1751712ED704}.Debug|x64.ActiveCfg = Debug|x64 - {96CDC9C8-FC31-40B8-BDD0-1751712ED704}.Debug|x64.Build.0 = Debug|x64 - {96CDC9C8-FC31-40B8-BDD0-1751712ED704}.Release|Win32.ActiveCfg = Release|Win32 - {96CDC9C8-FC31-40B8-BDD0-1751712ED704}.Release|Win32.Build.0 = Release|Win32 - {96CDC9C8-FC31-40B8-BDD0-1751712ED704}.Release|x64.ActiveCfg = Release|x64 - {96CDC9C8-FC31-40B8-BDD0-1751712ED704}.Release|x64.Build.0 = Release|x64 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal diff --git a/xsd/dist/examples/cxx/tree/dbxml/dbxml-10.0.vcxproj b/xsd/dist/examples/cxx/tree/dbxml/dbxml-10.0.vcxproj deleted file mode 100644 index 69b1d32..0000000 --- a/xsd/dist/examples/cxx/tree/dbxml/dbxml-10.0.vcxproj +++ /dev/null @@ -1,209 +0,0 @@ - - - - - Debug - Win32 - - - Debug - x64 - - - Release - Win32 - - - Release - x64 - - - - dbxml - {96CDC9C8-FC31-40B8-BDD0-1751712ED704} - dbxml - Win32Proj - - - - Application - MultiByte - - - Application - MultiByte - - - Application - MultiByte - - - Application - MultiByte - - - - - - - - - - - - - - - - - - - driver - driver - driver - driver - Debug\ - Debug\ - true - $(Platform)\$(Configuration)\ - $(Platform)\$(Configuration)\ - true - Release\ - Release\ - false - $(Platform)\$(Configuration)\ - $(Platform)\$(Configuration)\ - false - - - - Disabled - WIN32;_DEBUG;_CONSOLE;DBXML_DOM;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - true - - - Level3 - EditAndContinue - - - libdbxml23d.lib;libdb45d.lib;xerces-c_2D.lib;%(AdditionalDependencies) - $(TargetPath) - true - $(OutDir)driver.pdb - Console - false - - - MachineX86 - - - - - X64 - - - Disabled - WIN32;_DEBUG;_CONSOLE;DBXML_DOM;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - true - - - Level3 - ProgramDatabase - - - libdbxml23d.lib;libdb45d.lib;xerces-c_2D.lib;%(AdditionalDependencies) - $(TargetPath) - true - $(OutDir)driver.pdb - Console - false - - - MachineX64 - - - - - WIN32;NDEBUG;_CONSOLE;DBXML_DOM;%(PreprocessorDefinitions) - MultiThreadedDLL - true - - - Level3 - ProgramDatabase - - - libdbxml23.lib;libdb45.lib;xerces-c_2.lib;%(AdditionalDependencies) - $(TargetPath) - true - Console - true - true - false - - - MachineX86 - - - - - X64 - - - WIN32;NDEBUG;_CONSOLE;DBXML_DOM;%(PreprocessorDefinitions) - MultiThreadedDLL - true - - - Level3 - ProgramDatabase - - - libdbxml23.lib;libdb45.lib;xerces-c_2.lib;%(AdditionalDependencies) - $(TargetPath) - true - Console - true - true - false - - - MachineX64 - - - - - - - - - - - - xsd library.xsd - xsd cxx-tree --generate-ostream --generate-serialization library.xsd - library.hxx;library.cxx;%(Outputs) - xsd library.xsd - xsd cxx-tree --generate-ostream --generate-serialization library.xsd - library.hxx;library.cxx;%(Outputs) - xsd library.xsd - xsd cxx-tree --generate-ostream --generate-serialization library.xsd - library.hxx;library.cxx;%(Outputs) - xsd library.xsd - xsd cxx-tree --generate-ostream --generate-serialization library.xsd - library.hxx;library.cxx;%(Outputs) - - - - - - - - - \ No newline at end of file diff --git a/xsd/dist/examples/cxx/tree/dbxml/dbxml-10.0.vcxproj.filters b/xsd/dist/examples/cxx/tree/dbxml/dbxml-10.0.vcxproj.filters deleted file mode 100644 index b1f4731..0000000 --- a/xsd/dist/examples/cxx/tree/dbxml/dbxml-10.0.vcxproj.filters +++ /dev/null @@ -1,38 +0,0 @@ - - - - - {19D063BE-083B-4E8A-89F8-D87CC43CB197} - cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx - - - {E11762CD-4895-44DE-AA13-48BC7AAFC419} - h;hpp;hxx;hm;inl;inc;xsd - - - {e64ee5c7-1fea-48c3-92f2-3b85fdd87547} - xsd - - - - - Source Files - - - Source Files - - - - - Header Files - - - - - - - - Schema Files - - - \ No newline at end of file diff --git a/xsd/dist/examples/cxx/tree/dbxml/dbxml-7.1.sln b/xsd/dist/examples/cxx/tree/dbxml/dbxml-7.1.sln deleted file mode 100644 index 8af0222..0000000 --- a/xsd/dist/examples/cxx/tree/dbxml/dbxml-7.1.sln +++ /dev/null @@ -1,21 +0,0 @@ -Microsoft Visual Studio Solution File, Format Version 8.00 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "dbxml", "dbxml-7.1.vcproj", "{96CDC9C8-FC31-40B8-BDD0-1751712ED704}" - ProjectSection(ProjectDependencies) = postProject - EndProjectSection -EndProject -Global - GlobalSection(SolutionConfiguration) = preSolution - Debug = Debug - Release = Release - EndGlobalSection - GlobalSection(ProjectConfiguration) = postSolution - {96CDC9C8-FC31-40B8-BDD0-1751712ED704}.Debug.ActiveCfg = Debug|Win32 - {96CDC9C8-FC31-40B8-BDD0-1751712ED704}.Debug.Build.0 = Debug|Win32 - {96CDC9C8-FC31-40B8-BDD0-1751712ED704}.Release.ActiveCfg = Release|Win32 - {96CDC9C8-FC31-40B8-BDD0-1751712ED704}.Release.Build.0 = Release|Win32 - EndGlobalSection - GlobalSection(ExtensibilityGlobals) = postSolution - EndGlobalSection - GlobalSection(ExtensibilityAddIns) = postSolution - EndGlobalSection -EndGlobal diff --git a/xsd/dist/examples/cxx/tree/dbxml/dbxml-7.1.vcproj b/xsd/dist/examples/cxx/tree/dbxml/dbxml-7.1.vcproj deleted file mode 100644 index c0acf22..0000000 --- a/xsd/dist/examples/cxx/tree/dbxml/dbxml-7.1.vcproj +++ /dev/null @@ -1,164 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/xsd/dist/examples/cxx/tree/dbxml/dbxml-8.0.sln b/xsd/dist/examples/cxx/tree/dbxml/dbxml-8.0.sln deleted file mode 100644 index b217889..0000000 --- a/xsd/dist/examples/cxx/tree/dbxml/dbxml-8.0.sln +++ /dev/null @@ -1,25 +0,0 @@ -Microsoft Visual Studio Solution File, Format Version 9.00 -# Visual Studio 2005 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "dbxml", "dbxml-8.0.vcproj", "{96CDC9C8-FC31-40B8-BDD0-1751712ED704}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Win32 = Debug|Win32 - Debug|x64 = Debug|x64 - Release|Win32 = Release|Win32 - Release|x64 = Release|x64 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {96CDC9C8-FC31-40B8-BDD0-1751712ED704}.Debug|Win32.ActiveCfg = Debug|Win32 - {96CDC9C8-FC31-40B8-BDD0-1751712ED704}.Debug|Win32.Build.0 = Debug|Win32 - {96CDC9C8-FC31-40B8-BDD0-1751712ED704}.Debug|x64.ActiveCfg = Debug|x64 - {96CDC9C8-FC31-40B8-BDD0-1751712ED704}.Debug|x64.Build.0 = Debug|x64 - {96CDC9C8-FC31-40B8-BDD0-1751712ED704}.Release|Win32.ActiveCfg = Release|Win32 - {96CDC9C8-FC31-40B8-BDD0-1751712ED704}.Release|Win32.Build.0 = Release|Win32 - {96CDC9C8-FC31-40B8-BDD0-1751712ED704}.Release|x64.ActiveCfg = Release|x64 - {96CDC9C8-FC31-40B8-BDD0-1751712ED704}.Release|x64.Build.0 = Release|x64 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal diff --git a/xsd/dist/examples/cxx/tree/dbxml/dbxml-8.0.vcproj b/xsd/dist/examples/cxx/tree/dbxml/dbxml-8.0.vcproj deleted file mode 100644 index 68ccebf..0000000 --- a/xsd/dist/examples/cxx/tree/dbxml/dbxml-8.0.vcproj +++ /dev/null @@ -1,423 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/xsd/dist/examples/cxx/tree/dbxml/dbxml-9.0.sln b/xsd/dist/examples/cxx/tree/dbxml/dbxml-9.0.sln deleted file mode 100644 index 89e242e..0000000 --- a/xsd/dist/examples/cxx/tree/dbxml/dbxml-9.0.sln +++ /dev/null @@ -1,25 +0,0 @@ -Microsoft Visual Studio Solution File, Format Version 10.00 -# Visual Studio 2008 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "dbxml", "dbxml-9.0.vcproj", "{96CDC9C8-FC31-40B8-BDD0-1751712ED704}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Win32 = Debug|Win32 - Debug|x64 = Debug|x64 - Release|Win32 = Release|Win32 - Release|x64 = Release|x64 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {96CDC9C8-FC31-40B8-BDD0-1751712ED704}.Debug|Win32.ActiveCfg = Debug|Win32 - {96CDC9C8-FC31-40B8-BDD0-1751712ED704}.Debug|Win32.Build.0 = Debug|Win32 - {96CDC9C8-FC31-40B8-BDD0-1751712ED704}.Debug|x64.ActiveCfg = Debug|x64 - {96CDC9C8-FC31-40B8-BDD0-1751712ED704}.Debug|x64.Build.0 = Debug|x64 - {96CDC9C8-FC31-40B8-BDD0-1751712ED704}.Release|Win32.ActiveCfg = Release|Win32 - {96CDC9C8-FC31-40B8-BDD0-1751712ED704}.Release|Win32.Build.0 = Release|Win32 - {96CDC9C8-FC31-40B8-BDD0-1751712ED704}.Release|x64.ActiveCfg = Release|x64 - {96CDC9C8-FC31-40B8-BDD0-1751712ED704}.Release|x64.Build.0 = Release|x64 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal diff --git a/xsd/dist/examples/cxx/tree/dbxml/dbxml-9.0.vcproj b/xsd/dist/examples/cxx/tree/dbxml/dbxml-9.0.vcproj deleted file mode 100644 index 7068154..0000000 --- a/xsd/dist/examples/cxx/tree/dbxml/dbxml-9.0.vcproj +++ /dev/null @@ -1,420 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/xsd/dist/examples/cxx/tree/dbxml/makefile b/xsd/dist/examples/cxx/tree/dbxml/makefile deleted file mode 100644 index 501bddf..0000000 --- a/xsd/dist/examples/cxx/tree/dbxml/makefile +++ /dev/null @@ -1,33 +0,0 @@ -root := ../../.. - -include $(root)/build/cxx/rules.make -include $(root)/build/xsd/tree-rules.make - - -override XSDFLAGS += --generate-ostream --generate-serialization -override CPPFLAGS += -DDBXML_DOM -override LIBS += -ldbxml -lxqilla -ldb_cxx -ldb - - -# Build. -# -driver: driver.o library.o - -library.o: library.cxx library.hxx -driver.o: driver.cxx library.hxx - -library.cxx library.hxx: library.xsd - - -# Test -# -.PHONY: test -test: driver - ./driver - - -# Clean. -# -.PHONY: clean -clean: - rm -f library.o library.?xx driver.o driver new.dbxml diff --git a/xsd/dist/examples/cxx/tree/embedded/embedded-10.0.sln b/xsd/dist/examples/cxx/tree/embedded/embedded-10.0.sln deleted file mode 100644 index bf8c3e2..0000000 --- a/xsd/dist/examples/cxx/tree/embedded/embedded-10.0.sln +++ /dev/null @@ -1,35 +0,0 @@ -Microsoft Visual Studio Solution File, Format Version 11.00 -# Visual Studio 2010 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "xsdbin", "xsdbin-10.0.vcxproj", "{A3F6E060-D536-4A43-AF4B-89063F65DE91}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "embedded", "embedded-10.0.vcxproj", "{9C8C2AA4-DF31-4884-B3B9-A6A36F3CB429}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Win32 = Debug|Win32 - Debug|x64 = Debug|x64 - Release|Win32 = Release|Win32 - Release|x64 = Release|x64 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {A3F6E060-D536-4A43-AF4B-89063F65DE91}.Debug|Win32.ActiveCfg = Debug|Win32 - {A3F6E060-D536-4A43-AF4B-89063F65DE91}.Debug|Win32.Build.0 = Debug|Win32 - {A3F6E060-D536-4A43-AF4B-89063F65DE91}.Debug|x64.ActiveCfg = Debug|x64 - {A3F6E060-D536-4A43-AF4B-89063F65DE91}.Debug|x64.Build.0 = Debug|x64 - {A3F6E060-D536-4A43-AF4B-89063F65DE91}.Release|Win32.ActiveCfg = Release|Win32 - {A3F6E060-D536-4A43-AF4B-89063F65DE91}.Release|Win32.Build.0 = Release|Win32 - {A3F6E060-D536-4A43-AF4B-89063F65DE91}.Release|x64.ActiveCfg = Release|x64 - {A3F6E060-D536-4A43-AF4B-89063F65DE91}.Release|x64.Build.0 = Release|x64 - {9C8C2AA4-DF31-4884-B3B9-A6A36F3CB429}.Debug|Win32.ActiveCfg = Debug|Win32 - {9C8C2AA4-DF31-4884-B3B9-A6A36F3CB429}.Debug|Win32.Build.0 = Debug|Win32 - {9C8C2AA4-DF31-4884-B3B9-A6A36F3CB429}.Debug|x64.ActiveCfg = Debug|x64 - {9C8C2AA4-DF31-4884-B3B9-A6A36F3CB429}.Debug|x64.Build.0 = Debug|x64 - {9C8C2AA4-DF31-4884-B3B9-A6A36F3CB429}.Release|Win32.ActiveCfg = Release|Win32 - {9C8C2AA4-DF31-4884-B3B9-A6A36F3CB429}.Release|Win32.Build.0 = Release|Win32 - {9C8C2AA4-DF31-4884-B3B9-A6A36F3CB429}.Release|x64.ActiveCfg = Release|x64 - {9C8C2AA4-DF31-4884-B3B9-A6A36F3CB429}.Release|x64.Build.0 = Release|x64 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal diff --git a/xsd/dist/examples/cxx/tree/embedded/embedded-10.0.vcxproj b/xsd/dist/examples/cxx/tree/embedded/embedded-10.0.vcxproj deleted file mode 100644 index 3cd8fd2..0000000 --- a/xsd/dist/examples/cxx/tree/embedded/embedded-10.0.vcxproj +++ /dev/null @@ -1,219 +0,0 @@ - - - - - Debug - Win32 - - - Debug - x64 - - - Release - Win32 - - - Release - x64 - - - - embedded - {9C8C2AA4-DF31-4884-B3B9-A6A36F3CB429} - embedded - Win32Proj - - - - Application - MultiByte - - - Application - MultiByte - - - Application - MultiByte - - - Application - MultiByte - - - - - - - - - - - - - - - - - - - driver - driver - driver - driver - Debug\ - Debug\ - true - $(Platform)\$(Configuration)\ - $(Platform)\$(Configuration)\ - true - Release\ - Release\ - false - $(Platform)\$(Configuration)\ - $(Platform)\$(Configuration)\ - false - - - - Disabled - WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - true - - - Level3 - EditAndContinue - - - xerces-c_3D.lib;%(AdditionalDependencies) - $(TargetPath) - true - $(OutDir)driver.pdb - Console - false - - - MachineX86 - - - - - X64 - - - Disabled - WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - true - - - Level3 - ProgramDatabase - - - xerces-c_3D.lib;%(AdditionalDependencies) - $(TargetPath) - true - $(OutDir)driver.pdb - Console - false - - - MachineX64 - - - - - WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - MultiThreadedDLL - true - - - Level3 - ProgramDatabase - - - xerces-c_3.lib;%(AdditionalDependencies) - $(TargetPath) - true - Console - true - true - false - - - MachineX86 - - - - - X64 - - - WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - MultiThreadedDLL - true - - - Level3 - ProgramDatabase - - - xerces-c_3.lib;%(AdditionalDependencies) - $(TargetPath) - true - Console - true - true - false - - - MachineX64 - - - - - - - - - - - - - - - - xsd library.xsd - xsd cxx-tree library.xsd && xsdbin.exe library.xsd - library.hxx;library.cxx;library-schema.hxx;library-schema.cxx;%(Outputs) - xsd library.xsd - xsd cxx-tree library.xsd && xsdbin.exe library.xsd - library.hxx;library.cxx;library-schema.hxx;library-schema.cxx;%(Outputs) - xsd library.xsd - xsd cxx-tree library.xsd && xsdbin.exe library.xsd - library.hxx;library.cxx;library-schema.hxx;library-schema.cxx;%(Outputs) - xsd library.xsd - xsd cxx-tree library.xsd && xsdbin.exe library.xsd - library.hxx;library.cxx;library-schema.hxx;library-schema.cxx;%(Outputs) - - - - - - - - {a3f6e060-d536-4a43-af4b-89063f65de91} - false - - - - - - \ No newline at end of file diff --git a/xsd/dist/examples/cxx/tree/embedded/embedded-10.0.vcxproj.filters b/xsd/dist/examples/cxx/tree/embedded/embedded-10.0.vcxproj.filters deleted file mode 100644 index 42beedc..0000000 --- a/xsd/dist/examples/cxx/tree/embedded/embedded-10.0.vcxproj.filters +++ /dev/null @@ -1,50 +0,0 @@ - - - - - {1D046D9C-4D20-4084-A1F4-90488E0B0669} - cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx - - - {E2D458FA-56FA-4268-998B-BF3934169712} - h;hpp;hxx;hm;inl;inc;xsd - - - {a57574af-3c36-408f-9f8e-5140fe6abbf6} - xsd - - - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - - - Header Files - - - Header Files - - - Header Files - - - - - - - - Schema Files - - - \ No newline at end of file diff --git a/xsd/dist/examples/cxx/tree/embedded/embedded-7.1.sln b/xsd/dist/examples/cxx/tree/embedded/embedded-7.1.sln deleted file mode 100644 index 86e246f..0000000 --- a/xsd/dist/examples/cxx/tree/embedded/embedded-7.1.sln +++ /dev/null @@ -1,30 +0,0 @@ -Microsoft Visual Studio Solution File, Format Version 8.00 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "xsdbin", "xsdbin-7.1.vcproj", "{A3F6E060-D536-4A43-AF4B-89063F65DE91}" - ProjectSection(ProjectDependencies) = postProject - EndProjectSection -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "embedded", "embedded-7.1.vcproj", "{9C8C2AA4-DF31-4884-B3B9-A6A36F3CB429}" - ProjectSection(ProjectDependencies) = postProject - {A3F6E060-D536-4A43-AF4B-89063F65DE91} = {A3F6E060-D536-4A43-AF4B-89063F65DE91} - EndProjectSection -EndProject -Global - GlobalSection(SolutionConfiguration) = preSolution - Debug = Debug - Release = Release - EndGlobalSection - GlobalSection(ProjectConfiguration) = postSolution - {A3F6E060-D536-4A43-AF4B-89063F65DE91}.Debug.ActiveCfg = Debug|Win32 - {A3F6E060-D536-4A43-AF4B-89063F65DE91}.Debug.Build.0 = Debug|Win32 - {A3F6E060-D536-4A43-AF4B-89063F65DE91}.Release.ActiveCfg = Release|Win32 - {A3F6E060-D536-4A43-AF4B-89063F65DE91}.Release.Build.0 = Release|Win32 - {9C8C2AA4-DF31-4884-B3B9-A6A36F3CB429}.Debug.ActiveCfg = Debug|Win32 - {9C8C2AA4-DF31-4884-B3B9-A6A36F3CB429}.Debug.Build.0 = Debug|Win32 - {9C8C2AA4-DF31-4884-B3B9-A6A36F3CB429}.Release.ActiveCfg = Release|Win32 - {9C8C2AA4-DF31-4884-B3B9-A6A36F3CB429}.Release.Build.0 = Release|Win32 - EndGlobalSection - GlobalSection(ExtensibilityGlobals) = postSolution - EndGlobalSection - GlobalSection(ExtensibilityAddIns) = postSolution - EndGlobalSection -EndGlobal diff --git a/xsd/dist/examples/cxx/tree/embedded/embedded-7.1.vcproj b/xsd/dist/examples/cxx/tree/embedded/embedded-7.1.vcproj deleted file mode 100644 index bce7897..0000000 --- a/xsd/dist/examples/cxx/tree/embedded/embedded-7.1.vcproj +++ /dev/null @@ -1,176 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/xsd/dist/examples/cxx/tree/embedded/embedded-8.0.sln b/xsd/dist/examples/cxx/tree/embedded/embedded-8.0.sln deleted file mode 100644 index 50b49af..0000000 --- a/xsd/dist/examples/cxx/tree/embedded/embedded-8.0.sln +++ /dev/null @@ -1,38 +0,0 @@ -Microsoft Visual Studio Solution File, Format Version 9.00 -# Visual Studio 2005 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "xsdbin", "xsdbin-8.0.vcproj", "{A3F6E060-D536-4A43-AF4B-89063F65DE91}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "embedded", "embedded-8.0.vcproj", "{9C8C2AA4-DF31-4884-B3B9-A6A36F3CB429}" - ProjectSection(ProjectDependencies) = postProject - {A3F6E060-D536-4A43-AF4B-89063F65DE91} = {A3F6E060-D536-4A43-AF4B-89063F65DE91} - EndProjectSection -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Win32 = Debug|Win32 - Debug|x64 = Debug|x64 - Release|Win32 = Release|Win32 - Release|x64 = Release|x64 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {A3F6E060-D536-4A43-AF4B-89063F65DE91}.Debug|Win32.ActiveCfg = Debug|Win32 - {A3F6E060-D536-4A43-AF4B-89063F65DE91}.Debug|Win32.Build.0 = Debug|Win32 - {A3F6E060-D536-4A43-AF4B-89063F65DE91}.Debug|x64.ActiveCfg = Debug|x64 - {A3F6E060-D536-4A43-AF4B-89063F65DE91}.Debug|x64.Build.0 = Debug|x64 - {A3F6E060-D536-4A43-AF4B-89063F65DE91}.Release|Win32.ActiveCfg = Release|Win32 - {A3F6E060-D536-4A43-AF4B-89063F65DE91}.Release|Win32.Build.0 = Release|Win32 - {A3F6E060-D536-4A43-AF4B-89063F65DE91}.Release|x64.ActiveCfg = Release|x64 - {A3F6E060-D536-4A43-AF4B-89063F65DE91}.Release|x64.Build.0 = Release|x64 - {9C8C2AA4-DF31-4884-B3B9-A6A36F3CB429}.Debug|Win32.ActiveCfg = Debug|Win32 - {9C8C2AA4-DF31-4884-B3B9-A6A36F3CB429}.Debug|Win32.Build.0 = Debug|Win32 - {9C8C2AA4-DF31-4884-B3B9-A6A36F3CB429}.Debug|x64.ActiveCfg = Debug|x64 - {9C8C2AA4-DF31-4884-B3B9-A6A36F3CB429}.Debug|x64.Build.0 = Debug|x64 - {9C8C2AA4-DF31-4884-B3B9-A6A36F3CB429}.Release|Win32.ActiveCfg = Release|Win32 - {9C8C2AA4-DF31-4884-B3B9-A6A36F3CB429}.Release|Win32.Build.0 = Release|Win32 - {9C8C2AA4-DF31-4884-B3B9-A6A36F3CB429}.Release|x64.ActiveCfg = Release|x64 - {9C8C2AA4-DF31-4884-B3B9-A6A36F3CB429}.Release|x64.Build.0 = Release|x64 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal diff --git a/xsd/dist/examples/cxx/tree/embedded/embedded-8.0.vcproj b/xsd/dist/examples/cxx/tree/embedded/embedded-8.0.vcproj deleted file mode 100644 index d0df22c..0000000 --- a/xsd/dist/examples/cxx/tree/embedded/embedded-8.0.vcproj +++ /dev/null @@ -1,439 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/xsd/dist/examples/cxx/tree/embedded/embedded-9.0.sln b/xsd/dist/examples/cxx/tree/embedded/embedded-9.0.sln deleted file mode 100644 index bf0d15b..0000000 --- a/xsd/dist/examples/cxx/tree/embedded/embedded-9.0.sln +++ /dev/null @@ -1,38 +0,0 @@ -Microsoft Visual Studio Solution File, Format Version 10.00 -# Visual Studio 2008 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "xsdbin", "xsdbin-9.0.vcproj", "{A3F6E060-D536-4A43-AF4B-89063F65DE91}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "embedded", "embedded-9.0.vcproj", "{9C8C2AA4-DF31-4884-B3B9-A6A36F3CB429}" - ProjectSection(ProjectDependencies) = postProject - {A3F6E060-D536-4A43-AF4B-89063F65DE91} = {A3F6E060-D536-4A43-AF4B-89063F65DE91} - EndProjectSection -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Win32 = Debug|Win32 - Debug|x64 = Debug|x64 - Release|Win32 = Release|Win32 - Release|x64 = Release|x64 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {A3F6E060-D536-4A43-AF4B-89063F65DE91}.Debug|Win32.ActiveCfg = Debug|Win32 - {A3F6E060-D536-4A43-AF4B-89063F65DE91}.Debug|Win32.Build.0 = Debug|Win32 - {A3F6E060-D536-4A43-AF4B-89063F65DE91}.Debug|x64.ActiveCfg = Debug|x64 - {A3F6E060-D536-4A43-AF4B-89063F65DE91}.Debug|x64.Build.0 = Debug|x64 - {A3F6E060-D536-4A43-AF4B-89063F65DE91}.Release|Win32.ActiveCfg = Release|Win32 - {A3F6E060-D536-4A43-AF4B-89063F65DE91}.Release|Win32.Build.0 = Release|Win32 - {A3F6E060-D536-4A43-AF4B-89063F65DE91}.Release|x64.ActiveCfg = Release|x64 - {A3F6E060-D536-4A43-AF4B-89063F65DE91}.Release|x64.Build.0 = Release|x64 - {9C8C2AA4-DF31-4884-B3B9-A6A36F3CB429}.Debug|Win32.ActiveCfg = Debug|Win32 - {9C8C2AA4-DF31-4884-B3B9-A6A36F3CB429}.Debug|Win32.Build.0 = Debug|Win32 - {9C8C2AA4-DF31-4884-B3B9-A6A36F3CB429}.Debug|x64.ActiveCfg = Debug|x64 - {9C8C2AA4-DF31-4884-B3B9-A6A36F3CB429}.Debug|x64.Build.0 = Debug|x64 - {9C8C2AA4-DF31-4884-B3B9-A6A36F3CB429}.Release|Win32.ActiveCfg = Release|Win32 - {9C8C2AA4-DF31-4884-B3B9-A6A36F3CB429}.Release|Win32.Build.0 = Release|Win32 - {9C8C2AA4-DF31-4884-B3B9-A6A36F3CB429}.Release|x64.ActiveCfg = Release|x64 - {9C8C2AA4-DF31-4884-B3B9-A6A36F3CB429}.Release|x64.Build.0 = Release|x64 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal diff --git a/xsd/dist/examples/cxx/tree/embedded/embedded-9.0.vcproj b/xsd/dist/examples/cxx/tree/embedded/embedded-9.0.vcproj deleted file mode 100644 index bf5498c..0000000 --- a/xsd/dist/examples/cxx/tree/embedded/embedded-9.0.vcproj +++ /dev/null @@ -1,436 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/xsd/dist/examples/cxx/tree/embedded/embedded-vc10.sln b/xsd/dist/examples/cxx/tree/embedded/embedded-vc10.sln new file mode 100644 index 0000000..0204487 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/embedded/embedded-vc10.sln @@ -0,0 +1,38 @@ + +Microsoft Visual Studio Solution File, Format Version 11.00 +# Visual Studio 2010 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "xsdbin", "xsdbin-vc10.vcxproj", "{A3F6E060-D536-4A43-AF4B-89063F65DE91}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "embedded", "embedded-vc10.vcxproj", "{9C8C2AA4-DF31-4884-B3B9-A6A36F3CB429}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Win32 = Debug|Win32 + Debug|x64 = Debug|x64 + Release|Win32 = Release|Win32 + Release|x64 = Release|x64 + + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {9C8C2AA4-DF31-4884-B3B9-A6A36F3CB429}.Debug|Win32.ActiveCfg = Debug|Win32 + {9C8C2AA4-DF31-4884-B3B9-A6A36F3CB429}.Debug|Win32.Build.0 = Debug|Win32 + {9C8C2AA4-DF31-4884-B3B9-A6A36F3CB429}.Debug|x64.ActiveCfg = Debug|x64 + {9C8C2AA4-DF31-4884-B3B9-A6A36F3CB429}.Debug|x64.Build.0 = Debug|x64 + {9C8C2AA4-DF31-4884-B3B9-A6A36F3CB429}.Release|Win32.ActiveCfg = Release|Win32 + {9C8C2AA4-DF31-4884-B3B9-A6A36F3CB429}.Release|Win32.Build.0 = Release|Win32 + {9C8C2AA4-DF31-4884-B3B9-A6A36F3CB429}.Release|x64.ActiveCfg = Release|x64 + {9C8C2AA4-DF31-4884-B3B9-A6A36F3CB429}.Release|x64.Build.0 = Release|x64 + {A3F6E060-D536-4A43-AF4B-89063F65DE91}.Debug|Win32.ActiveCfg = Debug|Win32 + {A3F6E060-D536-4A43-AF4B-89063F65DE91}.Debug|Win32.Build.0 = Debug|Win32 + {A3F6E060-D536-4A43-AF4B-89063F65DE91}.Debug|x64.ActiveCfg = Debug|x64 + {A3F6E060-D536-4A43-AF4B-89063F65DE91}.Debug|x64.Build.0 = Debug|x64 + {A3F6E060-D536-4A43-AF4B-89063F65DE91}.Release|Win32.ActiveCfg = Release|Win32 + {A3F6E060-D536-4A43-AF4B-89063F65DE91}.Release|Win32.Build.0 = Release|Win32 + {A3F6E060-D536-4A43-AF4B-89063F65DE91}.Release|x64.ActiveCfg = Release|x64 + {A3F6E060-D536-4A43-AF4B-89063F65DE91}.Release|x64.Build.0 = Release|x64 + + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/xsd/dist/examples/cxx/tree/embedded/embedded-vc10.vcxproj b/xsd/dist/examples/cxx/tree/embedded/embedded-vc10.vcxproj new file mode 100644 index 0000000..859b20b --- /dev/null +++ b/xsd/dist/examples/cxx/tree/embedded/embedded-vc10.vcxproj @@ -0,0 +1,215 @@ + + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + embedded + {9C8C2AA4-DF31-4884-B3B9-A6A36F3CB429} + embedded + Win32Proj + + + + Application + MultiByte + + + Application + MultiByte + + + Application + MultiByte + + + Application + MultiByte + + + + + + + + + + + + + + + + + + + driver + driver + driver + driver + Debug\ + Debug\ + true + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + true + Release\ + Release\ + false + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + false + + + + Disabled + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebugDLL + true + + + Level3 + + + xerces-c_3D.lib;%(AdditionalDependencies) + $(TargetPath) + true + $(OutDir)driver.pdb + Console + false + + + MachineX86 + + + + + X64 + + + Disabled + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebugDLL + true + + + Level3 + + + xerces-c_3D.lib;%(AdditionalDependencies) + $(TargetPath) + true + $(OutDir)driver.pdb + Console + false + + + MachineX64 + + + + + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreadedDLL + true + + + Level3 + + + xerces-c_3.lib;%(AdditionalDependencies) + $(TargetPath) + true + Console + true + true + false + + + MachineX86 + + + + + X64 + + + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreadedDLL + true + + + Level3 + + + xerces-c_3.lib;%(AdditionalDependencies) + $(TargetPath) + true + Console + true + true + false + + + MachineX64 + + + + + + + + + + + + + + + + xsd library.xsd + xsd cxx-tree library.xsd && xsdbin.exe library.xsd + library.hxx;library.cxx;library-schema.hxx;library-schema.cxx;%(Outputs) + xsd library.xsd + xsd cxx-tree library.xsd && xsdbin.exe library.xsd + library.hxx;library.cxx;library-schema.hxx;library-schema.cxx;%(Outputs) + xsd library.xsd + xsd cxx-tree library.xsd && xsdbin.exe library.xsd + library.hxx;library.cxx;library-schema.hxx;library-schema.cxx;%(Outputs) + xsd library.xsd + xsd cxx-tree library.xsd && xsdbin.exe library.xsd + library.hxx;library.cxx;library-schema.hxx;library-schema.cxx;%(Outputs) + + + + + + + + {a3f6e060-d536-4a43-af4b-89063f65de91} + false + + + + + + \ No newline at end of file diff --git a/xsd/dist/examples/cxx/tree/embedded/embedded-vc10.vcxproj.filters b/xsd/dist/examples/cxx/tree/embedded/embedded-vc10.vcxproj.filters new file mode 100644 index 0000000..42beedc --- /dev/null +++ b/xsd/dist/examples/cxx/tree/embedded/embedded-vc10.vcxproj.filters @@ -0,0 +1,50 @@ + + + + + {1D046D9C-4D20-4084-A1F4-90488E0B0669} + cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {E2D458FA-56FA-4268-998B-BF3934169712} + h;hpp;hxx;hm;inl;inc;xsd + + + {a57574af-3c36-408f-9f8e-5140fe6abbf6} + xsd + + + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + + + Header Files + + + Header Files + + + Header Files + + + + + + + + Schema Files + + + \ No newline at end of file diff --git a/xsd/dist/examples/cxx/tree/embedded/embedded-vc11.sln b/xsd/dist/examples/cxx/tree/embedded/embedded-vc11.sln new file mode 100644 index 0000000..dc8273d --- /dev/null +++ b/xsd/dist/examples/cxx/tree/embedded/embedded-vc11.sln @@ -0,0 +1,38 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 2012 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "xsdbin", "xsdbin-vc11.vcxproj", "{A3F6E060-D536-4A43-AF4B-89063F65DE91}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "embedded", "embedded-vc11.vcxproj", "{9C8C2AA4-DF31-4884-B3B9-A6A36F3CB429}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Win32 = Debug|Win32 + Debug|x64 = Debug|x64 + Release|Win32 = Release|Win32 + Release|x64 = Release|x64 + + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {9C8C2AA4-DF31-4884-B3B9-A6A36F3CB429}.Debug|Win32.ActiveCfg = Debug|Win32 + {9C8C2AA4-DF31-4884-B3B9-A6A36F3CB429}.Debug|Win32.Build.0 = Debug|Win32 + {9C8C2AA4-DF31-4884-B3B9-A6A36F3CB429}.Debug|x64.ActiveCfg = Debug|x64 + {9C8C2AA4-DF31-4884-B3B9-A6A36F3CB429}.Debug|x64.Build.0 = Debug|x64 + {9C8C2AA4-DF31-4884-B3B9-A6A36F3CB429}.Release|Win32.ActiveCfg = Release|Win32 + {9C8C2AA4-DF31-4884-B3B9-A6A36F3CB429}.Release|Win32.Build.0 = Release|Win32 + {9C8C2AA4-DF31-4884-B3B9-A6A36F3CB429}.Release|x64.ActiveCfg = Release|x64 + {9C8C2AA4-DF31-4884-B3B9-A6A36F3CB429}.Release|x64.Build.0 = Release|x64 + {A3F6E060-D536-4A43-AF4B-89063F65DE91}.Debug|Win32.ActiveCfg = Debug|Win32 + {A3F6E060-D536-4A43-AF4B-89063F65DE91}.Debug|Win32.Build.0 = Debug|Win32 + {A3F6E060-D536-4A43-AF4B-89063F65DE91}.Debug|x64.ActiveCfg = Debug|x64 + {A3F6E060-D536-4A43-AF4B-89063F65DE91}.Debug|x64.Build.0 = Debug|x64 + {A3F6E060-D536-4A43-AF4B-89063F65DE91}.Release|Win32.ActiveCfg = Release|Win32 + {A3F6E060-D536-4A43-AF4B-89063F65DE91}.Release|Win32.Build.0 = Release|Win32 + {A3F6E060-D536-4A43-AF4B-89063F65DE91}.Release|x64.ActiveCfg = Release|x64 + {A3F6E060-D536-4A43-AF4B-89063F65DE91}.Release|x64.Build.0 = Release|x64 + + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/xsd/dist/examples/cxx/tree/embedded/embedded-vc11.vcxproj b/xsd/dist/examples/cxx/tree/embedded/embedded-vc11.vcxproj new file mode 100644 index 0000000..4fcc53a --- /dev/null +++ b/xsd/dist/examples/cxx/tree/embedded/embedded-vc11.vcxproj @@ -0,0 +1,219 @@ + + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + embedded + {9C8C2AA4-DF31-4884-B3B9-A6A36F3CB429} + embedded + Win32Proj + + + + Application + v110 + MultiByte + + + Application + v110 + MultiByte + + + Application + v110 + MultiByte + + + Application + v110 + MultiByte + + + + + + + + + + + + + + + + + + + driver + driver + driver + driver + Debug\ + Debug\ + true + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + true + Release\ + Release\ + false + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + false + + + + Disabled + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebugDLL + true + + + Level3 + + + xerces-c_3D.lib;%(AdditionalDependencies) + $(TargetPath) + true + $(OutDir)driver.pdb + Console + false + + + MachineX86 + + + + + X64 + + + Disabled + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebugDLL + true + + + Level3 + + + xerces-c_3D.lib;%(AdditionalDependencies) + $(TargetPath) + true + $(OutDir)driver.pdb + Console + false + + + MachineX64 + + + + + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreadedDLL + true + + + Level3 + + + xerces-c_3.lib;%(AdditionalDependencies) + $(TargetPath) + true + Console + true + true + false + + + MachineX86 + + + + + X64 + + + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreadedDLL + true + + + Level3 + + + xerces-c_3.lib;%(AdditionalDependencies) + $(TargetPath) + true + Console + true + true + false + + + MachineX64 + + + + + + + + + + + + + + + + xsd library.xsd + xsd cxx-tree library.xsd && xsdbin.exe library.xsd + library.hxx;library.cxx;library-schema.hxx;library-schema.cxx;%(Outputs) + xsd library.xsd + xsd cxx-tree library.xsd && xsdbin.exe library.xsd + library.hxx;library.cxx;library-schema.hxx;library-schema.cxx;%(Outputs) + xsd library.xsd + xsd cxx-tree library.xsd && xsdbin.exe library.xsd + library.hxx;library.cxx;library-schema.hxx;library-schema.cxx;%(Outputs) + xsd library.xsd + xsd cxx-tree library.xsd && xsdbin.exe library.xsd + library.hxx;library.cxx;library-schema.hxx;library-schema.cxx;%(Outputs) + + + + + + + + {a3f6e060-d536-4a43-af4b-89063f65de91} + false + + + + + + \ No newline at end of file diff --git a/xsd/dist/examples/cxx/tree/embedded/embedded-vc11.vcxproj.filters b/xsd/dist/examples/cxx/tree/embedded/embedded-vc11.vcxproj.filters new file mode 100644 index 0000000..42beedc --- /dev/null +++ b/xsd/dist/examples/cxx/tree/embedded/embedded-vc11.vcxproj.filters @@ -0,0 +1,50 @@ + + + + + {1D046D9C-4D20-4084-A1F4-90488E0B0669} + cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {E2D458FA-56FA-4268-998B-BF3934169712} + h;hpp;hxx;hm;inl;inc;xsd + + + {a57574af-3c36-408f-9f8e-5140fe6abbf6} + xsd + + + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + + + Header Files + + + Header Files + + + Header Files + + + + + + + + Schema Files + + + \ No newline at end of file diff --git a/xsd/dist/examples/cxx/tree/embedded/embedded-vc12.sln b/xsd/dist/examples/cxx/tree/embedded/embedded-vc12.sln new file mode 100644 index 0000000..1a70889 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/embedded/embedded-vc12.sln @@ -0,0 +1,40 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 2013 +VisualStudioVersion = 12.0.21005.1 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "xsdbin", "xsdbin-vc12.vcxproj", "{A3F6E060-D536-4A43-AF4B-89063F65DE91}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "embedded", "embedded-vc12.vcxproj", "{9C8C2AA4-DF31-4884-B3B9-A6A36F3CB429}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Win32 = Debug|Win32 + Debug|x64 = Debug|x64 + Release|Win32 = Release|Win32 + Release|x64 = Release|x64 + + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {A3F6E060-D536-4A43-AF4B-89063F65DE91}.Debug|Win32.ActiveCfg = Debug|Win32 + {A3F6E060-D536-4A43-AF4B-89063F65DE91}.Debug|Win32.Build.0 = Debug|Win32 + {A3F6E060-D536-4A43-AF4B-89063F65DE91}.Debug|x64.ActiveCfg = Debug|x64 + {A3F6E060-D536-4A43-AF4B-89063F65DE91}.Debug|x64.Build.0 = Debug|x64 + {A3F6E060-D536-4A43-AF4B-89063F65DE91}.Release|Win32.ActiveCfg = Release|Win32 + {A3F6E060-D536-4A43-AF4B-89063F65DE91}.Release|Win32.Build.0 = Release|Win32 + {A3F6E060-D536-4A43-AF4B-89063F65DE91}.Release|x64.ActiveCfg = Release|x64 + {A3F6E060-D536-4A43-AF4B-89063F65DE91}.Release|x64.Build.0 = Release|x64 + {9C8C2AA4-DF31-4884-B3B9-A6A36F3CB429}.Debug|Win32.ActiveCfg = Debug|Win32 + {9C8C2AA4-DF31-4884-B3B9-A6A36F3CB429}.Debug|Win32.Build.0 = Debug|Win32 + {9C8C2AA4-DF31-4884-B3B9-A6A36F3CB429}.Debug|x64.ActiveCfg = Debug|x64 + {9C8C2AA4-DF31-4884-B3B9-A6A36F3CB429}.Debug|x64.Build.0 = Debug|x64 + {9C8C2AA4-DF31-4884-B3B9-A6A36F3CB429}.Release|Win32.ActiveCfg = Release|Win32 + {9C8C2AA4-DF31-4884-B3B9-A6A36F3CB429}.Release|Win32.Build.0 = Release|Win32 + {9C8C2AA4-DF31-4884-B3B9-A6A36F3CB429}.Release|x64.ActiveCfg = Release|x64 + {9C8C2AA4-DF31-4884-B3B9-A6A36F3CB429}.Release|x64.Build.0 = Release|x64 + + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/xsd/dist/examples/cxx/tree/embedded/embedded-vc12.vcxproj b/xsd/dist/examples/cxx/tree/embedded/embedded-vc12.vcxproj new file mode 100644 index 0000000..bc2682f --- /dev/null +++ b/xsd/dist/examples/cxx/tree/embedded/embedded-vc12.vcxproj @@ -0,0 +1,223 @@ + + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + embedded + {9C8C2AA4-DF31-4884-B3B9-A6A36F3CB429} + embedded + Win32Proj + + + + Application + v120 + MultiByte + + + Application + v120 + MultiByte + + + Application + v120 + MultiByte + + + Application + v120 + MultiByte + + + + + + + + + + + + + + + + + + + driver + driver + driver + driver + Debug\ + Debug\ + true + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + true + Release\ + Release\ + false + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + false + + + + Disabled + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebugDLL + true + + + Level3 + true + + + xerces-c_3D.lib;%(AdditionalDependencies) + $(TargetPath) + true + $(OutDir)driver.pdb + Console + false + + + MachineX86 + + + + + X64 + + + Disabled + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebugDLL + true + + + Level3 + true + + + xerces-c_3D.lib;%(AdditionalDependencies) + $(TargetPath) + true + $(OutDir)driver.pdb + Console + false + + + MachineX64 + + + + + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreadedDLL + true + + + Level3 + true + + + xerces-c_3.lib;%(AdditionalDependencies) + $(TargetPath) + true + Console + true + true + false + + + MachineX86 + + + + + X64 + + + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreadedDLL + true + + + Level3 + true + + + xerces-c_3.lib;%(AdditionalDependencies) + $(TargetPath) + true + Console + true + true + false + + + MachineX64 + + + + + + + + + + + + + + + + xsd library.xsd + xsd cxx-tree library.xsd && xsdbin.exe library.xsd + library.hxx;library.cxx;library-schema.hxx;library-schema.cxx;%(Outputs) + xsd library.xsd + xsd cxx-tree library.xsd && xsdbin.exe library.xsd + library.hxx;library.cxx;library-schema.hxx;library-schema.cxx;%(Outputs) + xsd library.xsd + xsd cxx-tree library.xsd && xsdbin.exe library.xsd + library.hxx;library.cxx;library-schema.hxx;library-schema.cxx;%(Outputs) + xsd library.xsd + xsd cxx-tree library.xsd && xsdbin.exe library.xsd + library.hxx;library.cxx;library-schema.hxx;library-schema.cxx;%(Outputs) + + + + + + + + {a3f6e060-d536-4a43-af4b-89063f65de91} + false + + + + + + \ No newline at end of file diff --git a/xsd/dist/examples/cxx/tree/embedded/embedded-vc12.vcxproj.filters b/xsd/dist/examples/cxx/tree/embedded/embedded-vc12.vcxproj.filters new file mode 100644 index 0000000..42beedc --- /dev/null +++ b/xsd/dist/examples/cxx/tree/embedded/embedded-vc12.vcxproj.filters @@ -0,0 +1,50 @@ + + + + + {1D046D9C-4D20-4084-A1F4-90488E0B0669} + cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {E2D458FA-56FA-4268-998B-BF3934169712} + h;hpp;hxx;hm;inl;inc;xsd + + + {a57574af-3c36-408f-9f8e-5140fe6abbf6} + xsd + + + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + + + Header Files + + + Header Files + + + Header Files + + + + + + + + Schema Files + + + \ No newline at end of file diff --git a/xsd/dist/examples/cxx/tree/embedded/embedded-vc8.sln b/xsd/dist/examples/cxx/tree/embedded/embedded-vc8.sln new file mode 100644 index 0000000..29a7c60 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/embedded/embedded-vc8.sln @@ -0,0 +1,41 @@ + +Microsoft Visual Studio Solution File, Format Version 9.00 +# Visual Studio 2005 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "xsdbin", "xsdbin-vc8.vcproj", "{A3F6E060-D536-4A43-AF4B-89063F65DE91}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "embedded", "embedded-vc8.vcproj", "{9C8C2AA4-DF31-4884-B3B9-A6A36F3CB429}" + ProjectSection(ProjectDependencies) = postProject + {A3F6E060-D536-4A43-AF4B-89063F65DE91} = {A3F6E060-D536-4A43-AF4B-89063F65DE91} + EndProjectSection +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Win32 = Debug|Win32 + Release|Win32 = Release|Win32 + Debug|x64 = Debug|x64 + Release|x64 = Release|x64 + + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {A3F6E060-D536-4A43-AF4B-89063F65DE91}.Debug|Win32.ActiveCfg = Debug|Win32 + {A3F6E060-D536-4A43-AF4B-89063F65DE91}.Debug|Win32.Build.0 = Debug|Win32 + {A3F6E060-D536-4A43-AF4B-89063F65DE91}.Release|Win32.ActiveCfg = Release|Win32 + {A3F6E060-D536-4A43-AF4B-89063F65DE91}.Release|Win32.Build.0 = Release|Win32 + {A3F6E060-D536-4A43-AF4B-89063F65DE91}.Debug|x64.ActiveCfg = Debug|x64 + {A3F6E060-D536-4A43-AF4B-89063F65DE91}.Debug|x64.Build.0 = Debug|x64 + {A3F6E060-D536-4A43-AF4B-89063F65DE91}.Release|x64.ActiveCfg = Release|x64 + {A3F6E060-D536-4A43-AF4B-89063F65DE91}.Release|x64.Build.0 = Release|x64 + {9C8C2AA4-DF31-4884-B3B9-A6A36F3CB429}.Debug|Win32.ActiveCfg = Debug|Win32 + {9C8C2AA4-DF31-4884-B3B9-A6A36F3CB429}.Debug|Win32.Build.0 = Debug|Win32 + {9C8C2AA4-DF31-4884-B3B9-A6A36F3CB429}.Release|Win32.ActiveCfg = Release|Win32 + {9C8C2AA4-DF31-4884-B3B9-A6A36F3CB429}.Release|Win32.Build.0 = Release|Win32 + {9C8C2AA4-DF31-4884-B3B9-A6A36F3CB429}.Debug|x64.ActiveCfg = Debug|x64 + {9C8C2AA4-DF31-4884-B3B9-A6A36F3CB429}.Debug|x64.Build.0 = Debug|x64 + {9C8C2AA4-DF31-4884-B3B9-A6A36F3CB429}.Release|x64.ActiveCfg = Release|x64 + {9C8C2AA4-DF31-4884-B3B9-A6A36F3CB429}.Release|x64.Build.0 = Release|x64 + + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/xsd/dist/examples/cxx/tree/embedded/embedded-vc8.vcproj b/xsd/dist/examples/cxx/tree/embedded/embedded-vc8.vcproj new file mode 100644 index 0000000..d0df22c --- /dev/null +++ b/xsd/dist/examples/cxx/tree/embedded/embedded-vc8.vcproj @@ -0,0 +1,439 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/xsd/dist/examples/cxx/tree/embedded/embedded-vc9.sln b/xsd/dist/examples/cxx/tree/embedded/embedded-vc9.sln new file mode 100644 index 0000000..96f10ed --- /dev/null +++ b/xsd/dist/examples/cxx/tree/embedded/embedded-vc9.sln @@ -0,0 +1,41 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "xsdbin", "xsdbin-vc9.vcproj", "{A3F6E060-D536-4A43-AF4B-89063F65DE91}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "embedded", "embedded-vc9.vcproj", "{9C8C2AA4-DF31-4884-B3B9-A6A36F3CB429}" + ProjectSection(ProjectDependencies) = postProject + {A3F6E060-D536-4A43-AF4B-89063F65DE91} = {A3F6E060-D536-4A43-AF4B-89063F65DE91} + EndProjectSection +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Win32 = Debug|Win32 + Debug|x64 = Debug|x64 + Release|Win32 = Release|Win32 + Release|x64 = Release|x64 + + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {A3F6E060-D536-4A43-AF4B-89063F65DE91}.Debug|Win32.ActiveCfg = Debug|Win32 + {A3F6E060-D536-4A43-AF4B-89063F65DE91}.Debug|Win32.Build.0 = Debug|Win32 + {A3F6E060-D536-4A43-AF4B-89063F65DE91}.Debug|x64.ActiveCfg = Debug|x64 + {A3F6E060-D536-4A43-AF4B-89063F65DE91}.Debug|x64.Build.0 = Debug|x64 + {A3F6E060-D536-4A43-AF4B-89063F65DE91}.Release|Win32.ActiveCfg = Release|Win32 + {A3F6E060-D536-4A43-AF4B-89063F65DE91}.Release|Win32.Build.0 = Release|Win32 + {A3F6E060-D536-4A43-AF4B-89063F65DE91}.Release|x64.ActiveCfg = Release|x64 + {A3F6E060-D536-4A43-AF4B-89063F65DE91}.Release|x64.Build.0 = Release|x64 + {9C8C2AA4-DF31-4884-B3B9-A6A36F3CB429}.Debug|Win32.ActiveCfg = Debug|Win32 + {9C8C2AA4-DF31-4884-B3B9-A6A36F3CB429}.Debug|Win32.Build.0 = Debug|Win32 + {9C8C2AA4-DF31-4884-B3B9-A6A36F3CB429}.Debug|x64.ActiveCfg = Debug|x64 + {9C8C2AA4-DF31-4884-B3B9-A6A36F3CB429}.Debug|x64.Build.0 = Debug|x64 + {9C8C2AA4-DF31-4884-B3B9-A6A36F3CB429}.Release|Win32.ActiveCfg = Release|Win32 + {9C8C2AA4-DF31-4884-B3B9-A6A36F3CB429}.Release|Win32.Build.0 = Release|Win32 + {9C8C2AA4-DF31-4884-B3B9-A6A36F3CB429}.Release|x64.ActiveCfg = Release|x64 + {9C8C2AA4-DF31-4884-B3B9-A6A36F3CB429}.Release|x64.Build.0 = Release|x64 + + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/xsd/dist/examples/cxx/tree/embedded/embedded-vc9.vcproj b/xsd/dist/examples/cxx/tree/embedded/embedded-vc9.vcproj new file mode 100644 index 0000000..bf5498c --- /dev/null +++ b/xsd/dist/examples/cxx/tree/embedded/embedded-vc9.vcproj @@ -0,0 +1,436 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/xsd/dist/examples/cxx/tree/embedded/embedded-xerces2-7.1.sln b/xsd/dist/examples/cxx/tree/embedded/embedded-xerces2-7.1.sln deleted file mode 100644 index aecc9e2..0000000 --- a/xsd/dist/examples/cxx/tree/embedded/embedded-xerces2-7.1.sln +++ /dev/null @@ -1,30 +0,0 @@ -Microsoft Visual Studio Solution File, Format Version 8.00 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "xsdbin", "xsdbin-xerces2-7.1.vcproj", "{A3F6E060-D536-4A43-AF4B-89063F65DE91}" - ProjectSection(ProjectDependencies) = postProject - EndProjectSection -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "embedded", "embedded-xerces2-7.1.vcproj", "{9C8C2AA4-DF31-4884-B3B9-A6A36F3CB429}" - ProjectSection(ProjectDependencies) = postProject - {A3F6E060-D536-4A43-AF4B-89063F65DE91} = {A3F6E060-D536-4A43-AF4B-89063F65DE91} - EndProjectSection -EndProject -Global - GlobalSection(SolutionConfiguration) = preSolution - Debug = Debug - Release = Release - EndGlobalSection - GlobalSection(ProjectConfiguration) = postSolution - {A3F6E060-D536-4A43-AF4B-89063F65DE91}.Debug.ActiveCfg = Debug|Win32 - {A3F6E060-D536-4A43-AF4B-89063F65DE91}.Debug.Build.0 = Debug|Win32 - {A3F6E060-D536-4A43-AF4B-89063F65DE91}.Release.ActiveCfg = Release|Win32 - {A3F6E060-D536-4A43-AF4B-89063F65DE91}.Release.Build.0 = Release|Win32 - {9C8C2AA4-DF31-4884-B3B9-A6A36F3CB429}.Debug.ActiveCfg = Debug|Win32 - {9C8C2AA4-DF31-4884-B3B9-A6A36F3CB429}.Debug.Build.0 = Debug|Win32 - {9C8C2AA4-DF31-4884-B3B9-A6A36F3CB429}.Release.ActiveCfg = Release|Win32 - {9C8C2AA4-DF31-4884-B3B9-A6A36F3CB429}.Release.Build.0 = Release|Win32 - EndGlobalSection - GlobalSection(ExtensibilityGlobals) = postSolution - EndGlobalSection - GlobalSection(ExtensibilityAddIns) = postSolution - EndGlobalSection -EndGlobal diff --git a/xsd/dist/examples/cxx/tree/embedded/embedded-xerces2-7.1.vcproj b/xsd/dist/examples/cxx/tree/embedded/embedded-xerces2-7.1.vcproj deleted file mode 100644 index 1b1b4f9..0000000 --- a/xsd/dist/examples/cxx/tree/embedded/embedded-xerces2-7.1.vcproj +++ /dev/null @@ -1,176 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/xsd/dist/examples/cxx/tree/embedded/embedded-xerces2-8.0.sln b/xsd/dist/examples/cxx/tree/embedded/embedded-xerces2-8.0.sln deleted file mode 100644 index 8f5e370..0000000 --- a/xsd/dist/examples/cxx/tree/embedded/embedded-xerces2-8.0.sln +++ /dev/null @@ -1,38 +0,0 @@ -Microsoft Visual Studio Solution File, Format Version 9.00 -# Visual Studio 2005 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "xsdbin", "xsdbin-xerces2-8.0.vcproj", "{A3F6E060-D536-4A43-AF4B-89063F65DE91}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "embedded", "embedded-xerces2-8.0.vcproj", "{9C8C2AA4-DF31-4884-B3B9-A6A36F3CB429}" - ProjectSection(ProjectDependencies) = postProject - {A3F6E060-D536-4A43-AF4B-89063F65DE91} = {A3F6E060-D536-4A43-AF4B-89063F65DE91} - EndProjectSection -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Win32 = Debug|Win32 - Debug|x64 = Debug|x64 - Release|Win32 = Release|Win32 - Release|x64 = Release|x64 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {A3F6E060-D536-4A43-AF4B-89063F65DE91}.Debug|Win32.ActiveCfg = Debug|Win32 - {A3F6E060-D536-4A43-AF4B-89063F65DE91}.Debug|Win32.Build.0 = Debug|Win32 - {A3F6E060-D536-4A43-AF4B-89063F65DE91}.Debug|x64.ActiveCfg = Debug|x64 - {A3F6E060-D536-4A43-AF4B-89063F65DE91}.Debug|x64.Build.0 = Debug|x64 - {A3F6E060-D536-4A43-AF4B-89063F65DE91}.Release|Win32.ActiveCfg = Release|Win32 - {A3F6E060-D536-4A43-AF4B-89063F65DE91}.Release|Win32.Build.0 = Release|Win32 - {A3F6E060-D536-4A43-AF4B-89063F65DE91}.Release|x64.ActiveCfg = Release|x64 - {A3F6E060-D536-4A43-AF4B-89063F65DE91}.Release|x64.Build.0 = Release|x64 - {9C8C2AA4-DF31-4884-B3B9-A6A36F3CB429}.Debug|Win32.ActiveCfg = Debug|Win32 - {9C8C2AA4-DF31-4884-B3B9-A6A36F3CB429}.Debug|Win32.Build.0 = Debug|Win32 - {9C8C2AA4-DF31-4884-B3B9-A6A36F3CB429}.Debug|x64.ActiveCfg = Debug|x64 - {9C8C2AA4-DF31-4884-B3B9-A6A36F3CB429}.Debug|x64.Build.0 = Debug|x64 - {9C8C2AA4-DF31-4884-B3B9-A6A36F3CB429}.Release|Win32.ActiveCfg = Release|Win32 - {9C8C2AA4-DF31-4884-B3B9-A6A36F3CB429}.Release|Win32.Build.0 = Release|Win32 - {9C8C2AA4-DF31-4884-B3B9-A6A36F3CB429}.Release|x64.ActiveCfg = Release|x64 - {9C8C2AA4-DF31-4884-B3B9-A6A36F3CB429}.Release|x64.Build.0 = Release|x64 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal diff --git a/xsd/dist/examples/cxx/tree/embedded/embedded-xerces2-8.0.vcproj b/xsd/dist/examples/cxx/tree/embedded/embedded-xerces2-8.0.vcproj deleted file mode 100644 index 8f890bd..0000000 --- a/xsd/dist/examples/cxx/tree/embedded/embedded-xerces2-8.0.vcproj +++ /dev/null @@ -1,439 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/xsd/dist/examples/cxx/tree/embedded/embedded-xerces2-9.0.sln b/xsd/dist/examples/cxx/tree/embedded/embedded-xerces2-9.0.sln deleted file mode 100644 index f3e16d2..0000000 --- a/xsd/dist/examples/cxx/tree/embedded/embedded-xerces2-9.0.sln +++ /dev/null @@ -1,38 +0,0 @@ -Microsoft Visual Studio Solution File, Format Version 10.00 -# Visual Studio 2008 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "xsdbin", "xsdbin-xerces2-9.0.vcproj", "{A3F6E060-D536-4A43-AF4B-89063F65DE91}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "embedded", "embedded-xerces2-9.0.vcproj", "{9C8C2AA4-DF31-4884-B3B9-A6A36F3CB429}" - ProjectSection(ProjectDependencies) = postProject - {A3F6E060-D536-4A43-AF4B-89063F65DE91} = {A3F6E060-D536-4A43-AF4B-89063F65DE91} - EndProjectSection -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Win32 = Debug|Win32 - Debug|x64 = Debug|x64 - Release|Win32 = Release|Win32 - Release|x64 = Release|x64 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {A3F6E060-D536-4A43-AF4B-89063F65DE91}.Debug|Win32.ActiveCfg = Debug|Win32 - {A3F6E060-D536-4A43-AF4B-89063F65DE91}.Debug|Win32.Build.0 = Debug|Win32 - {A3F6E060-D536-4A43-AF4B-89063F65DE91}.Debug|x64.ActiveCfg = Debug|x64 - {A3F6E060-D536-4A43-AF4B-89063F65DE91}.Debug|x64.Build.0 = Debug|x64 - {A3F6E060-D536-4A43-AF4B-89063F65DE91}.Release|Win32.ActiveCfg = Release|Win32 - {A3F6E060-D536-4A43-AF4B-89063F65DE91}.Release|Win32.Build.0 = Release|Win32 - {A3F6E060-D536-4A43-AF4B-89063F65DE91}.Release|x64.ActiveCfg = Release|x64 - {A3F6E060-D536-4A43-AF4B-89063F65DE91}.Release|x64.Build.0 = Release|x64 - {9C8C2AA4-DF31-4884-B3B9-A6A36F3CB429}.Debug|Win32.ActiveCfg = Debug|Win32 - {9C8C2AA4-DF31-4884-B3B9-A6A36F3CB429}.Debug|Win32.Build.0 = Debug|Win32 - {9C8C2AA4-DF31-4884-B3B9-A6A36F3CB429}.Debug|x64.ActiveCfg = Debug|x64 - {9C8C2AA4-DF31-4884-B3B9-A6A36F3CB429}.Debug|x64.Build.0 = Debug|x64 - {9C8C2AA4-DF31-4884-B3B9-A6A36F3CB429}.Release|Win32.ActiveCfg = Release|Win32 - {9C8C2AA4-DF31-4884-B3B9-A6A36F3CB429}.Release|Win32.Build.0 = Release|Win32 - {9C8C2AA4-DF31-4884-B3B9-A6A36F3CB429}.Release|x64.ActiveCfg = Release|x64 - {9C8C2AA4-DF31-4884-B3B9-A6A36F3CB429}.Release|x64.Build.0 = Release|x64 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal diff --git a/xsd/dist/examples/cxx/tree/embedded/embedded-xerces2-9.0.vcproj b/xsd/dist/examples/cxx/tree/embedded/embedded-xerces2-9.0.vcproj deleted file mode 100644 index dcc9fc5..0000000 --- a/xsd/dist/examples/cxx/tree/embedded/embedded-xerces2-9.0.vcproj +++ /dev/null @@ -1,436 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/xsd/dist/examples/cxx/tree/embedded/xsdbin-10.0.vcxproj b/xsd/dist/examples/cxx/tree/embedded/xsdbin-10.0.vcxproj deleted file mode 100644 index d9a9da2..0000000 --- a/xsd/dist/examples/cxx/tree/embedded/xsdbin-10.0.vcxproj +++ /dev/null @@ -1,186 +0,0 @@ - - - - - Debug - Win32 - - - Debug - x64 - - - Release - Win32 - - - Release - x64 - - - - xsdbin - {A3F6E060-D536-4A43-AF4B-89063F65DE91} - xsdbin - Win32Proj - - - - Application - MultiByte - - - Application - MultiByte - - - Application - MultiByte - - - Application - MultiByte - - - - - - - - - - - - - - - - - - - xsdbin - xsdbin - xsdbin - xsdbin - $(ProjectDir) - Debug\xsdbin\ - true - $(ProjectDir) - $(Platform)\$(Configuration)\xsdbin\ - true - $(ProjectDir) - Release\xsdbin\ - false - $(ProjectDir) - $(Platform)\$(Configuration)\xsdbin\ - false - - - - Disabled - WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - true - - - Level3 - EditAndContinue - - - xerces-c_3D.lib;%(AdditionalDependencies) - $(TargetPath) - true - $(OutDir)xsdbin.pdb - Console - false - - - MachineX86 - - - - - X64 - - - Disabled - WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - true - - - Level3 - ProgramDatabase - - - xerces-c_3D.lib;%(AdditionalDependencies) - $(TargetPath) - true - $(OutDir)xsdbin.pdb - Console - false - - - MachineX64 - - - - - WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - MultiThreadedDLL - true - - - Level3 - ProgramDatabase - - - xerces-c_3.lib;%(AdditionalDependencies) - $(TargetPath) - true - Console - true - true - false - - - MachineX86 - - - - - X64 - - - WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - MultiThreadedDLL - true - - - Level3 - ProgramDatabase - - - xerces-c_3.lib;%(AdditionalDependencies) - $(TargetPath) - true - Console - true - true - false - - - MachineX64 - - - - - - - - - \ No newline at end of file diff --git a/xsd/dist/examples/cxx/tree/embedded/xsdbin-10.0.vcxproj.filters b/xsd/dist/examples/cxx/tree/embedded/xsdbin-10.0.vcxproj.filters deleted file mode 100644 index 27abb01..0000000 --- a/xsd/dist/examples/cxx/tree/embedded/xsdbin-10.0.vcxproj.filters +++ /dev/null @@ -1,14 +0,0 @@ - - - - - {D9727125-E5B7-4777-8EB3-6EE957552516} - cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx - - - - - Source Files - - - \ No newline at end of file diff --git a/xsd/dist/examples/cxx/tree/embedded/xsdbin-7.1.vcproj b/xsd/dist/examples/cxx/tree/embedded/xsdbin-7.1.vcproj deleted file mode 100644 index dea527f..0000000 --- a/xsd/dist/examples/cxx/tree/embedded/xsdbin-7.1.vcproj +++ /dev/null @@ -1,127 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/xsd/dist/examples/cxx/tree/embedded/xsdbin-8.0.vcproj b/xsd/dist/examples/cxx/tree/embedded/xsdbin-8.0.vcproj deleted file mode 100644 index 095024f..0000000 --- a/xsd/dist/examples/cxx/tree/embedded/xsdbin-8.0.vcproj +++ /dev/null @@ -1,356 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/xsd/dist/examples/cxx/tree/embedded/xsdbin-9.0.vcproj b/xsd/dist/examples/cxx/tree/embedded/xsdbin-9.0.vcproj deleted file mode 100644 index 1cb2ead..0000000 --- a/xsd/dist/examples/cxx/tree/embedded/xsdbin-9.0.vcproj +++ /dev/null @@ -1,353 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/xsd/dist/examples/cxx/tree/embedded/xsdbin-vc10.vcxproj b/xsd/dist/examples/cxx/tree/embedded/xsdbin-vc10.vcxproj new file mode 100644 index 0000000..a57a876 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/embedded/xsdbin-vc10.vcxproj @@ -0,0 +1,182 @@ + + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + xsdbin + {A3F6E060-D536-4A43-AF4B-89063F65DE91} + xsdbin + Win32Proj + + + + Application + MultiByte + + + Application + MultiByte + + + Application + MultiByte + + + Application + MultiByte + + + + + + + + + + + + + + + + + + + xsdbin + xsdbin + xsdbin + xsdbin + $(ProjectDir) + Debug\xsdbin\ + true + $(ProjectDir) + $(Platform)\$(Configuration)\xsdbin\ + true + $(ProjectDir) + Release\xsdbin\ + false + $(ProjectDir) + $(Platform)\$(Configuration)\xsdbin\ + false + + + + Disabled + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebugDLL + true + + + Level3 + + + xerces-c_3D.lib;%(AdditionalDependencies) + $(TargetPath) + true + $(OutDir)xsdbin.pdb + Console + false + + + MachineX86 + + + + + X64 + + + Disabled + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebugDLL + true + + + Level3 + + + xerces-c_3D.lib;%(AdditionalDependencies) + $(TargetPath) + true + $(OutDir)xsdbin.pdb + Console + false + + + MachineX64 + + + + + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreadedDLL + true + + + Level3 + + + xerces-c_3.lib;%(AdditionalDependencies) + $(TargetPath) + true + Console + true + true + false + + + MachineX86 + + + + + X64 + + + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreadedDLL + true + + + Level3 + + + xerces-c_3.lib;%(AdditionalDependencies) + $(TargetPath) + true + Console + true + true + false + + + MachineX64 + + + + + + + + + \ No newline at end of file diff --git a/xsd/dist/examples/cxx/tree/embedded/xsdbin-vc10.vcxproj.filters b/xsd/dist/examples/cxx/tree/embedded/xsdbin-vc10.vcxproj.filters new file mode 100644 index 0000000..27abb01 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/embedded/xsdbin-vc10.vcxproj.filters @@ -0,0 +1,14 @@ + + + + + {D9727125-E5B7-4777-8EB3-6EE957552516} + cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx + + + + + Source Files + + + \ No newline at end of file diff --git a/xsd/dist/examples/cxx/tree/embedded/xsdbin-vc11.vcxproj b/xsd/dist/examples/cxx/tree/embedded/xsdbin-vc11.vcxproj new file mode 100644 index 0000000..1cfce63 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/embedded/xsdbin-vc11.vcxproj @@ -0,0 +1,186 @@ + + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + xsdbin + {A3F6E060-D536-4A43-AF4B-89063F65DE91} + xsdbin + Win32Proj + + + + Application + v110 + MultiByte + + + Application + v110 + MultiByte + + + Application + v110 + MultiByte + + + Application + v110 + MultiByte + + + + + + + + + + + + + + + + + + + xsdbin + xsdbin + xsdbin + xsdbin + $(ProjectDir) + Debug\xsdbin\ + true + $(ProjectDir) + $(Platform)\$(Configuration)\xsdbin\ + true + $(ProjectDir) + Release\xsdbin\ + false + $(ProjectDir) + $(Platform)\$(Configuration)\xsdbin\ + false + + + + Disabled + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebugDLL + true + + + Level3 + + + xerces-c_3D.lib;%(AdditionalDependencies) + $(TargetPath) + true + $(OutDir)xsdbin.pdb + Console + false + + + MachineX86 + + + + + X64 + + + Disabled + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebugDLL + true + + + Level3 + + + xerces-c_3D.lib;%(AdditionalDependencies) + $(TargetPath) + true + $(OutDir)xsdbin.pdb + Console + false + + + MachineX64 + + + + + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreadedDLL + true + + + Level3 + + + xerces-c_3.lib;%(AdditionalDependencies) + $(TargetPath) + true + Console + true + true + false + + + MachineX86 + + + + + X64 + + + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreadedDLL + true + + + Level3 + + + xerces-c_3.lib;%(AdditionalDependencies) + $(TargetPath) + true + Console + true + true + false + + + MachineX64 + + + + + + + + + \ No newline at end of file diff --git a/xsd/dist/examples/cxx/tree/embedded/xsdbin-vc11.vcxproj.filters b/xsd/dist/examples/cxx/tree/embedded/xsdbin-vc11.vcxproj.filters new file mode 100644 index 0000000..27abb01 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/embedded/xsdbin-vc11.vcxproj.filters @@ -0,0 +1,14 @@ + + + + + {D9727125-E5B7-4777-8EB3-6EE957552516} + cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx + + + + + Source Files + + + \ No newline at end of file diff --git a/xsd/dist/examples/cxx/tree/embedded/xsdbin-vc12.vcxproj b/xsd/dist/examples/cxx/tree/embedded/xsdbin-vc12.vcxproj new file mode 100644 index 0000000..eb66e81 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/embedded/xsdbin-vc12.vcxproj @@ -0,0 +1,190 @@ + + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + xsdbin + {A3F6E060-D536-4A43-AF4B-89063F65DE91} + xsdbin + Win32Proj + + + + Application + v120 + MultiByte + + + Application + v120 + MultiByte + + + Application + v120 + MultiByte + + + Application + v120 + MultiByte + + + + + + + + + + + + + + + + + + + xsdbin + xsdbin + xsdbin + xsdbin + $(ProjectDir) + Debug\xsdbin\ + true + $(ProjectDir) + $(Platform)\$(Configuration)\xsdbin\ + true + $(ProjectDir) + Release\xsdbin\ + false + $(ProjectDir) + $(Platform)\$(Configuration)\xsdbin\ + false + + + + Disabled + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebugDLL + true + + + Level3 + true + + + xerces-c_3D.lib;%(AdditionalDependencies) + $(TargetPath) + true + $(OutDir)xsdbin.pdb + Console + false + + + MachineX86 + + + + + X64 + + + Disabled + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebugDLL + true + + + Level3 + true + + + xerces-c_3D.lib;%(AdditionalDependencies) + $(TargetPath) + true + $(OutDir)xsdbin.pdb + Console + false + + + MachineX64 + + + + + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreadedDLL + true + + + Level3 + true + + + xerces-c_3.lib;%(AdditionalDependencies) + $(TargetPath) + true + Console + true + true + false + + + MachineX86 + + + + + X64 + + + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreadedDLL + true + + + Level3 + true + + + xerces-c_3.lib;%(AdditionalDependencies) + $(TargetPath) + true + Console + true + true + false + + + MachineX64 + + + + + + + + + \ No newline at end of file diff --git a/xsd/dist/examples/cxx/tree/embedded/xsdbin-vc12.vcxproj.filters b/xsd/dist/examples/cxx/tree/embedded/xsdbin-vc12.vcxproj.filters new file mode 100644 index 0000000..27abb01 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/embedded/xsdbin-vc12.vcxproj.filters @@ -0,0 +1,14 @@ + + + + + {D9727125-E5B7-4777-8EB3-6EE957552516} + cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx + + + + + Source Files + + + \ No newline at end of file diff --git a/xsd/dist/examples/cxx/tree/embedded/xsdbin-vc8.vcproj b/xsd/dist/examples/cxx/tree/embedded/xsdbin-vc8.vcproj new file mode 100644 index 0000000..095024f --- /dev/null +++ b/xsd/dist/examples/cxx/tree/embedded/xsdbin-vc8.vcproj @@ -0,0 +1,356 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/xsd/dist/examples/cxx/tree/embedded/xsdbin-vc9.vcproj b/xsd/dist/examples/cxx/tree/embedded/xsdbin-vc9.vcproj new file mode 100644 index 0000000..1cb2ead --- /dev/null +++ b/xsd/dist/examples/cxx/tree/embedded/xsdbin-vc9.vcproj @@ -0,0 +1,353 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/xsd/dist/examples/cxx/tree/embedded/xsdbin-xerces2-7.1.vcproj b/xsd/dist/examples/cxx/tree/embedded/xsdbin-xerces2-7.1.vcproj deleted file mode 100644 index 8d0e9ec..0000000 --- a/xsd/dist/examples/cxx/tree/embedded/xsdbin-xerces2-7.1.vcproj +++ /dev/null @@ -1,127 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/xsd/dist/examples/cxx/tree/embedded/xsdbin-xerces2-8.0.vcproj b/xsd/dist/examples/cxx/tree/embedded/xsdbin-xerces2-8.0.vcproj deleted file mode 100644 index f0677fe..0000000 --- a/xsd/dist/examples/cxx/tree/embedded/xsdbin-xerces2-8.0.vcproj +++ /dev/null @@ -1,356 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/xsd/dist/examples/cxx/tree/embedded/xsdbin-xerces2-9.0.vcproj b/xsd/dist/examples/cxx/tree/embedded/xsdbin-xerces2-9.0.vcproj deleted file mode 100644 index e1292ea..0000000 --- a/xsd/dist/examples/cxx/tree/embedded/xsdbin-xerces2-9.0.vcproj +++ /dev/null @@ -1,353 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/xsd/dist/examples/cxx/tree/hello/hello-10.0.vcxproj b/xsd/dist/examples/cxx/tree/hello/hello-10.0.vcxproj deleted file mode 100644 index 1a1ffe8..0000000 --- a/xsd/dist/examples/cxx/tree/hello/hello-10.0.vcxproj +++ /dev/null @@ -1,209 +0,0 @@ - - - - - Debug - Win32 - - - Debug - x64 - - - Release - Win32 - - - Release - x64 - - - - hello - {538CCAB6-984B-4602-B0D0-985E8FD4FEB9} - hello - Win32Proj - - - - Application - MultiByte - - - Application - MultiByte - - - Application - MultiByte - - - Application - MultiByte - - - - - - - - - - - - - - - - - - - driver - driver - driver - driver - Debug\ - Debug\ - true - $(Platform)\$(Configuration)\ - $(Platform)\$(Configuration)\ - true - Release\ - Release\ - false - $(Platform)\$(Configuration)\ - $(Platform)\$(Configuration)\ - false - - - - Disabled - WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebug - true - - - Level3 - EditAndContinue - - - xerces-c_3D.lib;%(AdditionalDependencies) - $(TargetPath) - true - $(OutDir)driver.pdb - Console - false - - - MachineX86 - - - - - X64 - - - Disabled - WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebug - true - - - Level3 - ProgramDatabase - - - xerces-c_3D.lib;%(AdditionalDependencies) - $(TargetPath) - true - $(OutDir)driver.pdb - Console - false - - - MachineX64 - - - - - WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - MultiThreaded - true - - - Level3 - ProgramDatabase - - - xerces-c_3.lib;%(AdditionalDependencies) - $(TargetPath) - true - Console - true - true - false - - - MachineX86 - - - - - X64 - - - WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - MultiThreaded - true - - - Level3 - ProgramDatabase - - - xerces-c_3.lib;%(AdditionalDependencies) - $(TargetPath) - true - Console - true - true - false - - - MachineX64 - - - - - - - - - - - - xsd hello.xsd - xsd.exe cxx-tree hello.xsd - hello.cxx;hello.hxx;%(Outputs) - xsd hello.xsd - xsd.exe cxx-tree hello.xsd - hello.cxx;hello.hxx;%(Outputs) - xsd hello.xsd - xsd.exe cxx-tree hello.xsd - hello.cxx;hello.hxx;%(Outputs) - xsd hello.xsd - xsd.exe cxx-tree hello.xsd - hello.cxx;hello.hxx;%(Outputs) - - - - - - - - - \ No newline at end of file diff --git a/xsd/dist/examples/cxx/tree/hello/hello-10.0.vcxproj.filters b/xsd/dist/examples/cxx/tree/hello/hello-10.0.vcxproj.filters deleted file mode 100644 index 620639d..0000000 --- a/xsd/dist/examples/cxx/tree/hello/hello-10.0.vcxproj.filters +++ /dev/null @@ -1,38 +0,0 @@ - - - - - {4FC737F1-C7A5-4376-A066-2A32D752A2FF} - cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx - - - {93995380-89BD-4b04-88EB-625FBE52EBFB} - h;hpp;hxx;hm;inl;inc;xsd - - - {d512d9c4-9ddd-4830-a487-1d87db0643d5} - xsd - - - - - Source Files - - - Source Files - - - - - Header Files - - - - - - - - Schema Files - - - \ No newline at end of file diff --git a/xsd/dist/examples/cxx/tree/hello/hello-7.1.vcproj b/xsd/dist/examples/cxx/tree/hello/hello-7.1.vcproj deleted file mode 100644 index 719f0d7..0000000 --- a/xsd/dist/examples/cxx/tree/hello/hello-7.1.vcproj +++ /dev/null @@ -1,164 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/xsd/dist/examples/cxx/tree/hello/hello-8.0.vcproj b/xsd/dist/examples/cxx/tree/hello/hello-8.0.vcproj deleted file mode 100644 index 299fd53..0000000 --- a/xsd/dist/examples/cxx/tree/hello/hello-8.0.vcproj +++ /dev/null @@ -1,423 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/xsd/dist/examples/cxx/tree/hello/hello-9.0.vcproj b/xsd/dist/examples/cxx/tree/hello/hello-9.0.vcproj deleted file mode 100644 index 0d85099..0000000 --- a/xsd/dist/examples/cxx/tree/hello/hello-9.0.vcproj +++ /dev/null @@ -1,420 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/xsd/dist/examples/cxx/tree/hello/hello-vc10.vcxproj b/xsd/dist/examples/cxx/tree/hello/hello-vc10.vcxproj new file mode 100644 index 0000000..a9e0544 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/hello/hello-vc10.vcxproj @@ -0,0 +1,205 @@ + + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + hello + {538CCAB6-984B-4602-B0D0-985E8FD4FEB9} + hello + Win32Proj + + + + Application + MultiByte + + + Application + MultiByte + + + Application + MultiByte + + + Application + MultiByte + + + + + + + + + + + + + + + + + + + driver + driver + driver + driver + Debug\ + Debug\ + true + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + true + Release\ + Release\ + false + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + false + + + + Disabled + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebugDLL + true + + + Level3 + + + xerces-c_3D.lib;%(AdditionalDependencies) + $(TargetPath) + true + $(OutDir)driver.pdb + Console + false + + + MachineX86 + + + + + X64 + + + Disabled + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebugDLL + true + + + Level3 + + + xerces-c_3D.lib;%(AdditionalDependencies) + $(TargetPath) + true + $(OutDir)driver.pdb + Console + false + + + MachineX64 + + + + + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreadedDLL + true + + + Level3 + + + xerces-c_3.lib;%(AdditionalDependencies) + $(TargetPath) + true + Console + true + true + false + + + MachineX86 + + + + + X64 + + + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreadedDLL + true + + + Level3 + + + xerces-c_3.lib;%(AdditionalDependencies) + $(TargetPath) + true + Console + true + true + false + + + MachineX64 + + + + + + + + + + + + xsd hello.xsd + xsd.exe cxx-tree hello.xsd + hello.cxx;hello.hxx;%(Outputs) + xsd hello.xsd + xsd.exe cxx-tree hello.xsd + hello.cxx;hello.hxx;%(Outputs) + xsd hello.xsd + xsd.exe cxx-tree hello.xsd + hello.cxx;hello.hxx;%(Outputs) + xsd hello.xsd + xsd.exe cxx-tree hello.xsd + hello.cxx;hello.hxx;%(Outputs) + + + + + + + + + \ No newline at end of file diff --git a/xsd/dist/examples/cxx/tree/hello/hello-vc10.vcxproj.filters b/xsd/dist/examples/cxx/tree/hello/hello-vc10.vcxproj.filters new file mode 100644 index 0000000..732378a --- /dev/null +++ b/xsd/dist/examples/cxx/tree/hello/hello-vc10.vcxproj.filters @@ -0,0 +1,38 @@ + + + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hpp;hxx;hm;inl;inc;xsd + + + {D512D9C4-9DDD-4830-A487-1D87DB0643D5} + xsd + + + + + Source Files + + + Source Files + + + + + Header Files + + + + + + + + Schema Files + + + \ No newline at end of file diff --git a/xsd/dist/examples/cxx/tree/hello/hello-vc11.vcxproj b/xsd/dist/examples/cxx/tree/hello/hello-vc11.vcxproj new file mode 100644 index 0000000..c3f4c4f --- /dev/null +++ b/xsd/dist/examples/cxx/tree/hello/hello-vc11.vcxproj @@ -0,0 +1,209 @@ + + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + hello + {538CCAB6-984B-4602-B0D0-985E8FD4FEB9} + hello + Win32Proj + + + + Application + v110 + MultiByte + + + Application + v110 + MultiByte + + + Application + v110 + MultiByte + + + Application + v110 + MultiByte + + + + + + + + + + + + + + + + + + + driver + driver + driver + driver + Debug\ + Debug\ + true + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + true + Release\ + Release\ + false + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + false + + + + Disabled + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebugDLL + true + + + Level3 + + + xerces-c_3D.lib;%(AdditionalDependencies) + $(TargetPath) + true + $(OutDir)driver.pdb + Console + false + + + MachineX86 + + + + + X64 + + + Disabled + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebugDLL + true + + + Level3 + + + xerces-c_3D.lib;%(AdditionalDependencies) + $(TargetPath) + true + $(OutDir)driver.pdb + Console + false + + + MachineX64 + + + + + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreadedDLL + true + + + Level3 + + + xerces-c_3.lib;%(AdditionalDependencies) + $(TargetPath) + true + Console + true + true + false + + + MachineX86 + + + + + X64 + + + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreadedDLL + true + + + Level3 + + + xerces-c_3.lib;%(AdditionalDependencies) + $(TargetPath) + true + Console + true + true + false + + + MachineX64 + + + + + + + + + + + + xsd hello.xsd + xsd.exe cxx-tree hello.xsd + hello.cxx;hello.hxx;%(Outputs) + xsd hello.xsd + xsd.exe cxx-tree hello.xsd + hello.cxx;hello.hxx;%(Outputs) + xsd hello.xsd + xsd.exe cxx-tree hello.xsd + hello.cxx;hello.hxx;%(Outputs) + xsd hello.xsd + xsd.exe cxx-tree hello.xsd + hello.cxx;hello.hxx;%(Outputs) + + + + + + + + + \ No newline at end of file diff --git a/xsd/dist/examples/cxx/tree/hello/hello-vc11.vcxproj.filters b/xsd/dist/examples/cxx/tree/hello/hello-vc11.vcxproj.filters new file mode 100644 index 0000000..732378a --- /dev/null +++ b/xsd/dist/examples/cxx/tree/hello/hello-vc11.vcxproj.filters @@ -0,0 +1,38 @@ + + + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hpp;hxx;hm;inl;inc;xsd + + + {D512D9C4-9DDD-4830-A487-1D87DB0643D5} + xsd + + + + + Source Files + + + Source Files + + + + + Header Files + + + + + + + + Schema Files + + + \ No newline at end of file diff --git a/xsd/dist/examples/cxx/tree/hello/hello-vc12.vcxproj b/xsd/dist/examples/cxx/tree/hello/hello-vc12.vcxproj new file mode 100644 index 0000000..031c47e --- /dev/null +++ b/xsd/dist/examples/cxx/tree/hello/hello-vc12.vcxproj @@ -0,0 +1,213 @@ + + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + hello + {538CCAB6-984B-4602-B0D0-985E8FD4FEB9} + hello + Win32Proj + + + + Application + v120 + MultiByte + + + Application + v120 + MultiByte + + + Application + v120 + MultiByte + + + Application + v120 + MultiByte + + + + + + + + + + + + + + + + + + + driver + driver + driver + driver + Debug\ + Debug\ + true + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + true + Release\ + Release\ + false + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + false + + + + Disabled + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebugDLL + true + + + Level3 + true + + + xerces-c_3D.lib;%(AdditionalDependencies) + $(TargetPath) + true + $(OutDir)driver.pdb + Console + false + + + MachineX86 + + + + + X64 + + + Disabled + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebugDLL + true + + + Level3 + true + + + xerces-c_3D.lib;%(AdditionalDependencies) + $(TargetPath) + true + $(OutDir)driver.pdb + Console + false + + + MachineX64 + + + + + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreadedDLL + true + + + Level3 + true + + + xerces-c_3.lib;%(AdditionalDependencies) + $(TargetPath) + true + Console + true + true + false + + + MachineX86 + + + + + X64 + + + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreadedDLL + true + + + Level3 + true + + + xerces-c_3.lib;%(AdditionalDependencies) + $(TargetPath) + true + Console + true + true + false + + + MachineX64 + + + + + + + + + + + + xsd hello.xsd + xsd.exe cxx-tree hello.xsd + hello.cxx;hello.hxx;%(Outputs) + xsd hello.xsd + xsd.exe cxx-tree hello.xsd + hello.cxx;hello.hxx;%(Outputs) + xsd hello.xsd + xsd.exe cxx-tree hello.xsd + hello.cxx;hello.hxx;%(Outputs) + xsd hello.xsd + xsd.exe cxx-tree hello.xsd + hello.cxx;hello.hxx;%(Outputs) + + + + + + + + + \ No newline at end of file diff --git a/xsd/dist/examples/cxx/tree/hello/hello-vc12.vcxproj.filters b/xsd/dist/examples/cxx/tree/hello/hello-vc12.vcxproj.filters new file mode 100644 index 0000000..732378a --- /dev/null +++ b/xsd/dist/examples/cxx/tree/hello/hello-vc12.vcxproj.filters @@ -0,0 +1,38 @@ + + + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hpp;hxx;hm;inl;inc;xsd + + + {D512D9C4-9DDD-4830-A487-1D87DB0643D5} + xsd + + + + + Source Files + + + Source Files + + + + + Header Files + + + + + + + + Schema Files + + + \ No newline at end of file diff --git a/xsd/dist/examples/cxx/tree/hello/hello-vc8.vcproj b/xsd/dist/examples/cxx/tree/hello/hello-vc8.vcproj new file mode 100644 index 0000000..c961754 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/hello/hello-vc8.vcproj @@ -0,0 +1,423 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/xsd/dist/examples/cxx/tree/hello/hello-vc9.vcproj b/xsd/dist/examples/cxx/tree/hello/hello-vc9.vcproj new file mode 100644 index 0000000..20eed13 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/hello/hello-vc9.vcproj @@ -0,0 +1,420 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/xsd/dist/examples/cxx/tree/hello/hello-xerces2-7.1.vcproj b/xsd/dist/examples/cxx/tree/hello/hello-xerces2-7.1.vcproj deleted file mode 100644 index a2cab95..0000000 --- a/xsd/dist/examples/cxx/tree/hello/hello-xerces2-7.1.vcproj +++ /dev/null @@ -1,164 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/xsd/dist/examples/cxx/tree/hello/hello-xerces2-8.0.vcproj b/xsd/dist/examples/cxx/tree/hello/hello-xerces2-8.0.vcproj deleted file mode 100644 index 1b39f7c..0000000 --- a/xsd/dist/examples/cxx/tree/hello/hello-xerces2-8.0.vcproj +++ /dev/null @@ -1,423 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/xsd/dist/examples/cxx/tree/hello/hello-xerces2-9.0.vcproj b/xsd/dist/examples/cxx/tree/hello/hello-xerces2-9.0.vcproj deleted file mode 100644 index 8b8fd22..0000000 --- a/xsd/dist/examples/cxx/tree/hello/hello-xerces2-9.0.vcproj +++ /dev/null @@ -1,420 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/xsd/dist/examples/cxx/tree/library/library-10.0.vcxproj b/xsd/dist/examples/cxx/tree/library/library-10.0.vcxproj deleted file mode 100644 index 022737f..0000000 --- a/xsd/dist/examples/cxx/tree/library/library-10.0.vcxproj +++ /dev/null @@ -1,210 +0,0 @@ - - - - - Debug - Win32 - - - Debug - x64 - - - Release - Win32 - - - Release - x64 - - - - library - {D661AD5B-5FF4-4AFD-A656-429BA348E9EF} - library - Win32Proj - - - - Application - MultiByte - - - Application - MultiByte - - - Application - MultiByte - - - Application - MultiByte - - - - - - - - - - - - - - - - - - - driver - driver - driver - driver - Debug\ - Debug\ - true - $(Platform)\$(Configuration)\ - $(Platform)\$(Configuration)\ - true - Release\ - Release\ - false - $(Platform)\$(Configuration)\ - $(Platform)\$(Configuration)\ - false - - - - Disabled - WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebug - true - - - Level3 - EditAndContinue - - - xerces-c_3D.lib;%(AdditionalDependencies) - $(TargetPath) - true - $(OutDir)driver.pdb - Console - false - - - MachineX86 - - - - - X64 - - - Disabled - WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebug - true - - - Level3 - ProgramDatabase - - - xerces-c_3D.lib;%(AdditionalDependencies) - $(TargetPath) - true - $(OutDir)driver.pdb - Console - false - - - MachineX64 - - - - - WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - MultiThreaded - true - - - Level3 - ProgramDatabase - - - xerces-c_3.lib;%(AdditionalDependencies) - $(TargetPath) - true - Console - true - true - false - - - MachineX86 - - - - - X64 - - - WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - MultiThreaded - true - - - Level3 - ProgramDatabase - - - xerces-c_3.lib;%(AdditionalDependencies) - $(TargetPath) - true - Console - true - true - false - - - MachineX64 - - - - - - - - - - - - - - - - xsd library.xsd - xsd cxx-tree --generate-inline --generate-ostream --generate-serialization library.xsd - library.hxx;library.ixx;library.cxx;%(Outputs) - xsd library.xsd - xsd cxx-tree --generate-inline --generate-ostream --generate-serialization library.xsd - library.hxx;library.ixx;library.cxx;%(Outputs) - xsd library.xsd - xsd cxx-tree --generate-inline --generate-ostream --generate-serialization library.xsd - library.hxx;library.ixx;library.cxx;%(Outputs) - xsd library.xsd - xsd cxx-tree --generate-inline --generate-ostream --generate-serialization library.xsd - library.hxx;library.ixx;library.cxx;%(Outputs) - - - - - - \ No newline at end of file diff --git a/xsd/dist/examples/cxx/tree/library/library-10.0.vcxproj.filters b/xsd/dist/examples/cxx/tree/library/library-10.0.vcxproj.filters deleted file mode 100644 index e5e21e6..0000000 --- a/xsd/dist/examples/cxx/tree/library/library-10.0.vcxproj.filters +++ /dev/null @@ -1,45 +0,0 @@ - - - - - {E7CF4BC5-B0CB-4799-B64E-5AF3B67A6F0E} - cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx - - - {FDC2B8B2-1264-427A-9D4E-5577BF295A64} - h;hpp;hxx;hm;inl;inc;xsd - - - {8b40f964-53f9-4b8c-a52b-3fbe8bcfe092} - ixx - - - {50e811c7-6a8b-428b-8c92-0fb6c830a337} - xsd - - - - - Source Files - - - Source Files - - - - - Header Files - - - - - Inline Files - - - - - - Schema Files - - - \ No newline at end of file diff --git a/xsd/dist/examples/cxx/tree/library/library-7.1.vcproj b/xsd/dist/examples/cxx/tree/library/library-7.1.vcproj deleted file mode 100644 index 32ea8af..0000000 --- a/xsd/dist/examples/cxx/tree/library/library-7.1.vcproj +++ /dev/null @@ -1,171 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/xsd/dist/examples/cxx/tree/library/library-8.0.vcproj b/xsd/dist/examples/cxx/tree/library/library-8.0.vcproj deleted file mode 100644 index 0bc66af..0000000 --- a/xsd/dist/examples/cxx/tree/library/library-8.0.vcproj +++ /dev/null @@ -1,432 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/xsd/dist/examples/cxx/tree/library/library-9.0.vcproj b/xsd/dist/examples/cxx/tree/library/library-9.0.vcproj deleted file mode 100644 index 84d729b..0000000 --- a/xsd/dist/examples/cxx/tree/library/library-9.0.vcproj +++ /dev/null @@ -1,429 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/xsd/dist/examples/cxx/tree/library/library-vc10.vcxproj b/xsd/dist/examples/cxx/tree/library/library-vc10.vcxproj new file mode 100644 index 0000000..0d82e98 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/library/library-vc10.vcxproj @@ -0,0 +1,206 @@ + + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + library + {D661AD5B-5FF4-4AFD-A656-429BA348E9EF} + library + Win32Proj + + + + Application + MultiByte + + + Application + MultiByte + + + Application + MultiByte + + + Application + MultiByte + + + + + + + + + + + + + + + + + + + driver + driver + driver + driver + Debug\ + Debug\ + true + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + true + Release\ + Release\ + false + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + false + + + + Disabled + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebugDLL + true + + + Level3 + + + xerces-c_3D.lib;%(AdditionalDependencies) + $(TargetPath) + true + $(OutDir)driver.pdb + Console + false + + + MachineX86 + + + + + X64 + + + Disabled + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebugDLL + true + + + Level3 + + + xerces-c_3D.lib;%(AdditionalDependencies) + $(TargetPath) + true + $(OutDir)driver.pdb + Console + false + + + MachineX64 + + + + + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreadedDLL + true + + + Level3 + + + xerces-c_3.lib;%(AdditionalDependencies) + $(TargetPath) + true + Console + true + true + false + + + MachineX86 + + + + + X64 + + + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreadedDLL + true + + + Level3 + + + xerces-c_3.lib;%(AdditionalDependencies) + $(TargetPath) + true + Console + true + true + false + + + MachineX64 + + + + + + + + + + + + + + + + xsd library.xsd + xsd cxx-tree --generate-inline --generate-ostream --generate-serialization library.xsd + library.hxx;library.ixx;library.cxx;%(Outputs) + xsd library.xsd + xsd cxx-tree --generate-inline --generate-ostream --generate-serialization library.xsd + library.hxx;library.ixx;library.cxx;%(Outputs) + xsd library.xsd + xsd cxx-tree --generate-inline --generate-ostream --generate-serialization library.xsd + library.hxx;library.ixx;library.cxx;%(Outputs) + xsd library.xsd + xsd cxx-tree --generate-inline --generate-ostream --generate-serialization library.xsd + library.hxx;library.ixx;library.cxx;%(Outputs) + + + + + + \ No newline at end of file diff --git a/xsd/dist/examples/cxx/tree/library/library-vc10.vcxproj.filters b/xsd/dist/examples/cxx/tree/library/library-vc10.vcxproj.filters new file mode 100644 index 0000000..e5e21e6 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/library/library-vc10.vcxproj.filters @@ -0,0 +1,45 @@ + + + + + {E7CF4BC5-B0CB-4799-B64E-5AF3B67A6F0E} + cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {FDC2B8B2-1264-427A-9D4E-5577BF295A64} + h;hpp;hxx;hm;inl;inc;xsd + + + {8b40f964-53f9-4b8c-a52b-3fbe8bcfe092} + ixx + + + {50e811c7-6a8b-428b-8c92-0fb6c830a337} + xsd + + + + + Source Files + + + Source Files + + + + + Header Files + + + + + Inline Files + + + + + + Schema Files + + + \ No newline at end of file diff --git a/xsd/dist/examples/cxx/tree/library/library-vc11.vcxproj b/xsd/dist/examples/cxx/tree/library/library-vc11.vcxproj new file mode 100644 index 0000000..498e9e9 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/library/library-vc11.vcxproj @@ -0,0 +1,210 @@ + + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + library + {D661AD5B-5FF4-4AFD-A656-429BA348E9EF} + library + Win32Proj + + + + Application + v110 + MultiByte + + + Application + v110 + MultiByte + + + Application + v110 + MultiByte + + + Application + v110 + MultiByte + + + + + + + + + + + + + + + + + + + driver + driver + driver + driver + Debug\ + Debug\ + true + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + true + Release\ + Release\ + false + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + false + + + + Disabled + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebugDLL + true + + + Level3 + + + xerces-c_3D.lib;%(AdditionalDependencies) + $(TargetPath) + true + $(OutDir)driver.pdb + Console + false + + + MachineX86 + + + + + X64 + + + Disabled + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebugDLL + true + + + Level3 + + + xerces-c_3D.lib;%(AdditionalDependencies) + $(TargetPath) + true + $(OutDir)driver.pdb + Console + false + + + MachineX64 + + + + + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreadedDLL + true + + + Level3 + + + xerces-c_3.lib;%(AdditionalDependencies) + $(TargetPath) + true + Console + true + true + false + + + MachineX86 + + + + + X64 + + + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreadedDLL + true + + + Level3 + + + xerces-c_3.lib;%(AdditionalDependencies) + $(TargetPath) + true + Console + true + true + false + + + MachineX64 + + + + + + + + + + + + + + + + xsd library.xsd + xsd cxx-tree --generate-inline --generate-ostream --generate-serialization library.xsd + library.hxx;library.ixx;library.cxx;%(Outputs) + xsd library.xsd + xsd cxx-tree --generate-inline --generate-ostream --generate-serialization library.xsd + library.hxx;library.ixx;library.cxx;%(Outputs) + xsd library.xsd + xsd cxx-tree --generate-inline --generate-ostream --generate-serialization library.xsd + library.hxx;library.ixx;library.cxx;%(Outputs) + xsd library.xsd + xsd cxx-tree --generate-inline --generate-ostream --generate-serialization library.xsd + library.hxx;library.ixx;library.cxx;%(Outputs) + + + + + + \ No newline at end of file diff --git a/xsd/dist/examples/cxx/tree/library/library-vc11.vcxproj.filters b/xsd/dist/examples/cxx/tree/library/library-vc11.vcxproj.filters new file mode 100644 index 0000000..e5e21e6 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/library/library-vc11.vcxproj.filters @@ -0,0 +1,45 @@ + + + + + {E7CF4BC5-B0CB-4799-B64E-5AF3B67A6F0E} + cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {FDC2B8B2-1264-427A-9D4E-5577BF295A64} + h;hpp;hxx;hm;inl;inc;xsd + + + {8b40f964-53f9-4b8c-a52b-3fbe8bcfe092} + ixx + + + {50e811c7-6a8b-428b-8c92-0fb6c830a337} + xsd + + + + + Source Files + + + Source Files + + + + + Header Files + + + + + Inline Files + + + + + + Schema Files + + + \ No newline at end of file diff --git a/xsd/dist/examples/cxx/tree/library/library-vc12.vcxproj b/xsd/dist/examples/cxx/tree/library/library-vc12.vcxproj new file mode 100644 index 0000000..80fd4ae --- /dev/null +++ b/xsd/dist/examples/cxx/tree/library/library-vc12.vcxproj @@ -0,0 +1,214 @@ + + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + library + {D661AD5B-5FF4-4AFD-A656-429BA348E9EF} + library + Win32Proj + + + + Application + v120 + MultiByte + + + Application + v120 + MultiByte + + + Application + v120 + MultiByte + + + Application + v120 + MultiByte + + + + + + + + + + + + + + + + + + + driver + driver + driver + driver + Debug\ + Debug\ + true + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + true + Release\ + Release\ + false + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + false + + + + Disabled + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebugDLL + true + + + Level3 + true + + + xerces-c_3D.lib;%(AdditionalDependencies) + $(TargetPath) + true + $(OutDir)driver.pdb + Console + false + + + MachineX86 + + + + + X64 + + + Disabled + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebugDLL + true + + + Level3 + true + + + xerces-c_3D.lib;%(AdditionalDependencies) + $(TargetPath) + true + $(OutDir)driver.pdb + Console + false + + + MachineX64 + + + + + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreadedDLL + true + + + Level3 + true + + + xerces-c_3.lib;%(AdditionalDependencies) + $(TargetPath) + true + Console + true + true + false + + + MachineX86 + + + + + X64 + + + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreadedDLL + true + + + Level3 + true + + + xerces-c_3.lib;%(AdditionalDependencies) + $(TargetPath) + true + Console + true + true + false + + + MachineX64 + + + + + + + + + + + + + + + + xsd library.xsd + xsd cxx-tree --generate-inline --generate-ostream --generate-serialization library.xsd + library.hxx;library.ixx;library.cxx;%(Outputs) + xsd library.xsd + xsd cxx-tree --generate-inline --generate-ostream --generate-serialization library.xsd + library.hxx;library.ixx;library.cxx;%(Outputs) + xsd library.xsd + xsd cxx-tree --generate-inline --generate-ostream --generate-serialization library.xsd + library.hxx;library.ixx;library.cxx;%(Outputs) + xsd library.xsd + xsd cxx-tree --generate-inline --generate-ostream --generate-serialization library.xsd + library.hxx;library.ixx;library.cxx;%(Outputs) + + + + + + \ No newline at end of file diff --git a/xsd/dist/examples/cxx/tree/library/library-vc12.vcxproj.filters b/xsd/dist/examples/cxx/tree/library/library-vc12.vcxproj.filters new file mode 100644 index 0000000..e5e21e6 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/library/library-vc12.vcxproj.filters @@ -0,0 +1,45 @@ + + + + + {E7CF4BC5-B0CB-4799-B64E-5AF3B67A6F0E} + cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {FDC2B8B2-1264-427A-9D4E-5577BF295A64} + h;hpp;hxx;hm;inl;inc;xsd + + + {8b40f964-53f9-4b8c-a52b-3fbe8bcfe092} + ixx + + + {50e811c7-6a8b-428b-8c92-0fb6c830a337} + xsd + + + + + Source Files + + + Source Files + + + + + Header Files + + + + + Inline Files + + + + + + Schema Files + + + \ No newline at end of file diff --git a/xsd/dist/examples/cxx/tree/library/library-vc8.vcproj b/xsd/dist/examples/cxx/tree/library/library-vc8.vcproj new file mode 100644 index 0000000..79e3f7e --- /dev/null +++ b/xsd/dist/examples/cxx/tree/library/library-vc8.vcproj @@ -0,0 +1,432 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/xsd/dist/examples/cxx/tree/library/library-vc9.vcproj b/xsd/dist/examples/cxx/tree/library/library-vc9.vcproj new file mode 100644 index 0000000..d616bff --- /dev/null +++ b/xsd/dist/examples/cxx/tree/library/library-vc9.vcproj @@ -0,0 +1,429 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/xsd/dist/examples/cxx/tree/library/library-xerces2-7.1.vcproj b/xsd/dist/examples/cxx/tree/library/library-xerces2-7.1.vcproj deleted file mode 100644 index 8cf6570..0000000 --- a/xsd/dist/examples/cxx/tree/library/library-xerces2-7.1.vcproj +++ /dev/null @@ -1,171 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/xsd/dist/examples/cxx/tree/library/library-xerces2-8.0.vcproj b/xsd/dist/examples/cxx/tree/library/library-xerces2-8.0.vcproj deleted file mode 100644 index fc3b99e..0000000 --- a/xsd/dist/examples/cxx/tree/library/library-xerces2-8.0.vcproj +++ /dev/null @@ -1,432 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/xsd/dist/examples/cxx/tree/library/library-xerces2-9.0.vcproj b/xsd/dist/examples/cxx/tree/library/library-xerces2-9.0.vcproj deleted file mode 100644 index ce9426a..0000000 --- a/xsd/dist/examples/cxx/tree/library/library-xerces2-9.0.vcproj +++ /dev/null @@ -1,429 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/xsd/dist/examples/cxx/tree/makefile b/xsd/dist/examples/cxx/tree/makefile index 8c23fef..44e7a0f 100644 --- a/xsd/dist/examples/cxx/tree/makefile +++ b/xsd/dist/examples/cxx/tree/makefile @@ -1,14 +1,10 @@ dirs := binary caching embedded custom hello library messaging mixed \ -multiroot performance polymorphism streaming wildcard +multiroot order performance polymorphism streaming wildcard ifeq ($(WITH_ZLIB),1) dirs += compression endif -ifeq ($(WITH_DBXML),1) -dirs += dbxml -endif - ifeq ($(WITH_XQILLA),1) dirs += xpath endif diff --git a/xsd/dist/examples/cxx/tree/messaging/messaging-10.0.vcxproj b/xsd/dist/examples/cxx/tree/messaging/messaging-10.0.vcxproj deleted file mode 100644 index 66c97bc..0000000 --- a/xsd/dist/examples/cxx/tree/messaging/messaging-10.0.vcxproj +++ /dev/null @@ -1,213 +0,0 @@ - - - - - Debug - Win32 - - - Debug - x64 - - - Release - Win32 - - - Release - x64 - - - - messaging - {F7696252-45B5-438B-B14F-0510137704F0} - messaging - Win32Proj - - - - Application - MultiByte - - - Application - MultiByte - - - Application - MultiByte - - - Application - MultiByte - - - - - - - - - - - - - - - - - - - driver - driver - driver - driver - Debug\ - Debug\ - true - $(Platform)\$(Configuration)\ - $(Platform)\$(Configuration)\ - true - Release\ - Release\ - false - $(Platform)\$(Configuration)\ - $(Platform)\$(Configuration)\ - false - - - - Disabled - WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebug - true - - - Level3 - EditAndContinue - - - xerces-c_3D.lib;%(AdditionalDependencies) - $(TargetPath) - true - $(OutDir)driver.pdb - Console - false - - - MachineX86 - - - - - X64 - - - Disabled - WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebug - true - - - Level3 - ProgramDatabase - - - xerces-c_3D.lib;%(AdditionalDependencies) - $(TargetPath) - true - $(OutDir)driver.pdb - Console - false - - - MachineX64 - - - - - WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - MultiThreaded - true - - - Level3 - ProgramDatabase - - - xerces-c_3.lib;%(AdditionalDependencies) - $(TargetPath) - true - Console - true - true - false - - - MachineX86 - - - - - X64 - - - WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - MultiThreaded - true - - - Level3 - ProgramDatabase - - - xerces-c_3.lib;%(AdditionalDependencies) - $(TargetPath) - true - Console - true - true - false - - - MachineX64 - - - - - - - - - - - - - - - - xsd protocol.xsd - xsd cxx-tree --root-element-all --generate-element-type --generate-element-map --generate-serialization protocol.xsd - protocol.hxx;protocol.cxx;%(Outputs) - xsd protocol.xsd - xsd cxx-tree --root-element-all --generate-element-type --generate-element-map --generate-serialization protocol.xsd - protocol.hxx;protocol.cxx;%(Outputs) - xsd protocol.xsd - xsd cxx-tree --root-element-all --generate-element-type --generate-element-map --generate-serialization protocol.xsd - protocol.hxx;protocol.cxx;%(Outputs) - xsd protocol.xsd - xsd cxx-tree --root-element-all --generate-element-type --generate-element-map --generate-serialization protocol.xsd - protocol.hxx;protocol.cxx;%(Outputs) - - - - - - - - - \ No newline at end of file diff --git a/xsd/dist/examples/cxx/tree/messaging/messaging-10.0.vcxproj.filters b/xsd/dist/examples/cxx/tree/messaging/messaging-10.0.vcxproj.filters deleted file mode 100644 index c94955d..0000000 --- a/xsd/dist/examples/cxx/tree/messaging/messaging-10.0.vcxproj.filters +++ /dev/null @@ -1,50 +0,0 @@ - - - - - {0BA0A3D7-40AF-4307-8033-5BE39B33ABE5} - cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx - - - {F7AC5A29-8CF7-4882-89B6-1B5B81AA00F2} - h;hpp;hxx;hm;inl;inc;xsd - - - {945e9234-36d7-4bbb-a5f2-97af87338c49} - xsd - - - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - - - Header Files - - - Header Files - - - Header Files - - - - - - - - Schema Files - - - \ No newline at end of file diff --git a/xsd/dist/examples/cxx/tree/messaging/messaging-7.1.vcproj b/xsd/dist/examples/cxx/tree/messaging/messaging-7.1.vcproj deleted file mode 100644 index 1f56759..0000000 --- a/xsd/dist/examples/cxx/tree/messaging/messaging-7.1.vcproj +++ /dev/null @@ -1,176 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/xsd/dist/examples/cxx/tree/messaging/messaging-8.0.vcproj b/xsd/dist/examples/cxx/tree/messaging/messaging-8.0.vcproj deleted file mode 100644 index 7f8b0e4..0000000 --- a/xsd/dist/examples/cxx/tree/messaging/messaging-8.0.vcproj +++ /dev/null @@ -1,439 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/xsd/dist/examples/cxx/tree/messaging/messaging-9.0.vcproj b/xsd/dist/examples/cxx/tree/messaging/messaging-9.0.vcproj deleted file mode 100644 index 0e2819d..0000000 --- a/xsd/dist/examples/cxx/tree/messaging/messaging-9.0.vcproj +++ /dev/null @@ -1,436 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/xsd/dist/examples/cxx/tree/messaging/messaging-vc10.vcxproj b/xsd/dist/examples/cxx/tree/messaging/messaging-vc10.vcxproj new file mode 100644 index 0000000..6016f46 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/messaging/messaging-vc10.vcxproj @@ -0,0 +1,209 @@ + + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + messaging + {F7696252-45B5-438B-B14F-0510137704F0} + messaging + Win32Proj + + + + Application + MultiByte + + + Application + MultiByte + + + Application + MultiByte + + + Application + MultiByte + + + + + + + + + + + + + + + + + + + driver + driver + driver + driver + Debug\ + Debug\ + true + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + true + Release\ + Release\ + false + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + false + + + + Disabled + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebugDLL + true + + + Level3 + + + xerces-c_3D.lib;%(AdditionalDependencies) + $(TargetPath) + true + $(OutDir)driver.pdb + Console + false + + + MachineX86 + + + + + X64 + + + Disabled + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebugDLL + true + + + Level3 + + + xerces-c_3D.lib;%(AdditionalDependencies) + $(TargetPath) + true + $(OutDir)driver.pdb + Console + false + + + MachineX64 + + + + + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreadedDLL + true + + + Level3 + + + xerces-c_3.lib;%(AdditionalDependencies) + $(TargetPath) + true + Console + true + true + false + + + MachineX86 + + + + + X64 + + + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreadedDLL + true + + + Level3 + + + xerces-c_3.lib;%(AdditionalDependencies) + $(TargetPath) + true + Console + true + true + false + + + MachineX64 + + + + + + + + + + + + + + + + xsd protocol.xsd + xsd cxx-tree --root-element-all --generate-element-type --generate-element-map --generate-serialization protocol.xsd + protocol.hxx;protocol.cxx;%(Outputs) + xsd protocol.xsd + xsd cxx-tree --root-element-all --generate-element-type --generate-element-map --generate-serialization protocol.xsd + protocol.hxx;protocol.cxx;%(Outputs) + xsd protocol.xsd + xsd cxx-tree --root-element-all --generate-element-type --generate-element-map --generate-serialization protocol.xsd + protocol.hxx;protocol.cxx;%(Outputs) + xsd protocol.xsd + xsd cxx-tree --root-element-all --generate-element-type --generate-element-map --generate-serialization protocol.xsd + protocol.hxx;protocol.cxx;%(Outputs) + + + + + + + + + \ No newline at end of file diff --git a/xsd/dist/examples/cxx/tree/messaging/messaging-vc10.vcxproj.filters b/xsd/dist/examples/cxx/tree/messaging/messaging-vc10.vcxproj.filters new file mode 100644 index 0000000..c94955d --- /dev/null +++ b/xsd/dist/examples/cxx/tree/messaging/messaging-vc10.vcxproj.filters @@ -0,0 +1,50 @@ + + + + + {0BA0A3D7-40AF-4307-8033-5BE39B33ABE5} + cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {F7AC5A29-8CF7-4882-89B6-1B5B81AA00F2} + h;hpp;hxx;hm;inl;inc;xsd + + + {945e9234-36d7-4bbb-a5f2-97af87338c49} + xsd + + + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + + + Header Files + + + Header Files + + + Header Files + + + + + + + + Schema Files + + + \ No newline at end of file diff --git a/xsd/dist/examples/cxx/tree/messaging/messaging-vc11.vcxproj b/xsd/dist/examples/cxx/tree/messaging/messaging-vc11.vcxproj new file mode 100644 index 0000000..d3403c2 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/messaging/messaging-vc11.vcxproj @@ -0,0 +1,213 @@ + + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + messaging + {F7696252-45B5-438B-B14F-0510137704F0} + messaging + Win32Proj + + + + Application + v110 + MultiByte + + + Application + v110 + MultiByte + + + Application + v110 + MultiByte + + + Application + v110 + MultiByte + + + + + + + + + + + + + + + + + + + driver + driver + driver + driver + Debug\ + Debug\ + true + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + true + Release\ + Release\ + false + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + false + + + + Disabled + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebugDLL + true + + + Level3 + + + xerces-c_3D.lib;%(AdditionalDependencies) + $(TargetPath) + true + $(OutDir)driver.pdb + Console + false + + + MachineX86 + + + + + X64 + + + Disabled + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebugDLL + true + + + Level3 + + + xerces-c_3D.lib;%(AdditionalDependencies) + $(TargetPath) + true + $(OutDir)driver.pdb + Console + false + + + MachineX64 + + + + + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreadedDLL + true + + + Level3 + + + xerces-c_3.lib;%(AdditionalDependencies) + $(TargetPath) + true + Console + true + true + false + + + MachineX86 + + + + + X64 + + + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreadedDLL + true + + + Level3 + + + xerces-c_3.lib;%(AdditionalDependencies) + $(TargetPath) + true + Console + true + true + false + + + MachineX64 + + + + + + + + + + + + + + + + xsd protocol.xsd + xsd cxx-tree --root-element-all --generate-element-type --generate-element-map --generate-serialization protocol.xsd + protocol.hxx;protocol.cxx;%(Outputs) + xsd protocol.xsd + xsd cxx-tree --root-element-all --generate-element-type --generate-element-map --generate-serialization protocol.xsd + protocol.hxx;protocol.cxx;%(Outputs) + xsd protocol.xsd + xsd cxx-tree --root-element-all --generate-element-type --generate-element-map --generate-serialization protocol.xsd + protocol.hxx;protocol.cxx;%(Outputs) + xsd protocol.xsd + xsd cxx-tree --root-element-all --generate-element-type --generate-element-map --generate-serialization protocol.xsd + protocol.hxx;protocol.cxx;%(Outputs) + + + + + + + + + \ No newline at end of file diff --git a/xsd/dist/examples/cxx/tree/messaging/messaging-vc11.vcxproj.filters b/xsd/dist/examples/cxx/tree/messaging/messaging-vc11.vcxproj.filters new file mode 100644 index 0000000..c94955d --- /dev/null +++ b/xsd/dist/examples/cxx/tree/messaging/messaging-vc11.vcxproj.filters @@ -0,0 +1,50 @@ + + + + + {0BA0A3D7-40AF-4307-8033-5BE39B33ABE5} + cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {F7AC5A29-8CF7-4882-89B6-1B5B81AA00F2} + h;hpp;hxx;hm;inl;inc;xsd + + + {945e9234-36d7-4bbb-a5f2-97af87338c49} + xsd + + + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + + + Header Files + + + Header Files + + + Header Files + + + + + + + + Schema Files + + + \ No newline at end of file diff --git a/xsd/dist/examples/cxx/tree/messaging/messaging-vc12.vcxproj b/xsd/dist/examples/cxx/tree/messaging/messaging-vc12.vcxproj new file mode 100644 index 0000000..35b8763 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/messaging/messaging-vc12.vcxproj @@ -0,0 +1,217 @@ + + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + messaging + {F7696252-45B5-438B-B14F-0510137704F0} + messaging + Win32Proj + + + + Application + v120 + MultiByte + + + Application + v120 + MultiByte + + + Application + v120 + MultiByte + + + Application + v120 + MultiByte + + + + + + + + + + + + + + + + + + + driver + driver + driver + driver + Debug\ + Debug\ + true + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + true + Release\ + Release\ + false + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + false + + + + Disabled + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebugDLL + true + + + Level3 + true + + + xerces-c_3D.lib;%(AdditionalDependencies) + $(TargetPath) + true + $(OutDir)driver.pdb + Console + false + + + MachineX86 + + + + + X64 + + + Disabled + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebugDLL + true + + + Level3 + true + + + xerces-c_3D.lib;%(AdditionalDependencies) + $(TargetPath) + true + $(OutDir)driver.pdb + Console + false + + + MachineX64 + + + + + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreadedDLL + true + + + Level3 + true + + + xerces-c_3.lib;%(AdditionalDependencies) + $(TargetPath) + true + Console + true + true + false + + + MachineX86 + + + + + X64 + + + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreadedDLL + true + + + Level3 + true + + + xerces-c_3.lib;%(AdditionalDependencies) + $(TargetPath) + true + Console + true + true + false + + + MachineX64 + + + + + + + + + + + + + + + + xsd protocol.xsd + xsd cxx-tree --root-element-all --generate-element-type --generate-element-map --generate-serialization protocol.xsd + protocol.hxx;protocol.cxx;%(Outputs) + xsd protocol.xsd + xsd cxx-tree --root-element-all --generate-element-type --generate-element-map --generate-serialization protocol.xsd + protocol.hxx;protocol.cxx;%(Outputs) + xsd protocol.xsd + xsd cxx-tree --root-element-all --generate-element-type --generate-element-map --generate-serialization protocol.xsd + protocol.hxx;protocol.cxx;%(Outputs) + xsd protocol.xsd + xsd cxx-tree --root-element-all --generate-element-type --generate-element-map --generate-serialization protocol.xsd + protocol.hxx;protocol.cxx;%(Outputs) + + + + + + + + + \ No newline at end of file diff --git a/xsd/dist/examples/cxx/tree/messaging/messaging-vc12.vcxproj.filters b/xsd/dist/examples/cxx/tree/messaging/messaging-vc12.vcxproj.filters new file mode 100644 index 0000000..c94955d --- /dev/null +++ b/xsd/dist/examples/cxx/tree/messaging/messaging-vc12.vcxproj.filters @@ -0,0 +1,50 @@ + + + + + {0BA0A3D7-40AF-4307-8033-5BE39B33ABE5} + cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {F7AC5A29-8CF7-4882-89B6-1B5B81AA00F2} + h;hpp;hxx;hm;inl;inc;xsd + + + {945e9234-36d7-4bbb-a5f2-97af87338c49} + xsd + + + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + + + Header Files + + + Header Files + + + Header Files + + + + + + + + Schema Files + + + \ No newline at end of file diff --git a/xsd/dist/examples/cxx/tree/messaging/messaging-vc8.vcproj b/xsd/dist/examples/cxx/tree/messaging/messaging-vc8.vcproj new file mode 100644 index 0000000..f006365 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/messaging/messaging-vc8.vcproj @@ -0,0 +1,439 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/xsd/dist/examples/cxx/tree/messaging/messaging-vc9.vcproj b/xsd/dist/examples/cxx/tree/messaging/messaging-vc9.vcproj new file mode 100644 index 0000000..debd0a3 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/messaging/messaging-vc9.vcproj @@ -0,0 +1,436 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/xsd/dist/examples/cxx/tree/messaging/messaging-xerces2-7.1.vcproj b/xsd/dist/examples/cxx/tree/messaging/messaging-xerces2-7.1.vcproj deleted file mode 100644 index c08339a..0000000 --- a/xsd/dist/examples/cxx/tree/messaging/messaging-xerces2-7.1.vcproj +++ /dev/null @@ -1,176 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/xsd/dist/examples/cxx/tree/messaging/messaging-xerces2-8.0.vcproj b/xsd/dist/examples/cxx/tree/messaging/messaging-xerces2-8.0.vcproj deleted file mode 100644 index 6406bb4..0000000 --- a/xsd/dist/examples/cxx/tree/messaging/messaging-xerces2-8.0.vcproj +++ /dev/null @@ -1,439 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/xsd/dist/examples/cxx/tree/messaging/messaging-xerces2-9.0.vcproj b/xsd/dist/examples/cxx/tree/messaging/messaging-xerces2-9.0.vcproj deleted file mode 100644 index bcc81da..0000000 --- a/xsd/dist/examples/cxx/tree/messaging/messaging-xerces2-9.0.vcproj +++ /dev/null @@ -1,436 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/xsd/dist/examples/cxx/tree/mixed/mixed-10.0.vcxproj b/xsd/dist/examples/cxx/tree/mixed/mixed-10.0.vcxproj deleted file mode 100644 index 0b78b5a..0000000 --- a/xsd/dist/examples/cxx/tree/mixed/mixed-10.0.vcxproj +++ /dev/null @@ -1,209 +0,0 @@ - - - - - Debug - Win32 - - - Debug - x64 - - - Release - Win32 - - - Release - x64 - - - - mixed - {6EF7868E-AA58-4615-9C1A-06B010CB4209} - mixed - Win32Proj - - - - Application - MultiByte - - - Application - MultiByte - - - Application - MultiByte - - - Application - MultiByte - - - - - - - - - - - - - - - - - - - driver - driver - driver - driver - Debug\ - Debug\ - true - $(Platform)\$(Configuration)\ - $(Platform)\$(Configuration)\ - true - Release\ - Release\ - false - $(Platform)\$(Configuration)\ - $(Platform)\$(Configuration)\ - false - - - - Disabled - WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebug - true - - - Level3 - EditAndContinue - - - xerces-c_3D.lib;%(AdditionalDependencies) - $(TargetPath) - true - $(OutDir)driver.pdb - Console - false - - - MachineX86 - - - - - X64 - - - Disabled - WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebug - true - - - Level3 - ProgramDatabase - - - xerces-c_3D.lib;%(AdditionalDependencies) - $(TargetPath) - true - $(OutDir)driver.pdb - Console - false - - - MachineX64 - - - - - WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - MultiThreaded - true - - - Level3 - ProgramDatabase - - - xerces-c_3.lib;%(AdditionalDependencies) - $(TargetPath) - true - Console - true - true - false - - - MachineX86 - - - - - X64 - - - WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - MultiThreaded - true - - - Level3 - ProgramDatabase - - - xerces-c_3.lib;%(AdditionalDependencies) - $(TargetPath) - true - Console - true - true - false - - - MachineX64 - - - - - - - - - - - - xsd text.xsd - xsd.exe cxx-tree text.xsd - text.cxx;text.hxx;%(Outputs) - xsd text.xsd - xsd.exe cxx-tree text.xsd - text.cxx;text.hxx;%(Outputs) - xsd text.xsd - xsd.exe cxx-tree text.xsd - text.cxx;text.hxx;%(Outputs) - xsd text.xsd - xsd.exe cxx-tree text.xsd - text.cxx;text.hxx;%(Outputs) - - - - - - - - - \ No newline at end of file diff --git a/xsd/dist/examples/cxx/tree/mixed/mixed-10.0.vcxproj.filters b/xsd/dist/examples/cxx/tree/mixed/mixed-10.0.vcxproj.filters deleted file mode 100644 index 992400e..0000000 --- a/xsd/dist/examples/cxx/tree/mixed/mixed-10.0.vcxproj.filters +++ /dev/null @@ -1,38 +0,0 @@ - - - - - {590B5830-837E-4D7F-984C-173456EE7E70} - cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx - - - {3B7C0CD8-48D5-4244-A1FB-B60D510C2359} - h;hpp;hxx;hm;inl;inc;xsd - - - {ba06cc21-c20a-4656-89ab-0a7b56f50871} - xsd - - - - - Source Files - - - Source Files - - - - - Header Files - - - - - - - - Schema Files - - - \ No newline at end of file diff --git a/xsd/dist/examples/cxx/tree/mixed/mixed-7.1.vcproj b/xsd/dist/examples/cxx/tree/mixed/mixed-7.1.vcproj deleted file mode 100644 index cfa1939..0000000 --- a/xsd/dist/examples/cxx/tree/mixed/mixed-7.1.vcproj +++ /dev/null @@ -1,164 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/xsd/dist/examples/cxx/tree/mixed/mixed-8.0.vcproj b/xsd/dist/examples/cxx/tree/mixed/mixed-8.0.vcproj deleted file mode 100644 index f376bbf..0000000 --- a/xsd/dist/examples/cxx/tree/mixed/mixed-8.0.vcproj +++ /dev/null @@ -1,423 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/xsd/dist/examples/cxx/tree/mixed/mixed-9.0.vcproj b/xsd/dist/examples/cxx/tree/mixed/mixed-9.0.vcproj deleted file mode 100644 index 7e144e7..0000000 --- a/xsd/dist/examples/cxx/tree/mixed/mixed-9.0.vcproj +++ /dev/null @@ -1,420 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/xsd/dist/examples/cxx/tree/mixed/mixed-vc10.vcxproj b/xsd/dist/examples/cxx/tree/mixed/mixed-vc10.vcxproj new file mode 100644 index 0000000..c625d2c --- /dev/null +++ b/xsd/dist/examples/cxx/tree/mixed/mixed-vc10.vcxproj @@ -0,0 +1,205 @@ + + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + mixed + {6EF7868E-AA58-4615-9C1A-06B010CB4209} + mixed + Win32Proj + + + + Application + MultiByte + + + Application + MultiByte + + + Application + MultiByte + + + Application + MultiByte + + + + + + + + + + + + + + + + + + + driver + driver + driver + driver + Debug\ + Debug\ + true + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + true + Release\ + Release\ + false + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + false + + + + Disabled + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebugDLL + true + + + Level3 + + + xerces-c_3D.lib;%(AdditionalDependencies) + $(TargetPath) + true + $(OutDir)driver.pdb + Console + false + + + MachineX86 + + + + + X64 + + + Disabled + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebugDLL + true + + + Level3 + + + xerces-c_3D.lib;%(AdditionalDependencies) + $(TargetPath) + true + $(OutDir)driver.pdb + Console + false + + + MachineX64 + + + + + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreadedDLL + true + + + Level3 + + + xerces-c_3.lib;%(AdditionalDependencies) + $(TargetPath) + true + Console + true + true + false + + + MachineX86 + + + + + X64 + + + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreadedDLL + true + + + Level3 + + + xerces-c_3.lib;%(AdditionalDependencies) + $(TargetPath) + true + Console + true + true + false + + + MachineX64 + + + + + + + + + + + + xsd text.xsd + xsd.exe cxx-tree text.xsd + text.cxx;text.hxx;%(Outputs) + xsd text.xsd + xsd.exe cxx-tree text.xsd + text.cxx;text.hxx;%(Outputs) + xsd text.xsd + xsd.exe cxx-tree text.xsd + text.cxx;text.hxx;%(Outputs) + xsd text.xsd + xsd.exe cxx-tree text.xsd + text.cxx;text.hxx;%(Outputs) + + + + + + + + + \ No newline at end of file diff --git a/xsd/dist/examples/cxx/tree/mixed/mixed-vc10.vcxproj.filters b/xsd/dist/examples/cxx/tree/mixed/mixed-vc10.vcxproj.filters new file mode 100644 index 0000000..992400e --- /dev/null +++ b/xsd/dist/examples/cxx/tree/mixed/mixed-vc10.vcxproj.filters @@ -0,0 +1,38 @@ + + + + + {590B5830-837E-4D7F-984C-173456EE7E70} + cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {3B7C0CD8-48D5-4244-A1FB-B60D510C2359} + h;hpp;hxx;hm;inl;inc;xsd + + + {ba06cc21-c20a-4656-89ab-0a7b56f50871} + xsd + + + + + Source Files + + + Source Files + + + + + Header Files + + + + + + + + Schema Files + + + \ No newline at end of file diff --git a/xsd/dist/examples/cxx/tree/mixed/mixed-vc11.vcxproj b/xsd/dist/examples/cxx/tree/mixed/mixed-vc11.vcxproj new file mode 100644 index 0000000..1380e1c --- /dev/null +++ b/xsd/dist/examples/cxx/tree/mixed/mixed-vc11.vcxproj @@ -0,0 +1,209 @@ + + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + mixed + {6EF7868E-AA58-4615-9C1A-06B010CB4209} + mixed + Win32Proj + + + + Application + v110 + MultiByte + + + Application + v110 + MultiByte + + + Application + v110 + MultiByte + + + Application + v110 + MultiByte + + + + + + + + + + + + + + + + + + + driver + driver + driver + driver + Debug\ + Debug\ + true + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + true + Release\ + Release\ + false + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + false + + + + Disabled + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebugDLL + true + + + Level3 + + + xerces-c_3D.lib;%(AdditionalDependencies) + $(TargetPath) + true + $(OutDir)driver.pdb + Console + false + + + MachineX86 + + + + + X64 + + + Disabled + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebugDLL + true + + + Level3 + + + xerces-c_3D.lib;%(AdditionalDependencies) + $(TargetPath) + true + $(OutDir)driver.pdb + Console + false + + + MachineX64 + + + + + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreadedDLL + true + + + Level3 + + + xerces-c_3.lib;%(AdditionalDependencies) + $(TargetPath) + true + Console + true + true + false + + + MachineX86 + + + + + X64 + + + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreadedDLL + true + + + Level3 + + + xerces-c_3.lib;%(AdditionalDependencies) + $(TargetPath) + true + Console + true + true + false + + + MachineX64 + + + + + + + + + + + + xsd text.xsd + xsd.exe cxx-tree text.xsd + text.cxx;text.hxx;%(Outputs) + xsd text.xsd + xsd.exe cxx-tree text.xsd + text.cxx;text.hxx;%(Outputs) + xsd text.xsd + xsd.exe cxx-tree text.xsd + text.cxx;text.hxx;%(Outputs) + xsd text.xsd + xsd.exe cxx-tree text.xsd + text.cxx;text.hxx;%(Outputs) + + + + + + + + + \ No newline at end of file diff --git a/xsd/dist/examples/cxx/tree/mixed/mixed-vc11.vcxproj.filters b/xsd/dist/examples/cxx/tree/mixed/mixed-vc11.vcxproj.filters new file mode 100644 index 0000000..992400e --- /dev/null +++ b/xsd/dist/examples/cxx/tree/mixed/mixed-vc11.vcxproj.filters @@ -0,0 +1,38 @@ + + + + + {590B5830-837E-4D7F-984C-173456EE7E70} + cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {3B7C0CD8-48D5-4244-A1FB-B60D510C2359} + h;hpp;hxx;hm;inl;inc;xsd + + + {ba06cc21-c20a-4656-89ab-0a7b56f50871} + xsd + + + + + Source Files + + + Source Files + + + + + Header Files + + + + + + + + Schema Files + + + \ No newline at end of file diff --git a/xsd/dist/examples/cxx/tree/mixed/mixed-vc12.vcxproj b/xsd/dist/examples/cxx/tree/mixed/mixed-vc12.vcxproj new file mode 100644 index 0000000..7726386 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/mixed/mixed-vc12.vcxproj @@ -0,0 +1,213 @@ + + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + mixed + {6EF7868E-AA58-4615-9C1A-06B010CB4209} + mixed + Win32Proj + + + + Application + v120 + MultiByte + + + Application + v120 + MultiByte + + + Application + v120 + MultiByte + + + Application + v120 + MultiByte + + + + + + + + + + + + + + + + + + + driver + driver + driver + driver + Debug\ + Debug\ + true + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + true + Release\ + Release\ + false + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + false + + + + Disabled + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebugDLL + true + + + Level3 + true + + + xerces-c_3D.lib;%(AdditionalDependencies) + $(TargetPath) + true + $(OutDir)driver.pdb + Console + false + + + MachineX86 + + + + + X64 + + + Disabled + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebugDLL + true + + + Level3 + true + + + xerces-c_3D.lib;%(AdditionalDependencies) + $(TargetPath) + true + $(OutDir)driver.pdb + Console + false + + + MachineX64 + + + + + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreadedDLL + true + + + Level3 + true + + + xerces-c_3.lib;%(AdditionalDependencies) + $(TargetPath) + true + Console + true + true + false + + + MachineX86 + + + + + X64 + + + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreadedDLL + true + + + Level3 + true + + + xerces-c_3.lib;%(AdditionalDependencies) + $(TargetPath) + true + Console + true + true + false + + + MachineX64 + + + + + + + + + + + + xsd text.xsd + xsd.exe cxx-tree text.xsd + text.cxx;text.hxx;%(Outputs) + xsd text.xsd + xsd.exe cxx-tree text.xsd + text.cxx;text.hxx;%(Outputs) + xsd text.xsd + xsd.exe cxx-tree text.xsd + text.cxx;text.hxx;%(Outputs) + xsd text.xsd + xsd.exe cxx-tree text.xsd + text.cxx;text.hxx;%(Outputs) + + + + + + + + + \ No newline at end of file diff --git a/xsd/dist/examples/cxx/tree/mixed/mixed-vc12.vcxproj.filters b/xsd/dist/examples/cxx/tree/mixed/mixed-vc12.vcxproj.filters new file mode 100644 index 0000000..992400e --- /dev/null +++ b/xsd/dist/examples/cxx/tree/mixed/mixed-vc12.vcxproj.filters @@ -0,0 +1,38 @@ + + + + + {590B5830-837E-4D7F-984C-173456EE7E70} + cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {3B7C0CD8-48D5-4244-A1FB-B60D510C2359} + h;hpp;hxx;hm;inl;inc;xsd + + + {ba06cc21-c20a-4656-89ab-0a7b56f50871} + xsd + + + + + Source Files + + + Source Files + + + + + Header Files + + + + + + + + Schema Files + + + \ No newline at end of file diff --git a/xsd/dist/examples/cxx/tree/mixed/mixed-vc8.vcproj b/xsd/dist/examples/cxx/tree/mixed/mixed-vc8.vcproj new file mode 100644 index 0000000..d446891 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/mixed/mixed-vc8.vcproj @@ -0,0 +1,423 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/xsd/dist/examples/cxx/tree/mixed/mixed-vc9.vcproj b/xsd/dist/examples/cxx/tree/mixed/mixed-vc9.vcproj new file mode 100644 index 0000000..5c5843a --- /dev/null +++ b/xsd/dist/examples/cxx/tree/mixed/mixed-vc9.vcproj @@ -0,0 +1,420 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/xsd/dist/examples/cxx/tree/mixed/mixed-xerces2-7.1.vcproj b/xsd/dist/examples/cxx/tree/mixed/mixed-xerces2-7.1.vcproj deleted file mode 100644 index 510a1d5..0000000 --- a/xsd/dist/examples/cxx/tree/mixed/mixed-xerces2-7.1.vcproj +++ /dev/null @@ -1,164 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/xsd/dist/examples/cxx/tree/mixed/mixed-xerces2-8.0.vcproj b/xsd/dist/examples/cxx/tree/mixed/mixed-xerces2-8.0.vcproj deleted file mode 100644 index 5dfbf16..0000000 --- a/xsd/dist/examples/cxx/tree/mixed/mixed-xerces2-8.0.vcproj +++ /dev/null @@ -1,423 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/xsd/dist/examples/cxx/tree/mixed/mixed-xerces2-9.0.vcproj b/xsd/dist/examples/cxx/tree/mixed/mixed-xerces2-9.0.vcproj deleted file mode 100644 index 4e6ff97..0000000 --- a/xsd/dist/examples/cxx/tree/mixed/mixed-xerces2-9.0.vcproj +++ /dev/null @@ -1,420 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/xsd/dist/examples/cxx/tree/multiroot/multiroot-10.0.vcxproj b/xsd/dist/examples/cxx/tree/multiroot/multiroot-10.0.vcxproj deleted file mode 100644 index acc0e93..0000000 --- a/xsd/dist/examples/cxx/tree/multiroot/multiroot-10.0.vcxproj +++ /dev/null @@ -1,211 +0,0 @@ - - - - - Debug - Win32 - - - Debug - x64 - - - Release - Win32 - - - Release - x64 - - - - multiroot - {1CFBC9C5-5F9C-4B60-A2A3-0A79BCDD2670} - multiroot - Win32Proj - - - - Application - MultiByte - - - Application - MultiByte - - - Application - MultiByte - - - Application - MultiByte - - - - - - - - - - - - - - - - - - - driver - driver - driver - driver - Debug\ - Debug\ - true - $(Platform)\$(Configuration)\ - $(Platform)\$(Configuration)\ - true - Release\ - Release\ - false - $(Platform)\$(Configuration)\ - $(Platform)\$(Configuration)\ - false - - - - Disabled - WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebug - true - - - Level3 - EditAndContinue - - - xerces-c_3D.lib;%(AdditionalDependencies) - $(TargetPath) - true - $(OutDir)driver.pdb - Console - false - - - MachineX86 - - - - - X64 - - - Disabled - WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebug - true - - - Level3 - ProgramDatabase - - - xerces-c_3D.lib;%(AdditionalDependencies) - $(TargetPath) - true - $(OutDir)driver.pdb - Console - false - - - MachineX64 - - - - - WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - MultiThreaded - true - - - Level3 - ProgramDatabase - - - xerces-c_3.lib;%(AdditionalDependencies) - $(TargetPath) - true - Console - true - true - false - - - MachineX86 - - - - - X64 - - - WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - MultiThreaded - true - - - Level3 - ProgramDatabase - - - xerces-c_3.lib;%(AdditionalDependencies) - $(TargetPath) - true - Console - true - true - false - - - MachineX64 - - - - - - - - - - - - - - xsd protocol.xsd - xsd cxx-tree --root-element-all protocol.xsd - protocol.hxx;protocol.cxx;%(Outputs) - xsd protocol.xsd - xsd cxx-tree --root-element-all protocol.xsd - protocol.hxx;protocol.cxx;%(Outputs) - xsd protocol.xsd - xsd cxx-tree --root-element-all protocol.xsd - protocol.hxx;protocol.cxx;%(Outputs) - xsd protocol.xsd - xsd cxx-tree --root-element-all protocol.xsd - protocol.hxx;protocol.cxx;%(Outputs) - - - - - - - - - \ No newline at end of file diff --git a/xsd/dist/examples/cxx/tree/multiroot/multiroot-10.0.vcxproj.filters b/xsd/dist/examples/cxx/tree/multiroot/multiroot-10.0.vcxproj.filters deleted file mode 100644 index 148c832..0000000 --- a/xsd/dist/examples/cxx/tree/multiroot/multiroot-10.0.vcxproj.filters +++ /dev/null @@ -1,44 +0,0 @@ - - - - - {761DEBB9-455C-4599-A11D-66D602C486C3} - cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx - - - {AAF07268-FD5E-485F-8EB8-1AFDDE8BFD57} - h;hpp;hxx;hm;inl;inc;xsd - - - {770136e0-0d08-4ab1-b67b-eabbde953e47} - xsd - - - - - Source Files - - - Source Files - - - Source Files - - - - - Header Files - - - Header Files - - - - - - - - Schema Files - - - \ No newline at end of file diff --git a/xsd/dist/examples/cxx/tree/multiroot/multiroot-7.1.vcproj b/xsd/dist/examples/cxx/tree/multiroot/multiroot-7.1.vcproj deleted file mode 100644 index 675fe8b..0000000 --- a/xsd/dist/examples/cxx/tree/multiroot/multiroot-7.1.vcproj +++ /dev/null @@ -1,170 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/xsd/dist/examples/cxx/tree/multiroot/multiroot-8.0.vcproj b/xsd/dist/examples/cxx/tree/multiroot/multiroot-8.0.vcproj deleted file mode 100644 index 915953a..0000000 --- a/xsd/dist/examples/cxx/tree/multiroot/multiroot-8.0.vcproj +++ /dev/null @@ -1,431 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/xsd/dist/examples/cxx/tree/multiroot/multiroot-9.0.vcproj b/xsd/dist/examples/cxx/tree/multiroot/multiroot-9.0.vcproj deleted file mode 100644 index a6458ba..0000000 --- a/xsd/dist/examples/cxx/tree/multiroot/multiroot-9.0.vcproj +++ /dev/null @@ -1,428 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/xsd/dist/examples/cxx/tree/multiroot/multiroot-vc10.vcxproj b/xsd/dist/examples/cxx/tree/multiroot/multiroot-vc10.vcxproj new file mode 100644 index 0000000..3a10c32 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/multiroot/multiroot-vc10.vcxproj @@ -0,0 +1,207 @@ + + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + multiroot + {1CFBC9C5-5F9C-4B60-A2A3-0A79BCDD2670} + multiroot + Win32Proj + + + + Application + MultiByte + + + Application + MultiByte + + + Application + MultiByte + + + Application + MultiByte + + + + + + + + + + + + + + + + + + + driver + driver + driver + driver + Debug\ + Debug\ + true + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + true + Release\ + Release\ + false + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + false + + + + Disabled + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebugDLL + true + + + Level3 + + + xerces-c_3D.lib;%(AdditionalDependencies) + $(TargetPath) + true + $(OutDir)driver.pdb + Console + false + + + MachineX86 + + + + + X64 + + + Disabled + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebugDLL + true + + + Level3 + + + xerces-c_3D.lib;%(AdditionalDependencies) + $(TargetPath) + true + $(OutDir)driver.pdb + Console + false + + + MachineX64 + + + + + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreadedDLL + true + + + Level3 + + + xerces-c_3.lib;%(AdditionalDependencies) + $(TargetPath) + true + Console + true + true + false + + + MachineX86 + + + + + X64 + + + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreadedDLL + true + + + Level3 + + + xerces-c_3.lib;%(AdditionalDependencies) + $(TargetPath) + true + Console + true + true + false + + + MachineX64 + + + + + + + + + + + + + + xsd protocol.xsd + xsd cxx-tree --root-element-all protocol.xsd + protocol.hxx;protocol.cxx;%(Outputs) + xsd protocol.xsd + xsd cxx-tree --root-element-all protocol.xsd + protocol.hxx;protocol.cxx;%(Outputs) + xsd protocol.xsd + xsd cxx-tree --root-element-all protocol.xsd + protocol.hxx;protocol.cxx;%(Outputs) + xsd protocol.xsd + xsd cxx-tree --root-element-all protocol.xsd + protocol.hxx;protocol.cxx;%(Outputs) + + + + + + + + + \ No newline at end of file diff --git a/xsd/dist/examples/cxx/tree/multiroot/multiroot-vc10.vcxproj.filters b/xsd/dist/examples/cxx/tree/multiroot/multiroot-vc10.vcxproj.filters new file mode 100644 index 0000000..148c832 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/multiroot/multiroot-vc10.vcxproj.filters @@ -0,0 +1,44 @@ + + + + + {761DEBB9-455C-4599-A11D-66D602C486C3} + cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {AAF07268-FD5E-485F-8EB8-1AFDDE8BFD57} + h;hpp;hxx;hm;inl;inc;xsd + + + {770136e0-0d08-4ab1-b67b-eabbde953e47} + xsd + + + + + Source Files + + + Source Files + + + Source Files + + + + + Header Files + + + Header Files + + + + + + + + Schema Files + + + \ No newline at end of file diff --git a/xsd/dist/examples/cxx/tree/multiroot/multiroot-vc11.vcxproj b/xsd/dist/examples/cxx/tree/multiroot/multiroot-vc11.vcxproj new file mode 100644 index 0000000..61c6a44 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/multiroot/multiroot-vc11.vcxproj @@ -0,0 +1,211 @@ + + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + multiroot + {1CFBC9C5-5F9C-4B60-A2A3-0A79BCDD2670} + multiroot + Win32Proj + + + + Application + v110 + MultiByte + + + Application + v110 + MultiByte + + + Application + v110 + MultiByte + + + Application + v110 + MultiByte + + + + + + + + + + + + + + + + + + + driver + driver + driver + driver + Debug\ + Debug\ + true + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + true + Release\ + Release\ + false + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + false + + + + Disabled + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebugDLL + true + + + Level3 + + + xerces-c_3D.lib;%(AdditionalDependencies) + $(TargetPath) + true + $(OutDir)driver.pdb + Console + false + + + MachineX86 + + + + + X64 + + + Disabled + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebugDLL + true + + + Level3 + + + xerces-c_3D.lib;%(AdditionalDependencies) + $(TargetPath) + true + $(OutDir)driver.pdb + Console + false + + + MachineX64 + + + + + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreadedDLL + true + + + Level3 + + + xerces-c_3.lib;%(AdditionalDependencies) + $(TargetPath) + true + Console + true + true + false + + + MachineX86 + + + + + X64 + + + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreadedDLL + true + + + Level3 + + + xerces-c_3.lib;%(AdditionalDependencies) + $(TargetPath) + true + Console + true + true + false + + + MachineX64 + + + + + + + + + + + + + + xsd protocol.xsd + xsd cxx-tree --root-element-all protocol.xsd + protocol.hxx;protocol.cxx;%(Outputs) + xsd protocol.xsd + xsd cxx-tree --root-element-all protocol.xsd + protocol.hxx;protocol.cxx;%(Outputs) + xsd protocol.xsd + xsd cxx-tree --root-element-all protocol.xsd + protocol.hxx;protocol.cxx;%(Outputs) + xsd protocol.xsd + xsd cxx-tree --root-element-all protocol.xsd + protocol.hxx;protocol.cxx;%(Outputs) + + + + + + + + + \ No newline at end of file diff --git a/xsd/dist/examples/cxx/tree/multiroot/multiroot-vc11.vcxproj.filters b/xsd/dist/examples/cxx/tree/multiroot/multiroot-vc11.vcxproj.filters new file mode 100644 index 0000000..148c832 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/multiroot/multiroot-vc11.vcxproj.filters @@ -0,0 +1,44 @@ + + + + + {761DEBB9-455C-4599-A11D-66D602C486C3} + cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {AAF07268-FD5E-485F-8EB8-1AFDDE8BFD57} + h;hpp;hxx;hm;inl;inc;xsd + + + {770136e0-0d08-4ab1-b67b-eabbde953e47} + xsd + + + + + Source Files + + + Source Files + + + Source Files + + + + + Header Files + + + Header Files + + + + + + + + Schema Files + + + \ No newline at end of file diff --git a/xsd/dist/examples/cxx/tree/multiroot/multiroot-vc12.vcxproj b/xsd/dist/examples/cxx/tree/multiroot/multiroot-vc12.vcxproj new file mode 100644 index 0000000..1b0e268 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/multiroot/multiroot-vc12.vcxproj @@ -0,0 +1,215 @@ + + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + multiroot + {1CFBC9C5-5F9C-4B60-A2A3-0A79BCDD2670} + multiroot + Win32Proj + + + + Application + v120 + MultiByte + + + Application + v120 + MultiByte + + + Application + v120 + MultiByte + + + Application + v120 + MultiByte + + + + + + + + + + + + + + + + + + + driver + driver + driver + driver + Debug\ + Debug\ + true + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + true + Release\ + Release\ + false + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + false + + + + Disabled + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebugDLL + true + + + Level3 + true + + + xerces-c_3D.lib;%(AdditionalDependencies) + $(TargetPath) + true + $(OutDir)driver.pdb + Console + false + + + MachineX86 + + + + + X64 + + + Disabled + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebugDLL + true + + + Level3 + true + + + xerces-c_3D.lib;%(AdditionalDependencies) + $(TargetPath) + true + $(OutDir)driver.pdb + Console + false + + + MachineX64 + + + + + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreadedDLL + true + + + Level3 + true + + + xerces-c_3.lib;%(AdditionalDependencies) + $(TargetPath) + true + Console + true + true + false + + + MachineX86 + + + + + X64 + + + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreadedDLL + true + + + Level3 + true + + + xerces-c_3.lib;%(AdditionalDependencies) + $(TargetPath) + true + Console + true + true + false + + + MachineX64 + + + + + + + + + + + + + + xsd protocol.xsd + xsd cxx-tree --root-element-all protocol.xsd + protocol.hxx;protocol.cxx;%(Outputs) + xsd protocol.xsd + xsd cxx-tree --root-element-all protocol.xsd + protocol.hxx;protocol.cxx;%(Outputs) + xsd protocol.xsd + xsd cxx-tree --root-element-all protocol.xsd + protocol.hxx;protocol.cxx;%(Outputs) + xsd protocol.xsd + xsd cxx-tree --root-element-all protocol.xsd + protocol.hxx;protocol.cxx;%(Outputs) + + + + + + + + + \ No newline at end of file diff --git a/xsd/dist/examples/cxx/tree/multiroot/multiroot-vc12.vcxproj.filters b/xsd/dist/examples/cxx/tree/multiroot/multiroot-vc12.vcxproj.filters new file mode 100644 index 0000000..148c832 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/multiroot/multiroot-vc12.vcxproj.filters @@ -0,0 +1,44 @@ + + + + + {761DEBB9-455C-4599-A11D-66D602C486C3} + cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {AAF07268-FD5E-485F-8EB8-1AFDDE8BFD57} + h;hpp;hxx;hm;inl;inc;xsd + + + {770136e0-0d08-4ab1-b67b-eabbde953e47} + xsd + + + + + Source Files + + + Source Files + + + Source Files + + + + + Header Files + + + Header Files + + + + + + + + Schema Files + + + \ No newline at end of file diff --git a/xsd/dist/examples/cxx/tree/multiroot/multiroot-vc8.vcproj b/xsd/dist/examples/cxx/tree/multiroot/multiroot-vc8.vcproj new file mode 100644 index 0000000..54e196d --- /dev/null +++ b/xsd/dist/examples/cxx/tree/multiroot/multiroot-vc8.vcproj @@ -0,0 +1,431 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/xsd/dist/examples/cxx/tree/multiroot/multiroot-vc9.vcproj b/xsd/dist/examples/cxx/tree/multiroot/multiroot-vc9.vcproj new file mode 100644 index 0000000..95aa025 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/multiroot/multiroot-vc9.vcproj @@ -0,0 +1,428 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/xsd/dist/examples/cxx/tree/multiroot/multiroot-xerces2-7.1.vcproj b/xsd/dist/examples/cxx/tree/multiroot/multiroot-xerces2-7.1.vcproj deleted file mode 100644 index 8d42356..0000000 --- a/xsd/dist/examples/cxx/tree/multiroot/multiroot-xerces2-7.1.vcproj +++ /dev/null @@ -1,170 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/xsd/dist/examples/cxx/tree/multiroot/multiroot-xerces2-8.0.vcproj b/xsd/dist/examples/cxx/tree/multiroot/multiroot-xerces2-8.0.vcproj deleted file mode 100644 index 489e8ff..0000000 --- a/xsd/dist/examples/cxx/tree/multiroot/multiroot-xerces2-8.0.vcproj +++ /dev/null @@ -1,431 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/xsd/dist/examples/cxx/tree/multiroot/multiroot-xerces2-9.0.vcproj b/xsd/dist/examples/cxx/tree/multiroot/multiroot-xerces2-9.0.vcproj deleted file mode 100644 index c39bd06..0000000 --- a/xsd/dist/examples/cxx/tree/multiroot/multiroot-xerces2-9.0.vcproj +++ /dev/null @@ -1,428 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/xsd/dist/examples/cxx/tree/order/element/makefile b/xsd/dist/examples/cxx/tree/order/element/makefile new file mode 100644 index 0000000..31f5ec5 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/order/element/makefile @@ -0,0 +1,31 @@ +root := ../../../.. + +include $(root)/build/cxx/rules.make +include $(root)/build/xsd/tree-rules.make + + +override XSDFLAGS += --generate-serialization --generate-wildcard --ordered-type batch + + +# Build. +# +driver: driver.o transactions.o + +transactions.o: transactions.cxx transactions.hxx +driver.o: driver.cxx transactions.hxx + +transactions.cxx transactions.hxx: transactions.xsd + + +# Test +# +.PHONY: test +test: driver transactions.xml + ./driver transactions.xml + + +# Clean. +# +.PHONY: clean +clean: + rm -f transactions.o transactions.?xx driver.o driver diff --git a/xsd/dist/examples/cxx/tree/order/element/order-element-vc10.vcxproj b/xsd/dist/examples/cxx/tree/order/element/order-element-vc10.vcxproj new file mode 100644 index 0000000..100f0e8 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/order/element/order-element-vc10.vcxproj @@ -0,0 +1,205 @@ + + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + order-element + {9488E872-8E09-4B68-9715-AF68534164C4} + order-element + Win32Proj + + + + Application + MultiByte + + + Application + MultiByte + + + Application + MultiByte + + + Application + MultiByte + + + + + + + + + + + + + + + + + + + driver + driver + driver + driver + Debug\ + Debug\ + true + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + true + Release\ + Release\ + false + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + false + + + + Disabled + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebugDLL + true + + + Level3 + + + xerces-c_3D.lib;%(AdditionalDependencies) + $(TargetPath) + true + $(OutDir)driver.pdb + Console + false + + + MachineX86 + + + + + X64 + + + Disabled + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebugDLL + true + + + Level3 + + + xerces-c_3D.lib;%(AdditionalDependencies) + $(TargetPath) + true + $(OutDir)driver.pdb + Console + false + + + MachineX64 + + + + + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreadedDLL + true + + + Level3 + + + xerces-c_3.lib;%(AdditionalDependencies) + $(TargetPath) + true + Console + true + true + false + + + MachineX86 + + + + + X64 + + + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreadedDLL + true + + + Level3 + + + xerces-c_3.lib;%(AdditionalDependencies) + $(TargetPath) + true + Console + true + true + false + + + MachineX64 + + + + + + + + + + + + xsd transactions.xsd + xsd.exe cxx-tree --generate-serialization --generate-wildcard --ordered-type batch transactions.xsd + transactions.cxx;transactions.hxx;%(Outputs) + xsd transactions.xsd + xsd.exe cxx-tree --generate-serialization --generate-wildcard --ordered-type batch transactions.xsd + transactions.cxx;transactions.hxx;%(Outputs) + xsd transactions.xsd + xsd.exe cxx-tree --generate-serialization --generate-wildcard --ordered-type batch transactions.xsd + transactions.cxx;transactions.hxx;%(Outputs) + xsd transactions.xsd + xsd.exe cxx-tree --generate-serialization --generate-wildcard --ordered-type batch transactions.xsd + transactions.cxx;transactions.hxx;%(Outputs) + + + + + + + + + \ No newline at end of file diff --git a/xsd/dist/examples/cxx/tree/order/element/order-element-vc10.vcxproj.filters b/xsd/dist/examples/cxx/tree/order/element/order-element-vc10.vcxproj.filters new file mode 100644 index 0000000..aefc2be --- /dev/null +++ b/xsd/dist/examples/cxx/tree/order/element/order-element-vc10.vcxproj.filters @@ -0,0 +1,38 @@ + + + + + {FF0C69B7-2DFB-402A-9AEB-A13D354EB9D2} + cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {9761A910-7322-4EBD-AD00-4FCC4C4F6586} + h;hpp;hxx;hm;inl;inc;xsd + + + {2264FACD-618F-417C-B291-7E2A1BD11536} + xsd + + + + + Source Files + + + Source Files + + + + + Header Files + + + + + + + + Schema Files + + + \ No newline at end of file diff --git a/xsd/dist/examples/cxx/tree/order/element/order-element-vc11.vcxproj b/xsd/dist/examples/cxx/tree/order/element/order-element-vc11.vcxproj new file mode 100644 index 0000000..da8304c --- /dev/null +++ b/xsd/dist/examples/cxx/tree/order/element/order-element-vc11.vcxproj @@ -0,0 +1,209 @@ + + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + order-element + {9488E872-8E09-4B68-9715-AF68534164C4} + order-element + Win32Proj + + + + Application + v110 + MultiByte + + + Application + v110 + MultiByte + + + Application + v110 + MultiByte + + + Application + v110 + MultiByte + + + + + + + + + + + + + + + + + + + driver + driver + driver + driver + Debug\ + Debug\ + true + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + true + Release\ + Release\ + false + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + false + + + + Disabled + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebugDLL + true + + + Level3 + + + xerces-c_3D.lib;%(AdditionalDependencies) + $(TargetPath) + true + $(OutDir)driver.pdb + Console + false + + + MachineX86 + + + + + X64 + + + Disabled + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebugDLL + true + + + Level3 + + + xerces-c_3D.lib;%(AdditionalDependencies) + $(TargetPath) + true + $(OutDir)driver.pdb + Console + false + + + MachineX64 + + + + + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreadedDLL + true + + + Level3 + + + xerces-c_3.lib;%(AdditionalDependencies) + $(TargetPath) + true + Console + true + true + false + + + MachineX86 + + + + + X64 + + + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreadedDLL + true + + + Level3 + + + xerces-c_3.lib;%(AdditionalDependencies) + $(TargetPath) + true + Console + true + true + false + + + MachineX64 + + + + + + + + + + + + xsd transactions.xsd + xsd.exe cxx-tree --generate-serialization --generate-wildcard --ordered-type batch transactions.xsd + transactions.cxx;transactions.hxx;%(Outputs) + xsd transactions.xsd + xsd.exe cxx-tree --generate-serialization --generate-wildcard --ordered-type batch transactions.xsd + transactions.cxx;transactions.hxx;%(Outputs) + xsd transactions.xsd + xsd.exe cxx-tree --generate-serialization --generate-wildcard --ordered-type batch transactions.xsd + transactions.cxx;transactions.hxx;%(Outputs) + xsd transactions.xsd + xsd.exe cxx-tree --generate-serialization --generate-wildcard --ordered-type batch transactions.xsd + transactions.cxx;transactions.hxx;%(Outputs) + + + + + + + + + \ No newline at end of file diff --git a/xsd/dist/examples/cxx/tree/order/element/order-element-vc11.vcxproj.filters b/xsd/dist/examples/cxx/tree/order/element/order-element-vc11.vcxproj.filters new file mode 100644 index 0000000..aefc2be --- /dev/null +++ b/xsd/dist/examples/cxx/tree/order/element/order-element-vc11.vcxproj.filters @@ -0,0 +1,38 @@ + + + + + {FF0C69B7-2DFB-402A-9AEB-A13D354EB9D2} + cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {9761A910-7322-4EBD-AD00-4FCC4C4F6586} + h;hpp;hxx;hm;inl;inc;xsd + + + {2264FACD-618F-417C-B291-7E2A1BD11536} + xsd + + + + + Source Files + + + Source Files + + + + + Header Files + + + + + + + + Schema Files + + + \ No newline at end of file diff --git a/xsd/dist/examples/cxx/tree/order/element/order-element-vc12.vcxproj b/xsd/dist/examples/cxx/tree/order/element/order-element-vc12.vcxproj new file mode 100644 index 0000000..2364e27 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/order/element/order-element-vc12.vcxproj @@ -0,0 +1,213 @@ + + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + order-element + {9488E872-8E09-4B68-9715-AF68534164C4} + order-element + Win32Proj + + + + Application + v120 + MultiByte + + + Application + v120 + MultiByte + + + Application + v120 + MultiByte + + + Application + v120 + MultiByte + + + + + + + + + + + + + + + + + + + driver + driver + driver + driver + Debug\ + Debug\ + true + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + true + Release\ + Release\ + false + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + false + + + + Disabled + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebugDLL + true + + + Level3 + true + + + xerces-c_3D.lib;%(AdditionalDependencies) + $(TargetPath) + true + $(OutDir)driver.pdb + Console + false + + + MachineX86 + + + + + X64 + + + Disabled + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebugDLL + true + + + Level3 + true + + + xerces-c_3D.lib;%(AdditionalDependencies) + $(TargetPath) + true + $(OutDir)driver.pdb + Console + false + + + MachineX64 + + + + + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreadedDLL + true + + + Level3 + true + + + xerces-c_3.lib;%(AdditionalDependencies) + $(TargetPath) + true + Console + true + true + false + + + MachineX86 + + + + + X64 + + + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreadedDLL + true + + + Level3 + true + + + xerces-c_3.lib;%(AdditionalDependencies) + $(TargetPath) + true + Console + true + true + false + + + MachineX64 + + + + + + + + + + + + xsd transactions.xsd + xsd.exe cxx-tree --generate-serialization --generate-wildcard --ordered-type batch transactions.xsd + transactions.cxx;transactions.hxx;%(Outputs) + xsd transactions.xsd + xsd.exe cxx-tree --generate-serialization --generate-wildcard --ordered-type batch transactions.xsd + transactions.cxx;transactions.hxx;%(Outputs) + xsd transactions.xsd + xsd.exe cxx-tree --generate-serialization --generate-wildcard --ordered-type batch transactions.xsd + transactions.cxx;transactions.hxx;%(Outputs) + xsd transactions.xsd + xsd.exe cxx-tree --generate-serialization --generate-wildcard --ordered-type batch transactions.xsd + transactions.cxx;transactions.hxx;%(Outputs) + + + + + + + + + \ No newline at end of file diff --git a/xsd/dist/examples/cxx/tree/order/element/order-element-vc12.vcxproj.filters b/xsd/dist/examples/cxx/tree/order/element/order-element-vc12.vcxproj.filters new file mode 100644 index 0000000..aefc2be --- /dev/null +++ b/xsd/dist/examples/cxx/tree/order/element/order-element-vc12.vcxproj.filters @@ -0,0 +1,38 @@ + + + + + {FF0C69B7-2DFB-402A-9AEB-A13D354EB9D2} + cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {9761A910-7322-4EBD-AD00-4FCC4C4F6586} + h;hpp;hxx;hm;inl;inc;xsd + + + {2264FACD-618F-417C-B291-7E2A1BD11536} + xsd + + + + + Source Files + + + Source Files + + + + + Header Files + + + + + + + + Schema Files + + + \ No newline at end of file diff --git a/xsd/dist/examples/cxx/tree/order/element/order-element-vc8.vcproj b/xsd/dist/examples/cxx/tree/order/element/order-element-vc8.vcproj new file mode 100644 index 0000000..06dd76d --- /dev/null +++ b/xsd/dist/examples/cxx/tree/order/element/order-element-vc8.vcproj @@ -0,0 +1,423 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/xsd/dist/examples/cxx/tree/order/element/order-element-vc9.vcproj b/xsd/dist/examples/cxx/tree/order/element/order-element-vc9.vcproj new file mode 100644 index 0000000..74a0266 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/order/element/order-element-vc9.vcproj @@ -0,0 +1,420 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/xsd/dist/examples/cxx/tree/order/makefile b/xsd/dist/examples/cxx/tree/order/makefile new file mode 100644 index 0000000..2713b6e --- /dev/null +++ b/xsd/dist/examples/cxx/tree/order/makefile @@ -0,0 +1,11 @@ +dirs := element mixed + +.PHONY: all $(dirs) + +all: $(dirs) + +$(dirs): + @$(MAKE) -C $@ $(MAKECMDGOALS) + +makefile: ; +% :: $(dirs) ; diff --git a/xsd/dist/examples/cxx/tree/order/mixed/makefile b/xsd/dist/examples/cxx/tree/order/mixed/makefile new file mode 100644 index 0000000..b7929d9 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/order/mixed/makefile @@ -0,0 +1,32 @@ +root := ../../../.. + +include $(root)/build/cxx/rules.make +include $(root)/build/xsd/tree-rules.make + + +override XSDFLAGS += --generate-serialization --ordered-type-mixed + + +# Build. +# +driver: driver.o text.o + +text.o: text.cxx text.hxx +driver.o: driver.cxx text.hxx + +text.cxx text.hxx: text.xsd + + +# Test +# +.PHONY: test +test: driver text.xml + ./driver text.xml + + +# Clean. +# +.PHONY: clean +clean: + rm -f text.o text.?xx driver.o driver + diff --git a/xsd/dist/examples/cxx/tree/order/mixed/order-mixed-vc10.vcxproj b/xsd/dist/examples/cxx/tree/order/mixed/order-mixed-vc10.vcxproj new file mode 100644 index 0000000..69ed120 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/order/mixed/order-mixed-vc10.vcxproj @@ -0,0 +1,205 @@ + + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + order-mixed + {94A74673-C980-426B-B5BB-00744559EAD1} + order-mixed + Win32Proj + + + + Application + MultiByte + + + Application + MultiByte + + + Application + MultiByte + + + Application + MultiByte + + + + + + + + + + + + + + + + + + + driver + driver + driver + driver + Debug\ + Debug\ + true + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + true + Release\ + Release\ + false + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + false + + + + Disabled + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebugDLL + true + + + Level3 + + + xerces-c_3D.lib;%(AdditionalDependencies) + $(TargetPath) + true + $(OutDir)driver.pdb + Console + false + + + MachineX86 + + + + + X64 + + + Disabled + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebugDLL + true + + + Level3 + + + xerces-c_3D.lib;%(AdditionalDependencies) + $(TargetPath) + true + $(OutDir)driver.pdb + Console + false + + + MachineX64 + + + + + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreadedDLL + true + + + Level3 + + + xerces-c_3.lib;%(AdditionalDependencies) + $(TargetPath) + true + Console + true + true + false + + + MachineX86 + + + + + X64 + + + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreadedDLL + true + + + Level3 + + + xerces-c_3.lib;%(AdditionalDependencies) + $(TargetPath) + true + Console + true + true + false + + + MachineX64 + + + + + + + + + + + + xsd text.xsd + xsd.exe cxx-tree --generate-serialization --ordered-type-mixed text.xsd + text.cxx;text.hxx;%(Outputs) + xsd text.xsd + xsd.exe cxx-tree --generate-serialization --ordered-type-mixed text.xsd + text.cxx;text.hxx;%(Outputs) + xsd text.xsd + xsd.exe cxx-tree --generate-serialization --ordered-type-mixed text.xsd + text.cxx;text.hxx;%(Outputs) + xsd text.xsd + xsd.exe cxx-tree --generate-serialization --ordered-type-mixed text.xsd + text.cxx;text.hxx;%(Outputs) + + + + + + + + + \ No newline at end of file diff --git a/xsd/dist/examples/cxx/tree/order/mixed/order-mixed-vc10.vcxproj.filters b/xsd/dist/examples/cxx/tree/order/mixed/order-mixed-vc10.vcxproj.filters new file mode 100644 index 0000000..422115b --- /dev/null +++ b/xsd/dist/examples/cxx/tree/order/mixed/order-mixed-vc10.vcxproj.filters @@ -0,0 +1,38 @@ + + + + + {02F42C11-BDFB-4E9B-8E93-745AE1451A73} + cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {789E7294-E4D2-41DC-BDDA-4A333C3C2ED7} + h;hpp;hxx;hm;inl;inc;xsd + + + {BF59FE93-D0AC-48C0-998A-7AB994AFD9FE} + xsd + + + + + Source Files + + + Source Files + + + + + Header Files + + + + + + + + Schema Files + + + \ No newline at end of file diff --git a/xsd/dist/examples/cxx/tree/order/mixed/order-mixed-vc11.vcxproj b/xsd/dist/examples/cxx/tree/order/mixed/order-mixed-vc11.vcxproj new file mode 100644 index 0000000..6f4ba84 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/order/mixed/order-mixed-vc11.vcxproj @@ -0,0 +1,209 @@ + + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + order-mixed + {94A74673-C980-426B-B5BB-00744559EAD1} + order-mixed + Win32Proj + + + + Application + v110 + MultiByte + + + Application + v110 + MultiByte + + + Application + v110 + MultiByte + + + Application + v110 + MultiByte + + + + + + + + + + + + + + + + + + + driver + driver + driver + driver + Debug\ + Debug\ + true + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + true + Release\ + Release\ + false + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + false + + + + Disabled + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebugDLL + true + + + Level3 + + + xerces-c_3D.lib;%(AdditionalDependencies) + $(TargetPath) + true + $(OutDir)driver.pdb + Console + false + + + MachineX86 + + + + + X64 + + + Disabled + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebugDLL + true + + + Level3 + + + xerces-c_3D.lib;%(AdditionalDependencies) + $(TargetPath) + true + $(OutDir)driver.pdb + Console + false + + + MachineX64 + + + + + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreadedDLL + true + + + Level3 + + + xerces-c_3.lib;%(AdditionalDependencies) + $(TargetPath) + true + Console + true + true + false + + + MachineX86 + + + + + X64 + + + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreadedDLL + true + + + Level3 + + + xerces-c_3.lib;%(AdditionalDependencies) + $(TargetPath) + true + Console + true + true + false + + + MachineX64 + + + + + + + + + + + + xsd text.xsd + xsd.exe cxx-tree --generate-serialization --ordered-type-mixed text.xsd + text.cxx;text.hxx;%(Outputs) + xsd text.xsd + xsd.exe cxx-tree --generate-serialization --ordered-type-mixed text.xsd + text.cxx;text.hxx;%(Outputs) + xsd text.xsd + xsd.exe cxx-tree --generate-serialization --ordered-type-mixed text.xsd + text.cxx;text.hxx;%(Outputs) + xsd text.xsd + xsd.exe cxx-tree --generate-serialization --ordered-type-mixed text.xsd + text.cxx;text.hxx;%(Outputs) + + + + + + + + + \ No newline at end of file diff --git a/xsd/dist/examples/cxx/tree/order/mixed/order-mixed-vc11.vcxproj.filters b/xsd/dist/examples/cxx/tree/order/mixed/order-mixed-vc11.vcxproj.filters new file mode 100644 index 0000000..422115b --- /dev/null +++ b/xsd/dist/examples/cxx/tree/order/mixed/order-mixed-vc11.vcxproj.filters @@ -0,0 +1,38 @@ + + + + + {02F42C11-BDFB-4E9B-8E93-745AE1451A73} + cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {789E7294-E4D2-41DC-BDDA-4A333C3C2ED7} + h;hpp;hxx;hm;inl;inc;xsd + + + {BF59FE93-D0AC-48C0-998A-7AB994AFD9FE} + xsd + + + + + Source Files + + + Source Files + + + + + Header Files + + + + + + + + Schema Files + + + \ No newline at end of file diff --git a/xsd/dist/examples/cxx/tree/order/mixed/order-mixed-vc12.vcxproj b/xsd/dist/examples/cxx/tree/order/mixed/order-mixed-vc12.vcxproj new file mode 100644 index 0000000..7408bef --- /dev/null +++ b/xsd/dist/examples/cxx/tree/order/mixed/order-mixed-vc12.vcxproj @@ -0,0 +1,213 @@ + + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + order-mixed + {94A74673-C980-426B-B5BB-00744559EAD1} + order-mixed + Win32Proj + + + + Application + v120 + MultiByte + + + Application + v120 + MultiByte + + + Application + v120 + MultiByte + + + Application + v120 + MultiByte + + + + + + + + + + + + + + + + + + + driver + driver + driver + driver + Debug\ + Debug\ + true + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + true + Release\ + Release\ + false + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + false + + + + Disabled + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebugDLL + true + + + Level3 + true + + + xerces-c_3D.lib;%(AdditionalDependencies) + $(TargetPath) + true + $(OutDir)driver.pdb + Console + false + + + MachineX86 + + + + + X64 + + + Disabled + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebugDLL + true + + + Level3 + true + + + xerces-c_3D.lib;%(AdditionalDependencies) + $(TargetPath) + true + $(OutDir)driver.pdb + Console + false + + + MachineX64 + + + + + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreadedDLL + true + + + Level3 + true + + + xerces-c_3.lib;%(AdditionalDependencies) + $(TargetPath) + true + Console + true + true + false + + + MachineX86 + + + + + X64 + + + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreadedDLL + true + + + Level3 + true + + + xerces-c_3.lib;%(AdditionalDependencies) + $(TargetPath) + true + Console + true + true + false + + + MachineX64 + + + + + + + + + + + + xsd text.xsd + xsd.exe cxx-tree --generate-serialization --ordered-type-mixed text.xsd + text.cxx;text.hxx;%(Outputs) + xsd text.xsd + xsd.exe cxx-tree --generate-serialization --ordered-type-mixed text.xsd + text.cxx;text.hxx;%(Outputs) + xsd text.xsd + xsd.exe cxx-tree --generate-serialization --ordered-type-mixed text.xsd + text.cxx;text.hxx;%(Outputs) + xsd text.xsd + xsd.exe cxx-tree --generate-serialization --ordered-type-mixed text.xsd + text.cxx;text.hxx;%(Outputs) + + + + + + + + + \ No newline at end of file diff --git a/xsd/dist/examples/cxx/tree/order/mixed/order-mixed-vc12.vcxproj.filters b/xsd/dist/examples/cxx/tree/order/mixed/order-mixed-vc12.vcxproj.filters new file mode 100644 index 0000000..422115b --- /dev/null +++ b/xsd/dist/examples/cxx/tree/order/mixed/order-mixed-vc12.vcxproj.filters @@ -0,0 +1,38 @@ + + + + + {02F42C11-BDFB-4E9B-8E93-745AE1451A73} + cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {789E7294-E4D2-41DC-BDDA-4A333C3C2ED7} + h;hpp;hxx;hm;inl;inc;xsd + + + {BF59FE93-D0AC-48C0-998A-7AB994AFD9FE} + xsd + + + + + Source Files + + + Source Files + + + + + Header Files + + + + + + + + Schema Files + + + \ No newline at end of file diff --git a/xsd/dist/examples/cxx/tree/order/mixed/order-mixed-vc8.vcproj b/xsd/dist/examples/cxx/tree/order/mixed/order-mixed-vc8.vcproj new file mode 100644 index 0000000..20cfe65 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/order/mixed/order-mixed-vc8.vcproj @@ -0,0 +1,423 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/xsd/dist/examples/cxx/tree/order/mixed/order-mixed-vc9.vcproj b/xsd/dist/examples/cxx/tree/order/mixed/order-mixed-vc9.vcproj new file mode 100644 index 0000000..c6861d9 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/order/mixed/order-mixed-vc9.vcproj @@ -0,0 +1,420 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/xsd/dist/examples/cxx/tree/performance/performance-10.0.vcxproj b/xsd/dist/examples/cxx/tree/performance/performance-10.0.vcxproj deleted file mode 100644 index 46de693..0000000 --- a/xsd/dist/examples/cxx/tree/performance/performance-10.0.vcxproj +++ /dev/null @@ -1,214 +0,0 @@ - - - - - Debug - Win32 - - - Debug - x64 - - - Release - Win32 - - - Release - x64 - - - - performance - {C60700D1-DB4B-4EFF-8EE9-97BD716BCB89} - performance - Win32Proj - - - - Application - MultiByte - - - Application - MultiByte - - - Application - MultiByte - - - Application - MultiByte - - - - - - - - - - - - - - - - - - - driver - driver - driver - driver - Debug\ - Debug\ - true - $(Platform)\$(Configuration)\ - $(Platform)\$(Configuration)\ - true - Release\ - Release\ - false - $(Platform)\$(Configuration)\ - $(Platform)\$(Configuration)\ - false - - - - Disabled - WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebug - true - - - Level3 - EditAndContinue - - - xerces-c_3D.lib;%(AdditionalDependencies) - $(TargetPath) - true - $(OutDir)driver.pdb - Console - false - - - MachineX86 - - - - - X64 - - - Disabled - WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebug - true - - - Level3 - ProgramDatabase - - - xerces-c_3D.lib;%(AdditionalDependencies) - $(TargetPath) - true - $(OutDir)driver.pdb - Console - false - - - MachineX64 - - - - - WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - MultiThreaded - true - - - Level3 - ProgramDatabase - - - xerces-c_3.lib;%(AdditionalDependencies) - $(TargetPath) - true - Console - true - true - false - - - MachineX86 - - - - - X64 - - - WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - MultiThreaded - true - - - Level3 - ProgramDatabase - - - xerces-c_3.lib;%(AdditionalDependencies) - $(TargetPath) - true - Console - true - true - false - - - MachineX64 - - - - - - - - - - - - - - - - - - - - xsd test.xsd - xsd cxx-tree --generate-inline --generate-serialization test.xsd - test.hxx;test.ixx;test.cxx;%(Outputs) - xsd test.xsd - xsd cxx-tree --generate-inline --generate-serialization test.xsd - test.hxx;test.ixx;test.cxx;%(Outputs) - xsd test.xsd - xsd cxx-tree --generate-inline --generate-serialization test.xsd - test.hxx;test.ixx;test.cxx;%(Outputs) - xsd test.xsd - xsd cxx-tree --generate-inline --generate-serialization test.xsd - test.hxx;test.ixx;test.cxx;%(Outputs) - - - - - - \ No newline at end of file diff --git a/xsd/dist/examples/cxx/tree/performance/performance-10.0.vcxproj.filters b/xsd/dist/examples/cxx/tree/performance/performance-10.0.vcxproj.filters deleted file mode 100644 index 6fc7fa3..0000000 --- a/xsd/dist/examples/cxx/tree/performance/performance-10.0.vcxproj.filters +++ /dev/null @@ -1,57 +0,0 @@ - - - - - {4BF3D33D-891D-402D-A26F-AEBC35E127DE} - cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx - - - {FD93B741-02F9-48B5-BE59-E5DD2C73CC7A} - h;hpp;hxx;hm;inl;inc;xsd - - - {e0558eb1-4ecb-42e8-b50b-e07487e59072} - ixx - - - {47ef7335-e3a1-4832-bff0-c59ac4d25088} - xsd - - - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - - - Header Files - - - Header Files - - - - - Inline Files - - - - - - Schema Files - - - \ No newline at end of file diff --git a/xsd/dist/examples/cxx/tree/performance/performance-7.1.vcproj b/xsd/dist/examples/cxx/tree/performance/performance-7.1.vcproj deleted file mode 100644 index f5eace8..0000000 --- a/xsd/dist/examples/cxx/tree/performance/performance-7.1.vcproj +++ /dev/null @@ -1,183 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/xsd/dist/examples/cxx/tree/performance/performance-8.0.vcproj b/xsd/dist/examples/cxx/tree/performance/performance-8.0.vcproj deleted file mode 100644 index 88d0e7c..0000000 --- a/xsd/dist/examples/cxx/tree/performance/performance-8.0.vcproj +++ /dev/null @@ -1,445 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/xsd/dist/examples/cxx/tree/performance/performance-9.0.vcproj b/xsd/dist/examples/cxx/tree/performance/performance-9.0.vcproj deleted file mode 100644 index 907e153..0000000 --- a/xsd/dist/examples/cxx/tree/performance/performance-9.0.vcproj +++ /dev/null @@ -1,442 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/xsd/dist/examples/cxx/tree/performance/performance-vc10.vcxproj b/xsd/dist/examples/cxx/tree/performance/performance-vc10.vcxproj new file mode 100644 index 0000000..6651012 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/performance/performance-vc10.vcxproj @@ -0,0 +1,210 @@ + + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + performance + {C60700D1-DB4B-4EFF-8EE9-97BD716BCB89} + performance + Win32Proj + + + + Application + MultiByte + + + Application + MultiByte + + + Application + MultiByte + + + Application + MultiByte + + + + + + + + + + + + + + + + + + + driver + driver + driver + driver + Debug\ + Debug\ + true + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + true + Release\ + Release\ + false + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + false + + + + Disabled + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebugDLL + true + + + Level3 + + + xerces-c_3D.lib;%(AdditionalDependencies) + $(TargetPath) + true + $(OutDir)driver.pdb + Console + false + + + MachineX86 + + + + + X64 + + + Disabled + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebugDLL + true + + + Level3 + + + xerces-c_3D.lib;%(AdditionalDependencies) + $(TargetPath) + true + $(OutDir)driver.pdb + Console + false + + + MachineX64 + + + + + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreadedDLL + true + + + Level3 + + + xerces-c_3.lib;%(AdditionalDependencies) + $(TargetPath) + true + Console + true + true + false + + + MachineX86 + + + + + X64 + + + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreadedDLL + true + + + Level3 + + + xerces-c_3.lib;%(AdditionalDependencies) + $(TargetPath) + true + Console + true + true + false + + + MachineX64 + + + + + + + + + + + + + + + + + + + + xsd test.xsd + xsd cxx-tree --generate-inline --generate-serialization test.xsd + test.hxx;test.ixx;test.cxx;%(Outputs) + xsd test.xsd + xsd cxx-tree --generate-inline --generate-serialization test.xsd + test.hxx;test.ixx;test.cxx;%(Outputs) + xsd test.xsd + xsd cxx-tree --generate-inline --generate-serialization test.xsd + test.hxx;test.ixx;test.cxx;%(Outputs) + xsd test.xsd + xsd cxx-tree --generate-inline --generate-serialization test.xsd + test.hxx;test.ixx;test.cxx;%(Outputs) + + + + + + \ No newline at end of file diff --git a/xsd/dist/examples/cxx/tree/performance/performance-vc10.vcxproj.filters b/xsd/dist/examples/cxx/tree/performance/performance-vc10.vcxproj.filters new file mode 100644 index 0000000..6fc7fa3 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/performance/performance-vc10.vcxproj.filters @@ -0,0 +1,57 @@ + + + + + {4BF3D33D-891D-402D-A26F-AEBC35E127DE} + cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {FD93B741-02F9-48B5-BE59-E5DD2C73CC7A} + h;hpp;hxx;hm;inl;inc;xsd + + + {e0558eb1-4ecb-42e8-b50b-e07487e59072} + ixx + + + {47ef7335-e3a1-4832-bff0-c59ac4d25088} + xsd + + + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + + + Header Files + + + Header Files + + + + + Inline Files + + + + + + Schema Files + + + \ No newline at end of file diff --git a/xsd/dist/examples/cxx/tree/performance/performance-vc11.vcxproj b/xsd/dist/examples/cxx/tree/performance/performance-vc11.vcxproj new file mode 100644 index 0000000..8e3aa7c --- /dev/null +++ b/xsd/dist/examples/cxx/tree/performance/performance-vc11.vcxproj @@ -0,0 +1,214 @@ + + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + performance + {C60700D1-DB4B-4EFF-8EE9-97BD716BCB89} + performance + Win32Proj + + + + Application + v110 + MultiByte + + + Application + v110 + MultiByte + + + Application + v110 + MultiByte + + + Application + v110 + MultiByte + + + + + + + + + + + + + + + + + + + driver + driver + driver + driver + Debug\ + Debug\ + true + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + true + Release\ + Release\ + false + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + false + + + + Disabled + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebugDLL + true + + + Level3 + + + xerces-c_3D.lib;%(AdditionalDependencies) + $(TargetPath) + true + $(OutDir)driver.pdb + Console + false + + + MachineX86 + + + + + X64 + + + Disabled + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebugDLL + true + + + Level3 + + + xerces-c_3D.lib;%(AdditionalDependencies) + $(TargetPath) + true + $(OutDir)driver.pdb + Console + false + + + MachineX64 + + + + + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreadedDLL + true + + + Level3 + + + xerces-c_3.lib;%(AdditionalDependencies) + $(TargetPath) + true + Console + true + true + false + + + MachineX86 + + + + + X64 + + + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreadedDLL + true + + + Level3 + + + xerces-c_3.lib;%(AdditionalDependencies) + $(TargetPath) + true + Console + true + true + false + + + MachineX64 + + + + + + + + + + + + + + + + + + + + xsd test.xsd + xsd cxx-tree --generate-inline --generate-serialization test.xsd + test.hxx;test.ixx;test.cxx;%(Outputs) + xsd test.xsd + xsd cxx-tree --generate-inline --generate-serialization test.xsd + test.hxx;test.ixx;test.cxx;%(Outputs) + xsd test.xsd + xsd cxx-tree --generate-inline --generate-serialization test.xsd + test.hxx;test.ixx;test.cxx;%(Outputs) + xsd test.xsd + xsd cxx-tree --generate-inline --generate-serialization test.xsd + test.hxx;test.ixx;test.cxx;%(Outputs) + + + + + + \ No newline at end of file diff --git a/xsd/dist/examples/cxx/tree/performance/performance-vc11.vcxproj.filters b/xsd/dist/examples/cxx/tree/performance/performance-vc11.vcxproj.filters new file mode 100644 index 0000000..6fc7fa3 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/performance/performance-vc11.vcxproj.filters @@ -0,0 +1,57 @@ + + + + + {4BF3D33D-891D-402D-A26F-AEBC35E127DE} + cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {FD93B741-02F9-48B5-BE59-E5DD2C73CC7A} + h;hpp;hxx;hm;inl;inc;xsd + + + {e0558eb1-4ecb-42e8-b50b-e07487e59072} + ixx + + + {47ef7335-e3a1-4832-bff0-c59ac4d25088} + xsd + + + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + + + Header Files + + + Header Files + + + + + Inline Files + + + + + + Schema Files + + + \ No newline at end of file diff --git a/xsd/dist/examples/cxx/tree/performance/performance-vc12.vcxproj b/xsd/dist/examples/cxx/tree/performance/performance-vc12.vcxproj new file mode 100644 index 0000000..38193f7 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/performance/performance-vc12.vcxproj @@ -0,0 +1,218 @@ + + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + performance + {C60700D1-DB4B-4EFF-8EE9-97BD716BCB89} + performance + Win32Proj + + + + Application + v120 + MultiByte + + + Application + v120 + MultiByte + + + Application + v120 + MultiByte + + + Application + v120 + MultiByte + + + + + + + + + + + + + + + + + + + driver + driver + driver + driver + Debug\ + Debug\ + true + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + true + Release\ + Release\ + false + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + false + + + + Disabled + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebugDLL + true + + + Level3 + true + + + xerces-c_3D.lib;%(AdditionalDependencies) + $(TargetPath) + true + $(OutDir)driver.pdb + Console + false + + + MachineX86 + + + + + X64 + + + Disabled + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebugDLL + true + + + Level3 + true + + + xerces-c_3D.lib;%(AdditionalDependencies) + $(TargetPath) + true + $(OutDir)driver.pdb + Console + false + + + MachineX64 + + + + + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreadedDLL + true + + + Level3 + true + + + xerces-c_3.lib;%(AdditionalDependencies) + $(TargetPath) + true + Console + true + true + false + + + MachineX86 + + + + + X64 + + + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreadedDLL + true + + + Level3 + true + + + xerces-c_3.lib;%(AdditionalDependencies) + $(TargetPath) + true + Console + true + true + false + + + MachineX64 + + + + + + + + + + + + + + + + + + + + xsd test.xsd + xsd cxx-tree --generate-inline --generate-serialization test.xsd + test.hxx;test.ixx;test.cxx;%(Outputs) + xsd test.xsd + xsd cxx-tree --generate-inline --generate-serialization test.xsd + test.hxx;test.ixx;test.cxx;%(Outputs) + xsd test.xsd + xsd cxx-tree --generate-inline --generate-serialization test.xsd + test.hxx;test.ixx;test.cxx;%(Outputs) + xsd test.xsd + xsd cxx-tree --generate-inline --generate-serialization test.xsd + test.hxx;test.ixx;test.cxx;%(Outputs) + + + + + + \ No newline at end of file diff --git a/xsd/dist/examples/cxx/tree/performance/performance-vc12.vcxproj.filters b/xsd/dist/examples/cxx/tree/performance/performance-vc12.vcxproj.filters new file mode 100644 index 0000000..6fc7fa3 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/performance/performance-vc12.vcxproj.filters @@ -0,0 +1,57 @@ + + + + + {4BF3D33D-891D-402D-A26F-AEBC35E127DE} + cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {FD93B741-02F9-48B5-BE59-E5DD2C73CC7A} + h;hpp;hxx;hm;inl;inc;xsd + + + {e0558eb1-4ecb-42e8-b50b-e07487e59072} + ixx + + + {47ef7335-e3a1-4832-bff0-c59ac4d25088} + xsd + + + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + + + Header Files + + + Header Files + + + + + Inline Files + + + + + + Schema Files + + + \ No newline at end of file diff --git a/xsd/dist/examples/cxx/tree/performance/performance-vc8.vcproj b/xsd/dist/examples/cxx/tree/performance/performance-vc8.vcproj new file mode 100644 index 0000000..e49587d --- /dev/null +++ b/xsd/dist/examples/cxx/tree/performance/performance-vc8.vcproj @@ -0,0 +1,445 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/xsd/dist/examples/cxx/tree/performance/performance-vc9.vcproj b/xsd/dist/examples/cxx/tree/performance/performance-vc9.vcproj new file mode 100644 index 0000000..fa23a74 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/performance/performance-vc9.vcproj @@ -0,0 +1,442 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/xsd/dist/examples/cxx/tree/performance/performance-xerces2-7.1.vcproj b/xsd/dist/examples/cxx/tree/performance/performance-xerces2-7.1.vcproj deleted file mode 100644 index 9fb5f98..0000000 --- a/xsd/dist/examples/cxx/tree/performance/performance-xerces2-7.1.vcproj +++ /dev/null @@ -1,183 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/xsd/dist/examples/cxx/tree/performance/performance-xerces2-8.0.vcproj b/xsd/dist/examples/cxx/tree/performance/performance-xerces2-8.0.vcproj deleted file mode 100644 index 0feba16..0000000 --- a/xsd/dist/examples/cxx/tree/performance/performance-xerces2-8.0.vcproj +++ /dev/null @@ -1,445 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/xsd/dist/examples/cxx/tree/performance/performance-xerces2-9.0.vcproj b/xsd/dist/examples/cxx/tree/performance/performance-xerces2-9.0.vcproj deleted file mode 100644 index 561e294..0000000 --- a/xsd/dist/examples/cxx/tree/performance/performance-xerces2-9.0.vcproj +++ /dev/null @@ -1,442 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/xsd/dist/examples/cxx/tree/polymorphism/polymorphism-10.0.vcxproj b/xsd/dist/examples/cxx/tree/polymorphism/polymorphism-10.0.vcxproj deleted file mode 100644 index 184ebe9..0000000 --- a/xsd/dist/examples/cxx/tree/polymorphism/polymorphism-10.0.vcxproj +++ /dev/null @@ -1,209 +0,0 @@ - - - - - Debug - Win32 - - - Debug - x64 - - - Release - Win32 - - - Release - x64 - - - - polymorphism - {03224289-FD3C-4A58-A6D7-E8D658B0E45A} - polymorphism - Win32Proj - - - - Application - MultiByte - - - Application - MultiByte - - - Application - MultiByte - - - Application - MultiByte - - - - - - - - - - - - - - - - - - - driver - driver - driver - driver - Debug\ - Debug\ - true - $(Platform)\$(Configuration)\ - $(Platform)\$(Configuration)\ - true - Release\ - Release\ - false - $(Platform)\$(Configuration)\ - $(Platform)\$(Configuration)\ - false - - - - Disabled - WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebug - true - - - Level3 - EditAndContinue - - - xerces-c_3D.lib;%(AdditionalDependencies) - $(TargetPath) - true - $(OutDir)driver.pdb - Console - false - - - MachineX86 - - - - - X64 - - - Disabled - WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebug - true - - - Level3 - ProgramDatabase - - - xerces-c_3D.lib;%(AdditionalDependencies) - $(TargetPath) - true - $(OutDir)driver.pdb - Console - false - - - MachineX64 - - - - - WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - MultiThreaded - true - - - Level3 - ProgramDatabase - - - xerces-c_3.lib;%(AdditionalDependencies) - $(TargetPath) - true - Console - true - true - false - - - MachineX86 - - - - - X64 - - - WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - MultiThreaded - true - - - Level3 - ProgramDatabase - - - xerces-c_3.lib;%(AdditionalDependencies) - $(TargetPath) - true - Console - true - true - false - - - MachineX64 - - - - - - - - - - - - xsd supermen.xsd - xsd.exe cxx-tree --generate-polymorphic --generate-serialization --root-element-last supermen.xsd - supermen.cxx;supermen.hxx;%(Outputs) - xsd supermen.xsd - xsd.exe cxx-tree --generate-polymorphic --generate-serialization --root-element-last supermen.xsd - supermen.cxx;supermen.hxx;%(Outputs) - xsd supermen.xsd - xsd.exe cxx-tree --generate-polymorphic --generate-serialization --root-element-last supermen.xsd - supermen.cxx;supermen.hxx;%(Outputs) - xsd supermen.xsd - xsd.exe cxx-tree --generate-polymorphic --generate-serialization --root-element-last supermen.xsd - supermen.cxx;supermen.hxx;%(Outputs) - - - - - - - - - \ No newline at end of file diff --git a/xsd/dist/examples/cxx/tree/polymorphism/polymorphism-10.0.vcxproj.filters b/xsd/dist/examples/cxx/tree/polymorphism/polymorphism-10.0.vcxproj.filters deleted file mode 100644 index 4459d2c..0000000 --- a/xsd/dist/examples/cxx/tree/polymorphism/polymorphism-10.0.vcxproj.filters +++ /dev/null @@ -1,38 +0,0 @@ - - - - - {A02BB28E-3A7B-4E9E-A2AC-AA264C62525C} - cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx - - - {6B2184D0-2125-48EB-AE80-64E24055DCE4} - h;hpp;hxx;hm;inl;inc;xsd - - - {e32c9352-17dd-4c6c-b9fa-fadaf6eee928} - xsd - - - - - Source Files - - - Source Files - - - - - Header Files - - - - - - - - Schema Files - - - \ No newline at end of file diff --git a/xsd/dist/examples/cxx/tree/polymorphism/polymorphism-7.1.vcproj b/xsd/dist/examples/cxx/tree/polymorphism/polymorphism-7.1.vcproj deleted file mode 100644 index c47b133..0000000 --- a/xsd/dist/examples/cxx/tree/polymorphism/polymorphism-7.1.vcproj +++ /dev/null @@ -1,164 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/xsd/dist/examples/cxx/tree/polymorphism/polymorphism-8.0.vcproj b/xsd/dist/examples/cxx/tree/polymorphism/polymorphism-8.0.vcproj deleted file mode 100644 index 6e5478c..0000000 --- a/xsd/dist/examples/cxx/tree/polymorphism/polymorphism-8.0.vcproj +++ /dev/null @@ -1,423 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/xsd/dist/examples/cxx/tree/polymorphism/polymorphism-9.0.vcproj b/xsd/dist/examples/cxx/tree/polymorphism/polymorphism-9.0.vcproj deleted file mode 100644 index dd033ab..0000000 --- a/xsd/dist/examples/cxx/tree/polymorphism/polymorphism-9.0.vcproj +++ /dev/null @@ -1,420 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/xsd/dist/examples/cxx/tree/polymorphism/polymorphism-vc10.vcxproj b/xsd/dist/examples/cxx/tree/polymorphism/polymorphism-vc10.vcxproj new file mode 100644 index 0000000..4a693ec --- /dev/null +++ b/xsd/dist/examples/cxx/tree/polymorphism/polymorphism-vc10.vcxproj @@ -0,0 +1,205 @@ + + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + polymorphism + {03224289-FD3C-4A58-A6D7-E8D658B0E45A} + polymorphism + Win32Proj + + + + Application + MultiByte + + + Application + MultiByte + + + Application + MultiByte + + + Application + MultiByte + + + + + + + + + + + + + + + + + + + driver + driver + driver + driver + Debug\ + Debug\ + true + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + true + Release\ + Release\ + false + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + false + + + + Disabled + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebugDLL + true + + + Level3 + + + xerces-c_3D.lib;%(AdditionalDependencies) + $(TargetPath) + true + $(OutDir)driver.pdb + Console + false + + + MachineX86 + + + + + X64 + + + Disabled + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebugDLL + true + + + Level3 + + + xerces-c_3D.lib;%(AdditionalDependencies) + $(TargetPath) + true + $(OutDir)driver.pdb + Console + false + + + MachineX64 + + + + + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreadedDLL + true + + + Level3 + + + xerces-c_3.lib;%(AdditionalDependencies) + $(TargetPath) + true + Console + true + true + false + + + MachineX86 + + + + + X64 + + + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreadedDLL + true + + + Level3 + + + xerces-c_3.lib;%(AdditionalDependencies) + $(TargetPath) + true + Console + true + true + false + + + MachineX64 + + + + + + + + + + + + xsd supermen.xsd + xsd.exe cxx-tree --generate-polymorphic --generate-serialization --root-element-last supermen.xsd + supermen.cxx;supermen.hxx;%(Outputs) + xsd supermen.xsd + xsd.exe cxx-tree --generate-polymorphic --generate-serialization --root-element-last supermen.xsd + supermen.cxx;supermen.hxx;%(Outputs) + xsd supermen.xsd + xsd.exe cxx-tree --generate-polymorphic --generate-serialization --root-element-last supermen.xsd + supermen.cxx;supermen.hxx;%(Outputs) + xsd supermen.xsd + xsd.exe cxx-tree --generate-polymorphic --generate-serialization --root-element-last supermen.xsd + supermen.cxx;supermen.hxx;%(Outputs) + + + + + + + + + \ No newline at end of file diff --git a/xsd/dist/examples/cxx/tree/polymorphism/polymorphism-vc10.vcxproj.filters b/xsd/dist/examples/cxx/tree/polymorphism/polymorphism-vc10.vcxproj.filters new file mode 100644 index 0000000..4459d2c --- /dev/null +++ b/xsd/dist/examples/cxx/tree/polymorphism/polymorphism-vc10.vcxproj.filters @@ -0,0 +1,38 @@ + + + + + {A02BB28E-3A7B-4E9E-A2AC-AA264C62525C} + cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {6B2184D0-2125-48EB-AE80-64E24055DCE4} + h;hpp;hxx;hm;inl;inc;xsd + + + {e32c9352-17dd-4c6c-b9fa-fadaf6eee928} + xsd + + + + + Source Files + + + Source Files + + + + + Header Files + + + + + + + + Schema Files + + + \ No newline at end of file diff --git a/xsd/dist/examples/cxx/tree/polymorphism/polymorphism-vc11.vcxproj b/xsd/dist/examples/cxx/tree/polymorphism/polymorphism-vc11.vcxproj new file mode 100644 index 0000000..d8f0aa0 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/polymorphism/polymorphism-vc11.vcxproj @@ -0,0 +1,209 @@ + + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + polymorphism + {03224289-FD3C-4A58-A6D7-E8D658B0E45A} + polymorphism + Win32Proj + + + + Application + v110 + MultiByte + + + Application + v110 + MultiByte + + + Application + v110 + MultiByte + + + Application + v110 + MultiByte + + + + + + + + + + + + + + + + + + + driver + driver + driver + driver + Debug\ + Debug\ + true + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + true + Release\ + Release\ + false + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + false + + + + Disabled + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebugDLL + true + + + Level3 + + + xerces-c_3D.lib;%(AdditionalDependencies) + $(TargetPath) + true + $(OutDir)driver.pdb + Console + false + + + MachineX86 + + + + + X64 + + + Disabled + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebugDLL + true + + + Level3 + + + xerces-c_3D.lib;%(AdditionalDependencies) + $(TargetPath) + true + $(OutDir)driver.pdb + Console + false + + + MachineX64 + + + + + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreadedDLL + true + + + Level3 + + + xerces-c_3.lib;%(AdditionalDependencies) + $(TargetPath) + true + Console + true + true + false + + + MachineX86 + + + + + X64 + + + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreadedDLL + true + + + Level3 + + + xerces-c_3.lib;%(AdditionalDependencies) + $(TargetPath) + true + Console + true + true + false + + + MachineX64 + + + + + + + + + + + + xsd supermen.xsd + xsd.exe cxx-tree --generate-polymorphic --generate-serialization --root-element-last supermen.xsd + supermen.cxx;supermen.hxx;%(Outputs) + xsd supermen.xsd + xsd.exe cxx-tree --generate-polymorphic --generate-serialization --root-element-last supermen.xsd + supermen.cxx;supermen.hxx;%(Outputs) + xsd supermen.xsd + xsd.exe cxx-tree --generate-polymorphic --generate-serialization --root-element-last supermen.xsd + supermen.cxx;supermen.hxx;%(Outputs) + xsd supermen.xsd + xsd.exe cxx-tree --generate-polymorphic --generate-serialization --root-element-last supermen.xsd + supermen.cxx;supermen.hxx;%(Outputs) + + + + + + + + + \ No newline at end of file diff --git a/xsd/dist/examples/cxx/tree/polymorphism/polymorphism-vc11.vcxproj.filters b/xsd/dist/examples/cxx/tree/polymorphism/polymorphism-vc11.vcxproj.filters new file mode 100644 index 0000000..4459d2c --- /dev/null +++ b/xsd/dist/examples/cxx/tree/polymorphism/polymorphism-vc11.vcxproj.filters @@ -0,0 +1,38 @@ + + + + + {A02BB28E-3A7B-4E9E-A2AC-AA264C62525C} + cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {6B2184D0-2125-48EB-AE80-64E24055DCE4} + h;hpp;hxx;hm;inl;inc;xsd + + + {e32c9352-17dd-4c6c-b9fa-fadaf6eee928} + xsd + + + + + Source Files + + + Source Files + + + + + Header Files + + + + + + + + Schema Files + + + \ No newline at end of file diff --git a/xsd/dist/examples/cxx/tree/polymorphism/polymorphism-vc12.vcxproj b/xsd/dist/examples/cxx/tree/polymorphism/polymorphism-vc12.vcxproj new file mode 100644 index 0000000..040d657 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/polymorphism/polymorphism-vc12.vcxproj @@ -0,0 +1,213 @@ + + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + polymorphism + {03224289-FD3C-4A58-A6D7-E8D658B0E45A} + polymorphism + Win32Proj + + + + Application + v120 + MultiByte + + + Application + v120 + MultiByte + + + Application + v120 + MultiByte + + + Application + v120 + MultiByte + + + + + + + + + + + + + + + + + + + driver + driver + driver + driver + Debug\ + Debug\ + true + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + true + Release\ + Release\ + false + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + false + + + + Disabled + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebugDLL + true + + + Level3 + true + + + xerces-c_3D.lib;%(AdditionalDependencies) + $(TargetPath) + true + $(OutDir)driver.pdb + Console + false + + + MachineX86 + + + + + X64 + + + Disabled + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebugDLL + true + + + Level3 + true + + + xerces-c_3D.lib;%(AdditionalDependencies) + $(TargetPath) + true + $(OutDir)driver.pdb + Console + false + + + MachineX64 + + + + + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreadedDLL + true + + + Level3 + true + + + xerces-c_3.lib;%(AdditionalDependencies) + $(TargetPath) + true + Console + true + true + false + + + MachineX86 + + + + + X64 + + + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreadedDLL + true + + + Level3 + true + + + xerces-c_3.lib;%(AdditionalDependencies) + $(TargetPath) + true + Console + true + true + false + + + MachineX64 + + + + + + + + + + + + xsd supermen.xsd + xsd.exe cxx-tree --generate-polymorphic --generate-serialization --root-element-last supermen.xsd + supermen.cxx;supermen.hxx;%(Outputs) + xsd supermen.xsd + xsd.exe cxx-tree --generate-polymorphic --generate-serialization --root-element-last supermen.xsd + supermen.cxx;supermen.hxx;%(Outputs) + xsd supermen.xsd + xsd.exe cxx-tree --generate-polymorphic --generate-serialization --root-element-last supermen.xsd + supermen.cxx;supermen.hxx;%(Outputs) + xsd supermen.xsd + xsd.exe cxx-tree --generate-polymorphic --generate-serialization --root-element-last supermen.xsd + supermen.cxx;supermen.hxx;%(Outputs) + + + + + + + + + \ No newline at end of file diff --git a/xsd/dist/examples/cxx/tree/polymorphism/polymorphism-vc12.vcxproj.filters b/xsd/dist/examples/cxx/tree/polymorphism/polymorphism-vc12.vcxproj.filters new file mode 100644 index 0000000..4459d2c --- /dev/null +++ b/xsd/dist/examples/cxx/tree/polymorphism/polymorphism-vc12.vcxproj.filters @@ -0,0 +1,38 @@ + + + + + {A02BB28E-3A7B-4E9E-A2AC-AA264C62525C} + cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {6B2184D0-2125-48EB-AE80-64E24055DCE4} + h;hpp;hxx;hm;inl;inc;xsd + + + {e32c9352-17dd-4c6c-b9fa-fadaf6eee928} + xsd + + + + + Source Files + + + Source Files + + + + + Header Files + + + + + + + + Schema Files + + + \ No newline at end of file diff --git a/xsd/dist/examples/cxx/tree/polymorphism/polymorphism-vc8.vcproj b/xsd/dist/examples/cxx/tree/polymorphism/polymorphism-vc8.vcproj new file mode 100644 index 0000000..d146d0e --- /dev/null +++ b/xsd/dist/examples/cxx/tree/polymorphism/polymorphism-vc8.vcproj @@ -0,0 +1,423 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/xsd/dist/examples/cxx/tree/polymorphism/polymorphism-vc9.vcproj b/xsd/dist/examples/cxx/tree/polymorphism/polymorphism-vc9.vcproj new file mode 100644 index 0000000..3d56cf8 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/polymorphism/polymorphism-vc9.vcproj @@ -0,0 +1,420 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/xsd/dist/examples/cxx/tree/polymorphism/polymorphism-xerces2-7.1.vcproj b/xsd/dist/examples/cxx/tree/polymorphism/polymorphism-xerces2-7.1.vcproj deleted file mode 100644 index 47a0568..0000000 --- a/xsd/dist/examples/cxx/tree/polymorphism/polymorphism-xerces2-7.1.vcproj +++ /dev/null @@ -1,164 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/xsd/dist/examples/cxx/tree/polymorphism/polymorphism-xerces2-8.0.vcproj b/xsd/dist/examples/cxx/tree/polymorphism/polymorphism-xerces2-8.0.vcproj deleted file mode 100644 index 539f395..0000000 --- a/xsd/dist/examples/cxx/tree/polymorphism/polymorphism-xerces2-8.0.vcproj +++ /dev/null @@ -1,423 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/xsd/dist/examples/cxx/tree/polymorphism/polymorphism-xerces2-9.0.vcproj b/xsd/dist/examples/cxx/tree/polymorphism/polymorphism-xerces2-9.0.vcproj deleted file mode 100644 index cc48260..0000000 --- a/xsd/dist/examples/cxx/tree/polymorphism/polymorphism-xerces2-9.0.vcproj +++ /dev/null @@ -1,420 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/xsd/dist/examples/cxx/tree/streaming/makefile b/xsd/dist/examples/cxx/tree/streaming/makefile index ed32b83..4c7acd2 100644 --- a/xsd/dist/examples/cxx/tree/streaming/makefile +++ b/xsd/dist/examples/cxx/tree/streaming/makefile @@ -9,12 +9,13 @@ override XSDFLAGS += --generate-serialization # Build. # -driver: driver.o parser.o serializer.o position.o +driver: driver.o parser.o serializer.o grammar-input-stream.o position.o position.o: position.cxx position.hxx driver.o: driver.cxx position.hxx parser.hxx serializer.hxx parser.o: parser.cxx parser.hxx serializer.o: serializer.cxx serializer.hxx +grammar-input-stream.o: grammar-input-stream.cxx grammar-input-stream.hxx position.cxx position.hxx: position.xsd @@ -30,4 +31,4 @@ test: driver position.xml # .PHONY: clean clean: - rm -f position.o position.?xx parser.o serializer.o driver.o driver out.xml + rm -f position.o position.?xx parser.o serializer.o grammar-input-stream.o driver.o driver out.xml diff --git a/xsd/dist/examples/cxx/tree/streaming/streaming-10.0.vcxproj b/xsd/dist/examples/cxx/tree/streaming/streaming-10.0.vcxproj deleted file mode 100644 index fb74ff1..0000000 --- a/xsd/dist/examples/cxx/tree/streaming/streaming-10.0.vcxproj +++ /dev/null @@ -1,213 +0,0 @@ - - - - - Debug - Win32 - - - Debug - x64 - - - Release - Win32 - - - Release - x64 - - - - streaming - {3950B11C-AEB1-4E9C-BCB3-2E7133818C79} - streaming - Win32Proj - - - - Application - MultiByte - - - Application - MultiByte - - - Application - MultiByte - - - Application - MultiByte - - - - - - - - - - - - - - - - - - - driver - driver - driver - driver - Debug\ - Debug\ - true - $(Platform)\$(Configuration)\ - $(Platform)\$(Configuration)\ - true - Release\ - Release\ - false - $(Platform)\$(Configuration)\ - $(Platform)\$(Configuration)\ - false - - - - Disabled - WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebug - true - - - Level3 - EditAndContinue - - - xerces-c_3D.lib;%(AdditionalDependencies) - $(TargetPath) - true - $(OutDir)driver.pdb - Console - false - - - MachineX86 - - - - - X64 - - - Disabled - WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebug - true - - - Level3 - ProgramDatabase - - - xerces-c_3D.lib;%(AdditionalDependencies) - $(TargetPath) - true - $(OutDir)driver.pdb - Console - false - - - MachineX64 - - - - - WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - MultiThreaded - true - - - Level3 - ProgramDatabase - - - xerces-c_3.lib;%(AdditionalDependencies) - $(TargetPath) - true - Console - true - true - false - - - MachineX86 - - - - - X64 - - - WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - MultiThreaded - true - - - Level3 - ProgramDatabase - - - xerces-c_3.lib;%(AdditionalDependencies) - $(TargetPath) - true - Console - true - true - false - - - MachineX64 - - - - - - - - - - - - - - - - xsd position.xsd - xsd.exe cxx-tree --generate-serialization position.xsd - position.cxx;position.hxx;%(Outputs) - xsd position.xsd - xsd.exe cxx-tree --generate-serialization position.xsd - position.cxx;position.hxx;%(Outputs) - xsd position.xsd - xsd.exe cxx-tree --generate-serialization position.xsd - position.cxx;position.hxx;%(Outputs) - xsd position.xsd - xsd.exe cxx-tree --generate-serialization position.xsd - position.cxx;position.hxx;%(Outputs) - - - - - - - - - \ No newline at end of file diff --git a/xsd/dist/examples/cxx/tree/streaming/streaming-10.0.vcxproj.filters b/xsd/dist/examples/cxx/tree/streaming/streaming-10.0.vcxproj.filters deleted file mode 100644 index cf8b190..0000000 --- a/xsd/dist/examples/cxx/tree/streaming/streaming-10.0.vcxproj.filters +++ /dev/null @@ -1,50 +0,0 @@ - - - - - {4F684AD4-DFB2-4488-BA73-8625AECC91A3} - cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx - - - {94F3375D-5EB8-4D2C-8739-4D47E9AB7072} - h;hpp;hxx;hm;inl;inc;xsd - - - {b73125d6-60b1-4f32-9cfb-d11e709d0d14} - xsd - - - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - - - Header Files - - - Header Files - - - Header Files - - - - - - - - Schema Files - - - \ No newline at end of file diff --git a/xsd/dist/examples/cxx/tree/streaming/streaming-7.1.vcproj b/xsd/dist/examples/cxx/tree/streaming/streaming-7.1.vcproj deleted file mode 100644 index 7a11fe9..0000000 --- a/xsd/dist/examples/cxx/tree/streaming/streaming-7.1.vcproj +++ /dev/null @@ -1,176 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/xsd/dist/examples/cxx/tree/streaming/streaming-8.0.vcproj b/xsd/dist/examples/cxx/tree/streaming/streaming-8.0.vcproj deleted file mode 100644 index b7f65d0..0000000 --- a/xsd/dist/examples/cxx/tree/streaming/streaming-8.0.vcproj +++ /dev/null @@ -1,435 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/xsd/dist/examples/cxx/tree/streaming/streaming-9.0.vcproj b/xsd/dist/examples/cxx/tree/streaming/streaming-9.0.vcproj deleted file mode 100644 index cbfec59..0000000 --- a/xsd/dist/examples/cxx/tree/streaming/streaming-9.0.vcproj +++ /dev/null @@ -1,432 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/xsd/dist/examples/cxx/tree/streaming/streaming-vc10.vcxproj b/xsd/dist/examples/cxx/tree/streaming/streaming-vc10.vcxproj new file mode 100644 index 0000000..cf23e2a --- /dev/null +++ b/xsd/dist/examples/cxx/tree/streaming/streaming-vc10.vcxproj @@ -0,0 +1,211 @@ + + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + streaming + {3950B11C-AEB1-4E9C-BCB3-2E7133818C79} + streaming + Win32Proj + + + + Application + MultiByte + + + Application + MultiByte + + + Application + MultiByte + + + Application + MultiByte + + + + + + + + + + + + + + + + + + + driver + driver + driver + driver + Debug\ + Debug\ + true + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + true + Release\ + Release\ + false + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + false + + + + Disabled + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebugDLL + true + + + Level3 + + + xerces-c_3D.lib;%(AdditionalDependencies) + $(TargetPath) + true + $(OutDir)driver.pdb + Console + false + + + MachineX86 + + + + + X64 + + + Disabled + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebugDLL + true + + + Level3 + + + xerces-c_3D.lib;%(AdditionalDependencies) + $(TargetPath) + true + $(OutDir)driver.pdb + Console + false + + + MachineX64 + + + + + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreadedDLL + true + + + Level3 + + + xerces-c_3.lib;%(AdditionalDependencies) + $(TargetPath) + true + Console + true + true + false + + + MachineX86 + + + + + X64 + + + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreadedDLL + true + + + Level3 + + + xerces-c_3.lib;%(AdditionalDependencies) + $(TargetPath) + true + Console + true + true + false + + + MachineX64 + + + + + + + + + + + + + + + + + + xsd position.xsd + xsd.exe cxx-tree --generate-serialization position.xsd + position.cxx;position.hxx;%(Outputs) + xsd position.xsd + xsd.exe cxx-tree --generate-serialization position.xsd + position.cxx;position.hxx;%(Outputs) + xsd position.xsd + xsd.exe cxx-tree --generate-serialization position.xsd + position.cxx;position.hxx;%(Outputs) + xsd position.xsd + xsd.exe cxx-tree --generate-serialization position.xsd + position.cxx;position.hxx;%(Outputs) + + + + + + + + + \ No newline at end of file diff --git a/xsd/dist/examples/cxx/tree/streaming/streaming-vc10.vcxproj.filters b/xsd/dist/examples/cxx/tree/streaming/streaming-vc10.vcxproj.filters new file mode 100644 index 0000000..3597703 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/streaming/streaming-vc10.vcxproj.filters @@ -0,0 +1,56 @@ + + + + + {4F684AD4-DFB2-4488-BA73-8625AECC91A3} + cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {94F3375D-5EB8-4D2C-8739-4D47E9AB7072} + h;hpp;hxx;hm;inl;inc;xsd + + + {b73125d6-60b1-4f32-9cfb-d11e709d0d14} + xsd + + + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + + + + + + Schema Files + + + \ No newline at end of file diff --git a/xsd/dist/examples/cxx/tree/streaming/streaming-vc11.vcxproj b/xsd/dist/examples/cxx/tree/streaming/streaming-vc11.vcxproj new file mode 100644 index 0000000..28f008c --- /dev/null +++ b/xsd/dist/examples/cxx/tree/streaming/streaming-vc11.vcxproj @@ -0,0 +1,215 @@ + + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + streaming + {3950B11C-AEB1-4E9C-BCB3-2E7133818C79} + streaming + Win32Proj + + + + Application + v110 + MultiByte + + + Application + v110 + MultiByte + + + Application + v110 + MultiByte + + + Application + v110 + MultiByte + + + + + + + + + + + + + + + + + + + driver + driver + driver + driver + Debug\ + Debug\ + true + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + true + Release\ + Release\ + false + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + false + + + + Disabled + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebugDLL + true + + + Level3 + + + xerces-c_3D.lib;%(AdditionalDependencies) + $(TargetPath) + true + $(OutDir)driver.pdb + Console + false + + + MachineX86 + + + + + X64 + + + Disabled + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebugDLL + true + + + Level3 + + + xerces-c_3D.lib;%(AdditionalDependencies) + $(TargetPath) + true + $(OutDir)driver.pdb + Console + false + + + MachineX64 + + + + + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreadedDLL + true + + + Level3 + + + xerces-c_3.lib;%(AdditionalDependencies) + $(TargetPath) + true + Console + true + true + false + + + MachineX86 + + + + + X64 + + + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreadedDLL + true + + + Level3 + + + xerces-c_3.lib;%(AdditionalDependencies) + $(TargetPath) + true + Console + true + true + false + + + MachineX64 + + + + + + + + + + + + + + + + + + xsd position.xsd + xsd.exe cxx-tree --generate-serialization position.xsd + position.cxx;position.hxx;%(Outputs) + xsd position.xsd + xsd.exe cxx-tree --generate-serialization position.xsd + position.cxx;position.hxx;%(Outputs) + xsd position.xsd + xsd.exe cxx-tree --generate-serialization position.xsd + position.cxx;position.hxx;%(Outputs) + xsd position.xsd + xsd.exe cxx-tree --generate-serialization position.xsd + position.cxx;position.hxx;%(Outputs) + + + + + + + + + \ No newline at end of file diff --git a/xsd/dist/examples/cxx/tree/streaming/streaming-vc11.vcxproj.filters b/xsd/dist/examples/cxx/tree/streaming/streaming-vc11.vcxproj.filters new file mode 100644 index 0000000..3597703 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/streaming/streaming-vc11.vcxproj.filters @@ -0,0 +1,56 @@ + + + + + {4F684AD4-DFB2-4488-BA73-8625AECC91A3} + cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {94F3375D-5EB8-4D2C-8739-4D47E9AB7072} + h;hpp;hxx;hm;inl;inc;xsd + + + {b73125d6-60b1-4f32-9cfb-d11e709d0d14} + xsd + + + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + + + + + + Schema Files + + + \ No newline at end of file diff --git a/xsd/dist/examples/cxx/tree/streaming/streaming-vc12.vcxproj b/xsd/dist/examples/cxx/tree/streaming/streaming-vc12.vcxproj new file mode 100644 index 0000000..5e69c30 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/streaming/streaming-vc12.vcxproj @@ -0,0 +1,219 @@ + + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + streaming + {3950B11C-AEB1-4E9C-BCB3-2E7133818C79} + streaming + Win32Proj + + + + Application + v120 + MultiByte + + + Application + v120 + MultiByte + + + Application + v120 + MultiByte + + + Application + v120 + MultiByte + + + + + + + + + + + + + + + + + + + driver + driver + driver + driver + Debug\ + Debug\ + true + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + true + Release\ + Release\ + false + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + false + + + + Disabled + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebugDLL + true + + + Level3 + true + + + xerces-c_3D.lib;%(AdditionalDependencies) + $(TargetPath) + true + $(OutDir)driver.pdb + Console + false + + + MachineX86 + + + + + X64 + + + Disabled + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebugDLL + true + + + Level3 + true + + + xerces-c_3D.lib;%(AdditionalDependencies) + $(TargetPath) + true + $(OutDir)driver.pdb + Console + false + + + MachineX64 + + + + + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreadedDLL + true + + + Level3 + true + + + xerces-c_3.lib;%(AdditionalDependencies) + $(TargetPath) + true + Console + true + true + false + + + MachineX86 + + + + + X64 + + + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreadedDLL + true + + + Level3 + true + + + xerces-c_3.lib;%(AdditionalDependencies) + $(TargetPath) + true + Console + true + true + false + + + MachineX64 + + + + + + + + + + + + + + + + + + xsd position.xsd + xsd.exe cxx-tree --generate-serialization position.xsd + position.cxx;position.hxx;%(Outputs) + xsd position.xsd + xsd.exe cxx-tree --generate-serialization position.xsd + position.cxx;position.hxx;%(Outputs) + xsd position.xsd + xsd.exe cxx-tree --generate-serialization position.xsd + position.cxx;position.hxx;%(Outputs) + xsd position.xsd + xsd.exe cxx-tree --generate-serialization position.xsd + position.cxx;position.hxx;%(Outputs) + + + + + + + + + \ No newline at end of file diff --git a/xsd/dist/examples/cxx/tree/streaming/streaming-vc12.vcxproj.filters b/xsd/dist/examples/cxx/tree/streaming/streaming-vc12.vcxproj.filters new file mode 100644 index 0000000..3597703 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/streaming/streaming-vc12.vcxproj.filters @@ -0,0 +1,56 @@ + + + + + {4F684AD4-DFB2-4488-BA73-8625AECC91A3} + cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {94F3375D-5EB8-4D2C-8739-4D47E9AB7072} + h;hpp;hxx;hm;inl;inc;xsd + + + {b73125d6-60b1-4f32-9cfb-d11e709d0d14} + xsd + + + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + + + + + + Schema Files + + + \ No newline at end of file diff --git a/xsd/dist/examples/cxx/tree/streaming/streaming-vc8.vcproj b/xsd/dist/examples/cxx/tree/streaming/streaming-vc8.vcproj new file mode 100644 index 0000000..354c0ff --- /dev/null +++ b/xsd/dist/examples/cxx/tree/streaming/streaming-vc8.vcproj @@ -0,0 +1,441 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/xsd/dist/examples/cxx/tree/streaming/streaming-vc9.vcproj b/xsd/dist/examples/cxx/tree/streaming/streaming-vc9.vcproj new file mode 100644 index 0000000..e6b75f3 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/streaming/streaming-vc9.vcproj @@ -0,0 +1,438 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/xsd/dist/examples/cxx/tree/streaming/streaming-xerces2-7.1.vcproj b/xsd/dist/examples/cxx/tree/streaming/streaming-xerces2-7.1.vcproj deleted file mode 100644 index b606b8f..0000000 --- a/xsd/dist/examples/cxx/tree/streaming/streaming-xerces2-7.1.vcproj +++ /dev/null @@ -1,176 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/xsd/dist/examples/cxx/tree/streaming/streaming-xerces2-8.0.vcproj b/xsd/dist/examples/cxx/tree/streaming/streaming-xerces2-8.0.vcproj deleted file mode 100644 index fbd555e..0000000 --- a/xsd/dist/examples/cxx/tree/streaming/streaming-xerces2-8.0.vcproj +++ /dev/null @@ -1,435 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/xsd/dist/examples/cxx/tree/streaming/streaming-xerces2-9.0.vcproj b/xsd/dist/examples/cxx/tree/streaming/streaming-xerces2-9.0.vcproj deleted file mode 100644 index e3da54b..0000000 --- a/xsd/dist/examples/cxx/tree/streaming/streaming-xerces2-9.0.vcproj +++ /dev/null @@ -1,432 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/xsd/dist/examples/cxx/tree/tree-10.0.sln b/xsd/dist/examples/cxx/tree/tree-10.0.sln deleted file mode 100644 index 3f9d2e2..0000000 --- a/xsd/dist/examples/cxx/tree/tree-10.0.sln +++ /dev/null @@ -1,115 +0,0 @@ -Microsoft Visual Studio Solution File, Format Version 11.00 -# Visual Studio 2010 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "hello", "hello\hello-10.0.vcxproj", "{538CCAB6-984B-4602-B0D0-985E8FD4FEB9}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "library", "library\library-10.0.vcxproj", "{D661AD5B-5FF4-4AFD-A656-429BA348E9EF}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mixed", "mixed\mixed-10.0.vcxproj", "{6EF7868E-AA58-4615-9C1A-06B010CB4209}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "polymorphism", "polymorphism\polymorphism-10.0.vcxproj", "{03224289-FD3C-4A58-A6D7-E8D658B0E45A}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "streaming", "streaming\streaming-10.0.vcxproj", "{3950B11C-AEB1-4E9C-BCB3-2E7133818C79}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "wildcard", "wildcard\wildcard-10.0.vcxproj", "{13C21A83-CC75-459E-9B01-E9EC36D1524B}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "caching", "caching\caching-10.0.vcxproj", "{932D8CD0-4E11-4C3A-9084-4D30DE75C2B7}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "multiroot", "multiroot\multiroot-10.0.vcxproj", "{1CFBC9C5-5F9C-4B60-A2A3-0A79BCDD2670}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "performance", "performance\performance-10.0.vcxproj", "{C60700D1-DB4B-4EFF-8EE9-97BD716BCB89}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "messaging", "messaging\messaging-10.0.vcxproj", "{F7696252-45B5-438B-B14F-0510137704F0}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Win32 = Debug|Win32 - Debug|x64 = Debug|x64 - Release|Win32 = Release|Win32 - Release|x64 = Release|x64 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {538CCAB6-984B-4602-B0D0-985E8FD4FEB9}.Debug|Win32.ActiveCfg = Debug|Win32 - {538CCAB6-984B-4602-B0D0-985E8FD4FEB9}.Debug|Win32.Build.0 = Debug|Win32 - {538CCAB6-984B-4602-B0D0-985E8FD4FEB9}.Debug|x64.ActiveCfg = Debug|x64 - {538CCAB6-984B-4602-B0D0-985E8FD4FEB9}.Debug|x64.Build.0 = Debug|x64 - {538CCAB6-984B-4602-B0D0-985E8FD4FEB9}.Release|Win32.ActiveCfg = Release|Win32 - {538CCAB6-984B-4602-B0D0-985E8FD4FEB9}.Release|Win32.Build.0 = Release|Win32 - {538CCAB6-984B-4602-B0D0-985E8FD4FEB9}.Release|x64.ActiveCfg = Release|x64 - {538CCAB6-984B-4602-B0D0-985E8FD4FEB9}.Release|x64.Build.0 = Release|x64 - {D661AD5B-5FF4-4AFD-A656-429BA348E9EF}.Debug|Win32.ActiveCfg = Debug|Win32 - {D661AD5B-5FF4-4AFD-A656-429BA348E9EF}.Debug|Win32.Build.0 = Debug|Win32 - {D661AD5B-5FF4-4AFD-A656-429BA348E9EF}.Debug|x64.ActiveCfg = Debug|x64 - {D661AD5B-5FF4-4AFD-A656-429BA348E9EF}.Debug|x64.Build.0 = Debug|x64 - {D661AD5B-5FF4-4AFD-A656-429BA348E9EF}.Release|Win32.ActiveCfg = Release|Win32 - {D661AD5B-5FF4-4AFD-A656-429BA348E9EF}.Release|Win32.Build.0 = Release|Win32 - {D661AD5B-5FF4-4AFD-A656-429BA348E9EF}.Release|x64.ActiveCfg = Release|x64 - {D661AD5B-5FF4-4AFD-A656-429BA348E9EF}.Release|x64.Build.0 = Release|x64 - {6EF7868E-AA58-4615-9C1A-06B010CB4209}.Debug|Win32.ActiveCfg = Debug|Win32 - {6EF7868E-AA58-4615-9C1A-06B010CB4209}.Debug|Win32.Build.0 = Debug|Win32 - {6EF7868E-AA58-4615-9C1A-06B010CB4209}.Debug|x64.ActiveCfg = Debug|x64 - {6EF7868E-AA58-4615-9C1A-06B010CB4209}.Debug|x64.Build.0 = Debug|x64 - {6EF7868E-AA58-4615-9C1A-06B010CB4209}.Release|Win32.ActiveCfg = Release|Win32 - {6EF7868E-AA58-4615-9C1A-06B010CB4209}.Release|Win32.Build.0 = Release|Win32 - {6EF7868E-AA58-4615-9C1A-06B010CB4209}.Release|x64.ActiveCfg = Release|x64 - {6EF7868E-AA58-4615-9C1A-06B010CB4209}.Release|x64.Build.0 = Release|x64 - {03224289-FD3C-4A58-A6D7-E8D658B0E45A}.Debug|Win32.ActiveCfg = Debug|Win32 - {03224289-FD3C-4A58-A6D7-E8D658B0E45A}.Debug|Win32.Build.0 = Debug|Win32 - {03224289-FD3C-4A58-A6D7-E8D658B0E45A}.Debug|x64.ActiveCfg = Debug|x64 - {03224289-FD3C-4A58-A6D7-E8D658B0E45A}.Debug|x64.Build.0 = Debug|x64 - {03224289-FD3C-4A58-A6D7-E8D658B0E45A}.Release|Win32.ActiveCfg = Release|Win32 - {03224289-FD3C-4A58-A6D7-E8D658B0E45A}.Release|Win32.Build.0 = Release|Win32 - {03224289-FD3C-4A58-A6D7-E8D658B0E45A}.Release|x64.ActiveCfg = Release|x64 - {03224289-FD3C-4A58-A6D7-E8D658B0E45A}.Release|x64.Build.0 = Release|x64 - {3950B11C-AEB1-4E9C-BCB3-2E7133818C79}.Debug|Win32.ActiveCfg = Debug|Win32 - {3950B11C-AEB1-4E9C-BCB3-2E7133818C79}.Debug|Win32.Build.0 = Debug|Win32 - {3950B11C-AEB1-4E9C-BCB3-2E7133818C79}.Debug|x64.ActiveCfg = Debug|x64 - {3950B11C-AEB1-4E9C-BCB3-2E7133818C79}.Debug|x64.Build.0 = Debug|x64 - {3950B11C-AEB1-4E9C-BCB3-2E7133818C79}.Release|Win32.ActiveCfg = Release|Win32 - {3950B11C-AEB1-4E9C-BCB3-2E7133818C79}.Release|Win32.Build.0 = Release|Win32 - {3950B11C-AEB1-4E9C-BCB3-2E7133818C79}.Release|x64.ActiveCfg = Release|x64 - {3950B11C-AEB1-4E9C-BCB3-2E7133818C79}.Release|x64.Build.0 = Release|x64 - {13C21A83-CC75-459E-9B01-E9EC36D1524B}.Debug|Win32.ActiveCfg = Debug|Win32 - {13C21A83-CC75-459E-9B01-E9EC36D1524B}.Debug|Win32.Build.0 = Debug|Win32 - {13C21A83-CC75-459E-9B01-E9EC36D1524B}.Debug|x64.ActiveCfg = Debug|x64 - {13C21A83-CC75-459E-9B01-E9EC36D1524B}.Debug|x64.Build.0 = Debug|x64 - {13C21A83-CC75-459E-9B01-E9EC36D1524B}.Release|Win32.ActiveCfg = Release|Win32 - {13C21A83-CC75-459E-9B01-E9EC36D1524B}.Release|Win32.Build.0 = Release|Win32 - {13C21A83-CC75-459E-9B01-E9EC36D1524B}.Release|x64.ActiveCfg = Release|x64 - {13C21A83-CC75-459E-9B01-E9EC36D1524B}.Release|x64.Build.0 = Release|x64 - {932D8CD0-4E11-4C3A-9084-4D30DE75C2B7}.Debug|Win32.ActiveCfg = Debug|Win32 - {932D8CD0-4E11-4C3A-9084-4D30DE75C2B7}.Debug|Win32.Build.0 = Debug|Win32 - {932D8CD0-4E11-4C3A-9084-4D30DE75C2B7}.Debug|x64.ActiveCfg = Debug|x64 - {932D8CD0-4E11-4C3A-9084-4D30DE75C2B7}.Debug|x64.Build.0 = Debug|x64 - {932D8CD0-4E11-4C3A-9084-4D30DE75C2B7}.Release|Win32.ActiveCfg = Release|Win32 - {932D8CD0-4E11-4C3A-9084-4D30DE75C2B7}.Release|Win32.Build.0 = Release|Win32 - {932D8CD0-4E11-4C3A-9084-4D30DE75C2B7}.Release|x64.ActiveCfg = Release|x64 - {932D8CD0-4E11-4C3A-9084-4D30DE75C2B7}.Release|x64.Build.0 = Release|x64 - {1CFBC9C5-5F9C-4B60-A2A3-0A79BCDD2670}.Debug|Win32.ActiveCfg = Debug|Win32 - {1CFBC9C5-5F9C-4B60-A2A3-0A79BCDD2670}.Debug|Win32.Build.0 = Debug|Win32 - {1CFBC9C5-5F9C-4B60-A2A3-0A79BCDD2670}.Debug|x64.ActiveCfg = Debug|x64 - {1CFBC9C5-5F9C-4B60-A2A3-0A79BCDD2670}.Debug|x64.Build.0 = Debug|x64 - {1CFBC9C5-5F9C-4B60-A2A3-0A79BCDD2670}.Release|Win32.ActiveCfg = Release|Win32 - {1CFBC9C5-5F9C-4B60-A2A3-0A79BCDD2670}.Release|Win32.Build.0 = Release|Win32 - {1CFBC9C5-5F9C-4B60-A2A3-0A79BCDD2670}.Release|x64.ActiveCfg = Release|x64 - {1CFBC9C5-5F9C-4B60-A2A3-0A79BCDD2670}.Release|x64.Build.0 = Release|x64 - {C60700D1-DB4B-4EFF-8EE9-97BD716BCB89}.Debug|Win32.ActiveCfg = Debug|Win32 - {C60700D1-DB4B-4EFF-8EE9-97BD716BCB89}.Debug|Win32.Build.0 = Debug|Win32 - {C60700D1-DB4B-4EFF-8EE9-97BD716BCB89}.Debug|x64.ActiveCfg = Debug|x64 - {C60700D1-DB4B-4EFF-8EE9-97BD716BCB89}.Debug|x64.Build.0 = Debug|x64 - {C60700D1-DB4B-4EFF-8EE9-97BD716BCB89}.Release|Win32.ActiveCfg = Release|Win32 - {C60700D1-DB4B-4EFF-8EE9-97BD716BCB89}.Release|Win32.Build.0 = Release|Win32 - {C60700D1-DB4B-4EFF-8EE9-97BD716BCB89}.Release|x64.ActiveCfg = Release|x64 - {C60700D1-DB4B-4EFF-8EE9-97BD716BCB89}.Release|x64.Build.0 = Release|x64 - {F7696252-45B5-438B-B14F-0510137704F0}.Debug|Win32.ActiveCfg = Debug|Win32 - {F7696252-45B5-438B-B14F-0510137704F0}.Debug|Win32.Build.0 = Debug|Win32 - {F7696252-45B5-438B-B14F-0510137704F0}.Debug|x64.ActiveCfg = Debug|x64 - {F7696252-45B5-438B-B14F-0510137704F0}.Debug|x64.Build.0 = Debug|x64 - {F7696252-45B5-438B-B14F-0510137704F0}.Release|Win32.ActiveCfg = Release|Win32 - {F7696252-45B5-438B-B14F-0510137704F0}.Release|Win32.Build.0 = Release|Win32 - {F7696252-45B5-438B-B14F-0510137704F0}.Release|x64.ActiveCfg = Release|x64 - {F7696252-45B5-438B-B14F-0510137704F0}.Release|x64.Build.0 = Release|x64 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal diff --git a/xsd/dist/examples/cxx/tree/tree-7.1.sln b/xsd/dist/examples/cxx/tree/tree-7.1.sln deleted file mode 100644 index fc5147b..0000000 --- a/xsd/dist/examples/cxx/tree/tree-7.1.sln +++ /dev/null @@ -1,93 +0,0 @@ -Microsoft Visual Studio Solution File, Format Version 8.00 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "hello", "hello\hello-7.1.vcproj", "{538CCAB6-984B-4602-B0D0-985E8FD4FEB9}" - ProjectSection(ProjectDependencies) = postProject - EndProjectSection -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "library", "library\library-7.1.vcproj", "{D661AD5B-5FF4-4AFD-A656-429BA348E9EF}" - ProjectSection(ProjectDependencies) = postProject - EndProjectSection -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mixed", "mixed\mixed-7.1.vcproj", "{6EF7868E-AA58-4615-9C1A-06B010CB4209}" - ProjectSection(ProjectDependencies) = postProject - EndProjectSection -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "polymorphism", "polymorphism\polymorphism-7.1.vcproj", "{03224289-FD3C-4A58-A6D7-E8D658B0E45A}" - ProjectSection(ProjectDependencies) = postProject - EndProjectSection -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "streaming", "streaming\streaming-7.1.vcproj", "{3950B11C-AEB1-4E9C-BCB3-2E7133818C79}" - ProjectSection(ProjectDependencies) = postProject - EndProjectSection -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "wildcard", "wildcard\wildcard-7.1.vcproj", "{13C21A83-CC75-459E-9B01-E9EC36D1524B}" - ProjectSection(ProjectDependencies) = postProject - EndProjectSection -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "caching", "caching\caching-7.1.vcproj", "{932D8CD0-4E11-4C3A-9084-4D30DE75C2B7}" - ProjectSection(ProjectDependencies) = postProject - EndProjectSection -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "multiroot", "multiroot\multiroot-7.1.vcproj", "{1CFBC9C5-5F9C-4B60-A2A3-0A79BCDD2670}" - ProjectSection(ProjectDependencies) = postProject - EndProjectSection -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "performance", "performance\performance-7.1.vcproj", "{C60700D1-DB4B-4EFF-8EE9-97BD716BCB89}" - ProjectSection(ProjectDependencies) = postProject - EndProjectSection -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "messaging", "messaging\messaging-7.1.vcproj", "{F7696252-45B5-438B-B14F-0510137704F0}" - ProjectSection(ProjectDependencies) = postProject - EndProjectSection -EndProject -Global - GlobalSection(SolutionConfiguration) = preSolution - Debug = Debug - Release = Release - EndGlobalSection - GlobalSection(ProjectConfiguration) = postSolution - {538CCAB6-984B-4602-B0D0-985E8FD4FEB9}.Debug.ActiveCfg = Debug|Win32 - {538CCAB6-984B-4602-B0D0-985E8FD4FEB9}.Debug.Build.0 = Debug|Win32 - {538CCAB6-984B-4602-B0D0-985E8FD4FEB9}.Release.ActiveCfg = Release|Win32 - {538CCAB6-984B-4602-B0D0-985E8FD4FEB9}.Release.Build.0 = Release|Win32 - {D661AD5B-5FF4-4AFD-A656-429BA348E9EF}.Debug.ActiveCfg = Debug|Win32 - {D661AD5B-5FF4-4AFD-A656-429BA348E9EF}.Debug.Build.0 = Debug|Win32 - {D661AD5B-5FF4-4AFD-A656-429BA348E9EF}.Release.ActiveCfg = Release|Win32 - {D661AD5B-5FF4-4AFD-A656-429BA348E9EF}.Release.Build.0 = Release|Win32 - {6EF7868E-AA58-4615-9C1A-06B010CB4209}.Debug.ActiveCfg = Debug|Win32 - {6EF7868E-AA58-4615-9C1A-06B010CB4209}.Debug.Build.0 = Debug|Win32 - {6EF7868E-AA58-4615-9C1A-06B010CB4209}.Release.ActiveCfg = Release|Win32 - {6EF7868E-AA58-4615-9C1A-06B010CB4209}.Release.Build.0 = Release|Win32 - {03224289-FD3C-4A58-A6D7-E8D658B0E45A}.Debug.ActiveCfg = Debug|Win32 - {03224289-FD3C-4A58-A6D7-E8D658B0E45A}.Debug.Build.0 = Debug|Win32 - {03224289-FD3C-4A58-A6D7-E8D658B0E45A}.Release.ActiveCfg = Release|Win32 - {03224289-FD3C-4A58-A6D7-E8D658B0E45A}.Release.Build.0 = Release|Win32 - {3950B11C-AEB1-4E9C-BCB3-2E7133818C79}.Debug.ActiveCfg = Debug|Win32 - {3950B11C-AEB1-4E9C-BCB3-2E7133818C79}.Debug.Build.0 = Debug|Win32 - {3950B11C-AEB1-4E9C-BCB3-2E7133818C79}.Release.ActiveCfg = Release|Win32 - {3950B11C-AEB1-4E9C-BCB3-2E7133818C79}.Release.Build.0 = Release|Win32 - {13C21A83-CC75-459E-9B01-E9EC36D1524B}.Debug.ActiveCfg = Debug|Win32 - {13C21A83-CC75-459E-9B01-E9EC36D1524B}.Debug.Build.0 = Debug|Win32 - {13C21A83-CC75-459E-9B01-E9EC36D1524B}.Release.ActiveCfg = Release|Win32 - {13C21A83-CC75-459E-9B01-E9EC36D1524B}.Release.Build.0 = Release|Win32 - {932D8CD0-4E11-4C3A-9084-4D30DE75C2B7}.Debug.ActiveCfg = Debug|Win32 - {932D8CD0-4E11-4C3A-9084-4D30DE75C2B7}.Debug.Build.0 = Debug|Win32 - {932D8CD0-4E11-4C3A-9084-4D30DE75C2B7}.Release.ActiveCfg = Release|Win32 - {932D8CD0-4E11-4C3A-9084-4D30DE75C2B7}.Release.Build.0 = Release|Win32 - {1CFBC9C5-5F9C-4B60-A2A3-0A79BCDD2670}.Debug.ActiveCfg = Debug|Win32 - {1CFBC9C5-5F9C-4B60-A2A3-0A79BCDD2670}.Debug.Build.0 = Debug|Win32 - {1CFBC9C5-5F9C-4B60-A2A3-0A79BCDD2670}.Release.ActiveCfg = Release|Win32 - {1CFBC9C5-5F9C-4B60-A2A3-0A79BCDD2670}.Release.Build.0 = Release|Win32 - {C60700D1-DB4B-4EFF-8EE9-97BD716BCB89}.Debug.ActiveCfg = Debug|Win32 - {C60700D1-DB4B-4EFF-8EE9-97BD716BCB89}.Debug.Build.0 = Debug|Win32 - {C60700D1-DB4B-4EFF-8EE9-97BD716BCB89}.Release.ActiveCfg = Release|Win32 - {C60700D1-DB4B-4EFF-8EE9-97BD716BCB89}.Release.Build.0 = Release|Win32 - {F7696252-45B5-438B-B14F-0510137704F0}.Debug.ActiveCfg = Debug|Win32 - {F7696252-45B5-438B-B14F-0510137704F0}.Debug.Build.0 = Debug|Win32 - {F7696252-45B5-438B-B14F-0510137704F0}.Release.ActiveCfg = Release|Win32 - {F7696252-45B5-438B-B14F-0510137704F0}.Release.Build.0 = Release|Win32 - EndGlobalSection - GlobalSection(ExtensibilityGlobals) = postSolution - EndGlobalSection - GlobalSection(ExtensibilityAddIns) = postSolution - EndGlobalSection -EndGlobal diff --git a/xsd/dist/examples/cxx/tree/tree-8.0.sln b/xsd/dist/examples/cxx/tree/tree-8.0.sln deleted file mode 100644 index f504aa6..0000000 --- a/xsd/dist/examples/cxx/tree/tree-8.0.sln +++ /dev/null @@ -1,115 +0,0 @@ -Microsoft Visual Studio Solution File, Format Version 9.00 -# Visual Studio 2005 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "hello", "hello\hello-8.0.vcproj", "{538CCAB6-984B-4602-B0D0-985E8FD4FEB9}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "library", "library\library-8.0.vcproj", "{D661AD5B-5FF4-4AFD-A656-429BA348E9EF}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mixed", "mixed\mixed-8.0.vcproj", "{6EF7868E-AA58-4615-9C1A-06B010CB4209}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "polymorphism", "polymorphism\polymorphism-8.0.vcproj", "{03224289-FD3C-4A58-A6D7-E8D658B0E45A}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "streaming", "streaming\streaming-8.0.vcproj", "{3950B11C-AEB1-4E9C-BCB3-2E7133818C79}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "wildcard", "wildcard\wildcard-8.0.vcproj", "{13C21A83-CC75-459E-9B01-E9EC36D1524B}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "caching", "caching\caching-8.0.vcproj", "{932D8CD0-4E11-4C3A-9084-4D30DE75C2B7}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "multiroot", "multiroot\multiroot-8.0.vcproj", "{1CFBC9C5-5F9C-4B60-A2A3-0A79BCDD2670}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "performance", "performance\performance-8.0.vcproj", "{C60700D1-DB4B-4EFF-8EE9-97BD716BCB89}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "messaging", "messaging\messaging-8.0.vcproj", "{F7696252-45B5-438B-B14F-0510137704F0}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Win32 = Debug|Win32 - Debug|x64 = Debug|x64 - Release|Win32 = Release|Win32 - Release|x64 = Release|x64 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {538CCAB6-984B-4602-B0D0-985E8FD4FEB9}.Debug|Win32.ActiveCfg = Debug|Win32 - {538CCAB6-984B-4602-B0D0-985E8FD4FEB9}.Debug|Win32.Build.0 = Debug|Win32 - {538CCAB6-984B-4602-B0D0-985E8FD4FEB9}.Debug|x64.ActiveCfg = Debug|x64 - {538CCAB6-984B-4602-B0D0-985E8FD4FEB9}.Debug|x64.Build.0 = Debug|x64 - {538CCAB6-984B-4602-B0D0-985E8FD4FEB9}.Release|Win32.ActiveCfg = Release|Win32 - {538CCAB6-984B-4602-B0D0-985E8FD4FEB9}.Release|Win32.Build.0 = Release|Win32 - {538CCAB6-984B-4602-B0D0-985E8FD4FEB9}.Release|x64.ActiveCfg = Release|x64 - {538CCAB6-984B-4602-B0D0-985E8FD4FEB9}.Release|x64.Build.0 = Release|x64 - {D661AD5B-5FF4-4AFD-A656-429BA348E9EF}.Debug|Win32.ActiveCfg = Debug|Win32 - {D661AD5B-5FF4-4AFD-A656-429BA348E9EF}.Debug|Win32.Build.0 = Debug|Win32 - {D661AD5B-5FF4-4AFD-A656-429BA348E9EF}.Debug|x64.ActiveCfg = Debug|x64 - {D661AD5B-5FF4-4AFD-A656-429BA348E9EF}.Debug|x64.Build.0 = Debug|x64 - {D661AD5B-5FF4-4AFD-A656-429BA348E9EF}.Release|Win32.ActiveCfg = Release|Win32 - {D661AD5B-5FF4-4AFD-A656-429BA348E9EF}.Release|Win32.Build.0 = Release|Win32 - {D661AD5B-5FF4-4AFD-A656-429BA348E9EF}.Release|x64.ActiveCfg = Release|x64 - {D661AD5B-5FF4-4AFD-A656-429BA348E9EF}.Release|x64.Build.0 = Release|x64 - {6EF7868E-AA58-4615-9C1A-06B010CB4209}.Debug|Win32.ActiveCfg = Debug|Win32 - {6EF7868E-AA58-4615-9C1A-06B010CB4209}.Debug|Win32.Build.0 = Debug|Win32 - {6EF7868E-AA58-4615-9C1A-06B010CB4209}.Debug|x64.ActiveCfg = Debug|x64 - {6EF7868E-AA58-4615-9C1A-06B010CB4209}.Debug|x64.Build.0 = Debug|x64 - {6EF7868E-AA58-4615-9C1A-06B010CB4209}.Release|Win32.ActiveCfg = Release|Win32 - {6EF7868E-AA58-4615-9C1A-06B010CB4209}.Release|Win32.Build.0 = Release|Win32 - {6EF7868E-AA58-4615-9C1A-06B010CB4209}.Release|x64.ActiveCfg = Release|x64 - {6EF7868E-AA58-4615-9C1A-06B010CB4209}.Release|x64.Build.0 = Release|x64 - {03224289-FD3C-4A58-A6D7-E8D658B0E45A}.Debug|Win32.ActiveCfg = Debug|Win32 - {03224289-FD3C-4A58-A6D7-E8D658B0E45A}.Debug|Win32.Build.0 = Debug|Win32 - {03224289-FD3C-4A58-A6D7-E8D658B0E45A}.Debug|x64.ActiveCfg = Debug|x64 - {03224289-FD3C-4A58-A6D7-E8D658B0E45A}.Debug|x64.Build.0 = Debug|x64 - {03224289-FD3C-4A58-A6D7-E8D658B0E45A}.Release|Win32.ActiveCfg = Release|Win32 - {03224289-FD3C-4A58-A6D7-E8D658B0E45A}.Release|Win32.Build.0 = Release|Win32 - {03224289-FD3C-4A58-A6D7-E8D658B0E45A}.Release|x64.ActiveCfg = Release|x64 - {03224289-FD3C-4A58-A6D7-E8D658B0E45A}.Release|x64.Build.0 = Release|x64 - {3950B11C-AEB1-4E9C-BCB3-2E7133818C79}.Debug|Win32.ActiveCfg = Debug|Win32 - {3950B11C-AEB1-4E9C-BCB3-2E7133818C79}.Debug|Win32.Build.0 = Debug|Win32 - {3950B11C-AEB1-4E9C-BCB3-2E7133818C79}.Debug|x64.ActiveCfg = Debug|x64 - {3950B11C-AEB1-4E9C-BCB3-2E7133818C79}.Debug|x64.Build.0 = Debug|x64 - {3950B11C-AEB1-4E9C-BCB3-2E7133818C79}.Release|Win32.ActiveCfg = Release|Win32 - {3950B11C-AEB1-4E9C-BCB3-2E7133818C79}.Release|Win32.Build.0 = Release|Win32 - {3950B11C-AEB1-4E9C-BCB3-2E7133818C79}.Release|x64.ActiveCfg = Release|x64 - {3950B11C-AEB1-4E9C-BCB3-2E7133818C79}.Release|x64.Build.0 = Release|x64 - {13C21A83-CC75-459E-9B01-E9EC36D1524B}.Debug|Win32.ActiveCfg = Debug|Win32 - {13C21A83-CC75-459E-9B01-E9EC36D1524B}.Debug|Win32.Build.0 = Debug|Win32 - {13C21A83-CC75-459E-9B01-E9EC36D1524B}.Debug|x64.ActiveCfg = Debug|x64 - {13C21A83-CC75-459E-9B01-E9EC36D1524B}.Debug|x64.Build.0 = Debug|x64 - {13C21A83-CC75-459E-9B01-E9EC36D1524B}.Release|Win32.ActiveCfg = Release|Win32 - {13C21A83-CC75-459E-9B01-E9EC36D1524B}.Release|Win32.Build.0 = Release|Win32 - {13C21A83-CC75-459E-9B01-E9EC36D1524B}.Release|x64.ActiveCfg = Release|x64 - {13C21A83-CC75-459E-9B01-E9EC36D1524B}.Release|x64.Build.0 = Release|x64 - {932D8CD0-4E11-4C3A-9084-4D30DE75C2B7}.Debug|Win32.ActiveCfg = Debug|Win32 - {932D8CD0-4E11-4C3A-9084-4D30DE75C2B7}.Debug|Win32.Build.0 = Debug|Win32 - {932D8CD0-4E11-4C3A-9084-4D30DE75C2B7}.Debug|x64.ActiveCfg = Debug|x64 - {932D8CD0-4E11-4C3A-9084-4D30DE75C2B7}.Debug|x64.Build.0 = Debug|x64 - {932D8CD0-4E11-4C3A-9084-4D30DE75C2B7}.Release|Win32.ActiveCfg = Release|Win32 - {932D8CD0-4E11-4C3A-9084-4D30DE75C2B7}.Release|Win32.Build.0 = Release|Win32 - {932D8CD0-4E11-4C3A-9084-4D30DE75C2B7}.Release|x64.ActiveCfg = Release|x64 - {932D8CD0-4E11-4C3A-9084-4D30DE75C2B7}.Release|x64.Build.0 = Release|x64 - {1CFBC9C5-5F9C-4B60-A2A3-0A79BCDD2670}.Debug|Win32.ActiveCfg = Debug|Win32 - {1CFBC9C5-5F9C-4B60-A2A3-0A79BCDD2670}.Debug|Win32.Build.0 = Debug|Win32 - {1CFBC9C5-5F9C-4B60-A2A3-0A79BCDD2670}.Debug|x64.ActiveCfg = Debug|x64 - {1CFBC9C5-5F9C-4B60-A2A3-0A79BCDD2670}.Debug|x64.Build.0 = Debug|x64 - {1CFBC9C5-5F9C-4B60-A2A3-0A79BCDD2670}.Release|Win32.ActiveCfg = Release|Win32 - {1CFBC9C5-5F9C-4B60-A2A3-0A79BCDD2670}.Release|Win32.Build.0 = Release|Win32 - {1CFBC9C5-5F9C-4B60-A2A3-0A79BCDD2670}.Release|x64.ActiveCfg = Release|x64 - {1CFBC9C5-5F9C-4B60-A2A3-0A79BCDD2670}.Release|x64.Build.0 = Release|x64 - {C60700D1-DB4B-4EFF-8EE9-97BD716BCB89}.Debug|Win32.ActiveCfg = Debug|Win32 - {C60700D1-DB4B-4EFF-8EE9-97BD716BCB89}.Debug|Win32.Build.0 = Debug|Win32 - {C60700D1-DB4B-4EFF-8EE9-97BD716BCB89}.Debug|x64.ActiveCfg = Debug|x64 - {C60700D1-DB4B-4EFF-8EE9-97BD716BCB89}.Debug|x64.Build.0 = Debug|x64 - {C60700D1-DB4B-4EFF-8EE9-97BD716BCB89}.Release|Win32.ActiveCfg = Release|Win32 - {C60700D1-DB4B-4EFF-8EE9-97BD716BCB89}.Release|Win32.Build.0 = Release|Win32 - {C60700D1-DB4B-4EFF-8EE9-97BD716BCB89}.Release|x64.ActiveCfg = Release|x64 - {C60700D1-DB4B-4EFF-8EE9-97BD716BCB89}.Release|x64.Build.0 = Release|x64 - {F7696252-45B5-438B-B14F-0510137704F0}.Debug|Win32.ActiveCfg = Debug|Win32 - {F7696252-45B5-438B-B14F-0510137704F0}.Debug|Win32.Build.0 = Debug|Win32 - {F7696252-45B5-438B-B14F-0510137704F0}.Debug|x64.ActiveCfg = Debug|x64 - {F7696252-45B5-438B-B14F-0510137704F0}.Debug|x64.Build.0 = Debug|x64 - {F7696252-45B5-438B-B14F-0510137704F0}.Release|Win32.ActiveCfg = Release|Win32 - {F7696252-45B5-438B-B14F-0510137704F0}.Release|Win32.Build.0 = Release|Win32 - {F7696252-45B5-438B-B14F-0510137704F0}.Release|x64.ActiveCfg = Release|x64 - {F7696252-45B5-438B-B14F-0510137704F0}.Release|x64.Build.0 = Release|x64 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal diff --git a/xsd/dist/examples/cxx/tree/tree-9.0.sln b/xsd/dist/examples/cxx/tree/tree-9.0.sln deleted file mode 100644 index 6bc073e..0000000 --- a/xsd/dist/examples/cxx/tree/tree-9.0.sln +++ /dev/null @@ -1,115 +0,0 @@ -Microsoft Visual Studio Solution File, Format Version 10.00 -# Visual Studio 2008 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "hello", "hello\hello-9.0.vcproj", "{538CCAB6-984B-4602-B0D0-985E8FD4FEB9}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "library", "library\library-9.0.vcproj", "{D661AD5B-5FF4-4AFD-A656-429BA348E9EF}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mixed", "mixed\mixed-9.0.vcproj", "{6EF7868E-AA58-4615-9C1A-06B010CB4209}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "polymorphism", "polymorphism\polymorphism-9.0.vcproj", "{03224289-FD3C-4A58-A6D7-E8D658B0E45A}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "streaming", "streaming\streaming-9.0.vcproj", "{3950B11C-AEB1-4E9C-BCB3-2E7133818C79}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "wildcard", "wildcard\wildcard-9.0.vcproj", "{13C21A83-CC75-459E-9B01-E9EC36D1524B}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "caching", "caching\caching-9.0.vcproj", "{932D8CD0-4E11-4C3A-9084-4D30DE75C2B7}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "multiroot", "multiroot\multiroot-9.0.vcproj", "{1CFBC9C5-5F9C-4B60-A2A3-0A79BCDD2670}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "performance", "performance\performance-9.0.vcproj", "{C60700D1-DB4B-4EFF-8EE9-97BD716BCB89}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "messaging", "messaging\messaging-9.0.vcproj", "{F7696252-45B5-438B-B14F-0510137704F0}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Win32 = Debug|Win32 - Debug|x64 = Debug|x64 - Release|Win32 = Release|Win32 - Release|x64 = Release|x64 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {538CCAB6-984B-4602-B0D0-985E8FD4FEB9}.Debug|Win32.ActiveCfg = Debug|Win32 - {538CCAB6-984B-4602-B0D0-985E8FD4FEB9}.Debug|Win32.Build.0 = Debug|Win32 - {538CCAB6-984B-4602-B0D0-985E8FD4FEB9}.Debug|x64.ActiveCfg = Debug|x64 - {538CCAB6-984B-4602-B0D0-985E8FD4FEB9}.Debug|x64.Build.0 = Debug|x64 - {538CCAB6-984B-4602-B0D0-985E8FD4FEB9}.Release|Win32.ActiveCfg = Release|Win32 - {538CCAB6-984B-4602-B0D0-985E8FD4FEB9}.Release|Win32.Build.0 = Release|Win32 - {538CCAB6-984B-4602-B0D0-985E8FD4FEB9}.Release|x64.ActiveCfg = Release|x64 - {538CCAB6-984B-4602-B0D0-985E8FD4FEB9}.Release|x64.Build.0 = Release|x64 - {D661AD5B-5FF4-4AFD-A656-429BA348E9EF}.Debug|Win32.ActiveCfg = Debug|Win32 - {D661AD5B-5FF4-4AFD-A656-429BA348E9EF}.Debug|Win32.Build.0 = Debug|Win32 - {D661AD5B-5FF4-4AFD-A656-429BA348E9EF}.Debug|x64.ActiveCfg = Debug|x64 - {D661AD5B-5FF4-4AFD-A656-429BA348E9EF}.Debug|x64.Build.0 = Debug|x64 - {D661AD5B-5FF4-4AFD-A656-429BA348E9EF}.Release|Win32.ActiveCfg = Release|Win32 - {D661AD5B-5FF4-4AFD-A656-429BA348E9EF}.Release|Win32.Build.0 = Release|Win32 - {D661AD5B-5FF4-4AFD-A656-429BA348E9EF}.Release|x64.ActiveCfg = Release|x64 - {D661AD5B-5FF4-4AFD-A656-429BA348E9EF}.Release|x64.Build.0 = Release|x64 - {6EF7868E-AA58-4615-9C1A-06B010CB4209}.Debug|Win32.ActiveCfg = Debug|Win32 - {6EF7868E-AA58-4615-9C1A-06B010CB4209}.Debug|Win32.Build.0 = Debug|Win32 - {6EF7868E-AA58-4615-9C1A-06B010CB4209}.Debug|x64.ActiveCfg = Debug|x64 - {6EF7868E-AA58-4615-9C1A-06B010CB4209}.Debug|x64.Build.0 = Debug|x64 - {6EF7868E-AA58-4615-9C1A-06B010CB4209}.Release|Win32.ActiveCfg = Release|Win32 - {6EF7868E-AA58-4615-9C1A-06B010CB4209}.Release|Win32.Build.0 = Release|Win32 - {6EF7868E-AA58-4615-9C1A-06B010CB4209}.Release|x64.ActiveCfg = Release|x64 - {6EF7868E-AA58-4615-9C1A-06B010CB4209}.Release|x64.Build.0 = Release|x64 - {03224289-FD3C-4A58-A6D7-E8D658B0E45A}.Debug|Win32.ActiveCfg = Debug|Win32 - {03224289-FD3C-4A58-A6D7-E8D658B0E45A}.Debug|Win32.Build.0 = Debug|Win32 - {03224289-FD3C-4A58-A6D7-E8D658B0E45A}.Debug|x64.ActiveCfg = Debug|x64 - {03224289-FD3C-4A58-A6D7-E8D658B0E45A}.Debug|x64.Build.0 = Debug|x64 - {03224289-FD3C-4A58-A6D7-E8D658B0E45A}.Release|Win32.ActiveCfg = Release|Win32 - {03224289-FD3C-4A58-A6D7-E8D658B0E45A}.Release|Win32.Build.0 = Release|Win32 - {03224289-FD3C-4A58-A6D7-E8D658B0E45A}.Release|x64.ActiveCfg = Release|x64 - {03224289-FD3C-4A58-A6D7-E8D658B0E45A}.Release|x64.Build.0 = Release|x64 - {3950B11C-AEB1-4E9C-BCB3-2E7133818C79}.Debug|Win32.ActiveCfg = Debug|Win32 - {3950B11C-AEB1-4E9C-BCB3-2E7133818C79}.Debug|Win32.Build.0 = Debug|Win32 - {3950B11C-AEB1-4E9C-BCB3-2E7133818C79}.Debug|x64.ActiveCfg = Debug|x64 - {3950B11C-AEB1-4E9C-BCB3-2E7133818C79}.Debug|x64.Build.0 = Debug|x64 - {3950B11C-AEB1-4E9C-BCB3-2E7133818C79}.Release|Win32.ActiveCfg = Release|Win32 - {3950B11C-AEB1-4E9C-BCB3-2E7133818C79}.Release|Win32.Build.0 = Release|Win32 - {3950B11C-AEB1-4E9C-BCB3-2E7133818C79}.Release|x64.ActiveCfg = Release|x64 - {3950B11C-AEB1-4E9C-BCB3-2E7133818C79}.Release|x64.Build.0 = Release|x64 - {13C21A83-CC75-459E-9B01-E9EC36D1524B}.Debug|Win32.ActiveCfg = Debug|Win32 - {13C21A83-CC75-459E-9B01-E9EC36D1524B}.Debug|Win32.Build.0 = Debug|Win32 - {13C21A83-CC75-459E-9B01-E9EC36D1524B}.Debug|x64.ActiveCfg = Debug|x64 - {13C21A83-CC75-459E-9B01-E9EC36D1524B}.Debug|x64.Build.0 = Debug|x64 - {13C21A83-CC75-459E-9B01-E9EC36D1524B}.Release|Win32.ActiveCfg = Release|Win32 - {13C21A83-CC75-459E-9B01-E9EC36D1524B}.Release|Win32.Build.0 = Release|Win32 - {13C21A83-CC75-459E-9B01-E9EC36D1524B}.Release|x64.ActiveCfg = Release|x64 - {13C21A83-CC75-459E-9B01-E9EC36D1524B}.Release|x64.Build.0 = Release|x64 - {932D8CD0-4E11-4C3A-9084-4D30DE75C2B7}.Debug|Win32.ActiveCfg = Debug|Win32 - {932D8CD0-4E11-4C3A-9084-4D30DE75C2B7}.Debug|Win32.Build.0 = Debug|Win32 - {932D8CD0-4E11-4C3A-9084-4D30DE75C2B7}.Debug|x64.ActiveCfg = Debug|x64 - {932D8CD0-4E11-4C3A-9084-4D30DE75C2B7}.Debug|x64.Build.0 = Debug|x64 - {932D8CD0-4E11-4C3A-9084-4D30DE75C2B7}.Release|Win32.ActiveCfg = Release|Win32 - {932D8CD0-4E11-4C3A-9084-4D30DE75C2B7}.Release|Win32.Build.0 = Release|Win32 - {932D8CD0-4E11-4C3A-9084-4D30DE75C2B7}.Release|x64.ActiveCfg = Release|x64 - {932D8CD0-4E11-4C3A-9084-4D30DE75C2B7}.Release|x64.Build.0 = Release|x64 - {1CFBC9C5-5F9C-4B60-A2A3-0A79BCDD2670}.Debug|Win32.ActiveCfg = Debug|Win32 - {1CFBC9C5-5F9C-4B60-A2A3-0A79BCDD2670}.Debug|Win32.Build.0 = Debug|Win32 - {1CFBC9C5-5F9C-4B60-A2A3-0A79BCDD2670}.Debug|x64.ActiveCfg = Debug|x64 - {1CFBC9C5-5F9C-4B60-A2A3-0A79BCDD2670}.Debug|x64.Build.0 = Debug|x64 - {1CFBC9C5-5F9C-4B60-A2A3-0A79BCDD2670}.Release|Win32.ActiveCfg = Release|Win32 - {1CFBC9C5-5F9C-4B60-A2A3-0A79BCDD2670}.Release|Win32.Build.0 = Release|Win32 - {1CFBC9C5-5F9C-4B60-A2A3-0A79BCDD2670}.Release|x64.ActiveCfg = Release|x64 - {1CFBC9C5-5F9C-4B60-A2A3-0A79BCDD2670}.Release|x64.Build.0 = Release|x64 - {C60700D1-DB4B-4EFF-8EE9-97BD716BCB89}.Debug|Win32.ActiveCfg = Debug|Win32 - {C60700D1-DB4B-4EFF-8EE9-97BD716BCB89}.Debug|Win32.Build.0 = Debug|Win32 - {C60700D1-DB4B-4EFF-8EE9-97BD716BCB89}.Debug|x64.ActiveCfg = Debug|x64 - {C60700D1-DB4B-4EFF-8EE9-97BD716BCB89}.Debug|x64.Build.0 = Debug|x64 - {C60700D1-DB4B-4EFF-8EE9-97BD716BCB89}.Release|Win32.ActiveCfg = Release|Win32 - {C60700D1-DB4B-4EFF-8EE9-97BD716BCB89}.Release|Win32.Build.0 = Release|Win32 - {C60700D1-DB4B-4EFF-8EE9-97BD716BCB89}.Release|x64.ActiveCfg = Release|x64 - {C60700D1-DB4B-4EFF-8EE9-97BD716BCB89}.Release|x64.Build.0 = Release|x64 - {F7696252-45B5-438B-B14F-0510137704F0}.Debug|Win32.ActiveCfg = Debug|Win32 - {F7696252-45B5-438B-B14F-0510137704F0}.Debug|Win32.Build.0 = Debug|Win32 - {F7696252-45B5-438B-B14F-0510137704F0}.Debug|x64.ActiveCfg = Debug|x64 - {F7696252-45B5-438B-B14F-0510137704F0}.Debug|x64.Build.0 = Debug|x64 - {F7696252-45B5-438B-B14F-0510137704F0}.Release|Win32.ActiveCfg = Release|Win32 - {F7696252-45B5-438B-B14F-0510137704F0}.Release|Win32.Build.0 = Release|Win32 - {F7696252-45B5-438B-B14F-0510137704F0}.Release|x64.ActiveCfg = Release|x64 - {F7696252-45B5-438B-B14F-0510137704F0}.Release|x64.Build.0 = Release|x64 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal diff --git a/xsd/dist/examples/cxx/tree/tree-xerces2-7.1.sln b/xsd/dist/examples/cxx/tree/tree-xerces2-7.1.sln deleted file mode 100644 index f19b237..0000000 --- a/xsd/dist/examples/cxx/tree/tree-xerces2-7.1.sln +++ /dev/null @@ -1,93 +0,0 @@ -Microsoft Visual Studio Solution File, Format Version 8.00 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "hello", "hello\hello-xerces2-7.1.vcproj", "{538CCAB6-984B-4602-B0D0-985E8FD4FEB9}" - ProjectSection(ProjectDependencies) = postProject - EndProjectSection -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "library", "library\library-xerces2-7.1.vcproj", "{D661AD5B-5FF4-4AFD-A656-429BA348E9EF}" - ProjectSection(ProjectDependencies) = postProject - EndProjectSection -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mixed", "mixed\mixed-xerces2-7.1.vcproj", "{6EF7868E-AA58-4615-9C1A-06B010CB4209}" - ProjectSection(ProjectDependencies) = postProject - EndProjectSection -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "polymorphism", "polymorphism\polymorphism-xerces2-7.1.vcproj", "{03224289-FD3C-4A58-A6D7-E8D658B0E45A}" - ProjectSection(ProjectDependencies) = postProject - EndProjectSection -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "streaming", "streaming\streaming-xerces2-7.1.vcproj", "{3950B11C-AEB1-4E9C-BCB3-2E7133818C79}" - ProjectSection(ProjectDependencies) = postProject - EndProjectSection -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "wildcard", "wildcard\wildcard-xerces2-7.1.vcproj", "{13C21A83-CC75-459E-9B01-E9EC36D1524B}" - ProjectSection(ProjectDependencies) = postProject - EndProjectSection -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "caching", "caching\caching-xerces2-7.1.vcproj", "{932D8CD0-4E11-4C3A-9084-4D30DE75C2B7}" - ProjectSection(ProjectDependencies) = postProject - EndProjectSection -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "multiroot", "multiroot\multiroot-xerces2-7.1.vcproj", "{1CFBC9C5-5F9C-4B60-A2A3-0A79BCDD2670}" - ProjectSection(ProjectDependencies) = postProject - EndProjectSection -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "performance", "performance\performance-xerces2-7.1.vcproj", "{C60700D1-DB4B-4EFF-8EE9-97BD716BCB89}" - ProjectSection(ProjectDependencies) = postProject - EndProjectSection -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "messaging", "messaging\messaging-xerces2-7.1.vcproj", "{F7696252-45B5-438B-B14F-0510137704F0}" - ProjectSection(ProjectDependencies) = postProject - EndProjectSection -EndProject -Global - GlobalSection(SolutionConfiguration) = preSolution - Debug = Debug - Release = Release - EndGlobalSection - GlobalSection(ProjectConfiguration) = postSolution - {538CCAB6-984B-4602-B0D0-985E8FD4FEB9}.Debug.ActiveCfg = Debug|Win32 - {538CCAB6-984B-4602-B0D0-985E8FD4FEB9}.Debug.Build.0 = Debug|Win32 - {538CCAB6-984B-4602-B0D0-985E8FD4FEB9}.Release.ActiveCfg = Release|Win32 - {538CCAB6-984B-4602-B0D0-985E8FD4FEB9}.Release.Build.0 = Release|Win32 - {D661AD5B-5FF4-4AFD-A656-429BA348E9EF}.Debug.ActiveCfg = Debug|Win32 - {D661AD5B-5FF4-4AFD-A656-429BA348E9EF}.Debug.Build.0 = Debug|Win32 - {D661AD5B-5FF4-4AFD-A656-429BA348E9EF}.Release.ActiveCfg = Release|Win32 - {D661AD5B-5FF4-4AFD-A656-429BA348E9EF}.Release.Build.0 = Release|Win32 - {6EF7868E-AA58-4615-9C1A-06B010CB4209}.Debug.ActiveCfg = Debug|Win32 - {6EF7868E-AA58-4615-9C1A-06B010CB4209}.Debug.Build.0 = Debug|Win32 - {6EF7868E-AA58-4615-9C1A-06B010CB4209}.Release.ActiveCfg = Release|Win32 - {6EF7868E-AA58-4615-9C1A-06B010CB4209}.Release.Build.0 = Release|Win32 - {03224289-FD3C-4A58-A6D7-E8D658B0E45A}.Debug.ActiveCfg = Debug|Win32 - {03224289-FD3C-4A58-A6D7-E8D658B0E45A}.Debug.Build.0 = Debug|Win32 - {03224289-FD3C-4A58-A6D7-E8D658B0E45A}.Release.ActiveCfg = Release|Win32 - {03224289-FD3C-4A58-A6D7-E8D658B0E45A}.Release.Build.0 = Release|Win32 - {3950B11C-AEB1-4E9C-BCB3-2E7133818C79}.Debug.ActiveCfg = Debug|Win32 - {3950B11C-AEB1-4E9C-BCB3-2E7133818C79}.Debug.Build.0 = Debug|Win32 - {3950B11C-AEB1-4E9C-BCB3-2E7133818C79}.Release.ActiveCfg = Release|Win32 - {3950B11C-AEB1-4E9C-BCB3-2E7133818C79}.Release.Build.0 = Release|Win32 - {13C21A83-CC75-459E-9B01-E9EC36D1524B}.Debug.ActiveCfg = Debug|Win32 - {13C21A83-CC75-459E-9B01-E9EC36D1524B}.Debug.Build.0 = Debug|Win32 - {13C21A83-CC75-459E-9B01-E9EC36D1524B}.Release.ActiveCfg = Release|Win32 - {13C21A83-CC75-459E-9B01-E9EC36D1524B}.Release.Build.0 = Release|Win32 - {932D8CD0-4E11-4C3A-9084-4D30DE75C2B7}.Debug.ActiveCfg = Debug|Win32 - {932D8CD0-4E11-4C3A-9084-4D30DE75C2B7}.Debug.Build.0 = Debug|Win32 - {932D8CD0-4E11-4C3A-9084-4D30DE75C2B7}.Release.ActiveCfg = Release|Win32 - {932D8CD0-4E11-4C3A-9084-4D30DE75C2B7}.Release.Build.0 = Release|Win32 - {1CFBC9C5-5F9C-4B60-A2A3-0A79BCDD2670}.Debug.ActiveCfg = Debug|Win32 - {1CFBC9C5-5F9C-4B60-A2A3-0A79BCDD2670}.Debug.Build.0 = Debug|Win32 - {1CFBC9C5-5F9C-4B60-A2A3-0A79BCDD2670}.Release.ActiveCfg = Release|Win32 - {1CFBC9C5-5F9C-4B60-A2A3-0A79BCDD2670}.Release.Build.0 = Release|Win32 - {C60700D1-DB4B-4EFF-8EE9-97BD716BCB89}.Debug.ActiveCfg = Debug|Win32 - {C60700D1-DB4B-4EFF-8EE9-97BD716BCB89}.Debug.Build.0 = Debug|Win32 - {C60700D1-DB4B-4EFF-8EE9-97BD716BCB89}.Release.ActiveCfg = Release|Win32 - {C60700D1-DB4B-4EFF-8EE9-97BD716BCB89}.Release.Build.0 = Release|Win32 - {F7696252-45B5-438B-B14F-0510137704F0}.Debug.ActiveCfg = Debug|Win32 - {F7696252-45B5-438B-B14F-0510137704F0}.Debug.Build.0 = Debug|Win32 - {F7696252-45B5-438B-B14F-0510137704F0}.Release.ActiveCfg = Release|Win32 - {F7696252-45B5-438B-B14F-0510137704F0}.Release.Build.0 = Release|Win32 - EndGlobalSection - GlobalSection(ExtensibilityGlobals) = postSolution - EndGlobalSection - GlobalSection(ExtensibilityAddIns) = postSolution - EndGlobalSection -EndGlobal diff --git a/xsd/dist/examples/cxx/tree/tree-xerces2-8.0.sln b/xsd/dist/examples/cxx/tree/tree-xerces2-8.0.sln deleted file mode 100644 index d3fd49b..0000000 --- a/xsd/dist/examples/cxx/tree/tree-xerces2-8.0.sln +++ /dev/null @@ -1,115 +0,0 @@ -Microsoft Visual Studio Solution File, Format Version 9.00 -# Visual Studio 2005 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "hello", "hello\hello-xerces2-8.0.vcproj", "{538CCAB6-984B-4602-B0D0-985E8FD4FEB9}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "library", "library\library-xerces2-8.0.vcproj", "{D661AD5B-5FF4-4AFD-A656-429BA348E9EF}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mixed", "mixed\mixed-xerces2-8.0.vcproj", "{6EF7868E-AA58-4615-9C1A-06B010CB4209}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "polymorphism", "polymorphism\polymorphism-xerces2-8.0.vcproj", "{03224289-FD3C-4A58-A6D7-E8D658B0E45A}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "streaming", "streaming\streaming-xerces2-8.0.vcproj", "{3950B11C-AEB1-4E9C-BCB3-2E7133818C79}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "wildcard", "wildcard\wildcard-xerces2-8.0.vcproj", "{13C21A83-CC75-459E-9B01-E9EC36D1524B}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "caching", "caching\caching-xerces2-8.0.vcproj", "{932D8CD0-4E11-4C3A-9084-4D30DE75C2B7}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "multiroot", "multiroot\multiroot-xerces2-8.0.vcproj", "{1CFBC9C5-5F9C-4B60-A2A3-0A79BCDD2670}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "performance", "performance\performance-xerces2-8.0.vcproj", "{C60700D1-DB4B-4EFF-8EE9-97BD716BCB89}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "messaging", "messaging\messaging-xerces2-8.0.vcproj", "{F7696252-45B5-438B-B14F-0510137704F0}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Win32 = Debug|Win32 - Debug|x64 = Debug|x64 - Release|Win32 = Release|Win32 - Release|x64 = Release|x64 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {538CCAB6-984B-4602-B0D0-985E8FD4FEB9}.Debug|Win32.ActiveCfg = Debug|Win32 - {538CCAB6-984B-4602-B0D0-985E8FD4FEB9}.Debug|Win32.Build.0 = Debug|Win32 - {538CCAB6-984B-4602-B0D0-985E8FD4FEB9}.Debug|x64.ActiveCfg = Debug|x64 - {538CCAB6-984B-4602-B0D0-985E8FD4FEB9}.Debug|x64.Build.0 = Debug|x64 - {538CCAB6-984B-4602-B0D0-985E8FD4FEB9}.Release|Win32.ActiveCfg = Release|Win32 - {538CCAB6-984B-4602-B0D0-985E8FD4FEB9}.Release|Win32.Build.0 = Release|Win32 - {538CCAB6-984B-4602-B0D0-985E8FD4FEB9}.Release|x64.ActiveCfg = Release|x64 - {538CCAB6-984B-4602-B0D0-985E8FD4FEB9}.Release|x64.Build.0 = Release|x64 - {D661AD5B-5FF4-4AFD-A656-429BA348E9EF}.Debug|Win32.ActiveCfg = Debug|Win32 - {D661AD5B-5FF4-4AFD-A656-429BA348E9EF}.Debug|Win32.Build.0 = Debug|Win32 - {D661AD5B-5FF4-4AFD-A656-429BA348E9EF}.Debug|x64.ActiveCfg = Debug|x64 - {D661AD5B-5FF4-4AFD-A656-429BA348E9EF}.Debug|x64.Build.0 = Debug|x64 - {D661AD5B-5FF4-4AFD-A656-429BA348E9EF}.Release|Win32.ActiveCfg = Release|Win32 - {D661AD5B-5FF4-4AFD-A656-429BA348E9EF}.Release|Win32.Build.0 = Release|Win32 - {D661AD5B-5FF4-4AFD-A656-429BA348E9EF}.Release|x64.ActiveCfg = Release|x64 - {D661AD5B-5FF4-4AFD-A656-429BA348E9EF}.Release|x64.Build.0 = Release|x64 - {6EF7868E-AA58-4615-9C1A-06B010CB4209}.Debug|Win32.ActiveCfg = Debug|Win32 - {6EF7868E-AA58-4615-9C1A-06B010CB4209}.Debug|Win32.Build.0 = Debug|Win32 - {6EF7868E-AA58-4615-9C1A-06B010CB4209}.Debug|x64.ActiveCfg = Debug|x64 - {6EF7868E-AA58-4615-9C1A-06B010CB4209}.Debug|x64.Build.0 = Debug|x64 - {6EF7868E-AA58-4615-9C1A-06B010CB4209}.Release|Win32.ActiveCfg = Release|Win32 - {6EF7868E-AA58-4615-9C1A-06B010CB4209}.Release|Win32.Build.0 = Release|Win32 - {6EF7868E-AA58-4615-9C1A-06B010CB4209}.Release|x64.ActiveCfg = Release|x64 - {6EF7868E-AA58-4615-9C1A-06B010CB4209}.Release|x64.Build.0 = Release|x64 - {03224289-FD3C-4A58-A6D7-E8D658B0E45A}.Debug|Win32.ActiveCfg = Debug|Win32 - {03224289-FD3C-4A58-A6D7-E8D658B0E45A}.Debug|Win32.Build.0 = Debug|Win32 - {03224289-FD3C-4A58-A6D7-E8D658B0E45A}.Debug|x64.ActiveCfg = Debug|x64 - {03224289-FD3C-4A58-A6D7-E8D658B0E45A}.Debug|x64.Build.0 = Debug|x64 - {03224289-FD3C-4A58-A6D7-E8D658B0E45A}.Release|Win32.ActiveCfg = Release|Win32 - {03224289-FD3C-4A58-A6D7-E8D658B0E45A}.Release|Win32.Build.0 = Release|Win32 - {03224289-FD3C-4A58-A6D7-E8D658B0E45A}.Release|x64.ActiveCfg = Release|x64 - {03224289-FD3C-4A58-A6D7-E8D658B0E45A}.Release|x64.Build.0 = Release|x64 - {3950B11C-AEB1-4E9C-BCB3-2E7133818C79}.Debug|Win32.ActiveCfg = Debug|Win32 - {3950B11C-AEB1-4E9C-BCB3-2E7133818C79}.Debug|Win32.Build.0 = Debug|Win32 - {3950B11C-AEB1-4E9C-BCB3-2E7133818C79}.Debug|x64.ActiveCfg = Debug|x64 - {3950B11C-AEB1-4E9C-BCB3-2E7133818C79}.Debug|x64.Build.0 = Debug|x64 - {3950B11C-AEB1-4E9C-BCB3-2E7133818C79}.Release|Win32.ActiveCfg = Release|Win32 - {3950B11C-AEB1-4E9C-BCB3-2E7133818C79}.Release|Win32.Build.0 = Release|Win32 - {3950B11C-AEB1-4E9C-BCB3-2E7133818C79}.Release|x64.ActiveCfg = Release|x64 - {3950B11C-AEB1-4E9C-BCB3-2E7133818C79}.Release|x64.Build.0 = Release|x64 - {13C21A83-CC75-459E-9B01-E9EC36D1524B}.Debug|Win32.ActiveCfg = Debug|Win32 - {13C21A83-CC75-459E-9B01-E9EC36D1524B}.Debug|Win32.Build.0 = Debug|Win32 - {13C21A83-CC75-459E-9B01-E9EC36D1524B}.Debug|x64.ActiveCfg = Debug|x64 - {13C21A83-CC75-459E-9B01-E9EC36D1524B}.Debug|x64.Build.0 = Debug|x64 - {13C21A83-CC75-459E-9B01-E9EC36D1524B}.Release|Win32.ActiveCfg = Release|Win32 - {13C21A83-CC75-459E-9B01-E9EC36D1524B}.Release|Win32.Build.0 = Release|Win32 - {13C21A83-CC75-459E-9B01-E9EC36D1524B}.Release|x64.ActiveCfg = Release|x64 - {13C21A83-CC75-459E-9B01-E9EC36D1524B}.Release|x64.Build.0 = Release|x64 - {932D8CD0-4E11-4C3A-9084-4D30DE75C2B7}.Debug|Win32.ActiveCfg = Debug|Win32 - {932D8CD0-4E11-4C3A-9084-4D30DE75C2B7}.Debug|Win32.Build.0 = Debug|Win32 - {932D8CD0-4E11-4C3A-9084-4D30DE75C2B7}.Debug|x64.ActiveCfg = Debug|x64 - {932D8CD0-4E11-4C3A-9084-4D30DE75C2B7}.Debug|x64.Build.0 = Debug|x64 - {932D8CD0-4E11-4C3A-9084-4D30DE75C2B7}.Release|Win32.ActiveCfg = Release|Win32 - {932D8CD0-4E11-4C3A-9084-4D30DE75C2B7}.Release|Win32.Build.0 = Release|Win32 - {932D8CD0-4E11-4C3A-9084-4D30DE75C2B7}.Release|x64.ActiveCfg = Release|x64 - {932D8CD0-4E11-4C3A-9084-4D30DE75C2B7}.Release|x64.Build.0 = Release|x64 - {1CFBC9C5-5F9C-4B60-A2A3-0A79BCDD2670}.Debug|Win32.ActiveCfg = Debug|Win32 - {1CFBC9C5-5F9C-4B60-A2A3-0A79BCDD2670}.Debug|Win32.Build.0 = Debug|Win32 - {1CFBC9C5-5F9C-4B60-A2A3-0A79BCDD2670}.Debug|x64.ActiveCfg = Debug|x64 - {1CFBC9C5-5F9C-4B60-A2A3-0A79BCDD2670}.Debug|x64.Build.0 = Debug|x64 - {1CFBC9C5-5F9C-4B60-A2A3-0A79BCDD2670}.Release|Win32.ActiveCfg = Release|Win32 - {1CFBC9C5-5F9C-4B60-A2A3-0A79BCDD2670}.Release|Win32.Build.0 = Release|Win32 - {1CFBC9C5-5F9C-4B60-A2A3-0A79BCDD2670}.Release|x64.ActiveCfg = Release|x64 - {1CFBC9C5-5F9C-4B60-A2A3-0A79BCDD2670}.Release|x64.Build.0 = Release|x64 - {C60700D1-DB4B-4EFF-8EE9-97BD716BCB89}.Debug|Win32.ActiveCfg = Debug|Win32 - {C60700D1-DB4B-4EFF-8EE9-97BD716BCB89}.Debug|Win32.Build.0 = Debug|Win32 - {C60700D1-DB4B-4EFF-8EE9-97BD716BCB89}.Debug|x64.ActiveCfg = Debug|x64 - {C60700D1-DB4B-4EFF-8EE9-97BD716BCB89}.Debug|x64.Build.0 = Debug|x64 - {C60700D1-DB4B-4EFF-8EE9-97BD716BCB89}.Release|Win32.ActiveCfg = Release|Win32 - {C60700D1-DB4B-4EFF-8EE9-97BD716BCB89}.Release|Win32.Build.0 = Release|Win32 - {C60700D1-DB4B-4EFF-8EE9-97BD716BCB89}.Release|x64.ActiveCfg = Release|x64 - {C60700D1-DB4B-4EFF-8EE9-97BD716BCB89}.Release|x64.Build.0 = Release|x64 - {F7696252-45B5-438B-B14F-0510137704F0}.Debug|Win32.ActiveCfg = Debug|Win32 - {F7696252-45B5-438B-B14F-0510137704F0}.Debug|Win32.Build.0 = Debug|Win32 - {F7696252-45B5-438B-B14F-0510137704F0}.Debug|x64.ActiveCfg = Debug|x64 - {F7696252-45B5-438B-B14F-0510137704F0}.Debug|x64.Build.0 = Debug|x64 - {F7696252-45B5-438B-B14F-0510137704F0}.Release|Win32.ActiveCfg = Release|Win32 - {F7696252-45B5-438B-B14F-0510137704F0}.Release|Win32.Build.0 = Release|Win32 - {F7696252-45B5-438B-B14F-0510137704F0}.Release|x64.ActiveCfg = Release|x64 - {F7696252-45B5-438B-B14F-0510137704F0}.Release|x64.Build.0 = Release|x64 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal diff --git a/xsd/dist/examples/cxx/tree/tree-xerces2-9.0.sln b/xsd/dist/examples/cxx/tree/tree-xerces2-9.0.sln deleted file mode 100644 index ed9bace..0000000 --- a/xsd/dist/examples/cxx/tree/tree-xerces2-9.0.sln +++ /dev/null @@ -1,115 +0,0 @@ -Microsoft Visual Studio Solution File, Format Version 10.00 -# Visual Studio 2008 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "hello", "hello\hello-xerces2-9.0.vcproj", "{538CCAB6-984B-4602-B0D0-985E8FD4FEB9}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "library", "library\library-xerces2-9.0.vcproj", "{D661AD5B-5FF4-4AFD-A656-429BA348E9EF}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mixed", "mixed\mixed-xerces2-9.0.vcproj", "{6EF7868E-AA58-4615-9C1A-06B010CB4209}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "polymorphism", "polymorphism\polymorphism-xerces2-9.0.vcproj", "{03224289-FD3C-4A58-A6D7-E8D658B0E45A}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "streaming", "streaming\streaming-xerces2-9.0.vcproj", "{3950B11C-AEB1-4E9C-BCB3-2E7133818C79}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "wildcard", "wildcard\wildcard-xerces2-9.0.vcproj", "{13C21A83-CC75-459E-9B01-E9EC36D1524B}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "caching", "caching\caching-xerces2-9.0.vcproj", "{932D8CD0-4E11-4C3A-9084-4D30DE75C2B7}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "multiroot", "multiroot\multiroot-xerces2-9.0.vcproj", "{1CFBC9C5-5F9C-4B60-A2A3-0A79BCDD2670}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "performance", "performance\performance-xerces2-9.0.vcproj", "{C60700D1-DB4B-4EFF-8EE9-97BD716BCB89}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "messaging", "messaging\messaging-xerces2-9.0.vcproj", "{F7696252-45B5-438B-B14F-0510137704F0}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Win32 = Debug|Win32 - Debug|x64 = Debug|x64 - Release|Win32 = Release|Win32 - Release|x64 = Release|x64 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {538CCAB6-984B-4602-B0D0-985E8FD4FEB9}.Debug|Win32.ActiveCfg = Debug|Win32 - {538CCAB6-984B-4602-B0D0-985E8FD4FEB9}.Debug|Win32.Build.0 = Debug|Win32 - {538CCAB6-984B-4602-B0D0-985E8FD4FEB9}.Debug|x64.ActiveCfg = Debug|x64 - {538CCAB6-984B-4602-B0D0-985E8FD4FEB9}.Debug|x64.Build.0 = Debug|x64 - {538CCAB6-984B-4602-B0D0-985E8FD4FEB9}.Release|Win32.ActiveCfg = Release|Win32 - {538CCAB6-984B-4602-B0D0-985E8FD4FEB9}.Release|Win32.Build.0 = Release|Win32 - {538CCAB6-984B-4602-B0D0-985E8FD4FEB9}.Release|x64.ActiveCfg = Release|x64 - {538CCAB6-984B-4602-B0D0-985E8FD4FEB9}.Release|x64.Build.0 = Release|x64 - {D661AD5B-5FF4-4AFD-A656-429BA348E9EF}.Debug|Win32.ActiveCfg = Debug|Win32 - {D661AD5B-5FF4-4AFD-A656-429BA348E9EF}.Debug|Win32.Build.0 = Debug|Win32 - {D661AD5B-5FF4-4AFD-A656-429BA348E9EF}.Debug|x64.ActiveCfg = Debug|x64 - {D661AD5B-5FF4-4AFD-A656-429BA348E9EF}.Debug|x64.Build.0 = Debug|x64 - {D661AD5B-5FF4-4AFD-A656-429BA348E9EF}.Release|Win32.ActiveCfg = Release|Win32 - {D661AD5B-5FF4-4AFD-A656-429BA348E9EF}.Release|Win32.Build.0 = Release|Win32 - {D661AD5B-5FF4-4AFD-A656-429BA348E9EF}.Release|x64.ActiveCfg = Release|x64 - {D661AD5B-5FF4-4AFD-A656-429BA348E9EF}.Release|x64.Build.0 = Release|x64 - {6EF7868E-AA58-4615-9C1A-06B010CB4209}.Debug|Win32.ActiveCfg = Debug|Win32 - {6EF7868E-AA58-4615-9C1A-06B010CB4209}.Debug|Win32.Build.0 = Debug|Win32 - {6EF7868E-AA58-4615-9C1A-06B010CB4209}.Debug|x64.ActiveCfg = Debug|x64 - {6EF7868E-AA58-4615-9C1A-06B010CB4209}.Debug|x64.Build.0 = Debug|x64 - {6EF7868E-AA58-4615-9C1A-06B010CB4209}.Release|Win32.ActiveCfg = Release|Win32 - {6EF7868E-AA58-4615-9C1A-06B010CB4209}.Release|Win32.Build.0 = Release|Win32 - {6EF7868E-AA58-4615-9C1A-06B010CB4209}.Release|x64.ActiveCfg = Release|x64 - {6EF7868E-AA58-4615-9C1A-06B010CB4209}.Release|x64.Build.0 = Release|x64 - {03224289-FD3C-4A58-A6D7-E8D658B0E45A}.Debug|Win32.ActiveCfg = Debug|Win32 - {03224289-FD3C-4A58-A6D7-E8D658B0E45A}.Debug|Win32.Build.0 = Debug|Win32 - {03224289-FD3C-4A58-A6D7-E8D658B0E45A}.Debug|x64.ActiveCfg = Debug|x64 - {03224289-FD3C-4A58-A6D7-E8D658B0E45A}.Debug|x64.Build.0 = Debug|x64 - {03224289-FD3C-4A58-A6D7-E8D658B0E45A}.Release|Win32.ActiveCfg = Release|Win32 - {03224289-FD3C-4A58-A6D7-E8D658B0E45A}.Release|Win32.Build.0 = Release|Win32 - {03224289-FD3C-4A58-A6D7-E8D658B0E45A}.Release|x64.ActiveCfg = Release|x64 - {03224289-FD3C-4A58-A6D7-E8D658B0E45A}.Release|x64.Build.0 = Release|x64 - {3950B11C-AEB1-4E9C-BCB3-2E7133818C79}.Debug|Win32.ActiveCfg = Debug|Win32 - {3950B11C-AEB1-4E9C-BCB3-2E7133818C79}.Debug|Win32.Build.0 = Debug|Win32 - {3950B11C-AEB1-4E9C-BCB3-2E7133818C79}.Debug|x64.ActiveCfg = Debug|x64 - {3950B11C-AEB1-4E9C-BCB3-2E7133818C79}.Debug|x64.Build.0 = Debug|x64 - {3950B11C-AEB1-4E9C-BCB3-2E7133818C79}.Release|Win32.ActiveCfg = Release|Win32 - {3950B11C-AEB1-4E9C-BCB3-2E7133818C79}.Release|Win32.Build.0 = Release|Win32 - {3950B11C-AEB1-4E9C-BCB3-2E7133818C79}.Release|x64.ActiveCfg = Release|x64 - {3950B11C-AEB1-4E9C-BCB3-2E7133818C79}.Release|x64.Build.0 = Release|x64 - {13C21A83-CC75-459E-9B01-E9EC36D1524B}.Debug|Win32.ActiveCfg = Debug|Win32 - {13C21A83-CC75-459E-9B01-E9EC36D1524B}.Debug|Win32.Build.0 = Debug|Win32 - {13C21A83-CC75-459E-9B01-E9EC36D1524B}.Debug|x64.ActiveCfg = Debug|x64 - {13C21A83-CC75-459E-9B01-E9EC36D1524B}.Debug|x64.Build.0 = Debug|x64 - {13C21A83-CC75-459E-9B01-E9EC36D1524B}.Release|Win32.ActiveCfg = Release|Win32 - {13C21A83-CC75-459E-9B01-E9EC36D1524B}.Release|Win32.Build.0 = Release|Win32 - {13C21A83-CC75-459E-9B01-E9EC36D1524B}.Release|x64.ActiveCfg = Release|x64 - {13C21A83-CC75-459E-9B01-E9EC36D1524B}.Release|x64.Build.0 = Release|x64 - {932D8CD0-4E11-4C3A-9084-4D30DE75C2B7}.Debug|Win32.ActiveCfg = Debug|Win32 - {932D8CD0-4E11-4C3A-9084-4D30DE75C2B7}.Debug|Win32.Build.0 = Debug|Win32 - {932D8CD0-4E11-4C3A-9084-4D30DE75C2B7}.Debug|x64.ActiveCfg = Debug|x64 - {932D8CD0-4E11-4C3A-9084-4D30DE75C2B7}.Debug|x64.Build.0 = Debug|x64 - {932D8CD0-4E11-4C3A-9084-4D30DE75C2B7}.Release|Win32.ActiveCfg = Release|Win32 - {932D8CD0-4E11-4C3A-9084-4D30DE75C2B7}.Release|Win32.Build.0 = Release|Win32 - {932D8CD0-4E11-4C3A-9084-4D30DE75C2B7}.Release|x64.ActiveCfg = Release|x64 - {932D8CD0-4E11-4C3A-9084-4D30DE75C2B7}.Release|x64.Build.0 = Release|x64 - {1CFBC9C5-5F9C-4B60-A2A3-0A79BCDD2670}.Debug|Win32.ActiveCfg = Debug|Win32 - {1CFBC9C5-5F9C-4B60-A2A3-0A79BCDD2670}.Debug|Win32.Build.0 = Debug|Win32 - {1CFBC9C5-5F9C-4B60-A2A3-0A79BCDD2670}.Debug|x64.ActiveCfg = Debug|x64 - {1CFBC9C5-5F9C-4B60-A2A3-0A79BCDD2670}.Debug|x64.Build.0 = Debug|x64 - {1CFBC9C5-5F9C-4B60-A2A3-0A79BCDD2670}.Release|Win32.ActiveCfg = Release|Win32 - {1CFBC9C5-5F9C-4B60-A2A3-0A79BCDD2670}.Release|Win32.Build.0 = Release|Win32 - {1CFBC9C5-5F9C-4B60-A2A3-0A79BCDD2670}.Release|x64.ActiveCfg = Release|x64 - {1CFBC9C5-5F9C-4B60-A2A3-0A79BCDD2670}.Release|x64.Build.0 = Release|x64 - {C60700D1-DB4B-4EFF-8EE9-97BD716BCB89}.Debug|Win32.ActiveCfg = Debug|Win32 - {C60700D1-DB4B-4EFF-8EE9-97BD716BCB89}.Debug|Win32.Build.0 = Debug|Win32 - {C60700D1-DB4B-4EFF-8EE9-97BD716BCB89}.Debug|x64.ActiveCfg = Debug|x64 - {C60700D1-DB4B-4EFF-8EE9-97BD716BCB89}.Debug|x64.Build.0 = Debug|x64 - {C60700D1-DB4B-4EFF-8EE9-97BD716BCB89}.Release|Win32.ActiveCfg = Release|Win32 - {C60700D1-DB4B-4EFF-8EE9-97BD716BCB89}.Release|Win32.Build.0 = Release|Win32 - {C60700D1-DB4B-4EFF-8EE9-97BD716BCB89}.Release|x64.ActiveCfg = Release|x64 - {C60700D1-DB4B-4EFF-8EE9-97BD716BCB89}.Release|x64.Build.0 = Release|x64 - {F7696252-45B5-438B-B14F-0510137704F0}.Debug|Win32.ActiveCfg = Debug|Win32 - {F7696252-45B5-438B-B14F-0510137704F0}.Debug|Win32.Build.0 = Debug|Win32 - {F7696252-45B5-438B-B14F-0510137704F0}.Debug|x64.ActiveCfg = Debug|x64 - {F7696252-45B5-438B-B14F-0510137704F0}.Debug|x64.Build.0 = Debug|x64 - {F7696252-45B5-438B-B14F-0510137704F0}.Release|Win32.ActiveCfg = Release|Win32 - {F7696252-45B5-438B-B14F-0510137704F0}.Release|Win32.Build.0 = Release|Win32 - {F7696252-45B5-438B-B14F-0510137704F0}.Release|x64.ActiveCfg = Release|x64 - {F7696252-45B5-438B-B14F-0510137704F0}.Release|x64.Build.0 = Release|x64 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal diff --git a/xsd/dist/examples/cxx/tree/wildcard/wildcard-10.0.vcxproj b/xsd/dist/examples/cxx/tree/wildcard/wildcard-10.0.vcxproj deleted file mode 100644 index a2e7d28..0000000 --- a/xsd/dist/examples/cxx/tree/wildcard/wildcard-10.0.vcxproj +++ /dev/null @@ -1,210 +0,0 @@ - - - - - Debug - Win32 - - - Debug - x64 - - - Release - Win32 - - - Release - x64 - - - - wildcard - {13C21A83-CC75-459E-9B01-E9EC36D1524B} - wildcard - Win32Proj - - - - Application - MultiByte - - - Application - MultiByte - - - Application - MultiByte - - - Application - MultiByte - - - - - - - - - - - - - - - - - - - driver - driver - driver - driver - Debug\ - Debug\ - true - $(Platform)\$(Configuration)\ - $(Platform)\$(Configuration)\ - true - Release\ - Release\ - false - $(Platform)\$(Configuration)\ - $(Platform)\$(Configuration)\ - false - - - - Disabled - WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebug - true - - - Level3 - EditAndContinue - - - xerces-c_3D.lib;%(AdditionalDependencies) - $(TargetPath) - true - $(OutDir)driver.pdb - Console - false - - - MachineX86 - - - - - X64 - - - Disabled - WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebug - true - - - Level3 - ProgramDatabase - - - xerces-c_3D.lib;%(AdditionalDependencies) - $(TargetPath) - true - $(OutDir)driver.pdb - Console - false - - - MachineX64 - - - - - WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - MultiThreaded - true - - - Level3 - ProgramDatabase - - - xerces-c_3.lib;%(AdditionalDependencies) - $(TargetPath) - true - Console - true - true - false - - - MachineX86 - - - - - X64 - - - WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - MultiThreaded - true - - - Level3 - ProgramDatabase - - - xerces-c_3.lib;%(AdditionalDependencies) - $(TargetPath) - true - Console - true - true - false - - - MachineX64 - - - - - - - - - - - - - - - - xsd email.xsd - xsd cxx-tree --generate-inline --generate-serialization --generate-wildcard --root-element message email.xsd - email.hxx;email.ixx;email.cxx;%(Outputs) - xsd email.xsd - xsd cxx-tree --generate-inline --generate-serialization --generate-wildcard --root-element message email.xsd - email.hxx;email.ixx;email.cxx;%(Outputs) - xsd email.xsd - xsd cxx-tree --generate-inline --generate-serialization --generate-wildcard --root-element message email.xsd - email.hxx;email.ixx;email.cxx;%(Outputs) - xsd email.xsd - xsd cxx-tree --generate-inline --generate-serialization --generate-wildcard --root-element message email.xsd - email.hxx;email.ixx;email.cxx;%(Outputs) - - - - - - \ No newline at end of file diff --git a/xsd/dist/examples/cxx/tree/wildcard/wildcard-10.0.vcxproj.filters b/xsd/dist/examples/cxx/tree/wildcard/wildcard-10.0.vcxproj.filters deleted file mode 100644 index 541b946..0000000 --- a/xsd/dist/examples/cxx/tree/wildcard/wildcard-10.0.vcxproj.filters +++ /dev/null @@ -1,45 +0,0 @@ - - - - - {C8C63C87-F9B5-4EDF-B4BF-2701982EFCE6} - cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx - - - {E8933542-EAF8-45F5-94AE-AE8D55E47565} - h;hpp;hxx;hm;inl;inc;xsd - - - {79291748-08c5-4298-a090-a210ea0e7161} - ixx - - - {e83a7a6b-3537-4eea-bf81-494a6fcee412} - xsd - - - - - Source Files - - - Source Files - - - - - Header Files - - - - - Inline Files - - - - - - Schema Files - - - \ No newline at end of file diff --git a/xsd/dist/examples/cxx/tree/wildcard/wildcard-7.1.vcproj b/xsd/dist/examples/cxx/tree/wildcard/wildcard-7.1.vcproj deleted file mode 100644 index 431b94e..0000000 --- a/xsd/dist/examples/cxx/tree/wildcard/wildcard-7.1.vcproj +++ /dev/null @@ -1,171 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/xsd/dist/examples/cxx/tree/wildcard/wildcard-8.0.vcproj b/xsd/dist/examples/cxx/tree/wildcard/wildcard-8.0.vcproj deleted file mode 100644 index 4f61b88..0000000 --- a/xsd/dist/examples/cxx/tree/wildcard/wildcard-8.0.vcproj +++ /dev/null @@ -1,432 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/xsd/dist/examples/cxx/tree/wildcard/wildcard-9.0.vcproj b/xsd/dist/examples/cxx/tree/wildcard/wildcard-9.0.vcproj deleted file mode 100644 index 0cbc382..0000000 --- a/xsd/dist/examples/cxx/tree/wildcard/wildcard-9.0.vcproj +++ /dev/null @@ -1,429 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/xsd/dist/examples/cxx/tree/wildcard/wildcard-vc10.vcxproj b/xsd/dist/examples/cxx/tree/wildcard/wildcard-vc10.vcxproj new file mode 100644 index 0000000..6d5b02e --- /dev/null +++ b/xsd/dist/examples/cxx/tree/wildcard/wildcard-vc10.vcxproj @@ -0,0 +1,206 @@ + + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + wildcard + {13C21A83-CC75-459E-9B01-E9EC36D1524B} + wildcard + Win32Proj + + + + Application + MultiByte + + + Application + MultiByte + + + Application + MultiByte + + + Application + MultiByte + + + + + + + + + + + + + + + + + + + driver + driver + driver + driver + Debug\ + Debug\ + true + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + true + Release\ + Release\ + false + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + false + + + + Disabled + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebugDLL + true + + + Level3 + + + xerces-c_3D.lib;%(AdditionalDependencies) + $(TargetPath) + true + $(OutDir)driver.pdb + Console + false + + + MachineX86 + + + + + X64 + + + Disabled + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebugDLL + true + + + Level3 + + + xerces-c_3D.lib;%(AdditionalDependencies) + $(TargetPath) + true + $(OutDir)driver.pdb + Console + false + + + MachineX64 + + + + + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreadedDLL + true + + + Level3 + + + xerces-c_3.lib;%(AdditionalDependencies) + $(TargetPath) + true + Console + true + true + false + + + MachineX86 + + + + + X64 + + + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreadedDLL + true + + + Level3 + + + xerces-c_3.lib;%(AdditionalDependencies) + $(TargetPath) + true + Console + true + true + false + + + MachineX64 + + + + + + + + + + + + + + + + xsd email.xsd + xsd cxx-tree --generate-inline --generate-serialization --generate-wildcard --root-element message email.xsd + email.hxx;email.ixx;email.cxx;%(Outputs) + xsd email.xsd + xsd cxx-tree --generate-inline --generate-serialization --generate-wildcard --root-element message email.xsd + email.hxx;email.ixx;email.cxx;%(Outputs) + xsd email.xsd + xsd cxx-tree --generate-inline --generate-serialization --generate-wildcard --root-element message email.xsd + email.hxx;email.ixx;email.cxx;%(Outputs) + xsd email.xsd + xsd cxx-tree --generate-inline --generate-serialization --generate-wildcard --root-element message email.xsd + email.hxx;email.ixx;email.cxx;%(Outputs) + + + + + + \ No newline at end of file diff --git a/xsd/dist/examples/cxx/tree/wildcard/wildcard-vc10.vcxproj.filters b/xsd/dist/examples/cxx/tree/wildcard/wildcard-vc10.vcxproj.filters new file mode 100644 index 0000000..541b946 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/wildcard/wildcard-vc10.vcxproj.filters @@ -0,0 +1,45 @@ + + + + + {C8C63C87-F9B5-4EDF-B4BF-2701982EFCE6} + cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {E8933542-EAF8-45F5-94AE-AE8D55E47565} + h;hpp;hxx;hm;inl;inc;xsd + + + {79291748-08c5-4298-a090-a210ea0e7161} + ixx + + + {e83a7a6b-3537-4eea-bf81-494a6fcee412} + xsd + + + + + Source Files + + + Source Files + + + + + Header Files + + + + + Inline Files + + + + + + Schema Files + + + \ No newline at end of file diff --git a/xsd/dist/examples/cxx/tree/wildcard/wildcard-vc11.vcxproj b/xsd/dist/examples/cxx/tree/wildcard/wildcard-vc11.vcxproj new file mode 100644 index 0000000..8043842 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/wildcard/wildcard-vc11.vcxproj @@ -0,0 +1,210 @@ + + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + wildcard + {13C21A83-CC75-459E-9B01-E9EC36D1524B} + wildcard + Win32Proj + + + + Application + v110 + MultiByte + + + Application + v110 + MultiByte + + + Application + v110 + MultiByte + + + Application + v110 + MultiByte + + + + + + + + + + + + + + + + + + + driver + driver + driver + driver + Debug\ + Debug\ + true + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + true + Release\ + Release\ + false + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + false + + + + Disabled + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebugDLL + true + + + Level3 + + + xerces-c_3D.lib;%(AdditionalDependencies) + $(TargetPath) + true + $(OutDir)driver.pdb + Console + false + + + MachineX86 + + + + + X64 + + + Disabled + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebugDLL + true + + + Level3 + + + xerces-c_3D.lib;%(AdditionalDependencies) + $(TargetPath) + true + $(OutDir)driver.pdb + Console + false + + + MachineX64 + + + + + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreadedDLL + true + + + Level3 + + + xerces-c_3.lib;%(AdditionalDependencies) + $(TargetPath) + true + Console + true + true + false + + + MachineX86 + + + + + X64 + + + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreadedDLL + true + + + Level3 + + + xerces-c_3.lib;%(AdditionalDependencies) + $(TargetPath) + true + Console + true + true + false + + + MachineX64 + + + + + + + + + + + + + + + + xsd email.xsd + xsd cxx-tree --generate-inline --generate-serialization --generate-wildcard --root-element message email.xsd + email.hxx;email.ixx;email.cxx;%(Outputs) + xsd email.xsd + xsd cxx-tree --generate-inline --generate-serialization --generate-wildcard --root-element message email.xsd + email.hxx;email.ixx;email.cxx;%(Outputs) + xsd email.xsd + xsd cxx-tree --generate-inline --generate-serialization --generate-wildcard --root-element message email.xsd + email.hxx;email.ixx;email.cxx;%(Outputs) + xsd email.xsd + xsd cxx-tree --generate-inline --generate-serialization --generate-wildcard --root-element message email.xsd + email.hxx;email.ixx;email.cxx;%(Outputs) + + + + + + \ No newline at end of file diff --git a/xsd/dist/examples/cxx/tree/wildcard/wildcard-vc11.vcxproj.filters b/xsd/dist/examples/cxx/tree/wildcard/wildcard-vc11.vcxproj.filters new file mode 100644 index 0000000..541b946 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/wildcard/wildcard-vc11.vcxproj.filters @@ -0,0 +1,45 @@ + + + + + {C8C63C87-F9B5-4EDF-B4BF-2701982EFCE6} + cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {E8933542-EAF8-45F5-94AE-AE8D55E47565} + h;hpp;hxx;hm;inl;inc;xsd + + + {79291748-08c5-4298-a090-a210ea0e7161} + ixx + + + {e83a7a6b-3537-4eea-bf81-494a6fcee412} + xsd + + + + + Source Files + + + Source Files + + + + + Header Files + + + + + Inline Files + + + + + + Schema Files + + + \ No newline at end of file diff --git a/xsd/dist/examples/cxx/tree/wildcard/wildcard-vc12.vcxproj b/xsd/dist/examples/cxx/tree/wildcard/wildcard-vc12.vcxproj new file mode 100644 index 0000000..e324659 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/wildcard/wildcard-vc12.vcxproj @@ -0,0 +1,214 @@ + + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + wildcard + {13C21A83-CC75-459E-9B01-E9EC36D1524B} + wildcard + Win32Proj + + + + Application + v120 + MultiByte + + + Application + v120 + MultiByte + + + Application + v120 + MultiByte + + + Application + v120 + MultiByte + + + + + + + + + + + + + + + + + + + driver + driver + driver + driver + Debug\ + Debug\ + true + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + true + Release\ + Release\ + false + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + false + + + + Disabled + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebugDLL + true + + + Level3 + true + + + xerces-c_3D.lib;%(AdditionalDependencies) + $(TargetPath) + true + $(OutDir)driver.pdb + Console + false + + + MachineX86 + + + + + X64 + + + Disabled + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebugDLL + true + + + Level3 + true + + + xerces-c_3D.lib;%(AdditionalDependencies) + $(TargetPath) + true + $(OutDir)driver.pdb + Console + false + + + MachineX64 + + + + + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreadedDLL + true + + + Level3 + true + + + xerces-c_3.lib;%(AdditionalDependencies) + $(TargetPath) + true + Console + true + true + false + + + MachineX86 + + + + + X64 + + + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreadedDLL + true + + + Level3 + true + + + xerces-c_3.lib;%(AdditionalDependencies) + $(TargetPath) + true + Console + true + true + false + + + MachineX64 + + + + + + + + + + + + + + + + xsd email.xsd + xsd cxx-tree --generate-inline --generate-serialization --generate-wildcard --root-element message email.xsd + email.hxx;email.ixx;email.cxx;%(Outputs) + xsd email.xsd + xsd cxx-tree --generate-inline --generate-serialization --generate-wildcard --root-element message email.xsd + email.hxx;email.ixx;email.cxx;%(Outputs) + xsd email.xsd + xsd cxx-tree --generate-inline --generate-serialization --generate-wildcard --root-element message email.xsd + email.hxx;email.ixx;email.cxx;%(Outputs) + xsd email.xsd + xsd cxx-tree --generate-inline --generate-serialization --generate-wildcard --root-element message email.xsd + email.hxx;email.ixx;email.cxx;%(Outputs) + + + + + + \ No newline at end of file diff --git a/xsd/dist/examples/cxx/tree/wildcard/wildcard-vc12.vcxproj.filters b/xsd/dist/examples/cxx/tree/wildcard/wildcard-vc12.vcxproj.filters new file mode 100644 index 0000000..541b946 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/wildcard/wildcard-vc12.vcxproj.filters @@ -0,0 +1,45 @@ + + + + + {C8C63C87-F9B5-4EDF-B4BF-2701982EFCE6} + cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {E8933542-EAF8-45F5-94AE-AE8D55E47565} + h;hpp;hxx;hm;inl;inc;xsd + + + {79291748-08c5-4298-a090-a210ea0e7161} + ixx + + + {e83a7a6b-3537-4eea-bf81-494a6fcee412} + xsd + + + + + Source Files + + + Source Files + + + + + Header Files + + + + + Inline Files + + + + + + Schema Files + + + \ No newline at end of file diff --git a/xsd/dist/examples/cxx/tree/wildcard/wildcard-vc8.vcproj b/xsd/dist/examples/cxx/tree/wildcard/wildcard-vc8.vcproj new file mode 100644 index 0000000..046230a --- /dev/null +++ b/xsd/dist/examples/cxx/tree/wildcard/wildcard-vc8.vcproj @@ -0,0 +1,432 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/xsd/dist/examples/cxx/tree/wildcard/wildcard-vc9.vcproj b/xsd/dist/examples/cxx/tree/wildcard/wildcard-vc9.vcproj new file mode 100644 index 0000000..08c2b1d --- /dev/null +++ b/xsd/dist/examples/cxx/tree/wildcard/wildcard-vc9.vcproj @@ -0,0 +1,429 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/xsd/dist/examples/cxx/tree/wildcard/wildcard-xerces2-7.1.vcproj b/xsd/dist/examples/cxx/tree/wildcard/wildcard-xerces2-7.1.vcproj deleted file mode 100644 index f26ea1b..0000000 --- a/xsd/dist/examples/cxx/tree/wildcard/wildcard-xerces2-7.1.vcproj +++ /dev/null @@ -1,171 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/xsd/dist/examples/cxx/tree/wildcard/wildcard-xerces2-8.0.vcproj b/xsd/dist/examples/cxx/tree/wildcard/wildcard-xerces2-8.0.vcproj deleted file mode 100644 index d6f5487..0000000 --- a/xsd/dist/examples/cxx/tree/wildcard/wildcard-xerces2-8.0.vcproj +++ /dev/null @@ -1,432 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/xsd/dist/examples/cxx/tree/wildcard/wildcard-xerces2-9.0.vcproj b/xsd/dist/examples/cxx/tree/wildcard/wildcard-xerces2-9.0.vcproj deleted file mode 100644 index 312731a..0000000 --- a/xsd/dist/examples/cxx/tree/wildcard/wildcard-xerces2-9.0.vcproj +++ /dev/null @@ -1,429 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/xsd/dist/examples/cxx/tree/xpath/xpath-10.0.sln b/xsd/dist/examples/cxx/tree/xpath/xpath-10.0.sln deleted file mode 100644 index 0776baf..0000000 --- a/xsd/dist/examples/cxx/tree/xpath/xpath-10.0.sln +++ /dev/null @@ -1,25 +0,0 @@ -Microsoft Visual Studio Solution File, Format Version 11.00 -# Visual Studio 2010 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "xpath", "xpath-10.0.vcxproj", "{EC26ACF9-0103-48D2-B7BA-0222C2175B28}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Win32 = Debug|Win32 - Debug|x64 = Debug|x64 - Release|Win32 = Release|Win32 - Release|x64 = Release|x64 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {EC26ACF9-0103-48D2-B7BA-0222C2175B28}.Debug|Win32.ActiveCfg = Debug|Win32 - {EC26ACF9-0103-48D2-B7BA-0222C2175B28}.Debug|Win32.Build.0 = Debug|Win32 - {EC26ACF9-0103-48D2-B7BA-0222C2175B28}.Debug|x64.ActiveCfg = Debug|x64 - {EC26ACF9-0103-48D2-B7BA-0222C2175B28}.Debug|x64.Build.0 = Debug|x64 - {EC26ACF9-0103-48D2-B7BA-0222C2175B28}.Release|Win32.ActiveCfg = Release|Win32 - {EC26ACF9-0103-48D2-B7BA-0222C2175B28}.Release|Win32.Build.0 = Release|Win32 - {EC26ACF9-0103-48D2-B7BA-0222C2175B28}.Release|x64.ActiveCfg = Release|x64 - {EC26ACF9-0103-48D2-B7BA-0222C2175B28}.Release|x64.Build.0 = Release|x64 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal diff --git a/xsd/dist/examples/cxx/tree/xpath/xpath-10.0.vcxproj b/xsd/dist/examples/cxx/tree/xpath/xpath-10.0.vcxproj deleted file mode 100644 index f776b11..0000000 --- a/xsd/dist/examples/cxx/tree/xpath/xpath-10.0.vcxproj +++ /dev/null @@ -1,211 +0,0 @@ - - - - - Debug - Win32 - - - Debug - x64 - - - Release - Win32 - - - Release - x64 - - - - xpath - {EC26ACF9-0103-48D2-B7BA-0222C2175B28} - xpath - Win32Proj - - - - Application - MultiByte - - - Application - MultiByte - - - Application - MultiByte - - - Application - MultiByte - - - - - - - - - - - - - - - - - - - driver - driver - driver - driver - Debug\ - Debug\ - true - $(Platform)\$(Configuration)\ - $(Platform)\$(Configuration)\ - true - Release\ - Release\ - false - $(Platform)\$(Configuration)\ - $(Platform)\$(Configuration)\ - false - - - - Disabled - WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebug - true - - - Level3 - EditAndContinue - - - xerces-c_3D.lib;xqilla22d.lib;%(AdditionalDependencies) - $(TargetPath) - true - $(OutDir)driver.pdb - Console - false - - - MachineX86 - - - - - X64 - - - Disabled - WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebug - true - - - Level3 - ProgramDatabase - - - xerces-c_3D.lib;xqilla22d.lib;%(AdditionalDependencies) - $(TargetPath) - true - $(OutDir)driver.pdb - Console - false - - - MachineX64 - - - - - WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - MultiThreaded - true - - - Level3 - ProgramDatabase - - - xerces-c_3.lib;xqilla22.lib;%(AdditionalDependencies) - $(TargetPath) - true - Console - true - true - false - - - MachineX86 - - - - - X64 - - - WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - MultiThreaded - true - - - Level3 - ProgramDatabase - - - xerces-c_3.lib;xqilla22.lib;%(AdditionalDependencies) - $(TargetPath) - true - Console - true - true - false - - - MachineX64 - - - - - - - - - - - - - - xsd people.xsd - xsd cxx-tree people.xsd - people.hxx;people.cxx;%(Outputs) - xsd people.xsd - xsd cxx-tree people.xsd - people.hxx;people.cxx;%(Outputs) - xsd people.xsd - xsd cxx-tree people.xsd - people.hxx;people.cxx;%(Outputs) - xsd people.xsd - xsd cxx-tree people.xsd - people.hxx;people.cxx;%(Outputs) - - - - - - - - - \ No newline at end of file diff --git a/xsd/dist/examples/cxx/tree/xpath/xpath-10.0.vcxproj.filters b/xsd/dist/examples/cxx/tree/xpath/xpath-10.0.vcxproj.filters deleted file mode 100644 index d038587..0000000 --- a/xsd/dist/examples/cxx/tree/xpath/xpath-10.0.vcxproj.filters +++ /dev/null @@ -1,44 +0,0 @@ - - - - - {0A690AC0-4B5A-4FCA-B2CC-A61C00F01283} - cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx - - - {19387534-A72F-4C3F-A9FB-F5B8909AEB29} - h;hpp;hxx;hm;inl;inc;xsd - - - {807745b4-2087-4ccb-8fdc-8160206a3042} - xsd - - - - - Source Files - - - Source Files - - - Source Files - - - - - Header Files - - - Header Files - - - - - - - - Schema Files - - - \ No newline at end of file diff --git a/xsd/dist/examples/cxx/tree/xpath/xpath-7.1.sln b/xsd/dist/examples/cxx/tree/xpath/xpath-7.1.sln deleted file mode 100644 index 905aaf9..0000000 --- a/xsd/dist/examples/cxx/tree/xpath/xpath-7.1.sln +++ /dev/null @@ -1,21 +0,0 @@ -Microsoft Visual Studio Solution File, Format Version 8.00 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "xpath", "xpath-7.1.vcproj", "{EC26ACF9-0103-48D2-B7BA-0222C2175B28}" - ProjectSection(ProjectDependencies) = postProject - EndProjectSection -EndProject -Global - GlobalSection(SolutionConfiguration) = preSolution - Debug = Debug - Release = Release - EndGlobalSection - GlobalSection(ProjectConfiguration) = postSolution - {EC26ACF9-0103-48D2-B7BA-0222C2175B28}.Debug.ActiveCfg = Debug|Win32 - {EC26ACF9-0103-48D2-B7BA-0222C2175B28}.Debug.Build.0 = Debug|Win32 - {EC26ACF9-0103-48D2-B7BA-0222C2175B28}.Release.ActiveCfg = Release|Win32 - {EC26ACF9-0103-48D2-B7BA-0222C2175B28}.Release.Build.0 = Release|Win32 - EndGlobalSection - GlobalSection(ExtensibilityGlobals) = postSolution - EndGlobalSection - GlobalSection(ExtensibilityAddIns) = postSolution - EndGlobalSection -EndGlobal diff --git a/xsd/dist/examples/cxx/tree/xpath/xpath-7.1.vcproj b/xsd/dist/examples/cxx/tree/xpath/xpath-7.1.vcproj deleted file mode 100644 index bd070b6..0000000 --- a/xsd/dist/examples/cxx/tree/xpath/xpath-7.1.vcproj +++ /dev/null @@ -1,170 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/xsd/dist/examples/cxx/tree/xpath/xpath-8.0.sln b/xsd/dist/examples/cxx/tree/xpath/xpath-8.0.sln deleted file mode 100644 index db1eeea..0000000 --- a/xsd/dist/examples/cxx/tree/xpath/xpath-8.0.sln +++ /dev/null @@ -1,25 +0,0 @@ -Microsoft Visual Studio Solution File, Format Version 9.00 -# Visual Studio 2005 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "xpath", "xpath-8.0.vcproj", "{EC26ACF9-0103-48D2-B7BA-0222C2175B28}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Win32 = Debug|Win32 - Debug|x64 = Debug|x64 - Release|Win32 = Release|Win32 - Release|x64 = Release|x64 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {EC26ACF9-0103-48D2-B7BA-0222C2175B28}.Debug|Win32.ActiveCfg = Debug|Win32 - {EC26ACF9-0103-48D2-B7BA-0222C2175B28}.Debug|Win32.Build.0 = Debug|Win32 - {EC26ACF9-0103-48D2-B7BA-0222C2175B28}.Debug|x64.ActiveCfg = Debug|x64 - {EC26ACF9-0103-48D2-B7BA-0222C2175B28}.Debug|x64.Build.0 = Debug|x64 - {EC26ACF9-0103-48D2-B7BA-0222C2175B28}.Release|Win32.ActiveCfg = Release|Win32 - {EC26ACF9-0103-48D2-B7BA-0222C2175B28}.Release|Win32.Build.0 = Release|Win32 - {EC26ACF9-0103-48D2-B7BA-0222C2175B28}.Release|x64.ActiveCfg = Release|x64 - {EC26ACF9-0103-48D2-B7BA-0222C2175B28}.Release|x64.Build.0 = Release|x64 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal diff --git a/xsd/dist/examples/cxx/tree/xpath/xpath-8.0.vcproj b/xsd/dist/examples/cxx/tree/xpath/xpath-8.0.vcproj deleted file mode 100644 index 29377fb..0000000 --- a/xsd/dist/examples/cxx/tree/xpath/xpath-8.0.vcproj +++ /dev/null @@ -1,431 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/xsd/dist/examples/cxx/tree/xpath/xpath-9.0.sln b/xsd/dist/examples/cxx/tree/xpath/xpath-9.0.sln deleted file mode 100644 index c568474..0000000 --- a/xsd/dist/examples/cxx/tree/xpath/xpath-9.0.sln +++ /dev/null @@ -1,25 +0,0 @@ -Microsoft Visual Studio Solution File, Format Version 10.00 -# Visual Studio 2008 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "xpath", "xpath-9.0.vcproj", "{EC26ACF9-0103-48D2-B7BA-0222C2175B28}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Win32 = Debug|Win32 - Debug|x64 = Debug|x64 - Release|Win32 = Release|Win32 - Release|x64 = Release|x64 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {EC26ACF9-0103-48D2-B7BA-0222C2175B28}.Debug|Win32.ActiveCfg = Debug|Win32 - {EC26ACF9-0103-48D2-B7BA-0222C2175B28}.Debug|Win32.Build.0 = Debug|Win32 - {EC26ACF9-0103-48D2-B7BA-0222C2175B28}.Debug|x64.ActiveCfg = Debug|x64 - {EC26ACF9-0103-48D2-B7BA-0222C2175B28}.Debug|x64.Build.0 = Debug|x64 - {EC26ACF9-0103-48D2-B7BA-0222C2175B28}.Release|Win32.ActiveCfg = Release|Win32 - {EC26ACF9-0103-48D2-B7BA-0222C2175B28}.Release|Win32.Build.0 = Release|Win32 - {EC26ACF9-0103-48D2-B7BA-0222C2175B28}.Release|x64.ActiveCfg = Release|x64 - {EC26ACF9-0103-48D2-B7BA-0222C2175B28}.Release|x64.Build.0 = Release|x64 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal diff --git a/xsd/dist/examples/cxx/tree/xpath/xpath-9.0.vcproj b/xsd/dist/examples/cxx/tree/xpath/xpath-9.0.vcproj deleted file mode 100644 index 89d3d0f..0000000 --- a/xsd/dist/examples/cxx/tree/xpath/xpath-9.0.vcproj +++ /dev/null @@ -1,428 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/xsd/dist/examples/cxx/tree/xpath/xpath-vc10.vcxproj b/xsd/dist/examples/cxx/tree/xpath/xpath-vc10.vcxproj new file mode 100644 index 0000000..60ef726 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/xpath/xpath-vc10.vcxproj @@ -0,0 +1,207 @@ + + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + xpath + {EC26ACF9-0103-48D2-B7BA-0222C2175B28} + xpath + Win32Proj + + + + Application + MultiByte + + + Application + MultiByte + + + Application + MultiByte + + + Application + MultiByte + + + + + + + + + + + + + + + + + + + driver + driver + driver + driver + Debug\ + Debug\ + true + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + true + Release\ + Release\ + false + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + false + + + + Disabled + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebugDLL + true + + + Level3 + + + xerces-c_3D.lib;xqilla22d.lib;%(AdditionalDependencies) + $(TargetPath) + true + $(OutDir)driver.pdb + Console + false + + + MachineX86 + + + + + X64 + + + Disabled + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebugDLL + true + + + Level3 + + + xerces-c_3D.lib;xqilla22d.lib;%(AdditionalDependencies) + $(TargetPath) + true + $(OutDir)driver.pdb + Console + false + + + MachineX64 + + + + + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreadedDLL + true + + + Level3 + + + xerces-c_3.lib;xqilla22.lib;%(AdditionalDependencies) + $(TargetPath) + true + Console + true + true + false + + + MachineX86 + + + + + X64 + + + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreadedDLL + true + + + Level3 + + + xerces-c_3.lib;xqilla22.lib;%(AdditionalDependencies) + $(TargetPath) + true + Console + true + true + false + + + MachineX64 + + + + + + + + + + + + + + xsd people.xsd + xsd cxx-tree people.xsd + people.hxx;people.cxx;%(Outputs) + xsd people.xsd + xsd cxx-tree people.xsd + people.hxx;people.cxx;%(Outputs) + xsd people.xsd + xsd cxx-tree people.xsd + people.hxx;people.cxx;%(Outputs) + xsd people.xsd + xsd cxx-tree people.xsd + people.hxx;people.cxx;%(Outputs) + + + + + + + + + \ No newline at end of file diff --git a/xsd/dist/examples/cxx/tree/xpath/xpath-vc10.vcxproj.filters b/xsd/dist/examples/cxx/tree/xpath/xpath-vc10.vcxproj.filters new file mode 100644 index 0000000..d038587 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/xpath/xpath-vc10.vcxproj.filters @@ -0,0 +1,44 @@ + + + + + {0A690AC0-4B5A-4FCA-B2CC-A61C00F01283} + cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {19387534-A72F-4C3F-A9FB-F5B8909AEB29} + h;hpp;hxx;hm;inl;inc;xsd + + + {807745b4-2087-4ccb-8fdc-8160206a3042} + xsd + + + + + Source Files + + + Source Files + + + Source Files + + + + + Header Files + + + Header Files + + + + + + + + Schema Files + + + \ No newline at end of file diff --git a/xsd/dist/examples/cxx/tree/xpath/xpath-vc11.vcxproj b/xsd/dist/examples/cxx/tree/xpath/xpath-vc11.vcxproj new file mode 100644 index 0000000..b758594 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/xpath/xpath-vc11.vcxproj @@ -0,0 +1,211 @@ + + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + xpath + {EC26ACF9-0103-48D2-B7BA-0222C2175B28} + xpath + Win32Proj + + + + Application + v110 + MultiByte + + + Application + v110 + MultiByte + + + Application + v110 + MultiByte + + + Application + v110 + MultiByte + + + + + + + + + + + + + + + + + + + driver + driver + driver + driver + Debug\ + Debug\ + true + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + true + Release\ + Release\ + false + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + false + + + + Disabled + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebugDLL + true + + + Level3 + + + xerces-c_3D.lib;xqilla22d.lib;%(AdditionalDependencies) + $(TargetPath) + true + $(OutDir)driver.pdb + Console + false + + + MachineX86 + + + + + X64 + + + Disabled + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebugDLL + true + + + Level3 + + + xerces-c_3D.lib;xqilla22d.lib;%(AdditionalDependencies) + $(TargetPath) + true + $(OutDir)driver.pdb + Console + false + + + MachineX64 + + + + + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreadedDLL + true + + + Level3 + + + xerces-c_3.lib;xqilla22.lib;%(AdditionalDependencies) + $(TargetPath) + true + Console + true + true + false + + + MachineX86 + + + + + X64 + + + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreadedDLL + true + + + Level3 + + + xerces-c_3.lib;xqilla22.lib;%(AdditionalDependencies) + $(TargetPath) + true + Console + true + true + false + + + MachineX64 + + + + + + + + + + + + + + xsd people.xsd + xsd cxx-tree people.xsd + people.hxx;people.cxx;%(Outputs) + xsd people.xsd + xsd cxx-tree people.xsd + people.hxx;people.cxx;%(Outputs) + xsd people.xsd + xsd cxx-tree people.xsd + people.hxx;people.cxx;%(Outputs) + xsd people.xsd + xsd cxx-tree people.xsd + people.hxx;people.cxx;%(Outputs) + + + + + + + + + \ No newline at end of file diff --git a/xsd/dist/examples/cxx/tree/xpath/xpath-vc11.vcxproj.filters b/xsd/dist/examples/cxx/tree/xpath/xpath-vc11.vcxproj.filters new file mode 100644 index 0000000..d038587 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/xpath/xpath-vc11.vcxproj.filters @@ -0,0 +1,44 @@ + + + + + {0A690AC0-4B5A-4FCA-B2CC-A61C00F01283} + cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {19387534-A72F-4C3F-A9FB-F5B8909AEB29} + h;hpp;hxx;hm;inl;inc;xsd + + + {807745b4-2087-4ccb-8fdc-8160206a3042} + xsd + + + + + Source Files + + + Source Files + + + Source Files + + + + + Header Files + + + Header Files + + + + + + + + Schema Files + + + \ No newline at end of file diff --git a/xsd/dist/examples/cxx/tree/xpath/xpath-vc12.vcxproj b/xsd/dist/examples/cxx/tree/xpath/xpath-vc12.vcxproj new file mode 100644 index 0000000..ff81b9e --- /dev/null +++ b/xsd/dist/examples/cxx/tree/xpath/xpath-vc12.vcxproj @@ -0,0 +1,215 @@ + + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + xpath + {EC26ACF9-0103-48D2-B7BA-0222C2175B28} + xpath + Win32Proj + + + + Application + v120 + MultiByte + + + Application + v120 + MultiByte + + + Application + v120 + MultiByte + + + Application + v120 + MultiByte + + + + + + + + + + + + + + + + + + + driver + driver + driver + driver + Debug\ + Debug\ + true + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + true + Release\ + Release\ + false + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + false + + + + Disabled + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebugDLL + true + + + Level3 + true + + + xerces-c_3D.lib;xqilla22d.lib;%(AdditionalDependencies) + $(TargetPath) + true + $(OutDir)driver.pdb + Console + false + + + MachineX86 + + + + + X64 + + + Disabled + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebugDLL + true + + + Level3 + true + + + xerces-c_3D.lib;xqilla22d.lib;%(AdditionalDependencies) + $(TargetPath) + true + $(OutDir)driver.pdb + Console + false + + + MachineX64 + + + + + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreadedDLL + true + + + Level3 + true + + + xerces-c_3.lib;xqilla22.lib;%(AdditionalDependencies) + $(TargetPath) + true + Console + true + true + false + + + MachineX86 + + + + + X64 + + + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreadedDLL + true + + + Level3 + true + + + xerces-c_3.lib;xqilla22.lib;%(AdditionalDependencies) + $(TargetPath) + true + Console + true + true + false + + + MachineX64 + + + + + + + + + + + + + + xsd people.xsd + xsd cxx-tree people.xsd + people.hxx;people.cxx;%(Outputs) + xsd people.xsd + xsd cxx-tree people.xsd + people.hxx;people.cxx;%(Outputs) + xsd people.xsd + xsd cxx-tree people.xsd + people.hxx;people.cxx;%(Outputs) + xsd people.xsd + xsd cxx-tree people.xsd + people.hxx;people.cxx;%(Outputs) + + + + + + + + + \ No newline at end of file diff --git a/xsd/dist/examples/cxx/tree/xpath/xpath-vc12.vcxproj.filters b/xsd/dist/examples/cxx/tree/xpath/xpath-vc12.vcxproj.filters new file mode 100644 index 0000000..d038587 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/xpath/xpath-vc12.vcxproj.filters @@ -0,0 +1,44 @@ + + + + + {0A690AC0-4B5A-4FCA-B2CC-A61C00F01283} + cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {19387534-A72F-4C3F-A9FB-F5B8909AEB29} + h;hpp;hxx;hm;inl;inc;xsd + + + {807745b4-2087-4ccb-8fdc-8160206a3042} + xsd + + + + + Source Files + + + Source Files + + + Source Files + + + + + Header Files + + + Header Files + + + + + + + + Schema Files + + + \ No newline at end of file diff --git a/xsd/dist/examples/cxx/tree/xpath/xpath-vc8.vcproj b/xsd/dist/examples/cxx/tree/xpath/xpath-vc8.vcproj new file mode 100644 index 0000000..3900265 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/xpath/xpath-vc8.vcproj @@ -0,0 +1,431 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/xsd/dist/examples/cxx/tree/xpath/xpath-vc9.vcproj b/xsd/dist/examples/cxx/tree/xpath/xpath-vc9.vcproj new file mode 100644 index 0000000..b21a65e --- /dev/null +++ b/xsd/dist/examples/cxx/tree/xpath/xpath-vc9.vcproj @@ -0,0 +1,428 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/xsd/dist/examples/cxx/tree/xpath/xpath-xerces2-7.1.sln b/xsd/dist/examples/cxx/tree/xpath/xpath-xerces2-7.1.sln deleted file mode 100644 index 7b6985c..0000000 --- a/xsd/dist/examples/cxx/tree/xpath/xpath-xerces2-7.1.sln +++ /dev/null @@ -1,21 +0,0 @@ -Microsoft Visual Studio Solution File, Format Version 8.00 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "xpath", "xpath-xerces2-7.1.vcproj", "{EC26ACF9-0103-48D2-B7BA-0222C2175B28}" - ProjectSection(ProjectDependencies) = postProject - EndProjectSection -EndProject -Global - GlobalSection(SolutionConfiguration) = preSolution - Debug = Debug - Release = Release - EndGlobalSection - GlobalSection(ProjectConfiguration) = postSolution - {EC26ACF9-0103-48D2-B7BA-0222C2175B28}.Debug.ActiveCfg = Debug|Win32 - {EC26ACF9-0103-48D2-B7BA-0222C2175B28}.Debug.Build.0 = Debug|Win32 - {EC26ACF9-0103-48D2-B7BA-0222C2175B28}.Release.ActiveCfg = Release|Win32 - {EC26ACF9-0103-48D2-B7BA-0222C2175B28}.Release.Build.0 = Release|Win32 - EndGlobalSection - GlobalSection(ExtensibilityGlobals) = postSolution - EndGlobalSection - GlobalSection(ExtensibilityAddIns) = postSolution - EndGlobalSection -EndGlobal diff --git a/xsd/dist/examples/cxx/tree/xpath/xpath-xerces2-7.1.vcproj b/xsd/dist/examples/cxx/tree/xpath/xpath-xerces2-7.1.vcproj deleted file mode 100644 index 9aebc49..0000000 --- a/xsd/dist/examples/cxx/tree/xpath/xpath-xerces2-7.1.vcproj +++ /dev/null @@ -1,170 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/xsd/dist/examples/cxx/tree/xpath/xpath-xerces2-8.0.sln b/xsd/dist/examples/cxx/tree/xpath/xpath-xerces2-8.0.sln deleted file mode 100644 index f759a95..0000000 --- a/xsd/dist/examples/cxx/tree/xpath/xpath-xerces2-8.0.sln +++ /dev/null @@ -1,25 +0,0 @@ -Microsoft Visual Studio Solution File, Format Version 9.00 -# Visual Studio 2005 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "xpath", "xpath-xerces2-8.0.vcproj", "{EC26ACF9-0103-48D2-B7BA-0222C2175B28}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Win32 = Debug|Win32 - Debug|x64 = Debug|x64 - Release|Win32 = Release|Win32 - Release|x64 = Release|x64 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {EC26ACF9-0103-48D2-B7BA-0222C2175B28}.Debug|Win32.ActiveCfg = Debug|Win32 - {EC26ACF9-0103-48D2-B7BA-0222C2175B28}.Debug|Win32.Build.0 = Debug|Win32 - {EC26ACF9-0103-48D2-B7BA-0222C2175B28}.Debug|x64.ActiveCfg = Debug|x64 - {EC26ACF9-0103-48D2-B7BA-0222C2175B28}.Debug|x64.Build.0 = Debug|x64 - {EC26ACF9-0103-48D2-B7BA-0222C2175B28}.Release|Win32.ActiveCfg = Release|Win32 - {EC26ACF9-0103-48D2-B7BA-0222C2175B28}.Release|Win32.Build.0 = Release|Win32 - {EC26ACF9-0103-48D2-B7BA-0222C2175B28}.Release|x64.ActiveCfg = Release|x64 - {EC26ACF9-0103-48D2-B7BA-0222C2175B28}.Release|x64.Build.0 = Release|x64 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal diff --git a/xsd/dist/examples/cxx/tree/xpath/xpath-xerces2-8.0.vcproj b/xsd/dist/examples/cxx/tree/xpath/xpath-xerces2-8.0.vcproj deleted file mode 100644 index d79f2aa..0000000 --- a/xsd/dist/examples/cxx/tree/xpath/xpath-xerces2-8.0.vcproj +++ /dev/null @@ -1,431 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/xsd/dist/examples/cxx/tree/xpath/xpath-xerces2-9.0.sln b/xsd/dist/examples/cxx/tree/xpath/xpath-xerces2-9.0.sln deleted file mode 100644 index 97e2209..0000000 --- a/xsd/dist/examples/cxx/tree/xpath/xpath-xerces2-9.0.sln +++ /dev/null @@ -1,25 +0,0 @@ -Microsoft Visual Studio Solution File, Format Version 10.00 -# Visual Studio 2008 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "xpath", "xpath-xerces2-9.0.vcproj", "{EC26ACF9-0103-48D2-B7BA-0222C2175B28}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Win32 = Debug|Win32 - Debug|x64 = Debug|x64 - Release|Win32 = Release|Win32 - Release|x64 = Release|x64 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {EC26ACF9-0103-48D2-B7BA-0222C2175B28}.Debug|Win32.ActiveCfg = Debug|Win32 - {EC26ACF9-0103-48D2-B7BA-0222C2175B28}.Debug|Win32.Build.0 = Debug|Win32 - {EC26ACF9-0103-48D2-B7BA-0222C2175B28}.Debug|x64.ActiveCfg = Debug|x64 - {EC26ACF9-0103-48D2-B7BA-0222C2175B28}.Debug|x64.Build.0 = Debug|x64 - {EC26ACF9-0103-48D2-B7BA-0222C2175B28}.Release|Win32.ActiveCfg = Release|Win32 - {EC26ACF9-0103-48D2-B7BA-0222C2175B28}.Release|Win32.Build.0 = Release|Win32 - {EC26ACF9-0103-48D2-B7BA-0222C2175B28}.Release|x64.ActiveCfg = Release|x64 - {EC26ACF9-0103-48D2-B7BA-0222C2175B28}.Release|x64.Build.0 = Release|x64 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal diff --git a/xsd/dist/examples/cxx/tree/xpath/xpath-xerces2-9.0.vcproj b/xsd/dist/examples/cxx/tree/xpath/xpath-xerces2-9.0.vcproj deleted file mode 100644 index 8f3938e..0000000 --- a/xsd/dist/examples/cxx/tree/xpath/xpath-xerces2-9.0.vcproj +++ /dev/null @@ -1,428 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/xsd/dist/examples/test.bat b/xsd/dist/examples/test.bat new file mode 100644 index 0000000..97b0b88 --- /dev/null +++ b/xsd/dist/examples/test.bat @@ -0,0 +1,74 @@ +@echo off +rem file : examples/test.bat +rem copyright : Copyright (c) 2013-2014 Code Synthesis Tools CC +rem license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +setlocal + +set "tests=__path__(dirs)" +set "confs=__path__(configurations)" +set "plats=__path__(platforms)" +set "curdir=%CD%" +set "topdir=%curdir%\..\.." +set "failed=" + +goto start + +rem +rem %1 - test directory +rem %2 - configuration +rem %3 - platform +rem +:run_test + cd %1 + + if "_%3_" == "_Win32_" ( + set "dir=%2" + ) else ( + set "dir=%3\%2" + ) + + if exist %dir%\driver.exe ( + echo %1\%3\%2 + call %topdir%\tester.bat %2 %3 + if errorlevel 1 ( + set "failed=%failed% %1\%3\%2" + ) + ) + + cd %curdir% +goto :eof + +:start + +for %%t in (%tests%) do ( + for %%c in (%confs%) do ( + for %%p in (%plats%) do ( + call :run_test %%t %%c %%p + ) + ) +) + +if not "_%failed%_" == "__" goto error + +echo. +echo ALL EXAMPLES PASSED +echo. +goto end + +:usage +echo. +echo usage: test.bat +echo. + +:error +if not "_%failed%_" == "__" ( + echo. + for %%t in (%failed%) do echo FAILED: %%t + echo. +) +endlocal +exit /b 1 + +:end +endlocal diff --git a/xsd/dist/examples/tester.bat b/xsd/dist/examples/tester.bat new file mode 100644 index 0000000..ae6f683 --- /dev/null +++ b/xsd/dist/examples/tester.bat @@ -0,0 +1,47 @@ +@echo off +rem file : examples/tester.bat +rem copyright : Copyright (c) 2013-2014 Code Synthesis Tools CC +rem license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +rem +rem Run example. The example directory is the current directory. +rem +rem %1 configuration, for example, Debug or Release +rem %2 platform, for example Win32 or x64 +rem + +setlocal + +if "_%DIFF%_" == "__" set DIFF=fc + +if "_%2_" == "_Win32_" ( + set "dir=%1" +) else ( + set "dir=%2\%1" +) + +rem Globbing returns files in alphabetic order. We also need to cover +rem compressed XML files (.xml.gz). +rem +if exist *.xml* ( + for %%f in (*.xml*) do ( + if NOT "%%f" == "out.xml" ( + if NOT "%%f" == "out.xml.gz" ( + %dir%\driver.exe %%f + if errorlevel 1 goto error + ) + ) + ) +) else ( + %dir%\driver.exe + if errorlevel 1 goto error +) + +goto end + +:error +endlocal +exit /b 1 + +:end +endlocal diff --git a/xsd/dist/template-vc10.sln b/xsd/dist/template-vc10.sln new file mode 100644 index 0000000..9a5dc32 --- /dev/null +++ b/xsd/dist/template-vc10.sln @@ -0,0 +1,15 @@ + +Microsoft Visual Studio Solution File, Format Version 11.00 +# Visual Studio 2010 +__projects__ +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution +__solution_configurations__ + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution +__project_configurations__ + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/xsd/dist/template-vc11.sln b/xsd/dist/template-vc11.sln new file mode 100644 index 0000000..436eeea --- /dev/null +++ b/xsd/dist/template-vc11.sln @@ -0,0 +1,15 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 2012 +__projects__ +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution +__solution_configurations__ + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution +__project_configurations__ + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/xsd/dist/template-vc12.sln b/xsd/dist/template-vc12.sln new file mode 100644 index 0000000..446d701 --- /dev/null +++ b/xsd/dist/template-vc12.sln @@ -0,0 +1,17 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 2013 +VisualStudioVersion = 12.0.21005.1 +MinimumVisualStudioVersion = 10.0.40219.1 +__projects__ +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution +__solution_configurations__ + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution +__project_configurations__ + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/xsd/dist/template-vc8.sln b/xsd/dist/template-vc8.sln new file mode 100644 index 0000000..f38bad2 --- /dev/null +++ b/xsd/dist/template-vc8.sln @@ -0,0 +1,15 @@ + +Microsoft Visual Studio Solution File, Format Version 9.00 +# Visual Studio 2005 +__projects__ +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution +__solution_configurations__ + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution +__project_configurations__ + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/xsd/dist/template-vc9.sln b/xsd/dist/template-vc9.sln new file mode 100644 index 0000000..2ec9432 --- /dev/null +++ b/xsd/dist/template-vc9.sln @@ -0,0 +1,15 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +__projects__ +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution +__solution_configurations__ + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution +__project_configurations__ + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/xsd/doc/custom-literals.xsd b/xsd/doc/custom-literals.xsd new file mode 100644 index 0000000..c6f7613 --- /dev/null +++ b/xsd/doc/custom-literals.xsd @@ -0,0 +1,48 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/xsd/doc/cxx/makefile b/xsd/doc/cxx/makefile new file mode 100644 index 0000000..0369b66 --- /dev/null +++ b/xsd/doc/cxx/makefile @@ -0,0 +1,21 @@ +# file : doc/cxx/makefile +# copyright : Copyright (c) 2006-2014 Code Synthesis Tools CC +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +include $(dir $(lastword $(MAKEFILE_LIST)))../../build/bootstrap.make + +docs := parser tree + +default := $(out_base)/ +install := $(out_base)/.install +dist := $(out_base)/.dist +dist-win := $(out_base)/.dist-win +clean := $(out_base)/.clean + +$(default): $(addprefix $(out_base)/,$(addsuffix /,$(docs))) +$(install): $(addprefix $(out_base)/,$(addsuffix /.install,$(docs))) +$(dist): $(addprefix $(out_base)/,$(addsuffix /.dist,$(docs))) +$(dist-win): $(addprefix $(out_base)/,$(addsuffix /.dist-win,$(docs))) +$(clean): $(addprefix $(out_base)/,$(addsuffix /.clean,$(docs))) + +$(foreach m,$(docs),$(call import,$(src_base)/$m/makefile)) diff --git a/xsd/doc/cxx/parser/guide/cxx-parser-guide.pdf b/xsd/doc/cxx/parser/guide/cxx-parser-guide.pdf new file mode 100644 index 0000000..f031009 Binary files /dev/null and b/xsd/doc/cxx/parser/guide/cxx-parser-guide.pdf differ diff --git a/xsd/doc/cxx/parser/guide/cxx-parser-guide.ps b/xsd/doc/cxx/parser/guide/cxx-parser-guide.ps new file mode 100644 index 0000000..c3f171c --- /dev/null +++ b/xsd/doc/cxx/parser/guide/cxx-parser-guide.ps @@ -0,0 +1,20731 @@ +%!PS +%%Title: C++/Parser Mapping Getting Started Guide +%%Creator: html2ps version 1.0 beta7 +%%EndComments +save +2000 dict begin +/d {bind def} bind def +/D {def} d +/t true D +/f false D +/FL [/Times-Roman +/Times-Italic +/Times-Bold +/Times-BoldItalic +/Courier +/Courier-Oblique +/Courier-Bold +/Courier-BoldOblique +/Helvetica +/Helvetica-Oblique +/Helvetica-Bold +/Helvetica-BoldOblique] D +/WF t D +/WI 0 D +/F 1 D +/IW 471 F div D +/IL 621 F div D +/PS 791 D +/EF [0 1 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 2 2] D +/EZ [12 10 19 17 15 13 12 11 12 12 12 12 12 12 12 12 12 12 12 12 12 12 8 8] D +/Ey [0 0 2 2 2 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0] D +/EG [-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1] D +/Tm [1 1 0.8 0.8 0.8 0.8 0.8 0.8 0 0 0 0 0 0 0.5 1 1 1 1 0 0 1.3 0 0] D +/Bm [1 1 0.5 0.5 0.5 0.5 0.5 0.5 0 0 0 0 0 0 0.5 1 1 1 1 0 0 1 0 0] D +/Lm [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 2 2 0 0 2 0 0 0] D +/Rm [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0] D +/EU [-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 0 0] D +/NO f D +/YY [[{()}{ h }][{ h }{()}][{()}{()}]] D +/ZZ [[{ (July 2014) }{ Pn }][{ Pn }{ (July 2014) }][{ Ti }{ Ti }]] D +/Ts EZ 0 get D +/TU f D +/Xp t D +/AU f D +/SN 0 D +/Cf t D +/Tp t D +/Fe f D +/TI 2 Ts mul D +/Fm 14 D +/xL 71 D +/xR 71 D +/yL 706 D +/yR 706 D +/Wl 471 F div D +/Wr 471 F div D +/hL 621 F div D +/hR 621 F div D +/FE {newpath Fm neg Fm M CP BB IW Fm add Fm L IW Fm add IL Fm add neg L CP BB + Fm neg IL Fm add neg L closepath} D +/LA {PM 0 eq{/IW Wl D /IL hL D}{/IW Wr D /IL hR D}ie /W IW D /LL W D /LS W D + TU PM 0 eq and{IW 56 F div add SA{Sf div}if 0 translate} + {PM 0 eq{xL yL}{xR yR}ie translate F SA{Sf mul}if dup scale + CS CF FS Cf{CA CL get VC}if /Bb f D}ie 0 0 M + TF not Tc or {Cf{gsave SA{1 Sf div dup scale}if Cb VC FE fill grestore}if}if}D +/Pi 0 Ts mul D +/SG [0.8 1 1] D +/Ab 15 D +/J 0 D +/Tc t D +/NH 6 D +/Nf f D +/Pa f D +/LH 1.2 D +/XR f D +/Xr {/pN E D ( [p ) WB pN WB (] )WB} D +/Db [16#FF 16#FF 16#FF] D +/Dt [16#00 16#00 16#00] D +/eA f D +/Fi f D +/bT f D +/Lc t D +/Dl [16#00 16#00 16#00] D +/LX f D +/Br 0.25 D +/IA ([IMAGE]) D +/DS {/PF f D()WB NL NP()pop RC ZF} D +/Gb f D +/Mb t D +/Hc [16#00 16#00 16#00] D +/Bl 3 D +/MI -15.6 D +/DX (DRAFT) D +/Di 0 D +/Tt 113.385826771654 D +/Th { ( +) 2 Al()BR ( + ) 0 1 -1 H()4 FZ (C++/Parser Mapping) ES()EH ( + ) 0 1 -1 H()4 FZ (Getting Started Guide) ES()EH ( + ) 0 1 -1 H ( ) EH ( + ) 0 1 -1 H ( ) EH ( + ) 0 1 -1 H ( ) EH ( + ) 0 1 -1 H ( ) EH ( + ) 0 1 -1 H ( ) EH ( + ) 0 1 -1 H ( ) EH ( +) Ea()BR ( + ) 0 P (Copyright © 2005-2014 CODE SYNTHESIS TOOLS CC) EP ( + + ) 0 P (Permission is granted to copy, distribute and/or modify this + document under the terms of the + ) R0 2 A (GNU Free + Documentation License, version 1.2) EA (; with no Invariant Sections, + no Front-Cover Texts and no Back-Cover Texts. + ) EP ( + + ) 0 P (This document is available in the following formats: + ) R1 2 A (XHTML) EA (, + ) R2 2 A (PDF) EA (, and + ) R3 2 A (PostScript) EA (.) EP()} D +/tH {()0 1 -1 H (Table of Contents) EH()} D +/FD 2 D +/Dy 2 D +/cD [16#F0 16#F0 16#F0] D +/FW 0.6 D +/FU [16#00 16#00 16#00] D +/ET {/RM f D /A0 3 D /PN SN D /OU t D /Ou t D /W IW D /LL W D D1 + Ms not TP and{Ip}if /TF f D} D + +%-- End of variable part -- +/MySymbol 10 dict dup begin + /FontType 3 D /FontMatrix [.001 0 0 .001 0 0 ] D /FontBBox [25 -10 600 600] D + /Encoding 256 array D 0 1 255{Encoding exch /.notdef put}for + Encoding (e) 0 get /euro put + /Metrics 2 dict D Metrics begin + /.notdef 0 D + /euro 651 D + end + /BBox 2 dict D BBox begin + /.notdef [0 0 0 0] D + /euro [25 -10 600 600] D + end + /CharacterDefs 2 dict D CharacterDefs begin + /.notdef {} D + /euro{newpath 114 600 moveto 631 600 lineto 464 200 lineto 573 200 lineto + 573 0 lineto -94 0 lineto 31 300 lineto -10 300 lineto closepath clip + 50 setlinewidth newpath 656 300 moveto 381 300 275 0 360 arc stroke + -19 350 moveto 600 0 rlineto -19 250 moveto 600 0 rlineto stroke}d + end + /BuildChar{0 begin + /char E D /fontdict E D /charname fontdict /Encoding get char get D + fontdict begin + Metrics charname get 0 BBox charname get aload pop setcachedevice + CharacterDefs charname get exec + end + end}D + /BuildChar load 0 3 dict put /UniqueID 1 D +end +definefont pop + +/Cd {aload length 2 idiv dup dict begin {D} repeat currentdict end} D +/EX {EC cvx exec} D +/DU {} d +/BB {pop pop}d +/ie {ifelse} d +/E {exch} d +/M {moveto} d +/R {rmoveto} d +/L {lineto} d +/RL {rlineto} d +/CP {currentpoint} d +/SW {stringwidth} d +/GI {getinterval} d +/PI {putinterval} d +/Sg {setgray} d +/LW {setlinewidth} d +/S {dup () ne OU and{0 Co R AT 3 eq LB and HF not and A1 0 ne A2 0 ne or and + {A2 0 32 A1 0 6 -1 roll awidthshow}{show}ie 0 Co neg R}{pop}ie + OU PH 3 eq or{/Ms t D}if} D +/U {OU{gsave CP currentfont /FontInfo get /UnderlinePosition get + 0 E currentfont /FontMatrix get dtransform E pop add newpath M dup SW pop + CJ 0 RL stroke grestore}if} D +/B {OU Br 0 gt and{CP Ts neg Ts .33 mul R gsave 0 Sg + CP newpath Ts Br mul 0 360 arc closepath UI 2 mod 0 eq{stroke}{fill}ie + grestore M CP E Ts Br 1 add mul sub E BB /Ms t D}if}D +/NP {Ms TP not or PA and OU and{TP{OR}if f1{mF k2 /mF E D /YC 0 D}if + TP TU not PM 0 eq or and{showpage}if DU Ip TE not{LA}if 0.6 LW + /CI 0 D /TP t D /Hs f D /hl 6 D /Hv 6 D /HI hi D /Ms f D}if Bs XO BO M} D +/Np {LE sub CP E pop gt PL 0 eq and{NP}if}D +/Ip {/PN PN 1 add D /Pn RM{1}{4}ie PN Ns D /PM PN SN sub 2 mod D} D +/GP {E dup 3 -1 roll get PN 1 add 2 mod get dup type /integertype eq + {get 0 get}{E pop}ie}d +/Fc {dup 2 GP exec SW pop /S1 E D dup 1 GP exec SW pop /S2 E D 0 GP exec SW + pop /S3 E D S1 0 gt{S2 2 mul S1 add S3 2 mul S1 add 2 copy lt{E}if pop}{0}ie + S2 S3 add 2 copy lt{E}if pop IW .9 mul div dup 1 gt{1 E div}{pop 1}ie}D +/OR {Df{Sd}if tp not{gsave SA{1 Sf div dup scale}if Fe{Cf{FU VC}if FW LW + 1 setlinejoin FE stroke}if /YO {60 F div dup 40 gt{pop 40}if}D /cs CS D + /cf CF D /CF 0 D /pf PF D /PF f D /Fn FN D /At AT D /AT 0 D /FN EF Hf 1 add + get D Fz Fs FS ZZ Fc Fz mul Fs FS EU Hf 1 add get dup type /arraytype eq + Cf and{VC}{pop 0 Sg}ie IW IL neg YO sub M ZZ 1 GP exec dup SW pop neg 0 R Sh + 0 IL neg YO sub M ZZ 0 GP exec Sh ZZ 2 GP exec dup SW pop IW E sub 2 div + IL neg YO sub M Sh Fz Fs FS NO{/AW IW Pn SW pop sub D AW 2 div IL neg YO sub + S1 0 gt S2 AW .45 mul gt or S3 AW .45 mul gt or{Fz 2 mul sub}if M Pn Sh}if + EU Hf get dup type /arraytype eq Cf and{VC}{pop 0 Sg}ie YY Fc /FN EF Hf get D + Hz mul HS FS IW YO M YY 1 GP exec dup SW pop neg 0 R Sh 0 YO M YY 0 GP exec Sh + YY 2 GP exec dup SW pop IW E sub 2 div YO M Sh /FN Fn D /AT At D t Pb XO SZ + SL get neg R /PF pf D grestore /CF 0 D cs cf FS}if}D +/Sh {dup () ne{CP Hz 4 div sub BB show CP CS add BB}{pop}ie}D +/Pb {/OU E D /Ou OU D /PB t D 0 0 M Ba{/Sa save D /BP t D /Fl t D RC /PL 0 D + /PH 0 D /W IW D /LE IL .7 mul D /EO 0 D SI ZF /YA 0 D /BO 0 D /C1 () D + BA 0 Ts neg R Bb{Xl Yl Xh Yh}if Bb CP Sa restore M + {/Yh E D /Xh E D /Yl E D /Xl E D}if /Fl t D}if + BL /OU t D /HM f D /Ou t D /PB f D} D +/Bs {/BP Ba not D}D +/reencodeISO { + dup dup findfont dup length dict begin{1 index /FID ne{D}{pop pop}ie}forall + /Encoding ISOLatin1Encoding D currentdict end definefont} D +/ISOLatin1Encoding [ +/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef +/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef +/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef +/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef +/space/exclam/quotedbl/numbersign/dollar/percent/ampersand/quoteright +/parenleft/parenright/asterisk/plus/comma/hyphen/period/slash +/zero/one/two/three/four/five/six/seven/eight/nine/colon/semicolon +/less/equal/greater/question/at/A/B/C/D/E/F/G/H/I/J/K/L/M/N +/O/P/Q/R/S/T/U/V/W/X/Y/Z/bracketleft/backslash/bracketright +/asciicircum/underscore/quoteleft/a/b/c/d/e/f/g/h/i/j/k/l/m +/n/o/p/q/r/s/t/u/v/w/x/y/z/braceleft/bar/braceright/asciitilde +/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef +/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef +/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef +/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef +/.notdef/space/exclamdown/cent/sterling/currency/yen/brokenbar +/section/dieresis/copyright/ordfeminine/guillemotleft/logicalnot +/hyphen/registered/macron/degree/plusminus/twosuperior/threesuperior +/acute/mu/paragraph/periodcentered/cedilla/onesuperior/ordmasculine +/guillemotright/onequarter/onehalf/threequarters/questiondown +/Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE/Ccedilla +/Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex +/Idieresis/Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis +/multiply/Oslash/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute +/Thorn/germandbls/agrave/aacute/acircumflex/atilde/adieresis +/aring/ae/ccedilla/egrave/eacute/ecircumflex/edieresis/igrave +/iacute/icircumflex/idieresis/eth/ntilde/ograve/oacute/ocircumflex +/otilde/odieresis/divide/oslash/ugrave/uacute/ucircumflex/udieresis +/yacute/thorn/ydieresis +] D +[128/backslash 129/parenleft 130/parenright 141/circumflex 142/tilde +143/perthousand 144/dagger 145/daggerdbl 146/Ydieresis 147/scaron 148/Scaron +149/oe 150/OE 151/guilsinglleft 152/guilsinglright 153/quotesinglbase +154/quotedblbase 155/quotedblleft 156/quotedblright 157/endash 158/emdash +159/trademark] +aload length 2 idiv 1 1 3 -1 roll{pop ISOLatin1Encoding 3 1 roll put}for +/colorimage where{pop}{ + /colorimage { + pop pop /Pr E D {/Cv Pr D /Gr Cv length 3 idiv string D 0 1 Gr length 1 sub + {Gr E dup /i E 3 mul D Cv i get 0.299 mul Cv i 1 add get 0.587 mul add + Cv i 2 add get 0.114 mul add cvi put}for Gr} image} D +}ie +/pdfmark where{pop}{userdict /pdfmark /cleartomark load put}ie +WF{FL{reencodeISO D}forall}{4 1 FL length 1 sub{FL E get reencodeISO D}for}ie +/Symbol dup dup findfont dup length dict begin + {1 index /FID ne{D}{pop pop}ie}forall /Encoding [Encoding aload pop] + dup 128 /therefore put D currentdict end definefont D + +/SF {/CS E D SZ SL CS put FO SL FN put /YI CS LH neg mul D dup ST cvs ( ) join + CS ST cvs join C1 E join ( NF ) join /C1 E D CS NF /Wf WF FN 0 gt or D + /BW Wf{( ) SW pop}{0}ie D}D +/NF {/cS E D /cF E D cF 0 ge{FL cF get}{cF -1 eq{/Symbol}{/MySymbol}ie}ie + findfont cS scalefont setfont} D +/FS {CF or /CF E D FR SL CF put CF CF 0 ge{FN 4 mul add}if E SF} D +/PC {SH /BP f D fin not GL not and{NL}if /HM t D /LL LS D} D +/BS {/TX E D Wf{/fin f D /CW 0 D /LK 0 D /SC 0 D + /RT TX D {RT ( ) search{/NW E D pop /RT E D /WH NW SW pop D CW WH add LL gt + {TX SC LK SC sub 1 sub NN GI GL{SH cF cS OC + 2 copy cS ne E cF ne or{NF}{pop pop}ie}{PC /CW WH BW add D}ie + /SC LK D} + {GL{JC}if + /CW CW WH add BW add D /HM t D}ie /GL f D /Ph f D + /LK LK NW length 1 add add D}{pop exit}ie}loop + /fin t D TX SC LK SC sub GI SH RT () ne{GL not{CC}if}if + /LC TX length D /WH RT SW pop D CW WH add Hy{HC SW pop add}if LL gt + {RT GL{SH cF cS OC 2 copy cS ne E cF ne or{NF}{pop pop}ie + Hy{/Ph t D}if /LL LS D}{NL /LL LS D SH}ie} + {RT PC Hy{CC}if /Ph Ph Hy or D}ie RT () ne{/GL t D /HM t D}if} + {TX SW pop LL le{TX SH}{/NW () D 0 2 TX length 1 sub + {/CW E D TX 0 CW GI dup SW pop LL gt{pop NW SH /HM t D NL/LL W XO sub MR sub D + /CW CW 2 sub NN D /TX TX CW TX length CW sub GI D TX BS exit} + {/NW E D}ie}for}ie}ie /HM t D}D +/CC {C0 length 0 gt{JC}if /C0 [C1 L1 YA YB Mf NS NB TB AF Bw] D + /C1 () D /L0 L1 D /YA 0 D /YB 0 D /Mf 0 D /NS 0 D /NB 0 D}D +/JC {C0 aload length 0 gt{pop pop pop NB add /NB E D NS add /NS E D + dup Mf gt{/Mf E D}{pop}ie dup YB gt{/YB E D}{pop}ie + dup YA gt{/YA E D}{pop}ie pop C1 join /C1 E D /C0 [] D}if}D +/OC {C0 length 0 gt{C1 L1 L0 sub YA YB Mf NS NB TB AF Bw GL C0 aload pop + /Bw E D /AF E D /TB E D /NB E D /NS E D /Mf E D /YB E D /YA E D /C0 [] D + /L1 E D /C1 E D Ph{HC SH}if NL /GL E D /Bw E D /AF E D /TB E D /NB E D /NS E D + /Mf E D /YB E D /YA E D /L1 E D /LL W L1 sub XO sub MR sub WH sub D /CW 0 D + C1 E join /C1 E D}if}D +/BT {/LB t D dup length string copy RS dup dup () ne E ( ) ne and + {/CI 0 D /LS LL D /LL W L1 sub XO sub MR sub D BS} + {dup ( ) eq{/GL f D}if dup () eq L1 0 eq or{pop}{SH /BP f D /Ph f D}ie}ie + /LB f D} D +/BL {CP E pop XO E M} D +/NL {JC /GL f D /SK W XO sub MR sub L1 sub TB{Bw add}if D + /YA LF{Mf HM Fl not and PF or{LH mul}if}{0 /LF t D}ie YA 2 copy lt{E}if pop D + C1 () ne{/FB YB Mf SA{Sf mul}if 4 div 2 copy lt{E}if pop D}if Fl{/Ya YA D}if + CP E pop YA sub YB sub LE neg lt Fl not and PB not and{NP}if NT TL BL + OU PF not and PB or{/RE L1 TB{Bw sub}if + W XO sub MR sub div YA YB add LE BO add div 2 copy lt{E}if pop D + RE 1 gt{BL 1 RE div dup scale}if}if + AT 2 le{SK AT mul 2 div YA neg R}if + AT 3 eq{0 YA neg R TB{/NB NB 1 sub D /NS NS 1 sub D}if /NB NB 1 sub NN D + /A3 NS 6 mul NB add D NS NB add 0 eq + {/A1 0 D /A2 0 D} + {NS 0 eq{/A1 SK NB div dup J gt{pop 0}if D /A2 0 D}{J A3 mul SK lt + {/A1 J D /A2 SK J NB mul sub NS div dup Ab gt{/A1 0 D pop 0}if D} + {/A1 SK A3 div D /A2 A1 6 mul D}ie}ie}ie /A1 A1 NN D /A2 A2 NN D}if + AT 4 eq{0 YA neg R PH 2 le{PD 0 lt{/PD L1 D}if PD M1 gt{/M1 PD D}if + L1 PD sub M2 gt{/M2 L1 PD sub D}if}{DV ID 1 sub get 0 ge{Lo 0 R}if}ie}if + F0 cF ne Cs cS ne or{F0 Cs NF}if + /ms Ms D /Ms f D CP FB sub + C1 cvx exec XO EO sub L1 add TB{BW sub}if dup LM gt{/LM E D}{pop}ie + PH 0 eq PH 4 eq or Ms and{HF not{/PO t D /AH t D}if + BB CP YA add E AT 3 eq LB and{A1 sub}if TB{BW sub}if E BB} + {pop pop}ie Ms HM PH 3 eq and or{/BP f D /Fl f D}if + /Lo 0 D /L1 0 D /F0 cF D /Cs cS D BP not{0 YB NN neg R}if + OU f1 and mF not and{k2 /f1 f D}if + OU PF not and PB or{RE 1 gt{RE dup scale}if}if /Ms ms Ms or D + /C1 AF{(Cp )}{()}ie D /YA 0 D /YB 0 D BL + AT 4 eq LB not and PH 3 ge and + {ID DV length lt{DV ID get dup 0 ge{DO E sub /Lo E D /L1 Lo D}{pop}ie + /ID ID 1 add D}if}if /T t D CD{/LN LN 1 add D PD}if + /PD -1 D /NS 0 D /NB 0 D /TB f D /Ph f D /Mf 0 D /HM f D} D +/RS {/TM E D /CN 0 D TM{10 eq{TM CN ( ) PI}if /CN CN 1 add D}forall + /CN 0 D /BK HM EN and{0}{1}ie D TM + {dup 32 ne{TM CN 3 2 roll put /CN CN 1 add D /BK 0 D} + {pop BK 0 eq{TM CN 32 put /CN CN 1 add D}if /BK 1 D}ie}forall + TM 0 CN GI dup dup () ne E ( ) ne and + {dup CN 1 sub get 32 eq{/EN f D}{/EN t D}ie}if} D +/join {2 copy length E length add string dup 4 2 roll 2 index 0 3 index + PI E length E PI}d +/WR {(\n) search{dup () ne BP not or + {Li 4 le CP E pop YI Li mul add LE add 0 lt and PL 0 eq and{NP}if + SH NL pop /Li Li 1 sub D WR}{pop pop WR}ie}{SH}ie /CI 0 D /BP f D} D +/SH {dup dup () ne E ( ) ne and PF or CS Mf gt and{/Mf CS D}if + T not Wf and{( ) E join /T t D}if dup BP{/MF CS D}if + AT 3 eq{2 copy length dup 0 gt{/NB E NB add D + {( ) search{/NS NS 1 add D pop pop}{pop exit}ie}loop}{pop pop}ie}if + CD PD 0 lt and{dup DC search{SW pop /PD E L1 add D pop pop}{pop}ie}if + 0 Np dup SW pop L1 add /L1 E D dup () ne + {C1 (\() join E join (\)) join AU AF and UF or Wf and{( U ) join}if + sF{( s ) join}if ( S ) join + /C1 E D dup length 1 sub get 32 eq /TB E D /Bw BW D}{pop pop}ie} D +/BG {AI LG BC add add 0 eq} D +/ON {OU{Ty AR AI NN get dup 1 add Ln Ns Ty 2 mod 0 eq{(. )}{(\) )}ie join + dup SW pop neg 0 R CP E 0 lt{0 E M}{pop}ie CP BB show /Ms t D}if} D +/Ln {AR AI 3 -1 roll put}D +/SP {dup CI lt BP not and{dup CI sub 0 E R /CI E D}{pop}ie} D +/BN {PF{WR /HM f D}{BT NL}ie} D +/NN {dup 0 lt{pop 0}if} D +/h {(h) HI ST cvs join cvx exec dup 1 get E Nf{0 get E join}{pop}ie} D +/H {/fn FN D /Hi E 1 add D 1 sub /HL E D /H2 HL 2 add D /GS EZ H2 get D + E Tm H2 get GS mul BE dup 0 gt{1 sub}{pop EG H2 get dup 0 lt{pop AT}if}ie NA + WW Np /SL SL 1 add D /FN EF H2 get D GS Ey H2 get FS + EU H2 get Sc Hs not HL Hl lt and Hs HL hl lt and or Hi 0 eq or + {/HI Hi D /Hs t D /hl HL D /Hv HL D}if HL Hl lt{/hi Hi D}if + Nf HI 0 gt and{(h) Hi ST cvs join cvx exec 0 get WB}if + /HF t D /AH f D /PO f D} D +/EH {Bm H2 get GS mul BE OA /SL SL 1 sub NN D /CF 0 D /FN fn D + SZ SL get FR SL get FS /HF f D /GS Ts D ()Ec} D +/P {E PF{WR}{PO{EP}{BN}ie Ts 4 mul Np AE not{Tm 0 get Ts mul neg SP}if + dup 0 ge AH and{Pi Pd}if}ie 1 sub dup 0 lt{pop AV AL get}if /AT E D /PO t D} D +/EP {PF{WR}{BN Ts 4 mul Np}ie AE not{Bm 0 get Ts mul neg SP}if + /AT AV AL get D /PO f D} D +/BE {E PO{EP}{BN}ie Ts 4 mul Np neg SP} D +/HR {/Aw W EO sub D /RW E dup 0 gt{Aw mul}{neg}ie dup Aw gt{pop Aw}if D /RZ E D + E BN Ts neg SP 1 sub 2 div Aw RW sub mul EO add CP E pop M PF{0 Ps neg R}if + 0 Np OU{gsave RZ LW Cf{Hc VC}{0 Sg}ie CP BB RW 0 RL CP BB stroke grestore}if + /CI 0 D /BP f D PF not{Ts neg SP}if /Ms t D} D +/AD {I NL EG 14 get dup 0 lt{pop AT}if NA /AE t D Tm 14 get Ts mul neg SP + Cf{EU 14 get dup -1 eq{pop CA CL get}if Sc}if} D +/DA {BN ()ES OA /AE f D ()Ec Bm 14 get Ts mul neg SP} D +/PR {/MW E D /Li E D Tm 1 get Ps mul BE 0 NA /FN Fp D /PF t D SI /SL SL 1 add D + /CF 0 D Ps CS mul Ts div MW WC mul CS mul Ts div dup LL gt PL 0 eq and + {LL div div}{pop}ie Ey 1 get FS CP E pop LE add YI neg div cvi dup Li lt + AH and{4 lt YI Li mul 5 mul LE add 0 gt or PL 0 eq and{NP}if}{pop}ie + EU 1 get Sc /GS Ps D}D +/RP {WR NL () /PF f D SI /FN 0 D ES Bm 1 get Ps mul neg SP OA /GS Ts D} D +/SI {/XO Lm 15 get BC NN mul Lm 16 get AI UI sub NN mul add + Lm 17 get UI NN mul add Lm 20 get LG NN mul add Ts mul + PF{Lm 1 get Ps mul add}if EO add D + /MR Rm 15 get BC NN mul Rm 16 get AI UI sub NN mul add + Rm 17 get UI NN mul add Rm 20 get LG NN mul add Ts mul + PF{Rm 1 get Ps mul add}if D /LL W XO sub MR sub D} D +/DT {/cC E D BN /LG LG 1 sub D SI /LG LG 1 add D WW 2 div Np BL} D +/DD {WB Cc 0 eq cC 0 eq and L1 0 eq or Lm 20 get Ts mul L1 sub TB{BW add}if + Ts 2 div lt or NL /LF E D SI BL /cC 0 D} D +/DL {Dc LG Cc put /Cc E D BG{Tm 18 get Ts mul BE}{BN}ie /LG LG 1 add D BL} D +/LD {BN LG 0 gt{/LG LG 1 sub D}if /Cc Dc LG get D SI + BG{()Bm 18 get Ts mul BE}if BL} D +/UL {BG{Tm 17 get Ts mul BE}{BN}ie NR AI NN 0 put /UI UI 1 add D + /AI AI 1 add D SI BL} D +/LU {BN /UI UI 1 sub D /AI AI 1 sub D SI BG{()Bm 17 get Ts mul BE}if BL} D +/OL {E BG{Tm 16 get Ts mul BE}{BN}ie TR AI NN Ty put /Ty E D NR AI NN 1 put + /AI AI 1 add D SI BL 1 Ln} D +/LO {BN /AI AI 1 sub D /Ty TR AI get D SI BG{()Bm 16 get Ts mul BE}if BL} D +/LI {E BN -1 SP /BP f D /CI 0 D 0 Np NR AI 1 sub NN get 1 eq + {dup dup 0 gt E 4 le and{/Ty E D}{pop}ie + /L1 L1 Ty AR AI NN get Ns SW pop XO sub dup 0 lt{pop 0}if add D ( ON )} + {pop ( B )}ie C1 E join /C1 E D CS Mf gt{/Mf CS D}if BL} D +/BQ {Tm 15 get Ts mul BE /BC BC 1 add D SI BL} D +/QB {Bm 15 get Ts mul BE /BC BC 1 sub D SI BL} D +/Al {E EP 1 sub dup 0 lt{pop AV AL get}if NA} D +/Ea {EP OA} D +/WB {PF{WR}{BT}ie} D +/F1 {WB /FN 0 D CS 0 FS} D +/F2 {WB /FN WI D CS 0 FS} D +/HY {/Hy t D WB /Hy f D} D +/YH {WB} D +/A {/LT E D LT 1 eq{/RN E D}if /Lh E D WB /C1 C1 ( Cp ) join D + Lc AF not and{Cl Sc}if /AF t D} D +/EA {Lc AF and{Ec}{WB}ie TL Pa AF and Lh 0 ne and + {( \() Lh join (\)) join /AF f D WB}if /AF f D} D +/TL {C1 ( Tl ) apa /C1 E D} d +/apa {AF OU and Lh 0 ne LT 1 eq or and{LT 1 eq{RN ( /) E ST cvs join} + {(\() Lh join (\)) join}ie E join join}{pop}ie} d +/Cp {/Xc CP /Yc E D D} D +/SS {Cf{dup 0 ge{EU E get dup -1 eq{pop CA CL get}if}{pop CA CL get}ie Sc} + {pop}ie SZ SL get /SL SL 1 add D} D +/I {WB 8 SS 1 FS} D +/EM {WB 8 SS /CF CF 1 xor D 0 FS} D +/BD {WB 9 SS 2 FS} D +/TT {WB 10 SS /FN Fp D 0 FS} D +/KB {WB 11 SS /FN Fp D 2 FS} D +/CT {WB 12 SS 1 FS} D +/SM {WB 13 SS /FN Fp D 0 FS} D +/Q {/QL QL 1 add D QO QL 2 mod get La get join WB} D +/EQ {QC QL 2 mod get La get join WB /QL QL 1 sub D} D +/RO {WB -1 SS /CF 0 D 0 FS} D +/SY {WB -1 SS -1 FS} D +/MY {WB -1 SS -2 FS} D +/ES {WB /SL SL 1 sub NN D /CF 0 D /FN FO SL get D SZ SL get FR SL get FS ()Ec}D +/FZ {3 sub 1.2 E exp GS mul E WB TL /C1 C1 ( Cp ) join D /SL SL 1 add D 0 FS} D +/Ef {WB TL ()ES /C1 C1 ( Cp ) join D} D +/BZ {dup /Bf E D FZ}D +/Sc {dup -1 ne Cf and{/CL CL 1 add D dup 0 eq{pop [0 0 0]}if + dup CA E CL E put VS ( VC ) join C1 E join /C1 E D}{pop}ie} D +/Ec {WB Cf{/CL CL 1 sub NN D CA CL get VS ( VC ) join C1 E join /C1 E D}if} D +/VS {dup type /arraytype eq{([) E {ST cvs join ( ) join}forall (]) join}if} D +/VC {{255 div}forall setrgbcolor} D +/Sl {dup type /integertype ne{Ds}if /La E D WB}d +/UN {WB /UF t D} D +/NU {WB /UF f D} D +/SE {WB /sF t D} D +/XE {WB /sF f D} D +/sM {/C1 C1 ( k1 ) join D}d +/eM {/C1 C1 ( k2 ) join D}d +/k1 {/YC CP E pop Ts add D /mF t D /f1 t D}d +/k2 {gsave 3 LW -9 CP E pop Ts 0.2 mul sub M -9 YC L stroke grestore /mF f D}d +/Ac {/AC E D WB}d +/Ca {eA{( \()join AC join(\) )join}if WB}d +/s {OU{gsave 0 CS .25 mul R dup SW pop CJ 0 RL stroke grestore}if}D +/CJ {AT 3 eq LB and{E dup dup length 1 sub A1 mul E + {( ) search{pop pop E A2 add E}{pop exit}ie}loop 3 -1 roll add + W CP pop sub 2 copy gt{E}if pop}if}D +/So {/Co E D} D +/SO {C1 Yo ST cvs join ( So ) join /C1 E D (j) SW pop 2 div Pd} D +/Se {E WB CS E div Pd}D +/Pd {dup type /stringtype eq{SW pop}if dup /L1 E L1 add D + ST cvs ( 0 R ) join C1 E join /C1 E D} D +/Sp {0.35 CO} D +/Sb {-0.2 CO} D +/CO {OV Io Yo put /Yo E CS mul Yo add D /Io Io 1 add D -1.5 Io mul 3 add FZ SO + CS Yo add dup YA gt{/YA E D}{pop}ie + Yo neg dup YB gt{/YB E D}{pop}ie} D +/Es {ES /Io Io 1 sub NN D /Yo OV Io get D SO} D +/SB {/N2 0 D 0 1 NI{/N E D{IX N2 get 0 lt{/N2 N2 1 add D}{exit}ie}loop + /K WS N get FC N get mul D /NY AY N2 get D /BV NY array D + 0 1 NY 1 sub{/TM K string D currentfile TM readhexstring pop pop BV E TM put} + for BM N BV put /N2 N2 1 add D}for} D +/IC [{/MA E D /MB 0 D}{2 div /MA E D /MB MA D}{/MB E CS sub D /MA CS D} + {pop /MA YS AB mul D /MB 1 AB sub YS mul D}{pop /MA 0 D /MB 0 D}] D +/IP {BV N get /N N 1 add D} D +/II {/K E D IX K get 0 lt{/EC E D}if /TY E D + TY 4 eq{/Y E D /X E D}if TY 3 eq{/AB E D}if + /XW AX K get D /YW AY K get D /IS SG IT K get get D /XS XW IS mul D + /YS YW IS mul D YS IC TY get exec /MA MA Fl not{3 add}if D} D +/IM {II /ty TY D /xs XS D /ys YS D /ya YA D /yb YB D /ma MA D /mb MB D /k K D + /ec EC D /BP f D /CI 0 D WB TL L1 xs add dup XO add MR add W gt + {pop /ma ma Fl{3 add}if D NL /YA ma D /YB mb D /YS ys D /L1 xs D} + {/L1 E D ma YA gt{/YA ma D}if mb YB gt{/YB mb D}if}ie /TB f D + OU{CP E pop YS sub LE neg lt Fl not and PB not and{NP /YA ma D /YB mb D}if + /BP f D ty ST cvs ( ) join IX k get 0 lt{(\() join ec join (\) ) join}if + k ST cvs join ty 3 eq{AB ST cvs ( ) join E join}if + ty 4 eq{X ST cvs ( ) join Y ST cvs join ( ) join E join}if C1 E join + ( DI ) join FP 2 eq FP 1 eq AF and or{( FM ) join}if + ( Il Cp ) apa /C1 E D /EN f D}if /HM t D /T f D} D +/DI {II /Xc CP /Yc E D D /YN YW neg D /HM t D /CI 0 D /K2 IX K get D gsave + TY 4 eq{OX X IS mul add OY FY add YS sub Y IS mul sub} + {/FY YS D CP MB sub 2 copy /OY E D /OX E D}ie + translate K2 0 ge{/DP AZ K2 get D /BV BM K2 get D XS YS scale /N 0 D XW YW DP + [XW 0 0 YN 0 YW] {IP} FC K2 get 1 eq{image}{f 3 colorimage}ie} + {EX}ie grestore XS 0 R /Ms t D} D +/FM {gsave 0 Sg CP MB sub translate XS neg 0 M 0 YS RL XS 0 RL 0 YS neg RL + XS neg 0 RL stroke grestore} D +/NA {/AT E D /AL AL 1 add D AV AL AT put} D +/OA {AL 0 gt{/AL AL 1 sub D /AT AV AL get D}if} D +/D1 {/BR {CP E pop E BN Mb{CP E pop eq{0 YI R}if}{pop}ie} D + /Sn {OU{C1 E ST cvs join ( Ld ) join /C1 E D}{pop}ie} D} D +/D1 {/BR {BN} D /Sn {OU {C1 E ST cvs join ( Ld ) join /C1 E D} {pop} ie} D} D +/TC {/TF t D /ML 0 D HN{SW pop dup ML gt{/ML E D}{pop}ie}forall NP /RM RM not D + RC /OU Tc D Ep /PN 0 D Ms not TP and{Ip}if /W IW ML sub Ts sub D + /A0 0 D TH{/BR {( ) join BT} D /Sn {pop} D /Au () D}if} D +/TN {0 eq{E EA PF HF or not XR and{HN E get Xr}{pop}ie} + {OU{Tn 0 ge{() BN}if /Tn E D}{pop}ie WB}ie} D +/NT {OU LB not and Tn 0 ge and{PL 0 eq{Ms not{CS CF FS}if CP dup + /y E YA sub D W 9 sub CS -1.8 mul XO L1 add 2 add{y M (.) show}for + HN Tn get dup SW pop IW E sub y M show CP BB M}if /Tn -1 D}if} D +/Ld {/DN E D HN DN Pn put [/View [/XYZ -4 Fl{PS}{CP YA add US E pop}ie null] + /Dest DN ST cvs cvn /DEST pdfmark} D +/C {ND 1 eq{1 sub}if TI mul /XO E D NL Nf not{pop()}if 0 3 -1 roll 1 A} D +/OP {BP not{NP}if PN 2 mod 0 eq{/Ms t D NP}if}D +/Ep {Xp PN 2 mod 0 eq and OU and{/Pn (-) D showpage /PM 1 D LA}if}D +/Dg [73 86 88 76 67 68 77] D +/Rd [0 [1 1 0][2 1 0][3 1 0][2 1 1][1 1 1][2 2 1][3 3 1][4 4 1][2 1 2]] D +/Ns {/m E D /c E 32 mul D /j m 1000 idiv D /p j 12 add string D + c 96 le m 0 gt and{c 32 le {/i 0 D /d 77 D /l 100 D /m m j 1000 mul sub D + j -1 1 {pop p i d c add put /i i 1 add D}for + 4 -2 0 {/j E D /n m l idiv D /m m n l mul sub D /d Dg j get D + n 0 gt {/x Rd n get D x 0 get -1 1 {pop p i d c add put /i i 1 add D}for + p i x 1 get sub Dg x 2 get j add get c add put}if /l l 10 idiv D + }for p 0 i GI} + {/i ST length 1 sub D m {1 sub dup 0 ge{dup 26 mod c add 1 add + ST i 3 -1 roll put 26 idiv dup 0 eq{pop exit}if}if /i i 1 sub D}loop + ST i ST length i sub GI}ie} + {m p cvs}ie} D +/US {matrix currentmatrix matrix defaultmatrix matrix invertmatrix + matrix concatmatrix transform} D +/GB {Gb{US}if}D +/Tl {/Rn E D Xc CP pop ne{ + [/Rect [Xc 1 sub Yc cS 0.25 mul sub GB CP E 1 add E cS 0.85 mul add GB] + /Subtype /Link /Border [0 0 Cf Lc and LX and AU or{0}{1}ie] Rn type + /nametype eq {/Dest Rn}{/Action [/Subtype /URI /URI Rn] Cd}ie + /ANN pdfmark}if} D +/Il {/Rn E D [/Rect [Xc Yc GB Xc XS add Yc YS add GB] /Subtype /Link + /Border [0 0 0] Rn type /nametype eq{/Dest Rn} + {/Action [/Subtype /URI /URI Rn] Cd}ie /ANN pdfmark} D +/XP {[{/Z Bz 2 div D Z 0 R Z Z RL Z neg Z RL Z neg Z neg RL Z Z neg RL + Fi cH 1 eq and{fill}if} {Bz 0 RL 0 Bz RL Bz neg 0 RL 0 Bz neg RL + Fi cH 1 eq and{fill}if} {0 -5 R Bz 0 RL 0 21 RL Bz neg 0 RL 0 -21 RL}]} D +/MS {/Sm E D WB}D +/O {BN()0 Sm BX} D +/BX {/Bt E D Bt 2 lt{/Ch E D CS 0.8 mul}{11 mul}ie W XO sub MR sub + 2 copy gt{E}if pop /HZ E D Bt 2 eq{Fi not{pop()}if ( )E join /Ft E D TT + /PF t D /MW 1 D /Li 1 D /Fw Ft SW pop D Fw HZ gt{/HZ Fw 8 add D}if + HZ ST cvs( )join}{WB Ch ST cvs( )join}ie L1 HZ add XO add MR add W gt{NL}if + Bt 2 eq{Ft ES Fw neg HM{CS sub}if Pd}if Bt ST cvs join( Bx )join + Bt 2 eq HM and{CS Pd}if C1 E join /C1 E D /L1 L1 HZ add D /T f D + ( ) Pd /PF f D Bt 2 lt{YA CS .8 mul lt{/YA CS .8 mul D}if} + {YB 5 lt{/YB 5 D}if YA 21 lt{/YA 21 D}if}ie /CI 0 D} D +/Bx {dup 2 eq{E /Bz E D}{E /cH E D /Bz CS .8 mul D}ie + OU {gsave 0 Sg XP E get exec stroke grestore}{pop}ie Bz 0 R /Ms t D}D +/SD {FD 4 mul Dy add DZ NF newpath 0 0 M DX t charpath pathbbox + 3 -1 roll sub /DY E D E dup /X1 E D sub WM mul WX DY mul add WM DG mul E div + /DF E D /DR WX DF mul DY mul WM div 2 div D} d +/Sd {gsave 0 IL Di mul neg translate IL IW atan Di 0 eq{neg}if rotate + FD 4 mul Dy add DZ NF DR X1 sub DY 2 div neg M cD VC DX show grestore} d +/Pt {/tp t D Tp{NP /Pn (TP) D 0 Tt neg R Th BN NP Ep ET RC ZF}if /tp f D} D +/RC {/AI 0 D /LG 0 D /BC 0 D /UI 0 D /PF f D /Cc 0 D /cC 0 D /Dc 10 array D + /NR [0 1 9{pop 0}for] D /La Ds D /AR 10 array D /TR 10 array D /AV 30 array D + SI /AL -1 D /AT A0 D AT NA /OV 9 array D /Yo 0 D /Co 0 D /Io 0 D /Hy f D + /Ph f D /CL -1 D Ct Sc}D +/ZF {/FR [0 1 30{pop 0}for] D /SZ [0 1 30{pop 0}for] D /FO [0 1 30{pop 0}for] D + /SL 0 D /CF 0 D /FN 0 D 0 Ts SF}D +/QO [[(\234)(\233)(\253\240)(\232)(\273)(\253)][(')(`)(\253\240)(\231)(\273)(\253)]] D +/QC [[(\234)(\234)(\240\273)(\233)(\253)(\273)][(')(')(\240\273)(`)(\253)(\273)]] D +/Hf EF length 2 sub D +/Hz EZ Hf get D +/HS Ey Hf get D +/Fz EZ Hf 1 add get D +/Fs Ey Hf 1 add get D +/LE IL D +/Ps EZ 1 get D +/Fp EF 1 get D +/XO 0 D +/YI 0 D +/CI 0 D +/FP 0 D +/WW Ts 7 mul D +/Mf 0 D +/YA 0 D +/YB 0 D +/Cs Ts D +/GS Ts D +/F0 0 D +/NS 0 D +/NB 0 D +/N 0 D +/C0 [] D +/C1 () D +/Lo 0 D +/L1 0 D +/LM 0 D +/PH 0 D +/EC 0 D +/Lh 0 D +/LT 0 D +/CH 1 string D +/ST 16 string D +/CA 9 array D +/HC (\255) D +/HM f D +/PF f D +/EN f D +/TB f D +/UF f D +/sF f D +/AE f D +/AF f D +/BP t D +/CD f D +/PA t D +/GL f D +/T t D +/HF f D +/AH f D +/SA f D +/PB f D +/f1 f D +/mF f D +/OX 0 D +/OY 0 D +/FY 0 D +/EO 0 D +/FB 0 D +/PL 0 D +/Bw 0 D +/PD -1 D +/TP f D +/tp f D +/TH t D +/Ty 4 D +/Tn -1 D +/Fl t D +/LB t D +/PM 1 D +/Ms f D +/Ba f D +/Bb f D +/Hl 3 D +/hl 6 D +/Hv 6 D +/Hs f D +/HI 0 D +/hi 0 D +/PO t D +/TE f D +/LF t D +/BO 0 D +/Sm 1 D +/Bf 3 D +/A1 0 D +/A2 0 D +/Ds 1 D +/QL -1 D +/Cb Db D +/Ct Dt D +/Cl Dl D +/AX [541] D +/AY [291] D +/IX [0] D +/IT [0] D +/AZ [8] D +/WS [541] D +/FC [3] D +/NI 0 D +/BM 1 array D +SB +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffcfdffe1edfb +c9e0f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c7def8d9e9fa +f8fbfeffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffe4effc +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8dceafbffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +d2e4fac5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c7def8ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffd0e3f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffd0e3f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffd0e3f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffd0e3f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8ffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffd0e3f9c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8ffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffd0e3f9c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8ffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffd0e3f9c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffd0e3f9c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8ffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffd0e3f9 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8ffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +d0e3f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf88495a77482928798abc5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf88b9caf +b5cbe4c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf894a6baacc1d8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +8393a57482928a9baec5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffd0e3f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf88ea0b3626e7c2e343ac5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf86c7a898fa1b4c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +3d454d9fb3c9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8525c688b9cafc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf88d9eb15f6a77333a41c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffd0e3f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c4dcf7afc4dcb9d0e9c5ddf8c5ddf8c5ddf896a9bd2e343ac5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8b3c9e1b3c9e1c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8bdd4eeb0c6dec5ddf8c5ddf8c5ddf8c5ddf8c5ddf8b2c8e0bad0ea +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8b9d0e9b4c9e2c5ddf8c5ddf8c4dcf7bed6f047505a768595bed6f0 +c1d8f3c5ddf8c5ddf8c3dbf6c1d8f3c5ddf8b2c8e0bfd6f1c5ddf8c3dbf6 +bed6f0bed6f0c4dcf7c5ddf8c5ddf8c5ddf8bfd6f1c5ddf8b6cce5c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8b7cde6c4dcf7c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c4dcf7c0d7f2c4dcf7b7cde6c5ddf8 +c5ddf8c5ddf8c4dcf7bed6f0bed6f0c3dbf6c5ddf8c5ddf8c3dbf6c1d9f4 +b4c9e2c5ddf8b8cfe8c4dcf7c5ddf8c3dbf6c1d8f3c1d9f4b9d0e9c5ddf8 +c5ddf8c5ddf8c5ddf891a2b6333a41c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffd0e3f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf895a7bb131518252a2f2024288494a6c5ddf8c5ddf896a9bd2e343a +c5ddf8c5ddf8c5ddf8c5ddf82d33392d3339282d3325292eaec3dbc5ddf8 +c5ddf847505a2f343b373e463d454dc5ddf8c5ddf8a9bdd4282d33373e46 +282d337d8d9ec5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c2daf5363c44323940323940525c68c5ddf8a5b9d030363d1214171e2125 +30363d687583c5ddf8c5ddf87b8a9b4149522c3137212529262b30c5ddf8 +96a9bd30363d0a0b0c9aadc2c5ddf8c5ddf8c5ddf8050606454e57272c31 +22272bafc4dcc5ddf8b7cee7464e5821252925292e181b1fa6bbd2c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8a5b9d014171a252a2f22272b +48515bb8cfe8c5ddf8a8bcd430363d1012148393a5c5ddf8c5ddf87f8fa0 +1d202420242832383f292e34353b43c5ddf88b9cb021262a1e2125212529 +545f6ac1d9f4c5ddf8c5ddf891a2b6333a41c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffd0e3f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c0d7f214171a8797aac5ddf8c4dcf7b3c9e1c5ddf8c5ddf896a9bd +2e343ac5ddf8c5ddf8c5ddf8c5ddf8b7cde6c5ddf8c5ddf85a65715c6874 +c5ddf8a6bbd21e2125c5ddf8c5ddf8bfd6f1c5ddf8c5ddf85c6874687583 +c5ddf8c5ddf8bfd6f1c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf88d9eb1373e46c5ddf8c5ddf8bfd6f1c5ddf8c5ddf8c5ddf84a535d +7a899ac5ddf8c5ddf8c5ddf8c5ddf87b8a9b0303039cafc4c5ddf8bcd3ed +c5ddf8c5ddf8c5ddf82a2f359aadc2c5ddf8c5ddf8c5ddf80000008b9cb0 +c5ddf8505a65778696c5ddf8798898454e57c4dcf7a0b4ca000000a6bbd2 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8a5b9d0000000a0b4ca +c5ddf847505a7d8c9dc5ddf8c5ddf8c5ddf84149528393a5c5ddf8c5ddf8 +7f8fa049525ca2b6cc0b0d0ec5ddf8212529c0d7f28b9cb0040505b5cbe4 +c1d9f430363d96a9bdc5ddf8c5ddf891a2b6333a41c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8ffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffd0e3f9c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8a4b8cf0d0f11c2daf5c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +96a9bd2e343ac5ddf8c5ddf8c5ddf8c5ddf890a2b5505a652b30361b1e22 +4a535dc5ddf8c0d7f21e22263d454d768494bcd3edc5ddf8c5ddf88c9db1 +171a1e535d6992a3b7c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8b2c8e0171a1e454e577e8e9fc1d8f3c5ddf8c5ddf8c5ddf8 +4a535d7a899ac5ddf8c5ddf8c5ddf8c5ddf87b8a9b2b3036c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf82a2f359aadc2c5ddf8c5ddf8c5ddf8020202 +bfd6f1c5ddf8738190525c68c5ddf8424a537a899ac5ddf8c5ddf8101315 +a6bbd2c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8a5b9d00d0e10 +c5ddf8c5ddf879889847505ac5ddf8c5ddf8c5ddf84149528393a5c5ddf8 +c5ddf87f8fa05b6672b4c9e21d2024c5ddf82c3238abc0d78b9cb0252a2f +c5ddf8c5ddf85f6a77626e7bc5ddf8c5ddf891a2b6333a41c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8ffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffd0e3f9c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8a4b8cf0d0f11c2daf5c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf897a9be2d3339c5ddf8c5ddf8c5ddf8b9d0e916191ca0b4cac4dcf7 +69768547505ac5ddf8c5ddf8c2daf58a9bae1e222621262ac5ddf8c5ddf8 +c5ddf8b4cae36774820506066c7988c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8bfd6f17f8fa01416193b424ac5ddf8c5ddf8 +c5ddf84a535d7a899ac5ddf8c5ddf8c5ddf8c5ddf87b8a9b49525cc5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf82a2f359aadc2c5ddf8c5ddf8c5ddf8 +060607c5ddf8c5ddf8748292505a65c5ddf849525c758393c5ddf8c4dcf7 +0c0d0fa6bbd2c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8a5b9d0 +0c0d0fc5ddf8c5ddf8788797454e57c5ddf8c5ddf8c5ddf84149528393a5 +c5ddf8c5ddf87f8fa05e6976b7cde6202428c5ddf82f343ba8bcd48b9cb0 +252a2fc5ddf8c5ddf85f6a775f6a77c5ddf8c5ddf892a4b8323940c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8ffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffd0e3f9c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c0d7f214171a8797aac5ddf8c4dcf7b4c9e2 +c5ddf8c5ddf8bad1eb131518bdd4eec5ddf8c5ddf89cafc4272c31c5ddf8 +bed6f02a2f3547505ac5ddf8bad1ebc1d8f3c5ddf8b4c9e20e1012c0d7f2 +c5ddf8b6cce5c5ddf8c5ddf86c7988505a65c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8b7cee7c3dbf6c5ddf89cafc51f2327c5ddf8 +c5ddf8c5ddf86673815f6b78c5ddf8c5ddf8c5ddf8c5ddf87b8a9b49525c +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf82a2f359aadc2c5ddf8c5ddf8 +c5ddf8060607c5ddf8c5ddf8748292505a65c5ddf8808fa1394047bed6f0 +90a2b5000000a6bbd2c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +a5b9d00000009db0c6c4dcf7454e577b8a9bc5ddf8c5ddf8c5ddf8414952 +8393a5c5ddf8c5ddf87f8fa05e6976b7cde6202428c5ddf82f343ba8bcd4 +8b9cb0030404b2c8e0c1d8f32f343b95a7bbc5ddf8c5ddf8b7cee715181b +bed6f0c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffd0e3f9c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf895a8bc171a1d262b3022272b +8495a7c5ddf8c5ddf8c5ddf86976851d202431373ec5ddf8c5ddf83d444c +2a2f351b1e2247505a47505ac5ddf899acc1181b1f394047282d326d7b8a +c5ddf8c5ddf856616c24282d363d452b3036a5b9d0c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf88393a51b1e22394047272c318191a3 +c5ddf8c5ddf8c5ddf8a9bed5323940272c3164707ec5ddf8c5ddf87b8a9b +49525cc5ddf8c5ddf8c5ddf8c5ddf856616c2a2f35090a0b2125292a2f35 +a8bcd4c5ddf8060607c5ddf8c5ddf8748292505a65c5ddf8bdd4ee5f6a77 +1d20243e464e1d2024abc0d7c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8a5b9d014171a22272b21252948515bb8cfe8c5ddf86875832a2f35 +0d0f111c20232a2f3596a9bd7f8fa05e6976b7cde6202428c5ddf82f343b +a8bcd48b9cb021262a1b1e22202428545f6ac1d8f3c5ddf8c5ddf8c5ddf8 +6572801c2023353b43c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8ffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffd0e3f9 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8b0c6de +bcd3edc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8b7cde6c1d9f4c5ddf8c5ddf8c5ddf8c5ddf8c1d8f3adc3dac3dbf6 +c5ddf8c5ddf8c5ddf8c5ddf8b9d0e9b4c9e2c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8bed6f0aec3dbc5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8bcd3ed1b1f23c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8a5b9d01f2327c4dcf7b7cde6c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf88b9cb0394047c1d9f4b9d0e9c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8ffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +d0e3f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +b4c9e240485165717f31373e697584c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8a5b9d01f2327c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf88b9cb0394047c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffd0e3f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c4dcf79cafc48494a6b6cce5c5ddf8c5ddf87e8e9f6e7b8b6e7b8b +6e7b8b6e7b8b8a9baec5ddf8bcd3ed96a9bdc5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8b4cae39eb1c7c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffd0e3f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffd0e3f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffd0e3f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c4dcf78494a658626eb4c9e2c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8ffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffd0e3f9c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf89eb1c721262a97a9bec1d8f3c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8ffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffd0e3f9c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf86f7c8c55606bc5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8ffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffd0e3f9c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf86875835b6672c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffd0e3f9c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8bdd4ee3940477a8899c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8ffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffd0e3f9 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8b4c9e2131518212529bcd3ed +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8ffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +d0e3f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c3dbf63f474f +738190c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffd0e3f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +6976855a6571c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffd0e3f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8707e8d545e6ac5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffd0e3f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8a2b6cc1d20248b9cafbfd6f1c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffd0e3f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf892a3b7697685b7cde6c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8ffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffd0e3f9c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8ffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffff9fcfee6f0fce2eefbe2eefbe2eefbe2eefbe2eefbe2eefb +e2eefbe2eefbe2eefbe2eefbe2eefbe2eefbe2eefbe2eefbe2eefbe2eefb +e2eefbe2eefbe2eefbe2eefbe2eefbe2eefbe2eefbe2eefbe2eefbe2eefb +e2eefbe2eefbe2eefbe2eefbe2eefbe2eefbe2eefbe2eefbe2eefbe2eefb +e2eefbe2eefbe2eefbe2eefbe2eefbe2eefbe2eefbe2eefbe2eefbe2eefb +e2eefbe2eefbe2eefbe2eefbe2eefbe2eefbe2eefbe2eefbe2eefbe2eefb +e2eefbe2eefbe2eefbe2eefbe2eefbe2eefbe2eefbe2eefbe2eefbe2eefb +e2eefbe2eefbe2eefbe2eefbe2eefbe2eefbe2eefbe2eefbe2eefbe2eefb +e2eefbe2eefbe2eefbe2eefbe2eefbe2eefbe2eefbe2eefbe2eefbe2eefb +e2eefbe2eefbe2eefbe2eefbe2eefbe2eefbe2eefbe2eefbe2eefbe2eefb +e2eefbe2eefbe2eefbe2eefbe2eefbe2eefbe2eefbe2eefbe2eefbe2eefb +e2eefbe2eefbe2eefbe2eefbe2eefbe2eefbe2eefbe2eefbe2eefbe2eefb +e2eefbe2eefbe2eefbe2eefbe2eefbe2eefbe2eefbe2eefbe2eefbe2eefb +e2eefbe2eefbe2eefbe2eefbe2eefbe2eefbe2eefbe2eefbe2eefbe2eefb +e2eefbe2eefbe2eefbe2eefbe2eefbe2eefbe2eefbe2eefbe2eefbe2eefb +e2eefbe2eefbe2eefbe2eefbe2eefbe2eefbe8f2fcfdfeffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffd0e3f9c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8ffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffbfcfed6e7fac6ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8cae0f9e6f0fc +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffd0e3f9c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffe1eefbc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8f3f8feffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffd0e3f9c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c0d7f29fb2c8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +95a8bc47505ac5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8ffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffcfdffc9dff8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8ddebfbffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffd0e3f9 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8aec3db16191cc5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8b0c6de8fa1b4c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8ffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffeff6fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8cae0f9ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +d0e3f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8b6cce57482924b545f636f7dbad0eac5ddf87a899a515b670a0b0c +5b67735b6773b7cde6c5ddf8c5ddf86a7786a8bcd465717f505a65a6bbd2 +c5ddf8707e8d5b6773798898c5ddf8c5ddf8c5ddf891a2b690a2b5697685 +5c6874acc1d8c5ddf8c5ddf8c1d9f478879758626e92a4b88494a6c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffd0e3f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf84e57625e69769db0c67a899ab0c6dec5ddf8a2b6cc8292a4 +10131593a5b993a5b9bed6f0c5ddf8c5ddf81a1d2132383f6673818191a3 +93a5b9c5ddf89db0c66b7887363c44c5ddf8c5ddf8c5ddf8636f7d191c20 +7988986572802c3238c5ddf8c5ddf83940474e58637f8fa01c2023434b54 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffd0e3f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf830363d707e8dbed5efc5ddf8c5ddf8c5ddf8c5ddf8 +aec3db16191cc5ddf8c5ddf8c5ddf8c5ddf8c5ddf81a1d216f7c8cc5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf88ea0b3363c44c5ddf8c5ddf8c5ddf8636f7d +48515bc5ddf8c2daf50b0d0ebdd4eebcd3ed0a0c0dc0d7f2c5ddf85f6a77 +434b54c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffeff5fdc5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffd0e3f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8a3b7ce434c550c0d0f454e57b9d0e9c5ddf8 +c5ddf8aec3db16191cc5ddf8c5ddf8c5ddf8c5ddf8c5ddf81a1d21a3b7ce +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf88ea0b3363c44c5ddf8c5ddf8c5ddf8 +636f7d677482c5ddf8c5ddf8131518b1c7df9cafc41e2226c5ddf8c5ddf8 +7d8c9d434b54c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffeff5fdc5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffd0e3f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8a6bbd22024287c8b9c +c5ddf8c5ddf8b4cae3101315c5ddf8c5ddf8c5ddf8c5ddf8c5ddf81a1d21 +aabfd6c5ddf8c5ddf8c5ddf8c5ddf8c5ddf88ea0b3363c44c5ddf8c5ddf8 +c5ddf8636f7d677482c5ddf8c5ddf8131518b1c7dfc0d7f20b0d0ebed5ef +c5ddf8596470434b54c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8ffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffeff5fdc5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffd0e3f9c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8616d7a92a3b790a2b51e2226 +a6bbd2c5ddf8c5ddf8c5ddf823272c6774828d9eb1bed5efc5ddf8c5ddf8 +1a1d21aabfd6c5ddf8c5ddf8c5ddf8b9d0e98d9eb1667381262b308d9eb1 +9fb2c8c5ddf8636f7d677482c5ddf8c5ddf8131518b1c7dfc5ddf84a535d +3941486c7988202428434b54c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8ffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffeff5fd +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffd0e3f9c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf87e8e9f4f59645b6672 +95a8bcc5ddf8c5ddf8c5ddf8c5ddf8b1c7df7a8899626e7bb7cee7c5ddf8 +c5ddf8707d8db7cee7c5ddf8c5ddf8c5ddf8b0c5dd626e7b626e7b626e7b +626e7b8190a2c5ddf894a6ba96a9bdc5ddf8c5ddf86c7988bbd2ecc5ddf8 +c5ddf891a2b6738190707d8d5a6571c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8ffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +eff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c8dff8ffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffd0e3f9c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8a3b7cebdd4eeb4c9e2343a4296a9bdc5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c8dff8ffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffd0e3f9c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf87a899a282d33363c447d8d9ec3dbf6c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8ffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c8dff8ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffd0e3f9 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8ffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c8dff8ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +d0e3f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +b4cae3a6bad1a6bad1c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8bbd2ecb6cce5 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8b4c9e2a6bad1a6bbd2c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffd0e3f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c1d8f3b0c6dec5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8b8cfe8c2daf5c5ddf8c5ddf8c4dcf7b6cce5 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf88595a84f5964010101c1d8f3c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8758393 +4f5964c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf88292a44f5964000000 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffd0e3f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8748292b9d0e9c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8697584c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8a6bad11e2226c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8bdd4ee24282dc1d8f3c5ddf8c5ddf8c5ddf8 +2b3036b1c7dfc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffeff5fdc5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8030404c1d8f3c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +bbd2ecb6cce5c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c4dcf7 +000000c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffd0e3f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8191c20abc0d7c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8000000c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c1d8f3b0c6de +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf86c798865717fc5ddf8c5ddf8c5ddf8 +c5ddf87a899a57616dc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffeff5fdc5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c0d7f25b677321262a +202428768494c5ddf8c5ddf8c5ddf8030404c1d8f3c5ddf8c5ddf8c5ddf8 +7a899a262b301e21253d454dadc2d9c5ddf8c5ddf893a5b93c434b23272c +373e46bfd6f1c5ddf8c5ddf86673812c323824282d6d7b8ac5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf89cafc44c5560444d562c3137 +8494a6c5ddf8c5ddf8bed5ef59647021262a4b545fa3b7cec5ddf8c5ddf8 +b3c9e13d444c8190a2262b302a2f35b2c8e0c5ddf875839330363d23272c +5b6773c5ddf8c5ddf8b1c7df3e464e1c20233d444cb0c5ddc5ddf8b3c9e1 +424a53626e7b22272b5c6874c2daf5c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf839414866738123272c606c79b7cee7c5ddf8c5ddf8 +343a422a2f35697685c5ddf8c5ddf8b6cce53d444c2c32384d5661434c55 +3e464ebad1ebc0d7f22f353c626e7b24282d6d7b8abed5efc5ddf8c5ddf8 +c4dcf7000000c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffd0e3f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf88fa1b44b555f444d568190a2c4dcf7 +c5ddf8c5ddf8c5ddf8c5ddf8c1d9f42d333964707e24282d6c7988bdd4ee +c5ddf8c4dcf7657280212529272c318696a9c5ddf8c5ddf8b7cee7505a65 +262b30292e3492a4b8c5ddf87d8d9e2a2f3505060625292e2a2f358a9bae +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8acc1d849525c +25292e2d3339a3b7cec5ddf86976852a2f350000002a2f352a2f359eb1c7 +c5ddf8c5ddf8515b668696a93941481b1f238190a2c5ddf85b66722a2f35 +434b54c5ddf8c5ddf8c5ddf88b9caf606c79434b54272c317d8c9dc5ddf8 +c5ddf8b0c5dd525c6824282d697584515b67c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8171a1dafc4dcc5ddf8c5ddf8 +c5ddf8c5ddf8bfd6f10c0d0fc0d7f2c5ddf8c5ddf8c5ddf8c5ddf88495a7 +899aadc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8ffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffeff5fdc5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf85c6874373e46 +a8bcd4bdd4ee92a3b7c5ddf8c5ddf8c5ddf8030404c1d8f3c5ddf8c5ddf8 +c5ddf898aabfb7cee7c1d9f46c7988363d45c5ddf8c5ddf82125299fb3c9 +c5ddf8a3b7cec1d9f4c5ddf89cafc52b3036bfd6f1c2daf5a3b6cdc5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf890a2b50000008b9caf +abc0d721262a9fb2c8c5ddf8545e6a434b54b5cbe496a9bd24282dc5ddf8 +c5ddf8aec3db0607084a545eaabfd6a4b8cfb7cde6b0c5dd1b1e22bbd2ec +c4dcf7a1b5cbc5ddf8c5ddf83a414955606bb7cee75b6773373e46c5ddf8 +adc3da0000007a8899b7cde6252a2f9baec3c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf81214174b545fb6cce556616c57616dc5ddf8 +c5ddf8c5ddf87583934f5964c5ddf8c5ddf8b2c8e00e1012b7cde60a0b0c +8ea0b3464e5896a9bdbed6f0000000616d7ab5cbe4424a53707e8dc5ddf8 +c5ddf8c4dcf7000000c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffd0e3f9c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8454e580c0d0f0000000000000b0c0e +2d3238c1d9f4c5ddf8c5ddf8c5ddf8c1d8f30000005e6976b6cce5434c55 +6d7b8ac5ddf88495a71f2327a9bdd496a9bd0d0f11adc3dac5ddf8697584 +596470c4dcf7bad0eaabc0d7c5ddf8c5ddf8c5ddf8191c20abc0d7c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf84f5964 +72808fc5ddf8b3c9e1b2c8e0c5ddf8c5ddf8c5ddf8000000c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf830363d282d328ea0b3b7cee7a3b6cdc5ddf8c5ddf8 +a6bad11e2226c5ddf8c5ddf8c5ddf87a899a0d0e109fb3c9a8bcd40f1113 +c2daf5c5ddf83c434b677482b4cae33941482c3137c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8b7cde6090a0bc5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf81e2125a1b5cbc5ddf8c5ddf8c5ddf8c5ddf8 +3b424a454e57c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8ffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffeff5fd +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8191c20 +8fa1b4c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8030404c1d8f3c5ddf8 +c5ddf8c5ddf8bed5ef8ea0b35f6a774a535d191c20c5ddf8c5ddf8292e34 +545f6a98aabfc4dcf7c5ddf8c5ddf8a5b9d0121417768494adc3dac5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf890a2b5171a1d +c5ddf8c5ddf85a6571697685c5ddf8101315707e8d8b9caf899aad1c2023 +a9bed5c5ddf8aec3db000000aec3dbc5ddf8c5ddf8c5ddf8b7cde60d0f11 +6f7c8ca7bcd3c5ddf8c5ddf8c5ddf8060607a7bcd3c5ddf8adc2d9030303 +c1d9f4adc3da0d0e10c3dbf6c5ddf856616c6e7b8bc5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf812141795a7bbc5ddf8a2b6cc21262a +c5ddf8c5ddf8c5ddf87583934f5964c5ddf8c5ddf8b2c8e024282dc5ddf8 +1e2125acc1d85d68757d8c9dbed6f0000000afc4dcc5ddf88899ac3c434b +c5ddf8c5ddf8c4dcf7000000c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffd0e3f9c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf88595a80c0d0f000000000000000000 +000000090a0c63707dc5ddf8c5ddf8c5ddf8c1d8f3000000acc1d8c5ddf8 +8b9cb0394047c5ddf8505a655c6874c5ddf8c5ddf832383f7a899ac5ddf8 +72808f2a2f358495a7b8cfe8c5ddf8c5ddf8c5ddf8c5ddf8191c20abc0d7 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +58636f3940478b9cb0bdd4eec5ddf8c5ddf8c5ddf8c5ddf8000000c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf830363d677482c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8a6bad11e2226c5ddf8c5ddf8c5ddf87a899a3d454dc5ddf8c5ddf8 +23272ca2b6ccc1d8f30a0c0db9d0e9c5ddf88190a22c3137c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf897a9be23272cc5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8383f468191a3c5ddf8c5ddf8c5ddf8 +c5ddf8b0c5ddb1c7dfc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8ffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +eff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +0d0e10a8bcd4c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8030404c1d8f3 +c5ddf8c5ddf8c5ddf8454e57515b6790a2b5808fa114171ac5ddf8c5ddf8 +b8cfe86c7a89171a1d212529bad1ebc5ddf8c5ddf89fb3c94e5863040505 +5f6a77c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf890a2b5 +282d32c5ddf8c5ddf86b7887515b66c5ddf80506065f6a77687583687583 +687583a9bed5c5ddf8aec3db14171ac5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +a9bdd458636f0607084a535dc5ddf8c0d7f2000000bad1ebc5ddf8bed5ef +000000bad0eaadc3da1d2024c5ddf8c5ddf85d6875677482c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8121417a6bad1c5ddf8b3c9e1 +0a0b0cc4dcf7c5ddf8c5ddf87583934f5964c5ddf8c5ddf8b2c8e02b3036 +c5ddf824282db3c9e1626e7b758393bed6f0000000bed6f0c5ddf899acc1 +22272bc5ddf8c5ddf8c4dcf7000000c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c8dff8ffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffff9f9f9e7e7e7 +e6e6e6e5e5e5e4e4e4e2e2e2e1e1e1e0e0e0dfdfdfdedededddddddbdbdb +dadadad9d9d9d8d8d8d7d7d7d5d5d5d4d4d4d3d3d3d2d2d2d1d1d1d0d0d0 +cecececdcdcdcccccccbcbcbcacacac9c9c9c7c7c7a1b0c198aabf97a9be +96a9bd95a7bb94a6ba93a5b992a4b892a3b72b3036000000000000000000 +0000000000000000001f2327c5ddf8c5ddf8c5ddf8c1d8f3000000bcd3ed +c5ddf89cafc41f2327c5ddf8464e58707e8dc5ddf8c5ddf8444d566f7c8c +c5ddf8c4dcf7899aad363d450a0b0c8a9baec5ddf8c5ddf8c5ddf8191c20 +abc0d7c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c1d8f37e8e9f2b30361013159cafc5c5ddf8c5ddf8c5ddf8000000 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf830363d92a3b7c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8a6bad11e2226c5ddf8c5ddf8c5ddf87a899a505a65c5ddf8 +c5ddf82a2f359aadc2b7cde608090ac2daf5c5ddf88fa1b42c3137c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8a3b7ce181b1f +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf82d33398ea0b3c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf82f353c72808fc5ddf8c5ddf8c4dcf7c5ddf8c5ddf8c5ddf81e2226 +abc0d7c5ddf8c5ddf8c2daf50a0c0dbdd4eec5ddf8717f8e14171ac5ddf8 +c5ddf8c5ddf8c5ddf8b8cfe81f232791a2b6c5ddf8c5ddf8c5ddf8c5ddf8 +8e9fb216191cc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +90a2b5060607c1d9f4c5ddf8464e588393a5c5ddf8272c317e8e9fc5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8aec3db16191cc5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8a2b6cc060708c0d7f2c5ddf8171a1e8fa1b4c5ddf8 +96a9bd141619c5ddf8adc3da1d2024c5ddf8c5ddf85d6875677482c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf81214178190a2c5ddf8 +8e9fb23b424ac5ddf8c5ddf8c5ddf87583934f5964c5ddf8c5ddf8b2c8e0 +2b3036c5ddf824282db3c9e1626e7b758393bed6f00000009aadc2c5ddf8 +748292545f6ac5ddf8c5ddf8c5ddf8191c20b0c5ddc5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c8dff8ffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffc0c0c0 +1a1a1a4141414242424343434444444545454747474848484949494a4a4a +4b4b4b4c4c4c4e4e4e4f4f4f505050515151525252545454555555565656 +5757575858585a5a5a5b5b5b5c5c5c5d5d5d5e5e5e5f5f5f4e565e4b545f +4c55604d56614e57624f5964505a65515b66515b67131518000000000000 +00000000000000000000000016191cc5ddf8c5ddf8c5ddf8c1d8f3000000 +97a9bec5ddf8768595515b67c5ddf8626e7b444d56c5ddf8c5ddf81b1f23 +8ea0b3c5ddf8c5ddf8c5ddf8c5ddf85b667249525cc5ddf8c5ddf8c5ddf8 +282d339db0c6c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c2daf5434c55626e7cc5ddf8c5ddf8c5ddf8 +0f1113b7cde6c5ddf8c5ddf8c5ddf8c5ddf830363d94a6bac5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8a6bad11e2226c5ddf8c5ddf8c5ddf87a899a505a65 +c5ddf8c5ddf82a2f359aadc2c5ddf8282d329cafc5c5ddf8636f7d2c3137 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c1d8f3 +050606c0d7f2c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8111316afc4dcc5ddf8 +c5ddf8c5ddf8c5ddf895a8bc8ea0b3c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8ffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf89aadc2131518474f595c6874515b67c5ddf8c5ddf8c5ddf8 +6c7a8925292e4f5964b4c9e2c5ddf8404851404851525c6830363d14171a +c5ddf8c2daf5292e3465717f5964701c2023c1d8f3c5ddf87e8e9f454e57 +6a7786363d455d6875c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf890a2b51214172c313748515b25292eb7cee7c5ddf894a6ba16191c +4b545f5f6a77272c31b7cee7c5ddf8aec3db16191cc5ddf8c5ddf8c5ddf8 +c5ddf892a4b83d454d6a7786424a53464e58c5ddf8c5ddf8788797101315 +545f6a131518768494c5ddf8adc3da1d2024c5ddf8c5ddf85d6875677482 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf812141723272c +545e6a1c20238797aac5ddf8a1b5cb5b6773363d4525292e5b67738a9bae +b2c8e02b3036c5ddf824282db3c9e1626e7b758393bed6f0030303282d32 +525c681c202399acc1c5ddf8c5ddf8c5ddf8687583262b304f5964b7cde6 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c8dff8ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +c1c1c1676767ffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffd0e3f9 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8667281060708 +00000000000000000000000002030349525cc5ddf8c5ddf8c5ddf8c1d8f3 +010101282d33535d691b1f2398aabfc5ddf8b1c7df14171a454e5730363d +2e343ac4dcf7c5ddf856616c545f6a6774822125298ea0b3c5ddf8c5ddf8 +c5ddf86c7a89252a2f5a65719db0c6c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8434c555b6672636f7d191c20a6bad1c5ddf8c5ddf8 +c5ddf8545e6a2e343a5b6773aabfd6c5ddf8c5ddf830363d94a6bac5ddf8 +c5ddf8c5ddf8bbd2ec5b67734e57620d0f115b6773707d8dc5ddf87a899a +505a65c5ddf8c5ddf82a2f359aadc2c5ddf88393a51d20243f474f2f343b +2c3137c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8333a4196a9bdc5ddf8c5ddf8c5ddf8c5ddf8a9bed51e2226c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8454e57373e46c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8ffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8b5cbe48696a98495a7bad0eac5ddf8c5ddf8 +c5ddf8c5ddf8b0c6de93a5b9bed5efc5ddf8c4dcf793a5b98c9db1bad0ea +98abc0c5ddf8c5ddf8a4b8cf7e8e9f93a5b9c1d8f3c5ddf8c5ddf8bed6f0 +92a3b77d8c9da8bcd4c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf890a2b5343a42a1b5cb8d9eb1c4dcf7c5ddf8c5ddf8c5ddf8 +b4cae38595a88191a3adc3dac5ddf8c5ddf8bfd6f199acc1c5ddf8c5ddf8 +c5ddf8c5ddf8c1d9f497a9be7c8b9ca1b5cbc5ddf8c5ddf8c5ddf8c5ddf8 +9fb3c97d8c9d9fb2c8c5ddf8c5ddf8bfd6f19baec3c5ddf8c5ddf8abc0d7 +adc3dac5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8121417 +a3b6cd8494a6b8cfe8c5ddf8c5ddf8b4cae393a5b993a5b993a5b993a5b9 +a9bdd4c0d7f29fb2c8c5ddf89cafc5c1d8f3acc1d8b1c7dfbed6f0060607 +afc4dc8595a8bed5efc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8b0c5dd93a5b9 +bfd6f1c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c8dff8ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffc2c2c2656565ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +d0e3f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8bfd6f1 +1c2024040505000000000000020202121416b6cce5c5ddf8c5ddf8c5ddf8 +c1d8f3030404b0c5dd8495a7bdd4eec5ddf8c5ddf8c5ddf8b5cbe48292a4 +8a9baec0d7f2c5ddf8c5ddf8b6cce58899ac8292a4b4cae3c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8b6cce594a6bab2c8e0c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8b0c6de8494a68798abbad0eac5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8b0c6de94a6bab8cfe8c5ddf8c5ddf89fb3c9b9d0e9 +c5ddf8c5ddf8c5ddf8c0d7f293a5b993a5b993a5b993a5b99db0c6c5ddf8 +b2c8e0a8bcd4c5ddf8c5ddf89eb1c7bad1ebc5ddf8c5ddf8bdd4eea0b4ca +8292a4515b67c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf893a5b9424a53c5ddf8c5ddf8c5ddf8c5ddf856616c7e8e9f +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf81f23278292a4c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf890a2b5343a42c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +121417b2c8e0c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8bed6f0 +060607c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffc4c4c4646464ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffd0e3f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8bad0ea49525c131618111416404851b3c9e1c5ddf8c5ddf8c5ddf8 +c5ddf8c1d8f3030404c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf890a2b58899ac +8b9cb02a2f3590a2b5c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf857616dbed5efc5ddf8c5ddf8c4dcf7535d69 +c2daf5c5ddf8c5ddf8c5ddf8c5ddf8bad1eb3f474fc4dcf7c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8bfd6f1bbd2ec +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8a9bdd4788797c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf895a7bb6e7b8b6e7b8b6e7b8b6e7b8b738291c5ddf8 +c5ddf8657280bbd2ecc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c1d9f45f6b78c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffc5c5c5636363ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffd0e3f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c3dbf65e6976c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf895a7bb6e7b8b +6e7b8b6e7b8b6e7b8b738291c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8a2b6cc +5c68745e6976a6bad1c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffeff5fdc5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8434b542e343a +92a3b7c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffc6c6c6616161ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffd0e3f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffeff5fdc5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8b3c9e1141619 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffc8c8c8606060ffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffd0e3f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8ffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffeff5fdc5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf89eb1c7 +262b30c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffc9c9c95f5f5fffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffd0e3f9c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8bdd4ee8899acb4c9e2c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8ffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffeff5fd +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +8d9eb1323940c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffcacaca5d5d5dffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffd0e3f9c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8bcd3ed677482141619a9bdd4c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8ffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +eff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +7482922c31377d8d9ec5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c8dff8ffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffcbcbcb5c5c5c +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffd0e3f9c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8545f6a768595c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf88393a530363d717f8ec5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c8dff8ffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffcdcdcd +5b5b5bffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffd0e3f9c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf85f6a776c7988c5ddf8 +c5ddf8c5ddf8c5ddf8bed5ef363d459baec3c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8ffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf88fa1b42f353cc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c8dff8ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +cecece5a5a5affffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffd0e3f9 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf87482924b545f +c5ddf8c5ddf8c5ddf8c5ddf8bcd3ed11131690a2b5c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8ffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf89eb1c7262b30c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c8dff8ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffcfcfcf585858ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +d0e3f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8b6cce5 +282d322c3137b2c8e0c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8b6cce5121417c4dcf7c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffd1d1d1575757ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffd0e3f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +8e9fb2272c319fb3c9c2daf5c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf84f59642d33398c9db1 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffd2d2d2565656ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffd0e3f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8636f7d64707ec5ddf8c5ddf8c5ddf8c5ddf8c5ddf84b545f95a7bb +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffeff5fdc5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8b5cbe4bcd3edc5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8bed5efb4cae3c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffd3d3d3545454ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffd0e3f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf85e69766c7a89c5ddf8c5ddf8c5ddf8c5ddf8bfd6f1000000 +8797aac5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffeff5fdc5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8474f597d8d9ec5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf88a9bae404851c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffd4d4d4535353ffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffd0e3f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8bbd2ec333a4191a2b6c5ddf8c5ddf8c5ddf8c5ddf893a5b9 +1e2125c2daf5c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8ffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffeff5fdc5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8b5cbe4bcd3edc5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf88a9bae404851c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffd6d6d6525252ffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffd0e3f9c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8b4cae33940475f6b78bfd6f1c5ddf8c5ddf8c5ddf8c5ddf8 +95a8bc95a7bbc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8ffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffeff5fd +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8b2c8e0394148c5ddf8c5ddf8c5ddf83f474facc1d8c5ddf88a9bae +282d32202428626e7cc4dcf7c5ddf8aabfd62a2f352a2f358e9fb2c5ddf8 +c5ddf8c5ddf8a9bdd44a535d262b3057616d404851c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffd7d7d7505050ffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffd0e3f9c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8ffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +eff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8262b309baec3c5ddf8a3b6cd1e2226c5ddf8b1c7df +0a0c0d92a3b7abc0d7262b307f8fa0c5ddf8c5ddf8c5ddf8474f597d8d9e +c5ddf8c5ddf8c5ddf8282d327f8fa0afc4dc2a2f35404851c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c8dff8ffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffd8d8d84f4f4f +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffd0e3f9c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf86c7a8957616dc5ddf85f6a7765717fc5ddf8 +8393a5292e34c5ddf8c5ddf865717f47505ac5ddf8c5ddf8c5ddf8474f59 +7d8d9ec5ddf8c5ddf8b6cce50d0e10c4dcf7c5ddf86a7786404851c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c8dff8ffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffdadada +4e4e4effffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffd0e3f9c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8ffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8b1c7df16191cc3dbf61b1f23abc0d7 +c5ddf87988983d454dc5ddf8c5ddf87786963c434bc5ddf8c5ddf8c5ddf8 +474f597d8d9ec5ddf8c5ddf8a2b6cc1b1f23c5ddf8c5ddf87d8c9d404851 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c8dff8ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +dbdbdb4d4d4dffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffd0e3f9 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8ffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8343a426a77862c3238 +c5ddf8c5ddf895a7bb121417c5ddf8c5ddf84e58635b6773c5ddf8c5ddf8 +c5ddf8474f597d8d9ec5ddf8c5ddf8c4dcf7101315bad1ebc5ddf8545e6a +404851c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c8dff8ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffdcdcdc4b4b4bffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +d0e3f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf87b8a9b050606 +738291c5ddf8c5ddf8c5ddf83239402c313748515b141619adc3dac5ddf8 +8899ac5b67732125293a41495b6773a3b6cdc5ddf8616d7a25292e4c5560 +1c2023404851c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffdedede4a4a4affffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffd0e3f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8bed5ef +93a5b9bbd2ecc5ddf8c5ddf8c5ddf8c1d8f38b9caf8191a3b4c9e2c5ddf8 +c5ddf8a9bdd493a5b993a5b993a5b993a5b9b4cae3c5ddf8c5ddf8a9bed5 +8899acb2c8e0a4b8cfc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffdfdfdf494949ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffd0e3f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffeff5fdc5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffe0e0e0474747ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffd0e3f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffeff5fdc5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8bad0eaaec3dbc5ddf8c5ddf8c5ddf8bed6f0b3c9e1 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c4dcf7b6cce5c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8b7cee7bad0eac5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +b8cfe8c1d9f4c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffe1e1e1464646ffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffd1e4f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c6ddf8ffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffeff5fdc5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf84e5762282d32414952c5ddf8c5ddf8c5ddf891a2b6 +333a41c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8697685 +c4dcf7c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf88595a857616dc5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8a2b6cc8b9cb0 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf85b6672697685c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf86e7b8b6e7b8bc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffff +fffffffffffffffffffffffffffffffffffff6f6f6f1f1f1ffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffd7d7d7353535ffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffe3effcc5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8d6e7faffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffeff5fd +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8bad0ea131518c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +bed6f0b3c9e1c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +020202c2daf5c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c4dcf7262b30abc0d7c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf87a899a +4a535dc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8b7cee7bad0eac5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8bad0ea1e2125bed6f0c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8 +ffffffffffffffffffffffffe7e7e7999999404040646464fcfcfcffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffc3c3c3151515ffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffbfdffd6e7fac5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8d3e5faf4f8feffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +eff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8545e6a25292e0506062a2f35363c44c5ddf8c5ddf8 +4a545e2a2f35535d69c5ddf8c5ddf8c5ddf8c5ddf86774827d8d9e434c55 +1b1e226a7786c5ddf8adc2d94a535d25292e2c3238a2b6ccc5ddf86b7887 +2a2f350000002a2f352a2f359cafc5c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf82f353c74829223272c515b66bad0eac5ddf8a8bcd4 +363c441d20242b30368494a6c5ddf8a4b8cf424a53252a2f596470363c44 +4a545ec3dbf6c5ddf895a8bc32383f292e34768595c1d8f3c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf894a6ba31373ec5ddf8 +c5ddf8c5ddf8c5ddf88393a5363c4423272c49525cc5ddf8c5ddf82f343b +1a1d211012142a2f353e464ec5ddf8c5ddf8b1c7df3e464e7f8fa0252a2f +2a2f35b4c9e2bad1eb2a2f352a2f357d8d9ec5ddf8c5ddf8c5ddf8505a65 +7482922b30363d444ca6bad1c5ddf8c5ddf890a2b531373e363d455f6a77 +8a9baec5ddf8c5ddf8c5ddf848515b7d8c9dc5ddf8c5ddf8c5ddf8c5ddf8 +a7bcd3687583c3dbf6c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c8dff8ffffffd2d2d27c7c7c242424121212030303434343fcfcfcffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffc6c6c6131313 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffffffffafcfe +f6fafef6fafef6fafef6fafef6fafef6fafef6fafef6fafef6fafef6fafe +f6fafef6fafef6fafef6fafef6fafef6fafef6fafef6fafef6fafef6fafe +f6fafef6fafef6fafef6fafef6fafef6fafef6fafef6fafef6fafef6fafe +f6fafef6fafef6fafef6fafef6fafef6fafef6fafef6fafef6fafef6fafe +f6fafef6fafef6fafef6fafef6fafef6fafef6fafef6fafef6fafef6fafe +f6fafef6fafef6fafef6fafef6fafef6fafef6fafef6fafef6fafef6fafe +f6fafef6fafef6fafef6fafef6fafef6fafef6fafef6fafef6fafef6fafe +f6fafef6fafef6fafef6fafef6fafef6fafef6fafef6fafef6fafef6fafe +f6fafef6fafef6fafef6fafef6fafef6fafef6fafef6fafef6fafef6fafe +f6fafef6fafef6fafef6fafef6fafef6fafef6fafef6fafef6fafef6fafe +f6fafef6fafef6fafef6fafef6fafef6fafef6fafef6fafef6fafef6fafe +f6fafef6fafef6fafef6fafef6fafef6fafef6fafef6fafef6fafef6fafe +f6fafef6fafef6fafef6fafef6fafef6fafef6fafef8fbfeffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8a9bed51b1e22c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf891a2b6333a41c5ddf8c5ddf8c5ddf8c5ddf84d56611a1d21 +8292a4b9d0e99eb1c7c5ddf8515b67707d8dc5ddf8b4c9e2b1c7dfc5ddf8 +c5ddf8c5ddf8020202c2daf5c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf802020264707ebad0ea3a41498191a3c5ddf8 +adc3daa3b6cdc5ddf8a8bcd40a0b0cb1c7df9baec321262aaec3db000000 +a5b9d02f353cadc3daadc3da0d0e1092a4b8b8cfe84048518595a8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf86e7b8b515b66 +c5ddf8c5ddf8c5ddf8bdd4ee16191cb3c9e1c5ddf8a0b4cac5ddf8c5ddf8 +c5ddf87a899a4a535dc5ddf8c5ddf8c5ddf8c5ddf8acc1d80708094b545f +abc0d7a3b7ceb8cfe8c5ddf8c5ddf85b6672697685c5ddf8c5ddf8c5ddf8 +2f353c3f474fb7cde6626e7c535d69c5ddf8b5cbe41013159fb2c89cafc4 +0a0c0d768595c5ddf8c5ddf8c5ddf868758357616dc5ddf8c5ddf8c5ddf8 +c5ddf88595a8000000c1d8f3c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c1d8f3 +91a2b64b545d1717171313130303030000000808083a3a3af9f9f9ffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffc9c9c9 +131313ffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8a9bed51b1e22c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf891a2b6333a41c5ddf8c5ddf8c5ddf8c5ddf84d5661 +4a545ec5ddf8c5ddf8c5ddf8c5ddf85b6672373e468b9cafbdd4eec5ddf8 +c5ddf8c5ddf8c5ddf8020202c2daf5c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8020202b6cce5c5ddf8707e8d545f6a +c5ddf8c5ddf8a2b6cc6d7b8a55606b13151897a9be9baec33b424ac5ddf8 +08090ac1d9f4464e5893a5b972808f2b30368b9cb08a9bae5f6b7848515b +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf84e5863 +6b7887c5ddf8c5ddf8c5ddf8c1d9f4121417657280a0b4cac5ddf8c5ddf8 +c5ddf8c5ddf87a899a4a535dc5ddf8c5ddf8c5ddf8c5ddf8acc1d8000000 +b0c6dec5ddf8c5ddf8c5ddf8c5ddf8c5ddf85b6672697685c5ddf8c5ddf8 +c5ddf82f353c8899acc5ddf89fb2c8262b30c5ddf8808fa13f474fc5ddf8 +c5ddf8363c44768595c5ddf8c5ddf8c5ddf88292a4373e46c5ddf8c5ddf8 +c5ddf8c5ddf8bbd2eca6bad1c5ddf8c5ddf8c5ddf8b8cfe8667381282d32 +0a0b0c090a0b0000000000000000000000000404041e1e1e909090909090 +8b8b8b8686868282827d7d7d7878787373736e6e6e6969696464645f5f5f +5a5a5a5555555151514c4c4c4747474242423d3d3d3838383333332e2e2e +222222121212ffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8a9bed51b1e22c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf891a2b6333a41c5ddf8c5ddf8c5ddf8c5ddf8 +4d5661768494c5ddf8c5ddf8c5ddf8c5ddf8c1d9f47f8fa02c3137101214 +9baec3c5ddf8c5ddf8c5ddf8020202c2daf5c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8050606c5ddf8c5ddf8768595 +4e5762c5ddf88d9eb1272c318292a499acc11e212592a3b79baec3424a53 +c5ddf8111316c5ddf84a545e8c9db16572802b3036687583687583687583 +7c8b9cc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +5b6773606c79c5ddf8c5ddf8c5ddf8c5ddf8b0c6de626e7b0d0e10333a41 +c5ddf8c5ddf8c5ddf87a899a4a535dc5ddf8c5ddf8c5ddf8c5ddf8acc1d8 +171a1dc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf85b6672697685c5ddf8 +c5ddf8c5ddf82f353c9baec3c5ddf8a5b9d01f2327c5ddf86d7b8a4e5863 +c5ddf8c5ddf8454e57768595c5ddf8c5ddf8c5ddf8778696444d56c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8bed6f072808f171a1d +0202030506060000000000000000000000000000000505051e1e1e8c8c8c +9696969b9b9ba0a0a0a5a5a5a9a9a9aeaeaeb3b3b3b8b8b8bdbdbdc2c2c2 +c6c6c6cbcbcbd0d0d0d5d5d5dadadadfdfdfe3e3e3e8e8e8edededf2f2f2 +f7f7f7e0e0e0444444ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8a9bed51b1e22 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf891a2b6333a41c5ddf8c5ddf8c5ddf8 +c5ddf84d5661778696c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c3dbf6 +454e57606c79c5ddf8c5ddf8c5ddf8111316b4cae3c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8050606c5ddf8c5ddf8 +7685954e5762c5ddf84d5661778696c5ddf8b7cde602020292a3b79baec3 +424a53c5ddf8111316c5ddf84a545e8c9db1899aad1d2024c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf87c8b9c454e57c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8aec3db +0d0e10adc3dac5ddf8c5ddf88a9bae3c434bc5ddf8c5ddf8c5ddf8c5ddf8 +acc1d8181b1fc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf85b6672697685 +c5ddf8c5ddf8c5ddf82f353c9baec3c5ddf8a5b9d01f2327c5ddf8a3b6cd +22272bc4dcf7c4dcf71a1d21768595c5ddf8c5ddf8c5ddf85b677365717f +c5ddf8c5ddf8c5ddf8c5ddf8b1c7df7a899abdd4eec5ddf8c5ddf8c5ddf8 +c5ddf8c1d8f396a9bd5964701d21251313130e0e0e000000000000080808 +323232f3f3f3ffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffe5e5e5424242ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8a9bed5 +1b1e22c5ddf8c5ddf8c5ddf8b0c5dd5b6773434c55171a1e5b67737b8a9b +c5ddf8c5ddf84d5661778696c5ddf8c5ddf8c5ddf8c5ddf8454e575a6571 +64707e191c20a4b8cfc5ddf8c5ddf8c5ddf856616c2d33395b6773a9bed5 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8050606c5ddf8 +c5ddf87685954e5762c5ddf88798ab1e2226616d7a2a2f351a1d2192a3b7 +9baec3424a53c5ddf8111316c5ddf84a545e8c9db1c4dcf73d454d272c31 +626e7b48515b5f6b78c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8adc3da1e2125c4dcf7c5ddf8c5ddf8a7bcd3343a42687583 +4e58632f343bc5ddf8c5ddf8c5ddf8bdd4ee181b1f4a535d697685c5ddf8 +c5ddf8acc1d8181b1fc5ddf8c5ddf8c5ddf8c5ddf893a5b95b67732a2f35 +31373e5b677398aabfc5ddf82f353c9baec3c5ddf8a5b9d01f2327c5ddf8 +c5ddf847505a282d332c3137282d32768595c5ddf8c5ddf8c5ddf82e343a +99acc1c5ddf8c5ddf8c5ddf8c5ddf88fa1b4000000b2c8e0c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8f1f1f1b0b0b05d5d5d1b1b1b +1515150404042b2b2bf1f1f1ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffe8e8e83f3f3fffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffeff5fdc5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +bed6f09aadc2c5ddf8c5ddf8c5ddf8bbd2ec93a5b993a5b993a5b993a5b9 +a2b6ccc5ddf8c5ddf8a7bcd3b1c7dfc5ddf8c5ddf8c5ddf8c5ddf8b0c6de +8495a78797aab9d0e9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8b1c7df94a6ba +b8cfe8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf895a7bb +c5ddf8c5ddf8b1c7dfa7bcd3c5ddf8c5ddf8acc1d88292a4afc4dca0b4ca +b8cfe8bad1eba4b8cfc5ddf898aabfc5ddf8a6bbd2b7cde6c5ddf8c5ddf8 +98abc07c8b9c93a5b9c1d8f3c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf84b545f8b9cafc5ddf8c5ddf8c3dbf69cafc5 +7d8c9d9baec3c3dbf6c5ddf8c5ddf8c5ddf8c5ddf8c3dbf69fb3c99aadc2 +c5ddf8c5ddf8bed6f09aadc2c5ddf8c5ddf8c5ddf8c5ddf8adc3da93a5b9 +93a5b993a5b993a5b9b0c5ddc5ddf89fb3c9bad1ebc5ddf8bdd4ee9cafc4 +c5ddf8c5ddf8c5ddf8aabfd6b1c7df3941489cafc5c5ddf8c5ddf8a0b4ca +343a42c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8697685383f46c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffffffffffffffff +ffffffe3e3e39d9d9d4a4a4a4c4c4cedededffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffeaeaea3d3d3dffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffeff5fdc5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8a9bed56b7887c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf873829196a9bd7381901e2226c4dcf7c5ddf8c5ddf8 +7a899a9aadc2c5ddf8c5ddf8c5ddf8c5ddf8c5ddf85a65719eb1c7c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffffffffff +fffffffffffffffffffffffffffffffffffff3f3f3ffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffededed3b3b3bffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffeff5fdc5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf88b9caf6e7b8b6e7b8b6e7b8b6e7b8b7d8d9ec5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf87e8e9f525c68778696bad1ebc5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffefefef383838ffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffeff5fd +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffff1f1f1363636ffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffffffff9fcfe +e0edfbcde2f9cce1f9cce1f9cce1f9cce1f9cce1f9cce1f9cce1f9cce1f9 +cce1f9cce1f9cce1f9cce1f9cce1f9cce1f9cce1f9cce1f9cce1f9cce1f9 +cce1f9cce1f9cce1f9cce1f9cce1f9cce1f9cce1f9cce1f9cce1f9cce1f9 +cce1f9cce1f9cce1f9cce1f9cce1f9cce1f9cce1f9cce1f9cce1f9cce1f9 +cce1f9cce1f9cce1f9cce1f9cce1f9cce1f9cce1f9cce1f9cce1f9cce1f9 +cce1f9cce1f9cce1f9cce1f9cce1f9cce1f9cce1f9cce1f9cce1f9cce1f9 +cce1f9cce1f9cce1f9cce1f9cce1f9cce1f9cce1f9cce1f9cce1f9cce1f9 +cce1f9cce1f9cce1f9cce1f9cce1f9cce1f9cce1f9cce1f9cce1f9cce1f9 +cce1f9cce1f9cce1f9cce1f9cce1f9cce1f9cce1f9cce1f9cce1f9cce1f9 +cce1f9cce1f9cce1f9cce1f9cce1f9cce1f9cce1f9cce1f9cce1f9cce1f9 +cce1f9cce1f9cce1f9cce1f9cce1f9cce1f9cce1f9cce1f9cce1f9cce1f9 +cce1f9cce1f9cce1f9cce1f9cce1f9cce1f9cce1f9cce1f9cce1f9cce1f9 +cce1f9cce1f9cce1f9cce1f9cce1f9cce1f9cce1f9cce1f9d7e8faf2f7fd +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +eff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c8dff8ffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffff4f4f4333333 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +d8e8fac5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +cce1f9feffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c8dff8ffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffffffff6f6f6 +313131ffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fafcfefafcfefafcfefafcfefafcfefafcfefafcfefafcfefafcfefafcfe +fafcfefafcfefafcfefafcfefafcfefafcfefafcfefafcfefafcfefafcfe +fafcfefafcfefafcfefafcfefafcfefafcfefafcfefafcfefafcfefafcfe +fafcfefafcfefafcfefafcfefafcfefafcfefafcfefafcfefafcfefafcfe +fafcfefafcfefafcfefafcfefafcfefafcfefafcfefafcfefafcfefafcfe +fafcfefafcfefafcfefafcfefafcfefafcfefafcfefafcfefafcfefafcfe +fafcfefafcfefafcfefafcfefafcfefafcfefafcfefafcfefafcfefafcfe +fafcfefafcfefafcfefafcfefafcfefafcfefafcfefafcfefafcfefafcfe +fafcfefafcfefafcfefafcfefafcfefafcfefafcfefafcfefafcfefafcfe +fafcfefafcfefafcfefafcfefafcfefafcfefafcfefafcfefafcfefafcfe +fafcfefafcfefafcfefafcfefafcfefafcfefafcfefafcfefafcfefafcfe +fafcfefafcfefafcfefafcfefafcfefafcfefafcfefafcfefafcfefafcfe +fafcfefafcfefafcfefafcfefafcfefafcfefafcfefafcfefefeffffffff +ffffffc6def8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8f1f7fdffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c8dff8ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +f9f9f92f2f2fffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffeff5fd +d1e4f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c9e0f9 +e2eefbffffffc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8eff5fdffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c8dff8ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffbfbfb2c2c2cffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffffffffefeff +cae0f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8f3f8fec5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8eff5fdffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffdfdfd2a2a2affffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +f2f7fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8e0edfbc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8eff5fdffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff282828ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffff0f6fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8deecfbc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8eff5fdffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffeff5fdc5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff282828ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffff0f6fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8deecfbc5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8eff5fdffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffeff5fdc5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffff282828ffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffff0f6fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8deecfbc5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8eff5fdffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffeff5fdc5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffff282828ffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffff0f6fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8deecfbc5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8eff5fd +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffeff5fd +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8b5cbe4bcd3edc5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8bed5efb4cae3c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffff282828ffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffff0f6fdc5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8deecfbc5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +eff5fdffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +eff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8474f597d8d9e +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf88a9bae404851c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c8dff8ffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffff282828 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffff0f6fdc5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8deecfb +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8eff5fdffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8b5cbe4 +bcd3edc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf88a9bae404851c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c8dff8ffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +282828ffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffff0f6fdc5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +deecfbc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8eff5fdffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8b2c8e0394148c5ddf8c5ddf8c5ddf83f474f +acc1d8c5ddf88a9bae282d32202428626e7cc4dcf7c5ddf8aabfd62a2f35 +2a2f358e9fb2c5ddf8c5ddf8c5ddf8a9bdd44a535d262b3057616d404851 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c8dff8ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffff282828ffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffff0f6fdc5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8bed5efa6bad1a6bad1bad1ebc5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8b9d0e9 +b9d0e9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c3dbf6aec3dbc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8bdd4eea6bad1 +a6bad1bbd2ecc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8deecfbc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8eff5fdffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8262b309baec3c5ddf8a3b6cd +1e2226c5ddf8b1c7df0a0c0d92a3b7abc0d7262b307f8fa0c5ddf8c5ddf8 +c5ddf8474f597d8d9ec5ddf8c5ddf8c5ddf8282d327f8fa0afc4dc2a2f35 +404851c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c8dff8ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffff282828ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffffffff0f6fd +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8aabfd64f59641a1d218393a5c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +64707e667381c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8b3c9e1111316c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8a7bcd3 +4f5964181b1f8798abc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8deecfbc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8eff5fdffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf86c7a8957616dc5ddf8 +5f6a7765717fc5ddf88393a5292e34c5ddf8c5ddf865717f47505ac5ddf8 +c5ddf8c5ddf8474f597d8d9ec5ddf8c5ddf8b6cce50d0e10c4dcf7c5ddf8 +6a7786404851c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffff282828ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +f0f6fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf84149528393a5c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf864707e667381c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c3dbf6aec3dbc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf83d444c8798abc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8deecfbc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf88899ac7482928494a6 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8bad0ea748292748292a3b7ce +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf897a9bea9bdd4c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf88797aa7482928696a9c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8eff5fdffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8b1c7df16191c +c3dbf61b1f23abc0d7c5ddf87988983d454dc5ddf8c5ddf87786963c434b +c5ddf8c5ddf8c5ddf8474f597d8d9ec5ddf8c5ddf8a2b6cc1b1f23c5ddf8 +c5ddf87d8c9d404851c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff282828ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffff0f6fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +8494a62a2f351b1f23444d56c5ddf8c5ddf8c5ddf84149528393a5c5ddf8 +c5ddf8c5ddf8a2b6cc333a411d20242c32388b9cafc5ddf8c5ddf8b3c9e1 +4d5661252a2f2b303698abc0c5ddf8c5ddf88c9db139404723272c3c434b +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8a3b7ce +414952292e346774826b7887c5ddf8c5ddf87f8fa02a2f35333a418797aa +c5ddf8c5ddf85c687472808f2e343a363d459eb1c7c5ddf8c5ddf898abc0 +383f4630363d49525c667381c5ddf8c4dcf76e7b8b262b303d444c93a5b9 +c5ddf8c5ddf8c5ddf8353b438d9eb12f353c2125299baec3c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8697685626e7b2b3036424a53a3b6cd +c5ddf8c5ddf865717f2a2f35394047c5ddf8c5ddf8c5ddf84c5560454e57 +282d33626e7b2c32389cafc4c5ddf855606b64707e252a2f4e5863adc2d9 +c5ddf8c5ddf8c5ddf83d444c8798abc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8deecfbc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf892a3b7697584 +25292ec5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8bbd2ec8190a2363d45 +717f8ec5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf85b66728292a4c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf890a2b5657280292e34c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8eff5fdffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffeff5fdc5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +343a426a77862c3238c5ddf8c5ddf895a7bb121417c5ddf8c5ddf84e5863 +5b6773c5ddf8c5ddf8c5ddf8474f597d8d9ec5ddf8c5ddf8c4dcf7101315 +bad1ebc5ddf8545e6a404851c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff282828ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffff0f6fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +99acc11416198fa1b4c2daf58b9cafc5ddf8c5ddf8c5ddf84149528393a5 +c5ddf8c5ddf8c5ddf8a9bed5a6bad1c5ddf8a2b6cc090a0bb8cfe8c5ddf8 +5f6a77626e7cc4dcf7b7cee7adc3dac5ddf8c2daf5191c20a9bed5c5ddf8 +9fb3c9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +1b1e228595a8adc2d922272b4d5661c5ddf892a3b7181b1fa2b6ccb0c5dd +262b30a9bdd4c5ddf83f474f333a41b4c9e2717f8e434c55c5ddf8bfd6f1 +1113169aadc2a1b5cb131518667381c5ddf8788797282d33abc0d7a7bcd3 +1b1f23bcd3edc5ddf8c5ddf80d0e103b424a9db0c6b0c5ddabc0d7c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8505a651f2327aabfd68d9eb1 +191c20c5ddf8c5ddf8c5ddf8b3c9e1111316c5ddf8c5ddf8c5ddf82a2f35 +8fa1b4414952515b668494a658626ec5ddf8363d4530363db1c7df768494 +323940c5ddf8c5ddf8c5ddf83d444c8798abc5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8deecfbc5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c4dcf7b0c5ddb8cfe8c5ddf8c5ddf8c5ddf8 +9fb3c925292ec5ddf8c5ddf8c5ddf8c5ddf8c5ddf8b4cae3b1c7dfc5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8bed5efafc4dcc4dcf7c5ddf8c5ddf8c5ddf8 +c5ddf8b4c9e2b9d0e9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c2daf5c1d9f4bed5efbdd4eec5ddf8c5ddf8c5ddf8c5ddf8 +c4dcf7b4c9e2c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8b8cfe8b5cbe4c5ddf8 +c5ddf8c5ddf8c1d9f4c2daf5bad1ebc1d8f3c5ddf8c5ddf8c5ddf8c5ddf8 +535d69717f8ec5ddf8c5ddf8c5ddf8c5ddf8c5ddf8bbd2ecbcd3edc5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8bfd6f1 +c4dcf7b7cde6c5ddf8c5ddf8c5ddf8c4dcf7bed6f0bed6f0c2daf5c5ddf8 +c5ddf8c3dbf6c1d9f4b4cae3c4dcf7b9d0e9c3dbf6c5ddf8c4dcf7c0d7f2 +c2daf5b8cfe8c5ddf8c5ddf8c5ddf8c5ddf89baec3292e34c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8eff5fdffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffeff5fdc5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf87b8a9b050606738291c5ddf8c5ddf8c5ddf83239402c313748515b +141619adc3dac5ddf88899ac5b67732125293a41495b6773a3b6cdc5ddf8 +616d7a25292e4c55601c2023404851c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffff282828ffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffff0f6fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf857616d515b66c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8414952 +8393a5c5ddf8c5ddf8c5ddf8c4dcf79fb2c86b788755606b0e1012a1b5cb +c5ddf86875832f353c8798abbad1ebc5ddf8c5ddf8c5ddf81e21255c6874 +9baec3c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +a9bed516191cc5ddf8c5ddf85f6b784d5661c5ddf84e5863444d568b9cb0 +899aad474f596c7988c5ddf83f474f788797c5ddf8aec3db171a1dc5ddf8 +91a2b630363dc5ddf8c5ddf8444d56667381c5ddf8353b4357616d8b9caf +899aad353b438595a8c5ddf8c5ddf80d0e108b9cafc5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8505a6557616dc5ddf8 +c5ddf81b1e22a9bed5c5ddf8c5ddf8b3c9e1111316c5ddf8c5ddf8c5ddf8 +2a2f35acc1d85b67736e7b8b9baec33e464ec5ddf8363d45707e8dc5ddf8 +c1d8f30a0c0dbed5efc5ddf8c5ddf83d444c8798abc5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8deecfbc5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf89baec3171a1d23272c21262a7b8a9bc5ddf8 +c5ddf89fb3c925292ec5ddf8c5ddf8c5ddf8c5ddf8363c442c31372b3036 +212529a9bdd4c5ddf8c5ddf8505a652d3339383f46363c44c5ddf8c5ddf8 +b0c5dd2a2f35363d452b3036758393c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf86673812f343b1b1f231f23276c7a89c5ddf8c5ddf8 +96a9bd171a1d282d3331373e99acc1c5ddf8c5ddf84e576210121416191c +3d444cc1d9f4c5ddf84d5661333a411e21252024287e8e9fc5ddf8c5ddf8 +c5ddf8535d69717f8ec5ddf8c5ddf8c5ddf8c1d9f44a535d14171a282d32 +58636fc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8aec3db +0f11132a2f3522272b434c55b4cae3c5ddf8afc4dc30363d121417798898 +c5ddf8c5ddf8899aad1b1e2221262a2f353c2b30362c3137c5ddf895a7bb +1d202420242821262a505a65bed5efc5ddf8c5ddf89baec3292e34c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8eff5fdffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffeff5fdc5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8bed5ef93a5b9bbd2ecc5ddf8c5ddf8c5ddf8c1d8f38b9caf +8191a3b4c9e2c5ddf8c5ddf8a9bdd493a5b993a5b993a5b993a5b9b4cae3 +c5ddf8c5ddf8a9bed58899acb2c8e0a4b8cfc5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffff282828ffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffff0f6fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf84a545e6a7786c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +4149528393a5c5ddf8c5ddf8c5ddf88494a62c32388495a799acc116191c +9cafc4c5ddf8c3dbf68495a732383f0c0d0f92a3b7c5ddf8c5ddf8b5cbe4 +687583111316282d32c0d7f2c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf897a9be25292ec5ddf8c5ddf86e7b8b4d5661c5ddf8424a533d454d +6875836875836875838d9eb1c5ddf83f474f8b9cb0c5ddf8b4cae3101214 +c5ddf87b8a9b414952c5ddf8c5ddf857616d667381c5ddf8282d334b545f +68758368758368758398abc0c5ddf8c5ddf80d0e10b5cbe4c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8505a65687583 +c5ddf8c5ddf82b303690a2b5c5ddf8c5ddf8b3c9e1111316c5ddf8c5ddf8 +c5ddf82a2f35b2c8e0626e7b7482929fb3c9363d45c5ddf8363d458191a3 +c5ddf8c5ddf8111316aabfd6c5ddf8c5ddf83d444c8798abc5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8deecfbc5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c4dcf71b1f237d8c9dc5ddf8c5ddf8b3c9e1 +c5ddf8c5ddf89fb3c925292ec5ddf8c5ddf8c5ddf8c5ddf8b7cde6c5ddf8 +c5ddf864707e535d69c5ddf8afc4dc15181bc5ddf8c5ddf8bfd6f1c5ddf8 +c5ddf86572805f6a77c5ddf8c5ddf8bfd6f1c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf86673811e2226bed6f0bbd2ec14171ab8cfe8 +c1d8f316191c8ea0b3c5ddf89baec33b424ac5ddf891a2b6171a1ebcd3ed +c1d8f32c31377d8c9dc5ddf84d5661353b43c2daf5b2c8e0121417c4dcf7 +c5ddf8c5ddf8535d69717f8ec5ddf8c5ddf8c5ddf873819030363dc1d9f4 +c4dcf7373e469fb3c9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +aec3db00000096a9bdc5ddf8515b66738190c5ddf8c5ddf8c5ddf84b545f +798898c5ddf8c5ddf8899aad3f474facc1d8030303c3dbf6282d32b9d0e9 +95a7bb000000afc4dcc3dbf63940478c9db1c5ddf8c5ddf89baec3292e34 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8eff5fd +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffeff5fd +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffff282828ffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffff0f6fdc5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf86d7b8a343a42c5ddf8c5ddf8c4dcf7c5ddf8c5ddf8 +c5ddf85c68746d7b8ac5ddf8c5ddf8c5ddf8434b548191a3c5ddf8afc4dc +0000009cafc4c5ddf8c5ddf8c5ddf8c4dcf7515b67535d69c5ddf8c5ddf8 +c5ddf8c5ddf8b4cae3171a1d9db0c6c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c1d9f40d0f11bad1ebc5ddf8424a534d5661c5ddf8657280 +404750c5ddf8c5ddf8c5ddf8c5ddf8c5ddf83f474f8b9cb0c5ddf8b4cae3 +101214c5ddf8adc3da1c2023c5ddf8c5ddf82e343a667381c5ddf84b545f +5a6571c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf80d0e10b7cee7c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8505a65 +424a53c5ddf8c3dbf60d0f11bdd4eec5ddf8c5ddf8b3c9e1111316c5ddf8 +c5ddf8c5ddf82a2f35b2c8e0626e7b7482929fb3c9363d45c5ddf8363d45 +5c6874c5ddf8b2c8e0171a1dc5ddf8c5ddf8c5ddf857616d72808fc5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8deecfbc5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8aec3db070809bed6f0c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf89fb3c925292ec5ddf8c5ddf8c5ddf8c5ddf895a7bb +525c682c31371d2024404750c5ddf8c3dbf624282d3a4149738190bad1eb +c5ddf8c5ddf895a7bb171a1d515b668d9eb1c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf86673814a545ec5ddf8c5ddf83a4149 +8696a9a6bad10606075b667258636f57616d0a0c0dbed6f06b788747505a +c5ddf8c5ddf85d6875535d69c5ddf84d566164707ec5ddf8c5ddf8212529 +9fb3c9c5ddf8c5ddf8535d69717f8ec5ddf8c5ddf8c5ddf8424a53343a42 +5a657158626e2e343a64707ec5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8aec3db060607c1d9f4c5ddf88292a43e464ec5ddf8c5ddf8c5ddf8 +4b545f798898c5ddf8c5ddf8899aad515b66bed5ef131518c5ddf8363c44 +a2b6cc95a7bb1c2023c5ddf8c5ddf869758458626ec5ddf8c5ddf89baec3 +292e34c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +eff5fdffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +eff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8a9bdd4a6bad1b1c7dfc5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8b8cfe8c1d9f4c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c1d8f3b0c6dec5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8bfd6f1bad1ebc5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c8dff8ffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffff282828 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffff0f6fdc5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8bdd4ee282d332c3238626e7c2d3339c5ddf8 +c5ddf8c5ddf89fb2c81b1f234b545f8fa1b4c5ddf87e8e9f22272b606c79 +2b303616191c9cafc4c5ddf84e586357616d6572801e212598aabfc5ddf8 +b6cce52e343a66738155606b22272bc4dcf7c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf86a77861e2226373e462c32384d5661c5ddf8 +bad0ea252a2f343a42636f7d3d454d7d8d9ec5ddf83f474f8b9cb0c5ddf8 +b4cae3101214c5ddf8c5ddf83e464e353b433d444c181b1f667381c5ddf8 +acc1d81c20233e464e626e7c343a4295a7bbc5ddf8c5ddf80d0e10b7cee7 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +505a65171a1e474f592a2f35535d69c5ddf8c1d9f45b6773535d6908090a +5b6773697584c5ddf82a2f35b2c8e0626e7b7482929fb3c9363d45c5ddf8 +363d451b1f234e586322272b697685c5ddf8c5ddf8c5ddf89baec31b1f23 +4c556092a3b7c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8deecfb +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8aec3db070809bed6f0c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8a1b5cb23272cc5ddf8c5ddf8c5ddf8bed5ef +171a1d9cafc5c3dbf67382913d454dc5ddf8c5ddf8c3dbf68ea0b323272c +191c20c4dcf7c5ddf8c5ddf8b7cde66c7a89070809626e7cc5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf86673814a535dc5ddf8c5ddf8 +3a41498494a6a6bad10b0d0e98abc099acc199acc199acc1c1d9f46b7887 +474f59c5ddf8c5ddf85d6875535d69c5ddf84d5661636f7dc5ddf8c5ddf8 +2125299db0c6c5ddf8c5ddf8545e6a707e8dc5ddf8c5ddf8c5ddf8424a53 +58636f99acc199acc199acc1acc1d8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8aec3db060607c1d9f4c5ddf88292a43b424ac5ddf8c5ddf8 +c5ddf84b545f798898c5ddf8c5ddf8899aad545e6ac1d8f316191cc5ddf8 +3940479eb1c795a7bb1b1f23c5ddf8c5ddf869758455606bc5ddf8c5ddf8 +9cafc4282d33c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8eff5fdffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8596470333a41464e58c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf88c9db1a1b5cbc5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8bed5ef24282dc0d7f2c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8697584c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8a6bad11e2226 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8b4c9e22a2f35c4dcf7 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c8dff8fffffff5f5f5ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +282828ffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffff0f6fdc5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c1d9f491a2b67d8d9ea9bdd4 +c5ddf8c5ddf8c5ddf8c5ddf8bed6f095a8bcaec3dbc5ddf8c5ddf8a9bdd4 +8393a5b1c7df9eb1c7bad1ebc5ddf8b4c9e28797aa8495a7b7cde6c5ddf8 +c5ddf8c5ddf8a0b4ca7d8c9d96a9bdc1d9f4c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8b4cae3a7bcd3626e7c738190 +c5ddf8c5ddf8c1d8f390a2b57c8b9c9cafc4c4dcf7c5ddf8a3b7ceb7cde6 +c5ddf8c1d8f398aabfc5ddf8c5ddf8c5ddf89baec393a5b9adc2d9adc3da +c5ddf8c5ddf8bcd3ed8b9cb07d8d9ea3b6cdc5ddf8c5ddf8c5ddf897a9be +c1d9f4c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8505a6572808f8b9cb0a3b7cec5ddf8c5ddf8c4dcf793a5b993a5b9 +93a5b993a5b999acc1c5ddf89eb1c7c0d7f2acc1d8b0c6debbd2eca1b5cb +c5ddf8363d458797aa8797aaadc3dac5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +bed5ef95a7bbb0c5ddc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +deecfbc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c4dcf71b1f237d8c9d +c5ddf8c5ddf8b3c9e1c5ddf8c5ddf8bfd6f1111316bad0eac5ddf8c5ddf8 +a5b9d01e2125c5ddf8c0d7f232383f3d454dc5ddf8bcd3edbfd6f1c5ddf8 +bad0ea0d0f11bad1ebc5ddf8b6cce5c5ddf8c5ddf8768494474f59c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf86673811e2125bdd4ee +bad0ea141619b7cee7c1d8f316191c8b9cb0c5ddf8c5ddf8b1c7dfc5ddf8 +92a4b816191cbad0eabfd6f12a2f357e8e9fc5ddf84d5661323940c1d9f4 +b0c5dd111316c4dcf7c5ddf8c5ddf87d8c9d49525cc5ddf8c5ddf8c5ddf8 +73819030363dbed6f0c5ddf8c0d7f2b6cce5c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8aec3db00000093a5b9c5ddf84e586372808fc5ddf8 +c5ddf8c5ddf84b545f798898c5ddf8c5ddf8899aad545e6ac1d8f316191c +c5ddf83940479eb1c795a7bb000000acc1d8c2daf5363d458b9cb0c5ddf8 +c5ddf8bdd4ee111316bcd3edc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8eff5fdffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf87e8e9f464e58c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf84c5560788797c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf86e7b8b626e7cc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8000000c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c1d8f3 +b0c6dec5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf849525c +8798abc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +bed5ef8b9caf485059555555f0f0f0ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffff292929ffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffff0f6fdc5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf88292a48fa1b48292a41c2023 +afc4dcc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8505a65748292c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8363d458e9fb2c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8deecfbc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf89cafc4 +1b1e2223272c24282d7c8b9cc5ddf8c5ddf8c5ddf8707e8d1e2226282d33 +c5ddf8c5ddf8454e57282d321b1f234a535d3d454dc5ddf8a1b5cb171a1e +383f46282d33657280c5ddf8c5ddf85f6b7821262a373e46292e349eb1c7 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf86673812d3339 +191c201e22266c7a89c5ddf8c5ddf897a9be191c20262b30252a2f394148 +c5ddf8c5ddf84e57620f111315181b3d444cc1d9f4c5ddf84d566131373e +1c20231f23277e8e9fc5ddf8c5ddf8c5ddf8b8cfe84047501b1e22697685 +c5ddf8c1d9f44e57620e101232383f1b1f2390a2b5c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8aec3db0e1012272c3121262a434c55b4cae3 +c5ddf8707d8d2a2f351012141a1d212a2f358ea0b3899aad545e6ac1d8f3 +16191cc5ddf83940479eb1c795a7bb1d20241d2024202428505a65bed5ef +c5ddf8c5ddf8c5ddf86c7a891e21252d3339c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8eff5fdffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf87e8e9f464e58c5ddf8 +c5ddf8c5ddf8c4dcf7444d561e222624282d616d7ac2daf5c5ddf8c5ddf8 +6673812c323824282d6d7b8ac5ddf8a6bad12a2f351012141a1d212a2f35 +626e7cc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8667381 +707d8d32383f32383f98aabfc5ddf8c5ddf855606b20242821262a545f6a +bed6f0c5ddf8434c55444d562c32385f6a772f343ba1b5cbc5ddf8b7cde6 +4d566121252956616cadc3dac5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8191c20adc2d9c5ddf8c5ddf8c5ddf8acc1d8 +49525c25292e2d3339a3b7cec5ddf86976852a2f350000002a2f352a2f35 +9eb1c7c5ddf8c5ddf8515b668696a93941481b1f238190a2c5ddf85a6571 +2a2f35434b54c5ddf8c5ddf8c5ddf88b9caf606c79434b54272c317d8c9d +c5ddf8c5ddf8b0c5dd525c6824282d697584525c68c5ddf8c5ddf8c5ddf8 +93a5b9323940c5ddf8c5ddf8c5ddf8c5ddf8c5ddf86d7b8aa0b4cac5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8adc2d9707d8d +292f340c0e0f0304041e2225f0f0f0ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffff2b2b2bfdfdfdffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffffffff0f6fd +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf893a5b957616d687583 +b0c6dec5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8b0c5dd6e7b8b6e7b8b6e7b8b6e7b8b +6e7b8bafc4dcc5ddf88797aa9aadc2c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf87a8899a7bcd3c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8deecfbc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8b1c7dfbbd2ecc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8b7cee7c1d8f3c5ddf8c5ddf8c5ddf8c5ddf8 +c1d9f4adc3dac2daf5c5ddf8c5ddf8c5ddf8c5ddf8bad0eab2c8e0c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8667381 +5e6976bed5efbdd4eec5ddf8c5ddf8c5ddf8c5ddf8c5ddf8b1c7dfb8cfe8 +c5ddf8c5ddf8c5ddf8c5ddf8b8cfe8b5cbe4c5ddf8c5ddf8c5ddf84d5661 +778696bad0eac1d8f3c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8bed6f0aec3dbc2daf5c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8aec3db16191cc4dcf7b7cde6c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf895a7bb2f353cc2daf5b8cfe8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8eff5fdffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf87e8e9f464e58 +c5ddf8c5ddf8c5ddf8c4dcf78ea0b3c2daf5b6cce52c32388190a2c5ddf8 +9cafc52b3036bfd6f1c2daf5a3b6cdc5ddf8c5ddf8c5ddf84c5560788797 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +4b545f2a2f35b0c6de7d8c9d373e46c5ddf8c5ddf88fa1b4c0d7f2bad1eb +3f474f697685c5ddf820242899acc1363d455b6773798898626e7cc5ddf8 +3a414956616cbad0ea8190a23a4149c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8b8cfe8070809c4dcf7c5ddf8c5ddf8c5ddf8 +4f596472808fc5ddf8b3c9e1b2c8e0c5ddf8c5ddf8c5ddf8000000c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf830363d282d328ea0b3b7cee7a3b6cdc5ddf8 +c5ddf8a6bad11e2226c5ddf8c5ddf8c5ddf87a88990d0e109fb3c9a7bcd3 +0f1113c2daf5c5ddf83c434b677482b4cae33941482c3137c5ddf8c5ddf8 +c5ddf8b2c8e00d0e10c5ddf8c5ddf8c5ddf8c5ddf8c5ddf80a0b0c768595 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c2daf595a8bc535d6815181b0e1011 +0505060000000202021f2327bcd2e9ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffff2d2d2dfbfbfbffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +f0f6fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8deecfbc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +6673815e6976c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +4d5661778696c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8aec3db16191cc5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf895a7bb2f353cc5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8eff5fdffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf87e8e9f +464e58c5ddf8c5ddf8c5ddf8c5ddf8b0c5dd7a899a57616d292e3464707e +c5ddf8a5b9d0121417768494adc3dac5ddf8c5ddf8c5ddf8c5ddf84c5560 +788797c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf84b545f6c7988c5ddf8bad1eb0a0c0dc5ddf8c5ddf8b4cae38190a2 +58636f333a414d5661c5ddf8202428b7cde6515b6679889890a2b549525c +bcd3ed0202028190a28b9caf8899ac111316bdd4eec5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf899acc1212529c5ddf8c5ddf8c5ddf8 +c5ddf858626e3940478b9cb0bdd4eec5ddf8c5ddf8c5ddf8c5ddf8000000 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf830363d677482c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8a6bad11e2226c5ddf8c5ddf8c5ddf87a88993d454dc5ddf8 +c5ddf823272ca2b6ccc1d8f30a0c0db9d0e9c5ddf88190a22c3137c5ddf8 +c5ddf8c5ddf8c5ddf8070809b3c9e1c5ddf8c5ddf8c5ddf8c5ddf8a8bcd4 +b9d0e9c5ddf8c5ddf8b5cbe4616d7a252a2f090a0b090a0b000000000000 +000000000000010101141619778696808f9fa1a1a1a0a0a09e9e9e9c9c9c +9a9a9a9898989797979595959393939191918f8f8f8e8e8e8c8c8c8a8a8a +8888888686868585858383838181817f7f7f7d7d7d7c7c7c7a7a7a787878 +767676747474737373717171141414f8f8f8ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffff0f6fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8deecfbc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8aabfd6a8bcd4c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8a3b7ceafc4dcc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +8292a46e7b8b6e7b8b6e7b8b6e7b8b8696a9c5ddf8bed6f094a6bac5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8b7cee79baec3c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8eff5fdffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffeff5fdc5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +7e8e9f464e58c5ddf8c5ddf8c5ddf8b8cfe816191c76849498aabf464e58 +5f6a77c5ddf8c5ddf89fb3c94e58630405055f6a77c5ddf8c5ddf8c5ddf8 +4c5560788797c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf84b545f7f8fa0c5ddf8c1d8f3030404c5ddf8c1d9f4191c20 +6f7c8c96a9bd58626e47505ac5ddf8202428bdd4ee58626e7f8fa095a8bc +414952b0c6de040505677482687583687583687583b6cce5c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8a6bad116191cc5ddf8c5ddf8 +c5ddf8c5ddf8c1d8f37d8d9e2a2f351013159cafc5c5ddf8c5ddf8c5ddf8 +000000c5ddf8c5ddf8c5ddf8c5ddf8c5ddf830363d92a3b7c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8a6bad11e2226c5ddf8c5ddf8c5ddf87a8899515b66 +c5ddf8c5ddf8292e349baec3b7cde608090ac2daf5c5ddf88fa1b42c3137 +c5ddf8c5ddf8c5ddf8c0d7f2030404bed5efc5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8bfd6f17a899a1f2328030304060708000000000000 +000000000000000000020303171a1d616d7b677480858585878787898989 +8b8b8b8c8c8c8e8e8e9090909292929494949595959797979999999b9b9b +9d9d9d9e9e9ea0a0a0a2a2a2a4a4a4a5a5a5a7a7a7a9a9a9abababadadad +aeaeaeb0b0b0b2b2b2b4b4b4b5b5b5b7b7b7fdfdfdffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffff0f6fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c3dbf6a2b6cc93a5b9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8deecfbc5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8eff5fdffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffeff5fdc5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf899acc12f353cc5ddf8c5ddf8c5ddf8808fa1444d56c5ddf8c5ddf8 +262b305f6a77c5ddf8c5ddf8c5ddf8c5ddf88e9fb216191cc5ddf8c5ddf8 +c5ddf85b67736a7786c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf84b545f7f8fa0c5ddf8c1d8f3030404c5ddf897a9be +2d3339c5ddf8c5ddf83d454d47505ac5ddf8202428bdd4ee58626e7f8fa0 +95a8bc414952c4dcf70f111398aabfc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c1d9f4060607bed6f0 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c2daf5434b54626e7cc5ddf8c5ddf8 +c5ddf80f1113b7cde6c5ddf8c5ddf8c5ddf8c5ddf830363d94a6bac5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8a6bad11e2226c5ddf8c5ddf8c5ddf87a8899 +515b66c5ddf8c5ddf8292e349baec3c5ddf8272c319cafc5c5ddf8626e7c +2c3137c5ddf8c5ddf8c5ddf8a6bad11b1e22c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf88494a6a0b4cac5ddf8c5ddf8c5ddf8c5ddf8c2daf59aadc25c6874 +1e22260e10120a0b0d0000000000000607082d3339c3d8f1ffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffff0f6fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf858636f373e46899aadc5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8deecfbc5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8eff5fdffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffeff5fdc5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c4dcf7282d333d454d6b7887c5ddf8b4c9e21214175e6976 +323940272c315f6a77c5ddf87e8e9f454e576a7786363d455d6875c5ddf8 +c5ddf8c5ddf899acc1191c20545e6a8292a4c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf84b545f7f8fa0c5ddf8c1d8f3030404c5ddf8 +c0d7f2171a1d5964703d444c292e3447505ac5ddf8202428bdd4ee58626e +7f8fa095a8bc414952c5ddf88190a215181b545e6a5a6571292e34c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8363c44 +94a6bac5ddf8c5ddf8c5ddf8434c555b6672636f7d191c20a6bad1c5ddf8 +c5ddf8c5ddf8545e6a2f343b5b6773aabfd6c5ddf8c5ddf830363d94a6ba +c5ddf8c5ddf8c5ddf8bad1eb5b67734d56610e10125b6773707d8dc5ddf8 +7a8899515b66c5ddf8c5ddf8292e349baec3c5ddf88393a51d20243f474f +2f343b2c3238c5ddf8c5ddf8c5ddf87988984f5964c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8141619687583c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8b8cfe88595a8424a531113150f11130202032c3036f8f8f8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffff0f6fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf821262aa3b7cec5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8deecfbc5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf88798ab596470adc3da +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8eff5fd +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffeff5fd +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf89fb2c89fb2c8c5ddf8c5ddf8b9d0e9 +8494a6a0b4caadc3daabc0d7c5ddf8bed6f092a3b77d8c9da8bcd4c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8bfd6f198abc0a6bad1c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8a6bbd2b4c9e2c5ddf8c4dcf795a7bb +c5ddf8c5ddf8bed5ef8797aa99acc1b3c9e1a6bad1c5ddf89cafc4c3dbf6 +a9bed5b4c9e2b9d0e9a4b8cfc5ddf8c5ddf8aec3db8191a38595a8b4c9e2 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +95a8bc404750c5ddf8c5ddf8c5ddf8b0c6de8494a68798abbad0eac5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8b0c6de94a6bab8cfe8c5ddf8c5ddf89fb3c9 +b9d0e9c5ddf8c5ddf8c5ddf8c0d7f293a5b993a5b993a5b993a5b99db0c6 +c5ddf8b2c8e0a8bcd4c5ddf8c5ddf89eb1c7bad1ebc5ddf8c5ddf8bdd4ee +a0b4ca8292a4515b67c5ddf8c5ddf8c5ddf8282d33acc1d8c5ddf8c5ddf8 +c5ddf8c5ddf8b4c9e2060607aec3dbc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8a6bbd26d7a892e3339 +515151f5f5f5ffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffff0f6fdc5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf816191cadc3dac5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8deecfbc5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8a8bcd41b1f2395a8bc +bfd6f1c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +eff5fdffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +eff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf858626ebdd4eec5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf890a2b5 +8899ac8b9cb02a2f3590a2b5c5ddf8c5ddf8adc3da677482c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf894a6ba64707ec5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c8dff8f9f9f9ecececffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffff0f6fdc5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8bbd2ec070809bfd6f1c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8deecfb +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf87988984c5560 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8eff5fdffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8abc0d7 +6e7b8b6e7b8b6e7b8b6e7b8b6e7b8bb4c9e2c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +a2b6cc5c68745e6976a6bad1c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c8dff8ffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffff0f6fdc5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf87a899a171a1e64707ec5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +deecfbc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf872808f +515b66c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8eff5fdffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c8dff8ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffff0f6fdc5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8bad0ea7f8fa0141619c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8deecfbc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8bed6f0 +414952707d8dc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8eff5fdffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c8dff8ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffffffff0f6fd +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8101214 +b1c7dfc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8deecfbc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8bbd2ec +14171a1b1e22b8cfe8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8eff5fdffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +f0f6fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +171a1eadc2d9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8deecfbc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c4dcf748515b697584c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8eff5fdffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffff0f6fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf83e464e7a899ac4dcf7c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8deecfbc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8738190505a65c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8eff5fdffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffeff5fdc5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffff0f6fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf89cafc44e58635c6874c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8deecfbc5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf87a899a4a535dc5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8eff5fdffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffeff5fdc5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffff0f6fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8deecfbc5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8abc0d7171a1e899aadbdd4eec5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8eff5fdffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffeff5fdc5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffff0f6fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8deecfbc5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf895a8bc6b7887b1c7df +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8eff5fd +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffeff5fd +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffff0f6fdc5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8deecfbc5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +eff5fdffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +eff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c8dff8ffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffff0f6fdc5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf89cafc572808fc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf84d5661c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8deecfb +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8eff5fdffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c8dff8ffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffff0f6fdc5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf89cafc572808fc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8050606c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +deecfbc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8eff5fdffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +b5cbe4bcd3edc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8bed5efb4cae3 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c8dff8ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffff0f6fdc5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf893a5b9 +bed5efc5ddf8c5ddf8abc0d7a6bad1c5ddf8c5ddf89cafc57d8d9ea2b6cc +c5ddf8c5ddf8c5ddf895a8bc8d9eb19fb3c9c5ddf8c5ddf8c5ddf8c5ddf8 +bcd3ed8495a7b1c7df050606c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8deecfbc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf832383fabc0d7c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf86d7b8a758393c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8eff5fdffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8474f597d8d9ec5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf88a9bae +404851c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c8dff8ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffffffff0f6fd +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +4048517f8fa0c5ddf8c5ddf83d454d8393a5c5ddf86f7c8c16191c56616c +1416197e8e9fc5ddf8c5ddf8707e8d424a53404750c5ddf8c5ddf8c5ddf8 +92a4b81e2125545f6a2a2f35030404c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8deecfbc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf88696a9bad0ea +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8616d7a697685c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8eff5fdffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8b5cbe4bcd3edc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +8a9bae404851c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +f0f6fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf88798ab3b424ac5ddf8b9d0e9101214bed6f0c5ddf80d0e109aadc2 +c5ddf88e9fb21c2023c5ddf8c5ddf8c5ddf88495a7404750c5ddf8c5ddf8 +c5ddf84a545e7f8fa0c5ddf893a5b9020202c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8deecfbc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf89db0c68190a2c5ddf8c5ddf8c1d8f35f6b78c2daf5 +c5ddf899acc1525c6856616ca6bbd2c5ddf8c5ddf89db0c65b67735b6773 +b5cbe4c5ddf8c5ddf8c5ddf8bad1eb687583626e7b5a6571697685c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8eff5fdffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8b2c8e0394148c5ddf8 +c5ddf8c5ddf83f474facc1d8c5ddf88a9bae282d32202428626e7cc4dcf7 +c5ddf8aabfd62a2f352a2f358e9fb2c5ddf8c5ddf8c5ddf8a9bdd44a535d +262b3057616d404851c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffff0f6fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c0d7f2121417b7cee77a899a4a545ec5ddf8b7cee7030404 +c1d8f3c5ddf8b5cbe4010101c1d9f4c5ddf8c5ddf88495a7404750c5ddf8 +c5ddf8c5ddf8181b1fa3b7cec5ddf8bad1eb030303c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8deecfbc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8afc4dc141619c3dbf6c5ddf88b9caf363c44 +c5ddf8a5b9d0101214748292697685121417b7cde6c5ddf8b2c8e093a5b9 +15181ba7bcd3c5ddf8c5ddf8c3dbf6191c206a7786707d8d0d0e10697685 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8eff5fdffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffeff5fdc5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8262b30 +9baec3c5ddf8a3b6cd1e2226c5ddf8b1c7df0a0c0d92a3b7abc0d7262b30 +7f8fa0c5ddf8c5ddf8c5ddf8474f597d8d9ec5ddf8c5ddf8c5ddf8282d32 +7f8fa0afc4dc2a2f35404851c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffff0f6fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf84f5964788797363c4491a2b6c5ddf8c0d7f2 +000000b0c6dec5ddf8a3b6cd0a0c0dc5ddf8c5ddf8c5ddf88495a7404750 +c5ddf8c5ddf8c5ddf832383f92a3b7c5ddf8a8bcd4020202c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8deecfbc5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf832383f91a2b6c5ddf8464e58 +7d8c9dc5ddf85f6b7847505ac5ddf8c5ddf831373e788797c5ddf8c5ddf8 +c5ddf81d2024a7bcd3c5ddf8c5ddf89cafc42a2f35c5ddf8c5ddf8363d45 +697685c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8eff5fdffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffeff5fdc5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +6c7a8957616dc5ddf85f6a7765717fc5ddf88393a5292e34c5ddf8c5ddf8 +65717f47505ac5ddf8c5ddf8c5ddf8474f597d8d9ec5ddf8c5ddf8b6cce5 +0d0e10c4dcf7c5ddf86a7786404851c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffff0f6fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf895a8bc262b30171a1dc3dbf6c5ddf8 +c5ddf832383f596470b6cce5505a65434b54c5ddf8c3dbf6bed6f08190a2 +3d454dbed6f0c1d8f3c5ddf8667381464e58b5cbe455606b020202c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8deecfbc5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf87887974d5661bed5ef +111316bbd2ecc5ddf84e5863697685c5ddf8c5ddf8515b66636f7dc5ddf8 +c5ddf8c5ddf81d2024a7bcd3c5ddf8c5ddf874829247505ac5ddf8c5ddf8 +56616c697685c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8eff5fdffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffeff5fdc5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8b1c7df16191cc3dbf61b1f23abc0d7c5ddf87988983d454dc5ddf8 +c5ddf87786963c434bc5ddf8c5ddf8c5ddf8474f597d8d9ec5ddf8c5ddf8 +a2b6cc1b1f23c5ddf8c5ddf87d8c9d404851c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffff0f6fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c4dcf73d444c6d7b8ac5ddf8 +c5ddf8c5ddf8adc2d93a41491b1f23414952b4c9e2c5ddf89eb1c730363d +30363d30363d30363d657280c5ddf8bbd2ec68758323272c677482353b43 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8deecfbc5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8b9d0e9131518 +7e8e9f444d56c5ddf8c5ddf8616d7a474f59c5ddf8c5ddf830363d798898 +c5ddf8c5ddf8c5ddf81d2024a7bcd3c5ddf8c5ddf89db0c6292e34c5ddf8 +c5ddf8363c44697685c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8eff5fd +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffeff5fd +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8343a426a77862c3238c5ddf8c5ddf895a7bb121417 +c5ddf8c5ddf84e58635b6773c5ddf8c5ddf8c5ddf8474f597d8d9ec5ddf8 +c5ddf8c4dcf7101315bad1ebc5ddf8545e6a404851c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffff0f6fdc5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8deecfbc5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +4047501214178b9cafc5ddf8c5ddf8a6bbd20e101272808f667381111316 +b7cee7c5ddf899acc18d9eb114171a7887978d9eb1bed6f0c3dbf6181b1f +6875836c7a890c0d0f697685c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +eff5fdffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +eff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf87b8a9b050606738291c5ddf8c5ddf8c5ddf8 +3239402c313748515b141619adc3dac5ddf88899ac5b67732125293a4149 +5b6773a3b6cdc5ddf8616d7a25292e4c55601c2023404851c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c8dff8ffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffff0f6fdc5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8deecfb +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf89db0c6636f7dc1d9f4c5ddf8c5ddf8c5ddf899acc1525c6856616c +a6bbd2c5ddf8c5ddf8778696626e7b626e7b626e7b626e7bb9d0e9c5ddf8 +bad1eb687583636f7d8d9eb197a9bec5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8eff5fdffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8bed5ef93a5b9bbd2ecc5ddf8c5ddf8 +c5ddf8c1d8f38b9caf8191a3b4c9e2c5ddf8c5ddf8a9bdd493a5b993a5b9 +93a5b993a5b9b4cae3c5ddf8c5ddf8a9bed58899acb2c8e0a4b8cfc5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c8dff8ffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffff0f6fdc5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +deecfbc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8eff5fdffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c8dff8ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffff0f6fdc5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8deecfbc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8eff5fdffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8bed5ef +b4cae3c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8bad1ebbfd6f1c5ddf8c5ddf8c5ddf8 +b5cbe4c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c8dff8ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffffffff0f6fd +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8deecfbc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8eff5fdffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +8a9bae404851c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c4dcf72a2f35b4c9e2c5ddf8c5ddf8 +c5ddf84048519cafc4c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +f0f6fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8b8cfe8a6bbd2c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf82f343bb4c9e2 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf893a5b9667381c5ddf8c5ddf8c5ddf890a2b5697584 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8deecfbc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8eff5fdffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf88a9bae404851c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf88798ab49525cc5ddf8c5ddf8 +c5ddf8c5ddf896a9bd3a4149c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8a2b6ccafc4dcc5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffff0f6fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c3dbf6c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf88b9caf394148c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf81a1d21 +b0c6dec5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf830363da3b7cec5ddf8c5ddf8c5ddf8c1d8f3 +1f2327b8cfe8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8deecfbc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8b7cde6c3dbf6c5ddf8c5ddf8c3dbf6b7cee7 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8eff5fdffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffeff5fdc5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8b1c7df +545f6a23272c6975844e5863c5ddf8c5ddf897a9be323940282d33768494 +c0d7f2c5ddf87a899a6975843a41492b3036899aadc5ddf8c5ddf8a9bdd4 +4a535d262b3057616d404851c5ddf8c5ddf88798ab2c32382f353c8190a2 +c4dcf7c5ddf8c5ddf8535d698595a83a41491b1f237f8fa0c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf832394093a5b9c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf81b1e22abc0d7c5ddf8c5ddf8c5ddf8c5ddf8 +92a3b77c8b9cc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8b9d0e98495a73f474f0d0f11515b66c4dcf7 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffff0f6fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8a5b9d0262b300d0f110d0e10383f46b4cae3c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf896a9bd8797aa65717f677482bad0eac5ddf8c5ddf8 +c1d8f36c79884c5560738190c3dbf6c5ddf8c5ddf8abc0d76a77864a545e +6c7a89c5ddf8c5ddf86774824048511b1e225b6773616d7ac5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8adc2d958636f778696 +7c8b9caec3dbc5ddf8c5ddf88495a7515b668292a4c1d9f4c5ddf8bfd6f1 +65717f95a8bc525c688798abc4dcf7c5ddf8c5ddf8a3b7ce55606b8495a7 +1a1d21b0c6dec5ddf8c3dbf6798898515b668d9eb1c4dcf7c5ddf8c5ddf8 +a5b9d07c8b9c92a4b8515b66697584c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf898abc02f353cc5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8626e7b667381c5ddf8c5ddf8c5ddf8c5ddf8bfd6f199acc1bbd2ec +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8deecfbc5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8b6cce5272c31c4dcf7c5ddf8c5ddf8c3dbf6 +252a2fb9d0e9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8bdd4ee899aad6a7786bed6f0 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8eff5fdffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffeff5fdc5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +404851626e7cb4cae33d444c272c31c5ddf8afc4dc0d0e1091a2b6b8cfe8 +434b548393a5c5ddf8657280191c20a8bcd496a9bd1d2024c5ddf8c5ddf8 +282d327f8fa0afc4dc2a2f35404851c5ddf89cafc51214179db0c6b3c9e1 +2f353c9cafc5c5ddf8c5ddf8323940262b308d9eb1b7cee7a2b6ccc5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf80d0e10b2c8e0 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf83941488595a8c5ddf8c5ddf8c5ddf8 +c5ddf857616d292e34c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf89fb3c9626e7b2125290e10120a0b0c04050549525cc4dcf7 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffff0f6fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8aabfd60e101200000000000000000002020216191cbdd4ee +c5ddf8c5ddf8c5ddf8c5ddf86c7a890c0d0f6e7b8b6c7988171a1ec2daf5 +c5ddf84a545e383f468798ab31373e5c6874c5ddf8c5ddf82a2f35798898 +9db0c66f7c8cc5ddf8c5ddf899acc16875832b303693a5b995a8bcc5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8a6bad116191c7c8b9c +56616c06070897a9bec5ddf86875832c31378899ac5b6773404750c5ddf8 +bad1eb0506064c5560899aad1d20249aadc2c5ddf88fa1b42125298494a6 +444d56040505b0c6dec5ddf84e58633941488b9cb04a545e596470c5ddf8 +c5ddf88899ac1b1f233941488292a4687583c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf86a778656616cc5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf88798ab394047c5ddf8c5ddf8c5ddf8c5ddf8acc1d8000000 +9aadc2c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8deecfbc5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf85f6a77738190c5ddf8c5ddf8c5ddf8 +c5ddf86d7b8a64707ec5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8a9bdd46c7a89272c31030303101315acc1d8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8eff5fdffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffeff5fdc5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c2daf50d0e10b5cbe4c5ddf88595a8272c31c5ddf8748292292e348b9cb0 +8a9bae616d7a454e57c5ddf8657280525c68c5ddf8c5ddf80f1113b6cce5 +b6cce50d0e10c4dcf7c5ddf86a7786404851c5ddf85b66723c434b8b9cb0 +899aad4f59645f6b78c5ddf8c5ddf832394065717fc5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8b3c9e1070809 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8545e6a657280c5ddf8c5ddf8 +c5ddf8c5ddf8b4c9e2adc2d9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8b8cfe8 +8393a53d454d0f11130f11130202020000000000000a0c0d4a545ec5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffff0f6fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8394148000000000000000000000000000000050606 +677482c5ddf8c5ddf8c5ddf8c5ddf86c7a8931373ec5ddf8c5ddf82d3339 +9baec3c3dbf6030404a6bad1c5ddf898abc0101315c5ddf8c2daf5101315 +8e9fb2c2daf5c5ddf8c5ddf8c5ddf8c5ddf88b9caf394148c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf86c7a8955606b +c5ddf8c4dcf70b0d0e97a9bec5ddf80d0e109aadc2bcd3edb9d0e91b1f23 +bed5efbad1eb000000b5cbe4c5ddf85c6874697685c5ddf8545e6a717f8e +c5ddf8b4cae3000000b0c6deb7cee7060607adc3dabbd2ecb0c5dd1e2226 +c5ddf8c5ddf88899ac070809bed6f0c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf849525c72808fc5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8a3b7ce171a1dc5ddf8c5ddf8c5ddf8c5ddf8bad1eb +748292b4c9e2c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8deecfbc5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf82f343b677482 +23272c677482bbd2ecc5ddf8c5ddf87d8c9d292e34353b438899acc5ddf8 +c5ddf8c5ddf8474f59899aad363d451d20248b9cafc5ddf898aabf3e464e +23272c363c44bbd2ecc5ddf8c1d9f45b67731f23272a2f3591a2b6c5ddf8 +c5ddf8464e58758393282d32434b54acc1d8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c3dbf60d0e10bad1ebc5ddf8c5ddf8 +c5ddf8c5ddf8b7cde6101214c5ddf8c5ddf8c5ddf8c5ddf8c5ddf87e8e9f +8fa1b4c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c0d7f28fa1b44c55601315180e101203040400000014171aacc1d8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8eff5fd +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffeff5fd +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8bad1eb060708c0d7f2c5ddf895a7bb272c31c5ddf8687583292e34 +6875836875836875837b8a9bc5ddf865728065717fc5ddf8c5ddf815181b +afc4dca2b6cc1b1f23c5ddf8c5ddf87d8c9d404851c5ddf84e5863373e46 +6875836875836875838797aac5ddf8c5ddf83239408fa1b4c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8bed5ef +030404c0d7f2c5ddf8c5ddf8c5ddf8c5ddf8c5ddf849525c72808fc5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8bfd6f1707d8d131518 +00000003030300000000000000000000000000000002020216191c434b54 +434b54434b54434b54434b54434b54434b54434b54434b54434b54434b54 +434b54434b54434b54434b54434b54434b54434b54434b54434b54434b54 +434b54434b54434b54434b54434b54434b54434b54434b54434b54434b54 +434b54434b54434b54434b54434b54434b54434b54434b54434b54434b54 +434b54434b54434b54434b54434b54434b54434b54434b54434b54434b54 +434b54434b54434b54434b54434b54434b54434b54434b54434b54444c54 +575757575757575757575757575757575757575757575757575757575757 +575757575757575757575757575757575757575757575757575757575757 +575757575757575757575757575757575757575757575757575757575757 +575757575757575757575757575757575757575757575757575757575757 +575757575757575757575757575757575757575757575757575757575757 +575757575757575757575757575757515456434b54434b54434b54434b54 +434b54434b54434b54434b54060607000000000000000000000000000000 +000000323940c5ddf8c5ddf8c5ddf8c5ddf86c7a894e5762c5ddf8c5ddf8 +4a535d717f8eb6cce5040505c4dcf7c5ddf8b8cfe8000000c1d9f4c5ddf8 +92a4b8363d450c0d0f58636fc5ddf8c5ddf8c5ddf88b9caf394148c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf847505a +738291c5ddf8c5ddf8282d3297a9bebcd3ed000000363d45363d45363d45 +363d45a6bbd2bad1eb101214c5ddf8c5ddf86a77865a6571c5ddf82d3339 +8ea0b3c5ddf8c5ddf80f1113b0c6dea2b6cc070809363d45363d45363d45 +363d45b9d0e9c5ddf88899ac353b43c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8474f59738291c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8a6bad115181bc5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8deecfbc5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8050606 +56616cb6cce54b545f64707ec5ddf88ea0b31a1d21a3b7ceaec3db25292e +acc1d8c5ddf8c5ddf823272c2f343b94a6bab5cbe4a5b9d0c5ddf8282d33 +98abc0c5ddf8a6bbd2bed6f0c5ddf87583932a2f35aec3db8e9fb20d0e10 +b7cee7c5ddf822272b49525cb9d0e956616c606c79c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8a9bdd416191cc5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8101214afc4dcc5ddf8c5ddf8c5ddf8c5ddf8 +2d3339535d69c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8afc4dc +7482922d33390d0e100c0d0f00000000000000000000000014171aacc1d8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c4dcf7c3dbf6 +c2daf5c1d9f4c1d8f3c0d7f2bfd6f1bed6f0bed5efbed5efbdd4eebcd3ed +bbd2ecbad1ebbad0eab9d0e9b8cfe8b7cee7b7cde6b6cce5b6cce5b5cbe4 +dbe1e8e9e9e9e8e8e8e7e7e7e6e6e6e5e5e5e4e4e4e3e3e3e2e2e2e2e2e2 +e1e1e1e0e0e0dfdfdfdedededddddddcdcdcdbdbdbdadadad9d9d9d8d8d8 +d8d8d8d7d7d7d6d6d6d5d5d5d4d4d4d3d3d3d2d2d2d1d1d1d0d0d0dbdbdb +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +eff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf82c323898aabfc5ddf8687583272c31c5ddf88b9cb0 +1b1e22c5ddf8c5ddf8c5ddf8c5ddf8c5ddf865728065717fc5ddf8c5ddf8 +15181bafc4dcc4dcf7101315bad1ebc5ddf8545e6a404851c5ddf872808f +333a41c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf832394092a3b7c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf81b1e22a6bbd2c5ddf8c5ddf8c5ddf8c5ddf8c5ddf82d333993a5b9 +c5ddf8c5ddf8c5ddf8c5ddf8a0b4ca8494a6c5ddf8c5ddf8c5ddf8c0d7f2 +7c8b9c3f474f1013150c0d0f0405050000000000000000000000000d0e10 +8797aa9fb3c99fb3c99fb3c99fb3c99fb3c99fb3c99fb3c99fb3c99fb3c9 +9fb3c99fb3c99fb3c99fb3c99fb3c99fb3c99fb3c99fb3c99fb3c99fb3c9 +9fb3c99fb3c99fb3c99fb3c99fb3c99fb3c99fb3c99fb3c99fb3c99fb3c9 +9fb3c99fb3c99fb3c99fb3c99fb3c99fb3c99fb3c99fb3c99fb3c99fb3c9 +9fb3c99fb3c99fb3c99fb3c99fb3c99fb3c99fb3c99fb3c99fb3c99fb3c9 +9fb3c99fb3c99fb3c99fb3c99fb3c99fb3c99fb3c99fb3c99fb3c99fb3c9 +a3b5c9cfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcf +cfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcf +cfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcf +cfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcf +cfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcf +cfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfc3c8cd9fb3c99fb3c99fb3c9 +9fb3c99fb3c99fb3c99fb3c99fb3c9181b1f000000000000000000000000 +00000000000047505ac5ddf8c5ddf8c5ddf8c5ddf86c7a8930363dc5ddf8 +c5ddf82c323898abc0c3dbf6040505a5b9d0c5ddf898aabf111316c5ddf8 +c5ddf8c5ddf8c5ddf893a5b90f11139fb3c9c5ddf8c5ddf891a2b6343a42 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +738291505a65c5ddf8c1d9f407080997a9bec5ddf80d0e109cafc4c5ddf8 +c5ddf8c5ddf8c5ddf8bad1eb101214c5ddf8c5ddf86a77865a6571c5ddf8 +56616c707e8dc5ddf8b4c9e2000000b0c6deb7cee7030303b3c9e1c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf88899ac3c434bc5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf868758358636f +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8899aad363c44c5ddf8c5ddf8c5ddf8 +c5ddf8c3dbf6acc1d8bed5efc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8deecfb +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +050606a2b6ccc5ddf895a7bb2f343bc5ddf84b545f474f598b9cb0899aad +444d566f7c8cc5ddf8c5ddf823272c748292c5ddf8c5ddf8c5ddf8c5ddf8 +31373e505a6595a8bcc3dbf6c5ddf8c5ddf84047506c7a89c5ddf8c5ddf8 +21262a8b9cafc5ddf822272b95a8bcc5ddf892a3b7333a41c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8899aad30363dc5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf82b30368fa1b4c5ddf8c5ddf8c5ddf8 +c5ddf8adc3dab3c9e1c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8b5cbe4515b67 +000000000000000000000000000000000000000000000000010101141719 +1e22261e22261e22261e22261e22261e22261e22261e22261e22261f2327 +20242821252921262a22272b23272c24282d25292e252a2f262b30272c31 +272c31282d32282d33292e342a2f352b30362c31372c32382d33392e343a +2f343b393b3d3e3e3e3f3f3f404040414141424242434343444444454545 +4646464747474848484848484949494a4a4a4b4b4b4c4c4c4d4d4d4e4e4e +4f4f4f5050505151515252525353535353535454545555555656564c4c4c +484848ffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf88797aa1d20244047502f353c272c31c5ddf8 +c5ddf8404750262b30626e7b49525c5d6875c5ddf865728065717fc5ddf8 +c5ddf815181bafc4dcc5ddf8616d7a25292e4c55601c2023404851c5ddf8 +bed6f02c32382f353c636f7d414952738190c5ddf8c5ddf832394092a3b7 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf84f59647a899ac5ddf8c5ddf8c5ddf8c5ddf8bbd2ec171a1d +bbd2ecc5ddf8c5ddf8c5ddf8c5ddf8616d7a1b1e22c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8acc1d8707e8d2b30360d0f110d0e10000000 +000000101214a6bad1c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c8dff8ffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffff0f6fdc5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf86a77860a0b0c000000000000 +0000000000000d0e1094a6bac5ddf8c5ddf8c5ddf8c5ddf86c7a890b0d0e +6b7887697685171a1dc2daf5c5ddf84c5560353b438696a92e343a5d6875 +c5ddf8bad0ea5f6b7898aabf8797aa171a1ebdd4eec5ddf8c5ddf8bed5ef +10121477869690a2b5c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8adc2d9181b1f657280454e5710121497a9bec5ddf8687583282d33 +8191a38e9fb2535d69c3dbf6bad1eb101214c5ddf8c5ddf86a77865a6571 +c5ddf88fa1b41e21258292a4414952040505b0c6dec5ddf84e5863363c44 +8899ac899aad5b6773c5ddf8c5ddf88899ac3c434bc5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf892a3b7 +363c44c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8657280606c79c5ddf8c5ddf8 +c5ddf8c5ddf8b8cfe80000008798abc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +deecfbc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8050606b3c9e1c5ddf8a6bad116191cc5ddf83f474f3f474f687583 +6875836875838ea0b3c5ddf8c5ddf823272c9fb2c8c5ddf8c5ddf8c5ddf8 +c5ddf8bad0ea6f7c8c1a1d211e2125b6cce5c5ddf8363d458190a2c5ddf8 +c5ddf8343a427f8fa0c5ddf822272ba8bcd4c5ddf898aabf2c3238c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf896a9bd252a2f +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf82024289cafc4c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8b9d0e98595a8414952101315101214030303000000000000000000 +0d0f119cafc5c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8eff5fdffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +dfdfdf494949ffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8bed5ef9fb3c98797aa4d5661 +c5ddf8c5ddf8c5ddf899acc17c8b9c92a4b8c1d8f3c5ddf8adc3daadc2d9 +c5ddf8c5ddf899acc1bfd6f1c5ddf8c5ddf8a9bed58899acb2c8e0a4b8cf +c5ddf8c5ddf8c3dbf693a5b97c8b9c98abc0c3dbf6c5ddf8c5ddf8a0b4ca +b8cfe8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8acc1d82a2f35c5ddf8c5ddf8c5ddf8c5ddf872808f +626e7cc5ddf8c5ddf8c5ddf8c5ddf8c5ddf83b424a667381c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8bfd6f18ea0b3 +4b545f1416190506060a0c0da6bad1c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c8dff8ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffff0f6fdc5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c3dbf63a41490d0e10 +0000000101010e10125e6976c5ddf8c5ddf8c5ddf8c5ddf8c5ddf86c7a89 +525c68626e7c677482bad0eac5ddf8c5ddf8c1d8f36c79884c5560738190 +c3dbf6c5ddf8c1d8f36f7c8c4b545f65717fa3b6cdc5ddf8c5ddf8c5ddf8 +c5ddf8a8bcd4717f8e667381c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8bad1eb72808f93a5b925292eaec3dbc5ddf8c5ddf8 +899aad515b67515b67808fa1c5ddf8c0d7f26a7786c5ddf8c5ddf898aabf +8fa1b4c5ddf8c5ddf8a3b7ce55606b8797aa707d8dbad1ebc5ddf8c4dcf7 +7d8d9e4e586355606b8c9db1c5ddf8c5ddf8a6bbd28190a2c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8282d33aabfd6c5ddf8c5ddf8c5ddf8c3dbf6202428b3c9e1c5ddf8 +c5ddf8c5ddf8c5ddf89db0c6090a0bb4cae3c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8deecfbc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf80506068e9fb2c5ddf88190a247505ac5ddf8626e7b434c55 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf823272ca1b5cbc5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8bad1eb25292e899aadc5ddf8525c68545f6a +c5ddf8c4dcf70d0e109fb2c8c5ddf822272ba8bcd4c5ddf898aabf2c3238 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8b7cde6 +0a0c0dc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c4dcf7060708bbd2ecc5ddf8 +c5ddf8c5ddf8c5ddf891a2b693a5b9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8a3b7ce68758325292e0e1012 +0c0d0f0000000a0b0c9cafc4c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8eff5fdffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffdddddd4a4a4affffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf892a4b88797aa8c9db12d3339 +8b9cb0c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8677482adc3dac5ddf8c5ddf8c5ddf8 +5c6874b8cfe8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf83d444cbbd2ecc5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8a9bed56e7b8b4c5560aec3dbc5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c8dff8ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffffffff0f6fd +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +90a2b55b667264707e9fb2c8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +6c7a8958626ec5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c4dcf79db0c6c4dcf794a6ba262b30c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8899aad5f6b78c5ddf8c5ddf8c5ddf88e9fb25a6571c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf86a77865e6976c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8deecfbc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8050606272c31545e6a1b1f2391a2b6c5ddf8b8cfe8 +24282d363c44636f7d3c434b808fa1c5ddf8c5ddf823272ca1b5cbc5ddf8 +c5ddf8c5ddf8c5ddf82b3036636f7d5b66721a1d21bed5efc5ddf8a6bbd2 +1013154a545e282d333d444cc5ddf8c5ddf822272ba8bcd4c5ddf898aabf +2c3238c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8262b30a4b8cfc5ddf8c5ddf8c5ddf8c5ddf89cafc52c3137c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8383f46444d56c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +bdd4ee8b9caf48515b10121408090a9aadc2c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8eff5fdffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffdcdcdc4b4b4bffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8a4b8cf5d68755d6875 +a4b8cfc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +f0f6fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8808fa1707d8dc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf88292a48190a28190a2 +8190a28190a2a2b6ccc5ddf8c3dbf63d444c25292e525c68a3b7cec5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c1d9f4c3dbf6c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8deecfbc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8050606adc2d98495a7bbd2ecc5ddf8c5ddf8 +c5ddf8c1d8f38fa1b47d8c9d9cafc5c4dcf7c5ddf8c5ddf89cafc5bcd3ed +c5ddf8c5ddf8c5ddf8c5ddf8a6bad17f8fa091a2b6c0d7f2c5ddf8c5ddf8 +c5ddf8b0c6de8190a28d9eb1c2daf5c5ddf8c5ddf89cafc5bed5efc5ddf8 +bad0ea9fb2c8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf88696a94f5964c5ddf8c5ddf8c5ddf8c5ddf849525c8b9cb0 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf812141790a2b5c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8a9bed57d8c9dbdd4eec5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8eff5fdffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffdbdbdb4c4c4cffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffff0f6fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8deecfbc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8050606bfd6f1c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c4dcf7535d69c2daf5c5ddf8c5ddf8c1d8f3545e6a +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8b0c6de48515bc5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8eff5fdffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffdadada4e4e4effffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffeff5fdc5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffff0f6fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8deecfbc5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf85f6a77c2daf5c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8eff5fdffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffd9d9d94f4f4fffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffeff5fdc5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffff0f6fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8b8cfe8c2daf5c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8deecfbc5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8eff5fdffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffd8d8d8505050ffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffeff5fdc5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffff0f6fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf87e8e9f282d335b6773c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8deecfbc5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8eff5fd +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffd7d7d7515151ffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffeff5fd +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffff0f6fdc5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8bad0ea131518c4dcf7c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8deecfbc5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c1d8f38797aab1c7dfc5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +eff5fdffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffd5d5d5525252 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +eff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c8dff8ffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffff0f6fdc5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf80a0c0dc0d7f2c5ddf8c5ddf8 +c5ddf8c5ddf898abc0758393c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8deecfb +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c0d7f2697584171a1e9fb3c9 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8eff5fdffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffd4d4d4 +535353ffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c8dff8ffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffff0f6fdc5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8171a1dadc2d9c5ddf8 +c5ddf8c5ddf8c5ddf86673811a1d21c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +deecfbc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf85f6a77 +6c7a89c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8eff5fdffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +d3d3d3545454ffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c8dff8ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffff0f6fdc5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8657280333a41 +8494a6c5ddf8c5ddf8c5ddf8b6cce5aabfd6c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8deecfbc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +697584626e7bc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8363d4594a6bac5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8eff5fdffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffd2d2d2555555ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c8dff8ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffffffff0f6fd +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf85c6874 +3d454d91a2b6c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8deecfbc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf87e8e9f414952c5ddf8c5ddf8c5ddf8c5ddf8c5ddf81113168798ab +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8eff5fdffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffd1d1d1575757ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +f0f6fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +14171ab0c5ddc5ddf8c5ddf8c5ddf8c5ddf8a6bbd27d8d9ec5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8deecfbc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8b9d0e92d33392a2f35abc0d7c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8eff5fdffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffd0d0d0585858ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8b5cbe4bcd3edc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8bed5efb4cae3c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffff0f6fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf80a0c0dc0d7f2c5ddf8c5ddf8c5ddf8c5ddf8717f8e0b0d0ec5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8deecfbc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf896a9bd21262a9db0c6c1d9f4c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8eff5fdffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffcfcfcf595959ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffeff5fdc5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8474f597d8d9ec5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf88a9bae404851c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffff0f6fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8b7cee714171ac5ddf8c5ddf8c5ddf8c5ddf8c5ddf84b545f57616d +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8deecfbc5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf86d7b8a5a6571c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8515b668fa1b4c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8eff5fdffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffcdcdcd5a5a5affffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffeff5fdc5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8b5cbe4bcd3edc5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf88a9bae404851c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffff0f6fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf87887972c3137667381c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8444d56 +b4c9e2c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8deecfbc5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8677482626e7cc5ddf8c5ddf8c5ddf8 +c5ddf8c3dbf60607087d8c9dc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8eff5fdffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffcccccc5b5b5bffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffeff5fdc5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +b2c8e0394148c5ddf8c5ddf8c5ddf83f474facc1d8c5ddf88a9bae282d32 +202428626e7cc4dcf7c5ddf8aabfd62a2f352a2f358e9fb2c5ddf8c5ddf8 +c5ddf8a9bdd44a535d262b3057616d404851c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffff0f6fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8deecfbc5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8bdd4ee3c434b8798abc5ddf8c5ddf8 +c5ddf8c5ddf89cafc5171a1dc0d7f2c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8eff5fd +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffcbcbcb5c5c5cffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffeff5fd +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8262b309baec3c5ddf8a3b6cd1e2226c5ddf8b1c7df0a0c0d +92a3b7abc0d7262b307f8fa0c5ddf8c5ddf8c5ddf8474f597d8d9ec5ddf8 +c5ddf8c5ddf8282d327f8fa0afc4dc2a2f35404851c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffff0f6fdc5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8deecfbc5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8bcd3ed373e465d6875bbd2ecc5ddf8 +c5ddf8c5ddf8c5ddf89baec38fa1b4c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +eff5fdffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffcacaca5d5d5d +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +eff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf86c7a8957616dc5ddf85f6a7765717fc5ddf88393a5 +292e34c5ddf8c5ddf865717f47505ac5ddf8c5ddf8c5ddf8474f597d8d9e +c5ddf8c5ddf8b6cce50d0e10c4dcf7c5ddf86a7786404851c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c8dff8ffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffff0f6fdc5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8deecfb +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8eff5fdffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffc9c9c9 +5f5f5fffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8b1c7df16191cc3dbf61b1f23abc0d7c5ddf8 +7988983d454dc5ddf8c5ddf87786963c434bc5ddf8c5ddf8c5ddf8474f59 +7d8d9ec5ddf8c5ddf8a2b6cc1b1f23c5ddf8c5ddf87d8c9d404851c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c8dff8ffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffff0f6fdc5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +deecfbc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8eff5fdffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +c8c8c8606060ffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8343a426a77862c3238c5ddf8 +c5ddf895a7bb121417c5ddf8c5ddf84e58635b6773c5ddf8c5ddf8c5ddf8 +474f597d8d9ec5ddf8c5ddf8c4dcf7101315bad1ebc5ddf8545e6a404851 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c8dff8ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffff0f6fdc5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8deecfbc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8eff5fdffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffc7c7c7616161ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf87b8a9b050606738291 +c5ddf8c5ddf8c5ddf83239402c313748515b141619adc3dac5ddf88899ac +5b67732125293a41495b6773a3b6cdc5ddf8616d7a25292e4c55601c2023 +404851c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c8dff8ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffffffff0f6fd +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8deecfbc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8eff5fdffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffc5c5c5626262ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8bed5ef93a5b9 +bbd2ecc5ddf8c5ddf8c5ddf8c1d8f38b9caf8191a3b4c9e2c5ddf8c5ddf8 +a9bdd493a5b993a5b993a5b993a5b9b4cae3c5ddf8c5ddf8a9bed58899ac +b2c8e0a4b8cfc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +f0f6fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8deecfbc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8eff5fdffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffc4c4c4636363ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffff0f6fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8deecfbc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8eff5fdffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffc3c3c3646464ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffeff5fdc5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8bed5efbdd4ee +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8adc2d9 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8b9d0e9c1d9f4c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffff0f6fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8deecfbc5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8eff5fdffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffc2c2c2656565ffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffeff5fdc5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf83d454d +9fb2c8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +050606c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8748292b9d0e9c5ddf8c5ddf8c5ddf8c5ddf8717f8e6c7988c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffff0f6fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8deecfbc5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8eff5fdffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffc1c1c1676767ffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffeff5fdc5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8a0b4ca +30363dc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8050606c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8191c20abc0d7c5ddf8c5ddf8c5ddf8c5ddf8bbd2ec1d2024 +bed5efc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8a0b4ca64707e56616cbbd2ecc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffff2f7fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8e0edfbc5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8eff5fd +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffc0c0c0686868ffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffeff5fd +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf87a899a262b301e21253d454dadc2d9c5ddf8c5ddf893a5b9 +323940343a42606c798696a9c5ddf8c2daf568758325292e40485198abc0 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +4c5560798898c5ddf8c5ddf8c5ddf8c1d9f458636f292e34262b308190a2 +c5ddf8c5ddf805060674829223272c515b66bad0eac5ddf8c4dcf7657280 +212529272c318797aac5ddf8c5ddf8c5ddf83f474f8b9caf333a411e2226 +92a4b87d8d9e2a2f3505060625292e2a2f358a9baec5ddf8c5ddf8c5ddf8 +4b545f7a899ac5ddf8c5ddf8c5ddf8c5ddf8a8bcd4687583c2daf5c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8bad0ea8495a7 +3e464f1012140304041b1f22b7cde6c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffcde1f9c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8f1f7fdc5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +eff5fdffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffbfbfbf696969 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +eff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf898aabfb7cee7c1d9f46c7988363d45c5ddf8b9d0e9 +1012149cafc59eb1c70d0e10717f8ec5ddf86d7b8a30363daec3dba3b7ce +1b1e22c1d8f3c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8262b3098abc0c5ddf8c5ddf8c5ddf88292a4414952c1d9f4bed6f0 +a6bbd2c5ddf8c5ddf802020264707ebad0ea3a41498191a3c5ddf88495a7 +202428a9bdd496a9bd0d0f11adc3dac5ddf8c5ddf8191c20343a4298aabf +b3c9e1a7bcd3c5ddf8c5ddf8191c20abc0d7c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf86a7786545f6ac5ddf8c5ddf8c5ddf8c5ddf88798ab000000bed6f0 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8a2b6cc63707d21252a0e0f11 +090a0c0000000203031d2125b7cde6c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c8dff8ffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffeef5fdd0e3f9c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8cbe1f9e4effcffffff +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8eff5fdffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffbebebe +6a6a6affffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8bed5ef8ea0b35f6a774a535d191c20c5ddf8 +8595a83a4149c5ddf8c5ddf83b424a717f8ec5ddf82a2f355f6a778b9caf +899aad2d333990a2b5c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8070809b3c9e1c5ddf8c5ddf8c5ddf88b9cb01e21257d8d9e +b3c9e1c5ddf8c5ddf8c5ddf8020202b6cce5c5ddf8707e8d545f6ac5ddf8 +4f59645d6875c5ddf8c5ddf831373e7b8a9bc5ddf8c5ddf8191c207e8e9f +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8191c20abc0d7c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf88495a7353b43c5ddf8c5ddf8c5ddf8c5ddf8bbd2eca6bad1 +c4dcf7c5ddf8c5ddf8bbd2ec728090373d450d0f110c0e0f010202000000 +000000000000020202171a1e95a8bca0b4caa0b4ca9fb3c99fb2c89fb2c8 +9eb1c79db0c69db0c69cafc59cafc49cafc49baec39aadc29aadc299acc1 +98abc098abc098aabf98aabf97a9be96a9bd96a9bd95a8bc95a7bb95a7bb +94a6ba93a5b993a5b992a4b892a3b792a3b791a2b691a2b690a2b58fa1b4 +8fa1b48ea0b38e9fb28e9fb28d9eb18c9db18c9db18b9cb08b9caf8b9caf +8a9bae8c9caeb2b2b2b1b1b1b1b1b1b0b0b0afafafafafafaeaeaeadadad +adadadacacacababababababaaaaaaaaaaaaa9a9a9a8a8a8a8a8a8a7a7a7 +a6a6a6a6a6a6a5a5a5a4a4a4a4a4a4a3a3a3a2a2a2a2a2a2a1a1a1a1a1a1 +a0a0a0cdcdcdffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fcfdfffbfdfffbfdfffbfdfffbfdfffbfdfffbfdfffbfdfffbfdfffbfdff +fbfdfffbfdfffbfdfffbfdfffbfdfffbfdfffbfdfffbfdfffbfdfffbfdff +fbfdfffbfdfffbfdfffbfdfffbfdfffbfdfffbfdfffbfdfffbfdfffbfdff +fbfdfffbfdfffbfdfffbfdfffbfdfffbfdfffbfdfffbfdfffbfdfffbfdff +fbfdfffbfdfffbfdfffbfdfffbfdfffbfdfffbfdfffbfdfffbfdfffbfdff +fbfdfffbfdfffbfdfffbfdfffbfdfffbfdfffbfdfffbfdfffbfdfffbfdff +fbfdfffbfdfffbfdfffbfdfffbfdfffbfdfffbfdfffbfdfffbfdfffbfdff +fbfdfffbfdfffbfdfffbfdfffbfdfffbfdfffbfdfffbfdfffbfdfffbfdff +fbfdfffbfdfffbfdfffbfdfffbfdfffbfdfffbfdfffbfdfffbfdfffbfdff +fbfdfffbfdfffbfdfffbfdfffbfdfffbfdfffbfdfffbfdfffbfdfffbfdff +fbfdfffbfdfffbfdfffbfdfffbfdfffbfdfffbfdfffbfdfffbfdfffbfdff +fbfdfffbfdfffbfdfffbfdfffbfdfffbfdfffbfdfffbfdfffbfdfffbfdff +fbfdfffbfdfffbfdfffbfdfffbfdfffbfdfffbfdfffbfdfffeffffffffff +ffffffcae0f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8f4f8feffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +bcbcbc6b6b6bffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8454e57515b6790a2b5808fa114171a +c5ddf873819049525cc5ddf8c5ddf84a535d717f8ec5ddf81e2125515b66 +6875836875836875839eb1c7c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8141619a9bdd4c5ddf8c5ddf8c5ddf8c5ddf895a7bb +434b54050606758393c5ddf8c5ddf8050606c5ddf8c5ddf87685954e5762 +c5ddf8464e58717f8ec5ddf8c5ddf8434c55707d8dc5ddf8c5ddf8191c20 +a9bdd4c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8191c20abc0d7c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf87a8899414952c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8b8cfe8616d7a090b0c010101010102000000000000 +000000000000000000030304202428424a53434b54434c55434c55444d56 +444d56454e57464e58464e58474f5947505a47505a48515b49525c49525c +4a535d4a545e4a545e4b545f4c55604c55604d56614d56614e57624e5863 +4e58634f5964505a65505a65515b66515b67515b67525c68535d69535d69 +545e6a545f6a545f6a55606b55606b56616c57616d57616d58626e58636f +58636f5964705c6672757575767676777777777777787878797979797979 +7a7a7a7a7a7a7b7b7b7c7c7c7c7c7c7d7d7d7e7e7e7e7e7e7f7f7f808080 +808080818181828282828282838383838383848484858585858585868686 +8787875d5d5d787878ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffe3effcc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8d0e4f9ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffbbbbbb6c6c6cffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c2daf50a0c0dbdd4eec5ddf8717f8e +14171ac5ddf8a7bcd31e2125c4dcf7c4dcf71e2226717f8ec5ddf8404851 +65717fc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8343a428d9eb1c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf87382912f353cc5ddf8c5ddf8050606c5ddf8c5ddf8768595 +4e5762c5ddf8626e7b454e57c5ddf8c5ddf81b1f238fa1b4c5ddf8c5ddf8 +191c20abc0d7c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8282d339db0c6c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf85e6976626e7cc5ddf8c5ddf8c5ddf8c5ddf8 +b3c9e17a899abbd2ecc5ddf8c5ddf8c5ddf8c5ddf8b2c8e0798899333a41 +0e10120e10120000000000000000000c0e106c7988c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c8dff8ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffafafaf787878ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffeffffeef5fdddebfbdcebfbdcebfbdcebfbdcebfb +dcebfbdcebfbdcebfbdcebfbdcebfbdcebfbdcebfbdcebfbdcebfbdcebfb +dcebfbdcebfbdcebfbdcebfbdcebfbdcebfbdcebfbdcebfbdcebfbdcebfb +dcebfbdcebfbdcebfbdcebfbdcebfbdcebfbdcebfbdcebfbdcebfbdcebfb +dcebfbdcebfbdcebfbdcebfbdcebfbdcebfbdcebfbdcebfbdcebfbdcebfb +dcebfbdcebfbdcebfbdcebfbdcebfbdcebfbdcebfbdcebfbdcebfbdcebfb +dcebfbdcebfbdcebfbdcebfbdcebfbdcebfbdcebfbdcebfbdcebfbdcebfb +dcebfbdcebfbdcebfbdcebfbdcebfbdcebfbdcebfbdcebfbdcebfbdcebfb +dcebfbdcebfbdcebfbdcebfbdcebfbdcebfbdcebfbdcebfbdcebfbdcebfb +dcebfbdcebfbdcebfbdcebfbdcebfbdcebfbdcebfbdcebfbdcebfbdcebfb +dcebfbdcebfbdcebfbdcebfbdcebfbdcebfbdcebfbdcebfbdcebfbdcebfb +dcebfbdcebfbdcebfbdcebfbdcebfbdcebfbdcebfbdcebfbdcebfbdcebfb +dcebfbdcebfbdcebfbdcebfbdcebfbdcebfbdcebfbdcebfbdcebfbdcebfb +dcebfbdcebfbe9f2fcfefeffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffbababa6d6d6dffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8404851404851525c68 +30363d14171ac5ddf8c5ddf84c5560272c312c3238282d3372808fc5ddf8 +a6bad11a1d21424a53626e7b30363d9fb2c8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8697584616d7ac5ddf8c5ddf8c5ddf8 +6976854d56616976852b3036768494c5ddf8c5ddf8050606c5ddf8c5ddf8 +7685954e5762c5ddf8b0c6de14171a454e572f353c2e343ac4dcf7c5ddf8 +c5ddf8191c20abc0d7c5ddf8c5ddf8c5ddf8c5ddf8c5ddf86c7988252a2f +5a65719db0c6c5ddf8c5ddf8c5ddf831373e97a9bec5ddf8c5ddf8c5ddf8 +c5ddf892a3b7000000b0c5ddc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c2daf598aabf57616d191d200f11130607080404056a7786c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffaeaeae797979ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffb9b9b96f6f6fffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c4dcf793a5b9 +8c9db1bad0ea98abc0c5ddf8c5ddf8c5ddf8abc0d7b0c6de3e464e97a9be +c5ddf8c5ddf8bad0ea8a9bae7e8e9fa6bad1c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8bad1eb202428c0d7f2c5ddf8 +c5ddf8bad1eb8d9eb17f8fa0afc4dcc5ddf8c5ddf8c5ddf895a7bbc5ddf8 +c5ddf8b1c7dfa7bcd3c5ddf8c5ddf8b5cbe48292a48a9baec0d7f2c5ddf8 +c5ddf8c5ddf89aadc2bed6f0c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +b6cce594a6bab2c8e0c5ddf8c5ddf8a3b6cd32383fc5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf86c7988363c44c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8b3c9e17a899a343b420a0b0c +6e7b8bc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffadadad7a7a7affffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffb8b8b8707070ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffeff5fdc5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf875839395a8bc7583931c2023 +c3dbf6c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf87887979cafc5 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf87c8b9c98abc0c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf85c68749cafc4c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c2daf59aadc2b9d0e9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffadadad7b7b7bffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffb7b7b7717171ffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffeff5fdc5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf88191a3535d69758393 +b9d0e9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffacacac7b7b7bffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffb6b6b6727272ffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffeff5fdc5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffababab7c7c7cffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffb4b4b4737373ffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffeff5fd +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffababab7d7d7d +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffb3b3b3747474 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +eff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c8dff8ffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffaaaaaa +7d7d7dffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffb2b2b2 +757575ffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c8dff8ffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +a9a9a97e7e7effffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b1b1b1767676ffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c8dff8ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffa9a9a97f7f7fffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffafcfef6fafef6fafef6fafef6fafef6fafef6fafef6fafef6fafe +f6fafef6fafef6fafef6fafef6fafef6fafef6fafef6fafef6fafef6fafe +f6fafef6fafef6fafef6fafef6fafef6fafef6fafef6fafef6fafef6fafe +f6fafef6fafef6fafef6fafef6fafef6fafef6fafef6fafef6fafef6fafe +f6fafef6fafef6fafef6fafef6fafef6fafef6fafef6fafef6fafef6fafe +f6fafef6fafef6fafef6fafef6fafef6fafef6fafef6fafef6fafef6fafe +f6fafef6fafef6fafef6fafef6fafef6fafef6fafef6fafef6fafef6fafe +f6fafef6fafef6fafef6fafef6fafef6fafef6fafef6fafef6fafef6fafe +f6fafef6fafef6fafef6fafef6fafef6fafef6fafef6fafef6fafef6fafe +f6fafef6fafef6fafef6fafef6fafef6fafef6fafef6fafef6fafef6fafe +f6fafef6fafef6fafef6fafef6fafef6fafef6fafef6fafef6fafef6fafe +f6fafef6fafef6fafef6fafef6fafef6fafef6fafef6fafef6fafef6fafe +f6fafef6fafef6fafef6fafef6fafef6fafef6fafef6fafef6fafef8fbfe +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffb0b0b0787878ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c8dff8ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffa8a8a87f7f7fffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +f9fcfed8e8fac6ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8d1e4f9f5f9feffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffafafaf797979ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffa7a7a7808080ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffe1edfbc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8d8e8faffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffaeaeae7a7a7affffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffa7a7a7818181ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffd1e4f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c6ddf8ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffacacac7b7b7bffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffeff5fdc5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffa6a6a6818181ffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffd0e3f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffababab7c7c7cffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffeff5fdc5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffa5a5a5828282ffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffd0e3f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8ffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffaaaaaa7d7d7dffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffeff5fdc5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8b5cbe4bcd3edc5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8bed5efb4cae3c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffa5a5a5838383ffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffd0e3f9c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8ffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffa9a9a97e7e7effffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffeff5fd +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8474f597d8d9ec5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf88a9bae404851c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffa4a4a4838383 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffd0e3f9c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8ffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffa8a8a8808080 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +eff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8b5cbe4bcd3ed +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf88a9bae404851c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c8dff8ffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffa3a3a3 +848484ffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffd0e3f9c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffa7a7a7 +818181ffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8b2c8e0394148c5ddf8c5ddf8c5ddf83f474facc1d8 +c5ddf88a9bae282d32202428626e7cc4dcf7c5ddf8aabfd62a2f352a2f35 +8e9fb2c5ddf8c5ddf8c5ddf8a9bdd44a535d262b3057616d404851c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c8dff8ffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +a3a3a3858585ffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffd0e3f9c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8ffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +a6a6a6828282ffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8262b309baec3c5ddf8a3b6cd1e2226 +c5ddf8b1c7df0a0c0d92a3b7abc0d7262b307f8fa0c5ddf8c5ddf8c5ddf8 +474f597d8d9ec5ddf8c5ddf8c5ddf8282d327f8fa0afc4dc2a2f35404851 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c8dff8ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffa2a2a2858585ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffd0e3f9 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8ffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffa4a4a4838383ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf86c7a8957616dc5ddf85f6a77 +65717fc5ddf88393a5292e34c5ddf8c5ddf865717f47505ac5ddf8c5ddf8 +c5ddf8474f597d8d9ec5ddf8c5ddf8b6cce50d0e10c4dcf7c5ddf86a7786 +404851c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c8dff8ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffa1a1a1868686ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +d0e3f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffa3a3a3848484ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8b1c7df16191cc3dbf6 +1b1f23abc0d7c5ddf87988983d454dc5ddf8c5ddf87786963c434bc5ddf8 +c5ddf8c5ddf8474f597d8d9ec5ddf8c5ddf8a2b6cc1b1f23c5ddf8c5ddf8 +7d8c9d404851c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffa0a0a0878787ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffd0e3f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffa2a2a2858585ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8343a42 +6a77862c3238c5ddf8c5ddf895a7bb121417c5ddf8c5ddf84e58635b6773 +c5ddf8c5ddf8c5ddf8474f597d8d9ec5ddf8c5ddf8c4dcf7101315bad1eb +c5ddf8545e6a404851c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffa0a0a0878787ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffd0e3f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf88495a77482928798abc5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf88495a7bed5efc5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8b0c5dd90a2b5c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8a1b5cb748292748292bcd3edc5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffa1a1a1868686ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffeff5fdc5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +7b8a9b050606738291c5ddf8c5ddf8c5ddf83239402c313748515b141619 +adc3dac5ddf88899ac5b67732125293a41495b6773a3b6cdc5ddf8616d7a +25292e4c55601c2023404851c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff9f9f9f888888ffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffd0e3f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf88ea0b3626e7c2e343a +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8181b1fb2c8e0c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf85a6571a2b6cc +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf893a5b94a535d +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8a6bbd28190a20e1012aec3db +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffa0a0a0888888ffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffeff5fdc5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8bed5ef93a5b9bbd2ecc5ddf8c5ddf8c5ddf8c1d8f38b9caf8191a3 +b4c9e2c5ddf8c5ddf8a9bdd493a5b993a5b993a5b993a5b9b4cae3c5ddf8 +c5ddf8a9bed58899acb2c8e0a4b8cfc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffff9e9e9e898989ffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffd0e3f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c4dcf7afc4dcb9d0e9c5ddf8c5ddf8c5ddf896a9bd +2e343ac5ddf8c5ddf8c5ddf8c5ddf8c5ddf8b3c9e1b3c9e1c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8bdd4eeb0c6dec5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +b2c8e0bad0eac5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8b9d0e9b4c9e2c5ddf8c5ddf8c5ddf8181b1fb2c8e0 +b7cee7c2daf5c5ddf8c5ddf8c5ddf8c5ddf8b7cde6b7cde6c5ddf8c5ddf8 +c5ddf8c5ddf8c0d7f2c4dcf7c1d9f4b0c5ddc5ddf8c3dbf6bed6f02f343b +8fa1b4bed6f0c2daf5c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c0d7f2c4dcf7b7cde6c5ddf8c5ddf8c5ddf8c5ddf8c0d7f2bed6f0 +c1d8f3c5ddf8c5ddf8c5ddf8bfd6f1bad1ebbed5efc1d9f4bbd2ecc5ddf8 +c5ddf8bfd6f1c5ddf8b6cce5c5ddf8c5ddf8c5ddf8c5ddf8c5ddf816191c +aec3dbc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8ffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffff9f9f9f898989ffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffeff5fdc5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffff9e9e9e8a8a8affffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffd0e3f9c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf895a7bb131518252a2f2024288494a6c5ddf8c5ddf8 +96a9bd2e343ac5ddf8c5ddf8c5ddf8c5ddf82d33392d3339282d3325292e +aec3dbc5ddf8c5ddf847505a2f343b373e463d454dc5ddf8c5ddf8a9bdd4 +282d33373e46282d337d8d9ec5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c2daf5363c44323940323940525c68c5ddf8c5ddf8181b1f +47505a282d321b1f239eb1c7c5ddf8c4dcf7454e57131518131518444d56 +c4dcf7c5ddf8c5ddf830363d616d7a14161923272c67748292a3b730363d +0b0d0e25292e30363d7b8a9bc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8292e34353b4321262a282d3295a7bbc5ddf8c5ddf84b545f +22272b383f46c5ddf8c5ddf8c5ddf80d0e1032383f15181b3941481e2125 +a1b5cbc5ddf8101214363c4424282d31373ea3b6cdc5ddf8c5ddf8c5ddf8 +16191caec3dbc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8ffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffff9e9e9e8a8a8affffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffeff5fd +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8bdd4eebdd4eec5ddf8c5ddf8c5ddf8b6cce5 +c4dcf7c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffff9d9d9d8a8a8a +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffd0e3f9c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c0d7f214171a8797aac5ddf8c4dcf7b3c9e1c5ddf8 +c5ddf896a9bd2e343ac5ddf8c5ddf8c5ddf8c5ddf8b7cde6c5ddf8c5ddf8 +5a65715c6874c5ddf8a6bbd21e2125c5ddf8c5ddf8bfd6f1c5ddf8c5ddf8 +5c6874687583c5ddf8c5ddf8bfd6f1c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf88d9eb1373e46c5ddf8c5ddf8bfd6f1c5ddf8c5ddf8 +181b1f72808fc5ddf86976855e6976c5ddf88798ab1f2327bed5efbfd6f1 +24282d8696a9c5ddf8c5ddf830363d31373eb7cee7c5ddf8bcd3edc5ddf8 +c5ddf830363d94a6bac5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8292e3455606bc5ddf892a3b732383fc5ddf8c5ddf8 +c5ddf88c9db1383f46c5ddf8c5ddf8c5ddf8060607c2daf5272c318696a9 +697584788797c5ddf8101214707d8dc5ddf87887974c5560c5ddf8c5ddf8 +c5ddf816191caec3dbc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8ffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffff9c9c9c8b8b8b +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +eff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf88c9db1a1b5cbc5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf83b424aa1b5cbc5ddf8c5ddf8c5ddf8 +57616d8595a8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c8dff8ffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffff9c9c9c +8b8b8bffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffd0e3f9c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8a4b8cf0d0f11c2daf5c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf896a9bd2e343ac5ddf8c5ddf8c5ddf8c5ddf890a2b5505a65 +2b30361b1e224a535dc5ddf8c0d7f21e22263d454d768494bcd3edc5ddf8 +c5ddf88c9db1171a1e535d6992a3b7c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8b2c8e0171a1e454e577e8e9fc1d8f3c5ddf8 +c5ddf8181b1fa9bdd4c5ddf88c9db1383f46c5ddf8616d7a515b66c5ddf8 +c5ddf8535d695d6875c5ddf8c5ddf830363d768494c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf830363d94a6bac5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8292e348798abc5ddf8bfd6f1090a0bbed5ef +c5ddf8c5ddf88c9db1383f46c5ddf8c5ddf8c5ddf814171ac5ddf8383f46 +98abc0768595616d7ac5ddf8101214a1b5cbc5ddf8a9bed5171a1dc5ddf8 +c5ddf8c5ddf816191caec3dbc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffff9b9b9b +8c8c8cffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf88899ac4e576258636f9baec3c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf84c5560788797c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf89eb1c7323940c5ddf8c5ddf8c5ddf8 +c5ddf8abc0d7262b30c4dcf7c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c8dff8ffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +9c9c9c8c8c8cffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffd0e3f9c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8a4b8cf0d0f11c2daf5c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf897a9be2d3339c5ddf8c5ddf8c5ddf8b9d0e916191c +a0b4cac4dcf769768547505ac5ddf8c5ddf8c2daf58a9bae1e222621262a +c5ddf8c5ddf8c5ddf8b4cae36774820506066c7988c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8bfd6f17f8fa01416193b424a +c5ddf8c5ddf8181b1fb2c8e0c5ddf88e9fb2363d45c5ddf8626e7b515b66 +c5ddf8c5ddf8535d695d6875c5ddf8c5ddf830363d94a6bac5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf830363d94a6bac5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8292e348797aac5ddf8bfd6f108090a +bcd3edc5ddf8c5ddf88c9db1383f46c5ddf8c5ddf8c5ddf8171a1ec5ddf8 +3b424a9cafc47988985e6976c5ddf8101214a0b4cac5ddf8a9bdd414171a +c5ddf8c5ddf8c5ddf8171a1dadc3dac5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8ffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +9a9a9a8d8d8dffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c1d8f32d33390b0d0e0000000000000b0d0e +5b6672c5ddf8c5ddf8c5ddf8c5ddf84f596465717f25292e525c68afc4dc +c5ddf8c5ddf88a9bae282d32202428626e7cc4dcf7c5ddf8c5ddf8667381 +2c323824282d6d7b8ac5ddf8a6bad12a2f351012141a1d212a2f35626e7c +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8626e7b636f7d +282d3347505aa7bcd3c5ddf8c5ddf8a3b7ce39414825292e6c7988bbd2ec +c5ddf8c5ddf87988987381904f59641b1f2357616dc5ddf8b7cee7505a65 +262b30292e3492a4b8c5ddf8c5ddf88899ac272c3121252964707ec4dcf7 +c5ddf87887976976853941482b30368b9cafc5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf84a535d7c8b9cc5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf831373e94a6bac5ddf8c5ddf8c5ddf8c5ddf89cafc5 +717f8ec5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c8dff8ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffff9b9b9b8c8c8cffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffd0e3f9 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c0d7f214171a8797aac5ddf8 +c4dcf7b4c9e2c5ddf8c5ddf8bad1eb131518bdd4eec5ddf8c5ddf89cafc4 +272c31c5ddf8bed6f02a2f3547505ac5ddf8bad1ebc1d8f3c5ddf8b4c9e2 +0e1012c0d7f2c5ddf8b6cce5c5ddf8c5ddf86c7988505a65c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8b7cee7c3dbf6c5ddf89cafc5 +1f2327c5ddf8c5ddf8181b1fb2c8e0c5ddf88e9fb2363d45c5ddf8899aad +1e2125bcd3edbed5ef22272b8899acc5ddf8c5ddf830363d94a6bac5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf84d5661798898c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8292e34535d69c5ddf88ea0b3 +31373ec5ddf8c5ddf8c5ddf88c9db1383f46c5ddf8c5ddf8c5ddf8171a1e +c5ddf83b424a9cafc47988985e6976c5ddf81012146c7a89c5ddf8758393 +4a545ec5ddf8c5ddf8c5ddf84047508696a9c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8ffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffff9999998e8e8effffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf85c6874070809000000000000000000 +0000000d0f1197a9bec5ddf8c5ddf8c5ddf82e343a363d45b4c9e26e7b8b +3a4149c5ddf8b1c7df0a0c0d92a3b7abc0d7262b307f8fa0c5ddf89cafc5 +2b3036bfd6f1c2daf5a3b6cdc5ddf8c5ddf8c5ddf84c5560788797c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8454e57 +262b30adc3da8494a623272cc5ddf8bbd2ec141619808fa1bbd2ec55606b +6c7988c5ddf8c5ddf864707e101214798898b8cfe89cafc4c5ddf8697584 +596470c4dcf7bad0eaabc0d7c5ddf8b0c5dd0a0c0d93a5b9aabfd625292e +8292a4c5ddf8626e7c1b1f23a9bdd494a6ba202428c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf824282d9baec3c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8515b666e7b8bc5ddf8c5ddf8c5ddf8c5ddf8 +6e7b8b121417c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c8dff8ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffff9a9a9a8d8d8dffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +d0e3f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf895a8bc171a1d +262b3022272b8495a7c5ddf8c5ddf8c5ddf86976851d202431373ec5ddf8 +c5ddf83d444c2a2f351b1e2247505a47505ac5ddf899acc1181b1f394047 +282d326d7b8ac5ddf8c5ddf856616c24282d363d452b3036a5b9d0c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf88393a51b1e22394047 +272c318191a3c5ddf8c5ddf8181b1fb2c8e0c5ddf88e9fb2363d45c5ddf8 +c4dcf7454e57111316121417444d56c4dcf7c5ddf8c5ddf830363d94a6ba +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf899acc12d3339282d33788797c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8292e34323940202428 +272c3195a7bbc5ddf8a2b6cc2a2f351e21250c0d0f2a2f355b6773c5ddf8 +171a1ec5ddf83b424a9cafc47988985e6976c5ddf8101214333a4122272b +30363da2b6ccc5ddf8c5ddf8c5ddf898aabf292e341e21259db0c6c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffff9898984343437979797b7b7b7c7c7c7e7e7e7f7f7f818181 +8282828484848686868787878989898a8a8a8c8c8c8d8d8d8f8f8f909090 +9292929494949595959797979898989a9a9a9b9b9b9d9d9d9e9e9ea0a0a0 +a1a1a1a3a3a3a5a5a5a6a6a69da1a78292a48494a68495a78696a98797aa +8899ac8a9bae8b9caf8c9db18d9eb18ea0b3101215000000000000000000 +0000000000000000004e5762c5ddf8c5ddf8c5ddf82e343a798898c5ddf8 +bcd3ed0b0d0ec1d9f48393a5292e34c5ddf8c5ddf865717f47505ac5ddf8 +a5b9d0121417768494adc3dac5ddf8c5ddf8c5ddf8c5ddf84c5560788797 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +454e57626e7bc5ddf8c5ddf8101315b4c9e28b9cb0181b1f8b9cb08a9bae +717f8e2f343bc5ddf8c5ddf864707e333a41c5ddf8c5ddf8c5ddf8c5ddf8 +72808f2b30368495a7b8cfe8c5ddf8c5ddf88190a22c3238c5ddf8c5ddf8 +626e7c4a535dc5ddf8626e7c545f6ac5ddf8c5ddf80d0e10b8cfe8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c4dcf7050606b6cce5 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf86b78874e5863c5ddf8c5ddf8c5ddf8 +c5ddf8b7cee7a9bdd4c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffff9a9a9a8e8e8effffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffd0e3f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8b0c6debcd3edc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8b7cde6c1d9f4c5ddf8c5ddf8c5ddf8c5ddf8c1d8f3 +adc3dac3dbf6c5ddf8c5ddf8c5ddf8c5ddf8b9d0e9b4c9e2c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8bed6f0 +aec3dbc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8b7cde6b7cde6c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8292e349baec3 +b6cce5c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8101214b4cae3 +b5cbe4c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffdfdfdfafafafadadadabababaaaaaaa8a8a8a6a6a6 +a4a4a4a3a3a3a1a1a19f9f9f9e9e9e9c9c9c9a9a9a989898979797959595 +9393939292929090908e8e8e8c8c8c8b8b8b898989878787868686848484 +8282828181817f7f7f7d7d7d7b7b7b7275795c68745b66725a657158636f +57616d55606b545f6a535d69515b67515b664f5964060607000000000000 +0000000000000000000000003a4149c5ddf8c5ddf8c5ddf82e343a8a9bae +c5ddf8c5ddf80a0c0db2c8e07988983d454dc5ddf8c5ddf87786963c434b +c5ddf8c5ddf89fb3c94e58630405055f6a77c5ddf8c5ddf8c5ddf84c5560 +788797c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8454e57738190c5ddf8c5ddf82024289baec37f8fa01d2024687583 +687583687583707e8dc5ddf8c5ddf864707e5f6a77c5ddf8c5ddf8c5ddf8 +c5ddf8c4dcf7899aad363d450a0b0c8a9baec5ddf8768595404750c5ddf8 +c5ddf87482923e464ec5ddf8626e7c687583c5ddf8c5ddf8121417b2c8e0 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8101315 +abc0d7c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8606c795b6773c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff9999998e8e8effffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffd0e3f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8292e34 +9baec3c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8101214 +b4cae3c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffeff5fdc5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8343a42000000 +000000000000000000000000060708707e8dc5ddf8c5ddf8c5ddf82e343a +64707ec5ddf8a9bed51e2226c5ddf895a7bb121417c5ddf8c5ddf84e5863 +5b6773c5ddf8c5ddf8c5ddf8c5ddf88e9fb216191cc5ddf8c5ddf8c5ddf8 +5b67736a7786c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8454e574d5661c5ddf8bed5ef0d0f11c1d9f4a2b6cc0a0c0d +bed6f0c5ddf8c5ddf8c5ddf8c5ddf8c5ddf864707e606c79c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf85b667249525cc5ddf892a4b814171a +c5ddf8c5ddf84c55605e6976c5ddf8626e7c687583c5ddf8c5ddf8121417 +b2c8e0c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +32383f8fa1b4c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8444d567c8b9cc5ddf8 +c5ddf8c5ddf8c5ddf8a9bdd47b8a9bc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff9898988f8f8fffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffd0e3f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf89fb2c86e7b8b6e7b8b6e7b8b6e7b8b6e7b8bc0d7f2c5ddf8 +99acc1b9d0e9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +92a4b8c0d7f2c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffeff5fdc5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8a8bcd4 +0f11130000000000000000000506061d2024c0d7f2c5ddf8c5ddf8c5ddf8 +2e343a1d2024505a65202428707e8dc5ddf8c5ddf83239402c313748515b +141619adc3dac5ddf87e8e9f454e576a7786363d455d6875c5ddf8c5ddf8 +c5ddf899acc1191c20545e6a8292a4c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8454e57191c204a545e262b305c6874c5ddf8c5ddf8 +56616c1e21255f6a774f59644b545fc5ddf8c5ddf864707e606c79c5ddf8 +c5ddf8c5ddf8c5ddf855606b545f6a6774822125298ea0b3c5ddf8c4dcf7 +30363d2d333947505a14171aafc4dcc5ddf8626e7c687583c5ddf8c5ddf8 +121417b2c8e0c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8667381636f7dc5ddf8c5ddf8c5ddf8c5ddf8c3dbf61d2024adc3da +c5ddf8c5ddf8c5ddf8c5ddf8788797030404c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffff989898909090ffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffd0e3f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8ffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffeff5fdc5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8a8bcd42c32380b0d0e10131549525cbad1ebc5ddf8c5ddf8c5ddf8 +c5ddf82e343a8d9eb18595a8b0c5ddc5ddf8c5ddf8c5ddf8c1d8f38b9caf +8191a3b4c9e2c5ddf8c5ddf8bed6f092a3b77d8c9da8bcd4c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8bfd6f198abc0a6bad1c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8454e577b8a9b899aada8bcd4c5ddf8c5ddf8 +c5ddf8c5ddf8a0b4ca7d8c9d8e9fb2bed5efc5ddf8c5ddf8adc2d9acc1d8 +c5ddf8c5ddf8c5ddf8c5ddf8b6cce58899ac8393a5b4cae3c5ddf8c5ddf8 +c5ddf8c0d7f28a9bae8191a3b4cae3c5ddf8c5ddf8adc2d9adc3dac5ddf8 +c5ddf898abc0c0d7f2c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8bad0ea202428c1d8f3c5ddf8c5ddf8c5ddf8899aad4b545f +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8525c684f5964c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffff979797909090ffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffd0e3f9c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8ffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffeff5fd +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf82e343a96a9bdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8454e577f8fa0c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf87685959eb1c7c5ddf8c5ddf8c5ddf86a7786 +a9bed5c5ddf8c5ddf8c5ddf8c5ddf8c5ddf849525cafc4dcc5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffff969696919191 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffd0e3f9c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c4dcf78494a658626eb4c9e2c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8ffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +eff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +b6cce5c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8758393acc1d8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8abc0d76e7b8b +6e7b8b6e7b8b6e7b8b6e7b8bb4c9e2c5ddf88191a39fb3c9c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c8dff8ffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffff969696 +929292ffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffd0e3f9c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf89eb1c721262a97a9bec1d8f3 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8515b6623272c8ea0b3c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c8dff8ffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +959595929292ffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffd0e3f9c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf86f7c8c55606bc5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8ffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf87e8e9f4e5762c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c8dff8ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffff949494939393ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffd0e3f9 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf86875835b6672 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8ffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf892a3b7394047c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf87c8b9c92a3b7c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c8dff8ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffff949494949494ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +d0e3f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8bdd4ee394047 +7a8899c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf89eb1c725292ec5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8282d3358626ec5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffff939393949494ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffd0e3f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8b4c9e2131518 +212529bcd3edc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c1d8f32f343b515b66a3b6cd +c5ddf8c5ddf8c5ddf8adc2d9b4c9e2c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff929292959595ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffd0e3f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c3dbf63f474f738190c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffeff5fdc5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8bfd6f1262b305f6b78 +a9bed5c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff919191969696ffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffd0e3f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf86976855a6571c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffeff5fdc5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf89cafc5282d32 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf88fa1b495a7bbc5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffff919191979797ffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffd0e3f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8707e8d545e6ac5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8ffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffeff5fdc5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf892a3b7 +394047c5ddf8c5ddf8c5ddf8c5ddf8c5ddf832394049525cc5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffff909090979797ffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffd0e3f9c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8a2b6cc1d20248b9cafbfd6f1c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8ffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffeff5fd +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +7a899a515b66c5ddf8c5ddf8c5ddf8c5ddf8c4dcf70e101295a7bbc5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffff8f8f8f989898 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffd0e3f9c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf892a3b7697685b7cde6c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8ffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +eff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +49525c2c323895a7bbc5ddf8c5ddf8c5ddf8c5ddf8adc2d94c5560c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c8dff8ffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffff8f8f8f +999999ffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffd0e3f9c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c2daf5c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c8dff8ffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +8e8e8e999999ffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffd0e3f9c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8ffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c8dff8ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffff8d8d8d9a9a9affffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffd0e3f9 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8ffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c8dff8ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffff8d8d8d9b9b9bffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +d0e3f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf88696a95c6874c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8bad1eba4b8cf +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffff8c8c8c9b9b9bffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffd0e3f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf87d8c9d4e5762 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf895a7bb +2f353cc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff8b8b8b9c9c9cffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffd0e3f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8b6cce57482924b545f636f7dbad0eac5ddf87d8c9d +4e576275839357616da3b6cdc5ddf8c5ddf8c2daf5707d8d4b545f6e7b8b +c1d9f4c5ddf8c5ddf8abc0d776849498abc0535d69626e7cc3dbf66c7a89 +454e5716191c5b67735b6773c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffeff5fdc5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff8b8b8b9d9d9dffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffd0e3f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf84e57625e69769db0c67a899ab0c6dec5ddf8 +7d8c9d1012146d7b8a798898141619c5ddf8c5ddf855606b32383f8798ab +363d45515b67c5ddf8c5ddf895a7bb171a1e373e467f8fa0697685c0d7f2 +9cafc46f7c8c24282d93a5b993a5b9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffeff5fdc5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffff8a8a8a9d9d9dffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffd0e3f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf830363d707e8dbed5efc5ddf8c5ddf8 +c5ddf87d8c9d2f343bc5ddf8c5ddf81e2226a7bcd3c5ddf80b0d0e9cafc4 +c5ddf8a3b6cd070809c4dcf7c5ddf895a7bb020202b7cde6c5ddf8c5ddf8 +c5ddf8c5ddf895a7bb2f353cc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8ffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffeff5fdc5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffff8989899e9e9effffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffd0e3f9c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8a3b7ce434c550c0d0f454e57 +b9d0e9c5ddf87d8c9d4e5762c5ddf8c5ddf82c323898aabfc0d7f2000000 +bed5efc5ddf8c1d8f3000000b7cee7c5ddf895a7bb282d32c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf895a7bb2f353cc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8ffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffeff5fd +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffff8989899f9f9f +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffd0e3f9c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8a6bbd2 +2024287c8b9cc5ddf87d8c9d4e5762c5ddf8c5ddf82c323898aabfc5ddf8 +0c0d0f9baec3c5ddf8a2b6cc08090ac5ddf8c5ddf895a7bb2f353cc5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf89baec32a2f35c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8ffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +eff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c8dff8ffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffff888888 +9f9f9fffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffd0e3f9c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8616d7a92a3b7 +90a2b51e2226a6bbd2c5ddf87d8c9d4e5762c5ddf8c5ddf82c323898aabf +c5ddf856616c2f343b8696a9333a41535d69c5ddf8c5ddf895a7bb2f353c +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c1d9f41113167583938d9eb1c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffff3f8fec5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8cbe0f9ffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +878787a0a0a0ffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffd0e3f9c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf87e8e9f +4f59645b667295a8bcc5ddf8c5ddf8a1b5cb899aadc5ddf8c5ddf8798898 +aec3dbc5ddf8c2daf5707d8d4b545f6e7b8bc1d9f4c5ddf8c5ddf8adc2d9 +7a899ac5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8aabfd6738291626e7b +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8ffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffcfe3f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8e2eefbffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffff878787a1a1a1ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffd0e3f9 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8ffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffe6f0fcc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c8dff8fbfdffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffff868686a1a1a1ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +d0e3f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffebf3fdcfe3f9c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c6def8d8e8faf1f7fdffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffff858585a2a2a2ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffd0e3f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffffffff3f8fe +f2f8fdf2f8fdf2f8fdf2f8fdf2f8fdf2f8fdf2f8fdf2f8fdf2f8fdf2f8fd +f2f8fdf2f8fdf2f8fdf2f8fdf2f8fdf2f8fdf2f8fdf2f8fdf2f8fdf2f8fd +f2f8fdf2f8fdf2f8fdf2f8fdf2f8fdf2f8fdf2f8fdf2f8fdf2f8fdf2f8fd +f2f8fdf2f8fdf2f8fdf2f8fdf2f8fdf2f8fdf2f8fdf2f8fdf2f8fdf2f8fd +f2f8fdf2f8fdf2f8fdf2f8fdf2f8fdf2f8fdf2f8fdf2f8fdf2f8fdf2f8fd +f2f8fdf2f8fdf2f8fdf2f8fdf2f8fdf2f8fdf2f8fdf2f8fdf2f8fdf2f8fd +f2f8fdf2f8fdf2f8fdf2f8fdf2f8fdf2f8fdf2f8fdf2f8fdf2f8fdf2f8fd +f2f8fdf2f8fdf2f8fdf2f8fdf2f8fdf2f8fdf2f8fdf2f8fdf2f8fdf2f8fd +f2f8fdf2f8fdf2f8fdf2f8fdf2f8fdf2f8fdf2f8fdf2f8fdf2f8fdf2f8fd +f2f8fdf2f8fdf2f8fdf2f8fdf2f8fdf2f8fdf2f8fdf2f8fdf2f8fdf2f8fd +f2f8fdf2f8fdf2f8fdf2f8fdf2f8fdf2f8fdf2f8fdf2f8fdf2f8fdf2f8fd +f2f8fdf2f8fdf2f8fdf2f8fdf2f8fdf2f8fdf2f8fdf2f8fdf2f8fdf2f8fd +f2f8fdf2f8fdf2f8fdf2f8fdf2f8fdf2f8fdf2f8fdf2f8fdf2f8fdf2f8fd +f2f8fdf2f8fdf2f8fdf2f8fdf2f8fdf2f8fdf2f8fdf2f8fdf2f8fdf2f8fd +f2f8fdf2f8fdf2f8fdf2f8fdf2f8fdf2f8fdf2f8fdf2f8fdf2f8fdf2f8fd +f2f8fdf2f8fdfbfcfeffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff848484a3a3a3ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffd0e3f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff848484a3a3a3ffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffd0e3f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8bfd6f1b3c9e1c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8bfd6f1 +bbd2ecc5ddf8c5ddf8c5ddf8b8cfe8c1d9f4c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffff838383a4a4a4ffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffd0e3f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8748292b9d0e9c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf894a6ba363d45c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8b9d0e9748292c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +525c688a9baec5ddf8c5ddf8c5ddf86f7c8c6e7b8bc5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8ffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffff828282a5a5a5ffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffd0e3f9c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8a6bbd27d8c9d8ea0b3bbd2ec +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8191c20abc0d7c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf894a6ba363d45c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8acc1d8181b1fc5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +b0c6de22272bc4dcf7c5ddf8c5ddf8c5ddf8bad0ea1e2125bed6f0c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8ffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffff828282a6a6a6 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffd0e3f9c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c1d9f4444c560d0f110606070c0d0f +12151792a4b9c5ddf8c5ddf8c5ddf8c5ddf8c1d9f42d333964707e24282d +6c7988bdd4eec5ddf8c4dcf7657280212529272c318696a9c5ddf8c5ddf8 +b7cee7505a65262b30292e3492a4b8c5ddf87d8d9e2a2f3505060625292e +2a2f358a9baec5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +acc1d849525c25292e2d3339a3b7cec5ddf894a6ba333a41515b6624282d +6c7988c5ddf8c5ddf8b9d0e948515b1c2023343a42a5b9d0c5ddf8c5ddf8 +b1c7df3e464e7f8fa0262b302a2f35b4c9e255606b25292e0506062a2f35 +2a2f35b2c8e0c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8616d7a64707ec5ddf8c5ddf8c5ddf8c5ddf8c5ddf849525c7d8c9d +c5ddf8c5ddf8c5ddf8c5ddf8a7bcd3687583c3dbf6c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8ffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffff818181 +a6a6a6ffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffd0e3f9c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8606b7808090a000000000000 +0000000000000f1113b4cae3c5ddf8c5ddf8c5ddf8c1d8f30000005e6976 +b6cce5434c556d7b8ac5ddf88495a71f2327a9bdd496a9bd0d0f11adc3da +c5ddf8697584596470c4dcf7bad0eaabc0d7c5ddf8c5ddf8c5ddf8191c20 +abc0d7c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf84f596472808fc5ddf8b3c9e1b2c8e0c5ddf894a6ba02020291a2b6 +b1c7df141619b4c9e2c5ddf8515b67434b54b6cce56f7c8c212529c4dcf7 +c5ddf8acc1d80708094b545fabc0d7a3b7ceb8cfe8c5ddf8acc1d8181b1f +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf83b424a8494a6c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8687583 +57616dc5ddf8c5ddf8c5ddf8c5ddf88595a8000000c1d8f3c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +808080a7a7a7ffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffd0e3f9c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8121517000000000000 +000000000000000000030404738292c5ddf8c5ddf8c5ddf8c1d8f3000000 +acc1d8c5ddf88b9cb0394047c5ddf8505a655c6874c5ddf8c5ddf832383f +7a899ac5ddf872808f2a2f358495a7b8cfe8c5ddf8c5ddf8c5ddf8c5ddf8 +191c20abc0d7c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf858636f3940478b9cb0bdd4eec5ddf8c5ddf894a6ba24282d +c5ddf8c5ddf83d454d8798abc5ddf81c202390a2b5c5ddf8bfd6f1040505 +aec3dbc5ddf8acc1d8000000b0c6dec5ddf8c5ddf8c5ddf8c5ddf8acc1d8 +181b1fc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf81b1f239eb1c7c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +8393a5373e46c5ddf8c5ddf8c5ddf8c5ddf8bbd2eca6bad1c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8ffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffff7f7f7f4343436464646161615f5f5f5c5c5c595959565656535353 +5050504d4d4d4b4b4b4848484545454242423f3f3f3c3c3c3a3a3a373737 +3434343131312e2e2e2b2b2b2929292828282828282828282828281f2326 +1e22261e22261e22261e22261e22261e22261e22261d2125010202000000 +000000000000000000000000000000525d68c5ddf8c5ddf8c5ddf8c1d8f3 +000000bcd3edc5ddf89cafc41f2327c5ddf8464e58707e8dc5ddf8c5ddf8 +444d566f7c8cc5ddf8c4dcf7899aad363d450a0b0c8a9baec5ddf8c5ddf8 +c5ddf8191c20abc0d7c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c1d8f37e8e9f2b30361013159cafc5c5ddf894a6ba +363d45c5ddf8c5ddf8434c558190a2c5ddf8131518a4b8cfc5ddf8c5ddf8 +101315a3b6cdc5ddf8acc1d8171a1dc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +acc1d8181b1fc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8282d3394a6bac5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8778696434c55c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8ffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffdededec1c1c1c4c4c4c7c7c7cacacacccccccfcfcfd2d2d2 +d5d5d5d8d8d8dbdbdbdddddde0e0e0e3e3e3e6e6e6e9e9e9ebebebeeeeee +f1f1f1f4f4f4f7f7f7f9f9f9fcfcfcffffffffffffffffffffffffffffff +d0e3f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8171a1d +0000000000000000000000000000000608097f8fa0c5ddf8c5ddf8c5ddf8 +c1d8f300000097a9bec5ddf8768595515b67c5ddf8626e7b444d56c5ddf8 +c5ddf81b1f238ea0b3c5ddf8c5ddf8c5ddf8c5ddf85b667249525cc5ddf8 +c5ddf8c5ddf8282d339db0c6c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c2daf5434c55626e7cc5ddf8 +94a6ba363d45c5ddf8c5ddf8434c558190a2c5ddf82f343b788797c5ddf8 +adc3da050606bcd3edc5ddf8acc1d8181b1fc5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8b8cfe80f1113c3dbf6c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf849525c788797c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf85b677365717fc5ddf8c5ddf8c5ddf8c5ddf8b2c8e07a899a +bcd3edc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffd0e3f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +7f8fa10a0c0d000000000000000000000000171a1ec0d7f2c5ddf8c5ddf8 +c5ddf8c1d8f3010101282d33535d691b1f2398aabfc5ddf8b1c7df14171a +454e5730363d2e343ac4dcf7c5ddf856616c545f6a6774822125298ea0b3 +c5ddf8c5ddf8c5ddf86c7a89252a2f5a65719db0c6c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8434c555b6672636f7d191c20a6bad1 +c5ddf894a6ba363d45c5ddf8c5ddf8434c558190a2c5ddf88c9db10e1012 +535d691a1d215f6b78c5ddf8c5ddf8acc1d8181b1fc5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf83b424a3941485b6773b8cfe8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf87d8d9e4c5560c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf82f343b99acc1c5ddf8c5ddf8c5ddf8c5ddf88fa1b4 +000000b2c8e0c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffd0e3f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf87583940d0f110f11130f11132b3036b0c6dec5ddf8c5ddf8 +c5ddf8c5ddf8c1d8f3030404b0c5dd8495a7bdd4eec5ddf8c5ddf8c5ddf8 +b5cbe48292a48a9baec0d7f2c5ddf8c5ddf8b6cce58899ac8292a4b4cae3 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8b6cce594a6bab2c8e0c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8b0c6de8494a68798abbad0ea +c5ddf8c5ddf8b9d0e9a1b5cbc5ddf8c5ddf8a5b9d0b4c9e2c5ddf8c5ddf8 +a6bbd27d8d9e97a9bec5ddf8c5ddf8c5ddf8bed6f09aadc2c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8aabfd693a5b9bfd6f1c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c2daf522272bb6cce5 +c5ddf8c5ddf8c5ddf8a0b4ca343a42c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +697685383f46c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffd0e3f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c4dcf7a9bed5b9d0e9c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c1d8f3030404c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf88797aa +8e9fb2c5ddf8c5ddf8c5ddf87a899a9aadc2c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf85a65719eb1c7c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffd0e3f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c3dbf65e6976c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +95a7bb6e7b8b6e7b8b6e7b8b6e7b8b738291c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8ffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffd0e3f9c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8ffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffd0e3f9c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8ffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffd0e3f9c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8bdd4ee8899acb4c9e2c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffd0e3f9c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8bcd3ed677482141619a9bdd4c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8ffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffd0e3f9 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8545f6a768595 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8ffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +d0e3f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf85f6a77 +6c7988c5ddf8c5ddf8c5ddf8c5ddf8bed5ef363d459baec3c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffd0e3f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +7482924b545fc5ddf8c5ddf8c5ddf8c5ddf8bcd3ed11131690a2b5c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffd0e3f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8b6cce5282d322c3137b2c8e0c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffd0e3f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf88e9fb2272c319fb3c9c2daf5c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffd0e3f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8636f7d64707ec5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +4b545f95a7bbc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8ffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffd0e3f9c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf85e69766c7a89c5ddf8c5ddf8c5ddf8c5ddf8 +bfd6f10000008797aac5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8ffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffd0e3f9c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8bbd2ec333a4191a2b6c5ddf8c5ddf8c5ddf8 +c5ddf893a5b91e2125c2daf5c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8ffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffd0e3f9c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8b4cae33940475f6b78bfd6f1c5ddf8c5ddf8 +c5ddf8c5ddf895a8bc95a7bbc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffd0e3f9c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8ffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffd0e3f9 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8ffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +d0e3f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffd0e3f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffd0e3f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffd0e3f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffd0e3f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8ffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffd0e3f9c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8ffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffd2e5fac5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c7def8ffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffe7f1fcc5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8d9e9fa +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffdfeffddebfb +c9dff8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c7def8dceafb +f8fbfe + +[/Creator (html2ps version 1.0 beta7) /Author () /Keywords (xsd, xml, schema, c++, mapping, data, binding, parser, validation) /Subject () + /Title (C++/Parser Mapping Getting Started Guide) /DOCINFO pdfmark +/ND 1 D +/HN [(1) (1) (1) (1) (1) (1) (1) (1) (2) (3) (3) (4) (6) (8) (8) (9) (12) (13) +(14) (18) (18) (21) (24) (27) (27) (28) (28) (28) (29) (35) (??) (38) (39) +(39) (41) (42) (43) (44) (45) (46) (47) (47) (48) (49) (50) (50) (55) (59) +(63) (??) (1) (1) (1) (1) (1) (2) (3) (3) (4) (6) (8) (8) (9) (12) (13) +(14) (18) (18) (21) (24) (27) (27) (28) (28) (28) (29) (35) (38) (39) (39) +(41) (42) (43) (44) (45) (46) (47) (47) (48) (49) (50) (50) (55) (59) (63)] D +/h0 [()(Table of Contents)] D +/h1 [(1\240\240)(Preface)] D +/h2 [(1.1\240\240)(About This Document)] D +/h3 [(1.2\240\240)(More Information)] D +/h4 [(2\240\240)(1 Introduction)] D +/h5 [(2.1\240\240)(1.1 Mapping Overview)] D +/h6 [(2.2\240\240)(1.2 Benefits)] D +/h7 [(3\240\240)(2 Hello World Example)] D +/h8 [(3.1\240\240)(2.1 Writing XML Document and Schema)] D +/h9 [(3.2\240\240)(2.2 Translating Schema to C++)] D +/h10 [(3.3\240\240)(2.3 Implementing Application Logic)] D +/h11 [(3.4\240\240)(2.4 Compiling and Running)] D +/h12 [(4\240\240)(3 Parser Skeletons)] D +/h13 [(4.1\240\240)(3.1 Implementing the Gender Parser)] D +/h14 [(4.2\240\240)(3.2 Implementing the Person Parser)] D +/h15 [(4.3\240\240)(3.3 Implementing the People Parser)] D +/h16 [(4.4\240\240)(3.4 Connecting the Parsers Together)] D +/h17 [(5\240\240)(4 Type Maps)] D +/h18 [(5.1\240\240)(4.1 Object Model)] D +/h19 [(5.2\240\240)(4.2 Type Map File Format)] D +/h20 [(5.3\240\240)(4.3 Parser Implementations)] D +/h21 [(6\240\240)(5 Mapping Configuration)] D +/h22 [(6.1\240\240)(5.1 C++ Standard)] D +/h23 [(6.2\240\240)(5.2 Character Type and Encoding)] D +/h24 [(6.3\240\240)(5.3 Underlying XML Parser)] D +/h25 [(6.4\240\240)(5.4 XML Schema Validation)] D +/h26 [(6.5\240\240)(5.5 Support for Polymorphism)] D +/h27 [(7\240\240)(6 Built-In XML Schema Type Parsers)] D +/h28 [(7.1\240\240)(6.1 QName Parser)] D +/h29 [(7.2\240\240)(6.2 NMTOKENS and IDREFS Parsers)] D +/h30 [(7.3\240\240)(6.3 base64Binary and hexBinary Parsers)] D +/h31 [(7.4\240\240)(6.4 Time Zone Representation)] D +/h32 [(7.5\240\240)(6.5 date Parser)] D +/h33 [(7.6\240\240)(6.6 dateTime Parser)] D +/h34 [(7.7\240\240)(6.7 duration Parser)] D +/h35 [(7.8\240\240)(6.8 gDay Parser)] D +/h36 [(7.9\240\240)(6.9 gMonth Parser)] D +/h37 [(7.10\240\240)(6.10 gMonthDay Parser)] D +/h38 [(7.11\240\240)(6.11 gYear Parser)] D +/h39 [(7.12\240\240)(6.12 gYearMonth Parser)] D +/h40 [(7.13\240\240)(6.13 time Parser)] D +/h41 [(8\240\240)(7 Document Parser and Error Handling)] D +/h42 [(8.1\240\240)(7.1 Xerces-C++ Document Parser)] D +/h43 [(8.2\240\240)(7.2 Expat Document Parser)] D +/h44 [(8.3\240\240)(7.3 Error Handling)] D +/h45 [(9\240\240)(Appendix A \236 Supported XML Schema Constructs)] D +/Hr [50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 +72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94]D +/HV [1 2 2 1 2 2 1 2 2 2 2 1 2 2 2 2 1 2 2 2 1 2 2 2 2 2 1 2 2 2 2 2 2 +2 2 2 2 2 2 2 1 2 2 2 1]D +/Cn [2 0 0 2 0 0 4 0 0 0 0 4 0 0 0 0 3 0 0 0 5 0 0 0 0 0 13 0 0 0 0 0 0 +0 0 0 0 0 0 0 3 0 0 0 0]D +Hr length 0 gt{[/PageMode /UseOutlines /DOCVIEW pdfmark}if +/Hn 1 D +0 1 Hr length 1 sub{ + /Bn E D [Cn Bn get dup 0 gt{/Count E HV Bn get Bl ge{neg}if}{pop}ie + /Dest Hr Bn get dup abs ST cvs cvn E 0 ge{(h)Hn ST cvs join cvx exec + dup 1 get E Nf{0 get E join}{pop}ie /Hn Hn 1 add D}{()}ie + /Title E dup length 255 gt{0 255 getinterval}if /OUT pdfmark}for +ZF /FN Fp D Ps 0 FS /WC Wf{( )}{}ie SW pop D +ET RC ZF +/Df f D +/R0 (http://www.codesynthesis.com/licenses/fdl-1.2.txt) D +/R1 (http://www.codesynthesis.com/projects/xsd/documentation/cxx/parser/guide/index.xhtml) D +/R2 (http://www.codesynthesis.com/projects/xsd/documentation/cxx/parser/guide/cxx-parser-guide.pdf) D +/R3 (http://www.codesynthesis.com/projects/xsd/documentation/cxx/parser/guide/cxx-parser-guide.ps) D +/R1 (http://www.codesynthesis.com/projects/xsd/documentation/xsd.xhtml) D +/R2 (http://www.codesynthesis.com/mailman/listinfo/xsd-users) D +/R3 (http://www.codesynthesis.com/pipermail/xsd-users/) D +/R4 (http://www.w3.org/TR/xmlschema-0/) D +/TS { + tables E get /table E D + table aload pop /rdesc E D /cdesc E D /tdesc E D + tdesc aload pop /capalg E D /caption E D /rules E D /frame E D /nfoot E D + /nhead E D /ncol E D /nrow E D /border E D /twid E D /units E D /talign E D + /flow E D /clear E D /tclass E D pop pop + /w W D /eps 0.1 D /OU f D /PL 1 D + /FN EF 21 get D EZ 21 get Ey 21 get FS + 0 1 1{ + /pass E D + 0 1 nrow{ + /irow E D + /cells rdesc irow get 6 get D + 0 1 ncol{ + /icol E D + /cell cells icol get D + cell 0 ne{ + cell aload pop /ang E D /CB E D pop pop pop + /DV E D /bot E D /top E D /right E D /left E D /nowrap E D /valign E D + /dp E D /align E D /rspan E D /cspan E D /cclass E D /ctype E D /cmax E D + /cmin E D /proc E D + rspan 0 eq{/rspan nrow irow sub 1 add D}if + cspan 0 eq{/cspan ncol icol sub 1 add D}if + pass 0 eq cspan 1 eq and pass 1 eq cspan 1 gt and or{ + /W 1e5 D /LL W D /PH 1 D + ctype 1 eq{() BD}if + RC align NA + AT 4 eq{/CD t D /DC dp D /LN 0 D /M1 0 D /M2 0 D}{/CD f D}ie + 0 0 M /LM 0 D proc exec BN + AT 4 eq{ + LN array astore cell 15 3 -1 roll put + cdesc icol get dup dup 5 get M1 lt{5 M1 put}{5 get /M1 E D}ie + dup 6 get M2 lt{6 M2 put}{6 get /M2 E D}ie + /LM M1 M2 add D + }if + /CD f D + ang 0 ne{/LM CP E pop neg D}if + /thiswid LM left add right add eps add D + /oldmin 0 D /oldmax 0 D + 0 1 cspan 1 sub{ + icol add cdesc E get dup 2 get /oldmax E oldmax add D + 1 get /oldmin E oldmin add D + }for + thiswid oldmax ge{ + 0 1 cspan 1 sub{ + icol add cdesc E get dup 2 E 2 get oldmax 0 eq + {pop thiswid cspan div}{thiswid mul oldmax div}ie + put + }for + }if + nowrap 1 eq{ + thiswid oldmin ge{ + 0 1 cspan 1 sub{ + icol add cdesc E get dup 1 E 1 get oldmin 0 eq + {pop thiswid cspan div}{thiswid mul oldmin div}ie + put + }for + }if + }{ + /W 0 D /LL W D /PH 2 D + ctype 1 eq{() ES () BD}if + 0 0 M /LM 0 D RC proc exec BN + /thiswid LM left add right add eps add D + thiswid oldmin ge{ + 0 1 cspan 1 sub{ + icol add cdesc E get dup 1 E 1 get oldmin 0 eq + {pop thiswid cspan div}{thiswid mul oldmin div}ie + put + }for + }if + }ie + ctype 1 eq{() ES}if + }if + }if + }for + }for + }for + /tmin 0 D /tmax 0 D + 0 1 ncol{ + cdesc E get dup 1 get E 2 get 2 copy gt{pop dup}if + tmax add /tmax E D tmin add /tmin E D + }for + twid 0 lt{twid neg IW gt{IW neg}{twid}ie /twid E D}if + tdesc 0 twid neg tmin 2 copy lt{E}if pop put + tdesc 1 twid neg tmax 2 copy lt{E}if pop put + /W w D /LL W D /OU t D /PH 0 D /PL 0 D +} D +/PT { + /PL PL 1 add D + tables E get /table E D Tm 21 get Ts mul BE + PL 2 ge{save}if + /SL SL 1 add D /FN EF 21 get D EZ 21 get Ey 21 get FS + table aload pop /rdesc E D /cdesc E D /tdesc E D + tdesc aload pop /capalg E D /caption E D /rules E D /frame E D /nfoot E D + /nhead E D /ncol E D /nrow E D /border E D /twid E D /units E D /talign E D + /flow E D /clear E D /tclass E D /tmax E D /tmin E D + /w W D /xo XO D /mr MR D /ll LL D /lg LG D /ai AI D /bc BC D /nr NR D /ar AR D + /tr TR D /ui UI D /ph PH D /a0 A0 D /pf PF D /at AT D /av AV D /al AL D + /Le LE D /la La D + talign 0 lt{/talign AL 0 gt{AV AL get}{A0 2 le{A0}{0}ie}ie D}if + ph 1 eq ph 2 eq or{ + NL ph 1 eq{tmax}{tmin}ie dup XO add LM gt{/LM E XO add D}{pop}ie LM E + }{ + /PH 3 D /LE 1e5 D RC %ZF + border 0 gt{/border 1 D}if + /twidth 0 D /avail W xo sub D + twid 0 eq{0 1 ncol{cdesc E get dup 2 get E 3 get dup 0 gt{div neg dup twid lt + {/twid E D}{pop}ie}{pop pop}ie}for}if + /twid twid dup 0 lt{neg avail 2 copy gt{E}if pop}{avail mul}ie D + /OK t D 0 1 ncol{cdesc E get dup 1 get E 3 get twid mul gt{/OK f D}if}for + 0 1 ncol{ + cdesc E get dup 1 get /colmin E D dup 3 get /cwid E twid mul D dup + tmax avail le{2 get}if + tmin avail le tmax avail gt and{ + dup 2 get E 1 get dup 3 1 roll sub avail tmin sub mul tmax tmin sub div add + }if + tmin avail gt{1 get}if + 0 E colmin cwid lt OK and{pop cwid}if dup /twidth E twidth add D put + }for + /OU f D CP + tmin twid le{ + 0 1 ncol{cdesc E get dup 0 get twidth div twid mul 0 E put}for + /twidth twid D + }if + CP printcap CP E pop sub /caphig E D pop + 0 1 1{ + /pass E D + 0 1 nrow{ + /irow E D + /cells rdesc irow get 6 get D + 0 1 ncol{ + /icol E D + /cell cells icol get D + cell 0 ne{ + cell aload pop /ang E D /CB E D pop pop pop + /DV E D /bot E D /top E D /right E D /left E D /nowrap E D /valign E D + /dp E D /align E D /rspan E D /cspan E D /cclass E D /ctype E D /cmax E D + /cmin E D /proc E D + rspan 0 eq{/rspan nrow irow sub 1 add D}if + cspan 0 eq{/cspan ncol icol sub 1 add D}if + /W 0 D + 0 1 cspan 1 sub{icol add cdesc E get 0 get /W E W add D}for + pass 0 eq rspan 1 eq and pass 1 eq rspan 1 gt and or{ + ctype 1 eq{() BD}if + /W W left sub right sub D /XO 0 D /EO 0 D SI + /A0 align D RC align NA + AT 4 eq{ + /DC dp D /DO 0 D /ID 1 D + 0 1 DV length 1 sub{DV E get dup DO gt{/DO E D}{pop}ie}for + /Lo DO DV 0 get sub D /L1 Lo D + }if + 0 0 M /BP t D /Fl t D /MF 0 D /FB 0 D + proc exec T not{/CI 0 D}if BN 0 FB neg R MF 0 eq{/MF CS D}if + CP /thishig E neg bot add top add CI add D pop + ang 0 ne{/thishig LM bot add top add D}if + cell 16 MF put cell 17 Ya put cell 18 thishig put + valign 4 eq{ + /below thishig Ya sub D + rdesc irow get dup dup 4 get Ya lt + {4 Ya put}{4 get /Ya E D}ie + dup 5 get below lt{5 below put}{5 get /below E D}ie + /thishig Ya below add D + }if + ctype 1 eq{()ES}if + /oldhig 0 D + 0 1 rspan 1 sub{ + irow add rdesc E get 0 get /oldhig E oldhig add D + }for + thishig oldhig ge{ + 0 1 rspan 1 sub{ + irow add rdesc E get dup 0 E 0 get oldhig 0 eq + {pop thishig rspan div}{thishig mul oldhig div}ie + put + }for + }if + }if + }if + }for + }for + }for M RC %ZF + /thight 0 D /racc 0 D /maxh 0 D /brk 0 D /rbeg nhead nfoot add D + 0 1 nrow{ + rdesc E get dup 0 get dup /thight E thight add D + brk 0 eq{/racc E D}{/racc E racc add D}ie + racc maxh gt{/maxh racc D}if 2 get /brk E D + }for + ph 3 ge{thight caphig add E}if + ph 0 eq ph 4 eq or{ + /PH 4 D /LE Le D /OU Ou D /yoff 0 D /headsz 0 D + 0 1 nhead 1 sub{rdesc E get 0 get headsz add /headsz E D}for + /footsz 0 D + 0 1 nfoot 1 sub{rdesc E nhead add get 0 get footsz add /footsz E D}for + /ahig LE BO add MI add D /maxh maxh headsz add footsz add D + /thight thight headsz add footsz add D + tmin avail gt maxh ahig gt or + {/Sf avail tmin div dup ahig maxh div gt{pop ahig maxh div}if D /SA t D} + {/Sf 1 D}ie + tclass 1 eq thight LE 15 sub gt and + {/SA t D LE 15 sub thight div dup Sf lt{/Sf E D}{pop}ie}if + SA{Sf Sf scale /ll ll Sf div D /xo xo Sf div D /LE LE Sf div D + /mr mr Sf div D /BO BO Sf div D /ahig ahig Sf div D}if + nhead nfoot add getwid + LE CP E pop add capalg 0 eq{caphig sub}if + bT{f}{dup thight lt thight ahig lt and}ie + E headsz sub footsz sub rwid lt or{NP}if + capalg 0 eq{printcap -8 SP}if + CP /ycur E D pop + printhead + rbeg 1 nrow{/row E D row + getwid + ycur yoff add rwid sub footsz sub LE add 0 lt + {nfoot 0 gt{printfoot}if Tf NP /rbeg irow1 D + Ba{MI /MI MI SA{Sf div}if D MI SP /MI E D}if + CP /ycur E D pop /yoff 0 D printhead}if + irow1 printrow + }for + printfoot /row row 1 add D Tf + 0 ycur yoff add M + capalg 1 eq{/EO 0 D SI -3 SP printcap}if + Sf 1 lt{1 Sf div dup scale /ll ll Sf mul D /xo xo Sf mul D /LE LE Sf mul D + /mr mr Sf mul D /BO BO Sf mul D /SA f D}if + /EO 0 D + }if + }ie + /W w D /XO xo D /MR mr D /LL ll D /LG lg D /AI ai D /BC bc D /NR nr D /AR ar D + /TR tr D /UI ui D /PH ph D /A0 a0 D /PF pf D /AT at D /AV av D /AL al D + /La la D + /SL SL 1 sub NN D /CF 0 D /FN 0 D SZ SL get FR SL get FS Wf not{()F2}if + PL 2 ge{Ms E restore Ms or /Ms E D PH 1 eq PH 2 eq or + {/LM E D}if PH 3 ge{/CI 0 D NL 0 E neg R}if + }if + /PL PL 1 sub D /CI 0 D /BP f D /PO f D () Bm 21 get Ts mul BE BL %CF CS SF +} D +/printcap{ + capalg 0 ge{ + SA{/W w Sf div D} + {talign 1 eq{/XO xo ll twidth sub 2 div add D}if + talign 2 eq{/XO xo ll twidth sub add D}if + /W XO twidth add D + }ie /XO xo D /LL W XO sub MR sub D + /PA f D /Fl capalg 0 eq D + 1 NA BL caption exec BN OA /PA t D + }if +} D +/getwid{ + /irow1 E D + /irow2 irow1 D + /rwid 0 D + {rdesc irow2 get dup 0 get rwid add /rwid E D 2 get 0 eq + {exit}{/irow2 irow2 1 add D}ie + }loop +} D +/printrow{ + /xoff ll twidth PL 2 ge{Sf div}if sub talign mul 2 div D + /xleft xoff xo add D + /irow E D + /cells rdesc irow get 6 get D + 0 1 ncol{ + /icol E D + /cell cells icol get D + cell 0 ne{ + cell aload pop /ang E D /CB E D /cvsize E D /above E D /fontsz E D + /DV E D /bot E D /top E D /right E D /left E D /nowrap E D /valign E D + /dp E D /align E D /rspan E D /cspan E D /cclass E D /ctype E D /cmax E D + /cmin E D /proc E D + rspan 0 eq{/rspan nrow irow sub 1 add D}if + cspan 0 eq{/cspan ncol icol sub 1 add D}if + /width 0 D + 0 1 cspan 1 sub{icol add cdesc E get 0 get /width E width add D}for + /rhight rdesc irow get 0 get D + /hight rhight D + 1 1 rspan 1 sub{irow add rdesc E get 0 get /hight E hight add D}for + /W xo xoff add width add right sub D + ang 0 ne{/W xo xoff add hight add right sub D}if + /EO xo xoff add left add D SI + Cf{ + gsave CB VC xo xoff add ycur yoff add M + 0 hight neg RL width 0 RL 0 hight RL width neg 0 RL fill + grestore + }if + ctype 1 eq{() BD}if + /A0 align D RC + AT 4 eq{ + /DC dp D /ID 1 D /DO cdesc icol get 5 get D /Lo DO DV 0 get sub D /L1 Lo D + }if + ang 0 ne{ + gsave ang 90 eq + {xoff ycur add hight cvsize sub 2 div sub ycur hight sub xoff sub} + {xoff ycur sub width add hight cvsize sub 2 div add ycur xoff add}ie + translate ang rotate + }if + valign 3 le{0 ycur yoff add top sub + hight cvsize sub valign 1 sub mul 2 div sub M} + {0 ycur yoff add top sub above add rdesc irow get 4 get sub M}ie + /PA f D /BP t D /Fl t D + BL proc exec BN + ang 0 ne{grestore}if + /PA t D + ctype 1 eq{() ES}if + }if + /xoff xoff cdesc icol get 0 get add D + }for + /yoff yoff rhight sub D +} D +/printhead {0 1 nhead 1 sub{printrow}for} D +/printfoot {nhead 1 nhead nfoot add 1 sub{printrow}for} D +/Tf { + OU{rules 2 ge{/yoff 0 D + gsave 0 Sg + [0 1 nhead 1 sub{}for rbeg 1 row 1 sub{}for nhead 1 nhead nfoot add 1 sub{}for]{ + /irow E D + /xoff ll twidth PL 2 ge{Sf div}if sub talign mul 2 div D + /cells rdesc irow get 6 get D + 0 1 ncol{ + /icol E D + /cell cells icol get D + cell 0 ne{ + /rspan cell 6 get D + /cspan cell 5 get D + rspan 0 eq{/rspan nrow irow sub 1 add D}if + cspan 0 eq{/cspan ncol icol sub 1 add D}if + /width 0 D + 0 1 cspan 1 sub{icol add cdesc E get 0 get /width E width add D}for + /rhight rdesc irow get 0 get D + /hight rhight D + 1 1 rspan 1 sub{irow add rdesc E get 0 get /hight E hight add D}for + xo xoff add width add ycur yoff add M + 0 hight neg icol cspan add 1 sub ncol lt + {cdesc icol 1 add get 4 get dup rules 3 le{1 eq}{pop t}ie + {1 eq{0.8}{0.3}ie + LW RL CP stroke M}{pop R}ie}{R}ie + irow nhead nfoot add 1 sub ne nfoot 0 eq or + {irow rspan add 1 sub nrow lt + {rdesc irow rspan add get 3 get}{nfoot 0 eq{0}{1}ie}ie + dup rules 2 mod 0 eq{1 eq}{pop t}ie + {1 eq irow rspan add nhead eq or irow rspan add row eq nfoot 0 gt and or + {0.8}{0.3}ie LW width neg 0 RL CP stroke M}{pop}ie}if + }if + /xoff xoff cdesc icol get 0 get add D + }for + /yoff yoff rhight sub D + }forall + grestore + /Ms t D + }if + frame 1 gt{ + gsave + 1 LW 0 Sg + xleft ycur M CP BB + 0 yoff frame 5 eq frame 7 ge or{RL}{R}ie + twidth 0 frame 3 eq frame 4 eq or frame 8 ge or{RL}{R}ie CP BB + 0 yoff neg frame 6 ge{RL}{R}ie + twidth neg 0 frame 2 eq frame 4 eq or frame 8 ge or{RL}{R}ie + closepath stroke + grestore + /Ms t D + }if + }if +} D +/tables [[[0 0 0 0 0 -1 0 0 1 56 2 0 0 9 5 {()} -1] + [[0 0 0 0 0 0 0][0 0 0 0 0 0 0][0 0 0 0 0 0 0]] + [[0 0 0 0 0 0 [[{()1 Sl()WB(XML Schema type)} 0 0 1 0 1 1 1 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB(Parser imple)HY(men)HY(ta)HY(tion)YH( in the )SM(xml_schema)ES( names)HY(pace)YH()} 0 0 1 0 1 1 1 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB(Parser return type + )} 0 0 1 0 1 1 1 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB(anyType and anySim)HY(ple)HY(Type)YH( types + )} 0 0 1 0 3 1 1 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +0 +0 +]] +[0 0 0 0 0 0 [[{()1 Sl()WB()SM(anyType)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(any_type_pimpl)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(void)ES( + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB()SM(anySim)HY(ple)HY(Type)YH()ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(any_simple_type_pimpl)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(void)ES( + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB(fixed-length inte)HY(gral)YH( types + )} 0 0 1 0 3 1 1 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +0 +0 +]] +[0 0 0 0 0 0 [[{()1 Sl()WB()SM(byte)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(byte_pimpl)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(signed\240char)ES( + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB()SM(unsigned)HY(Byte)YH()ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(unsigned_byte_pimpl)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(unsigned\240char)ES( + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB()SM(short)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(short_pimpl)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(short)ES( + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB()SM(unsigned)HY(Short)YH()ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(unsigned_short_pimpl)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(unsigned\240short)ES( + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB()SM(int)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(int_pimpl)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(int)ES( + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB()SM(unsignedInt)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(unsigned_int_pimpl)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(unsigned\240int)ES( + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB()SM(long)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(long_pimpl)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(long\240long)ES( + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB()SM(unsigned)HY(Long)YH()ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(unsigned_long_pimpl)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(unsigned\240long\240long)ES( + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB(arbi)HY(trary)YH(-length inte)HY(gral)YH( types + )} 0 0 1 0 3 1 1 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +0 +0 +]] +[0 0 0 0 0 0 [[{()1 Sl()WB()SM(integer)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(integer_pimpl)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(long\240long)ES( + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB()SM(nonPos)HY(i)HY(tiveIn)HY(te)HY(ger)YH()ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(non_posi)HY(tive)YH(_integer_pimpl)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(long\240long)ES( + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB()SM(nonNeg)HY(a)HY(tiveIn)HY(te)HY(ger)YH()ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(non_nega)HY(tive)YH(_integer_pimpl)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(unsigned long\240long)ES( + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB()SM(posi)HY(tiveIn)HY(te)HY(ger)YH()ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(posi)HY(tive)YH(_integer_pimpl)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(unsigned long\240long)ES( + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB()SM(nega)HY(tiveIn)HY(te)HY(ger)YH()ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(nega)HY(tive)YH(_integer_pimpl)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(long\240long)ES( + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB(boolean types + )} 0 0 1 0 3 1 1 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +0 +0 +]] +[0 0 0 0 0 0 [[{()1 Sl()WB()SM(boolean)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(boolean_pimpl)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(bool)ES( + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB(fixed-preci)HY(sion)YH( float)HY(ing)YH(-point types + )} 0 0 1 0 3 1 1 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +0 +0 +]] +[0 0 0 0 0 0 [[{()1 Sl()WB()SM(float)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(float_pimpl)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(float)ES( + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB()SM(double)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(double_pimpl)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(double)ES( + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB(arbi)HY(trary)YH(-preci)HY(sion)YH( float)HY(ing)YH(-point types + )} 0 0 1 0 3 1 1 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +0 +0 +]] +[0 0 0 0 0 0 [[{()1 Sl()WB()SM(decimal)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(decimal_pimpl)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(double)ES( + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB(string-based types + )} 0 0 1 0 3 1 1 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +0 +0 +]] +[0 0 0 0 0 0 [[{()1 Sl()WB()SM(string)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(string_pimpl)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(std::string)ES( or )SM(std::wstring)ES( + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB()SM(normal)HY(ized)HY(String)YH()ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(normal)HY(ized)YH(_string_pimpl)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(std::string)ES( or )SM(std::wstring)ES( + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB()SM(token)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(token_pimpl)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(std::string)ES( or )SM(std::wstring)ES( + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB()SM(Name)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(name_pimpl)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(std::string)ES( or )SM(std::wstring)ES( + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB()SM(NMTOKEN)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(nmtoken_pimpl)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(std::string)ES( or )SM(std::wstring)ES( + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB()SM(NCName)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(ncname_pimpl)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(std::string)ES( or )SM(std::wstring)ES( + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB()SM(language)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(language_pimpl)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(std::string)ES( or )SM(std::wstring)ES( + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB(qual)HY(i)HY(fied)YH( name + )} 0 0 1 0 3 1 1 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +0 +0 +]] +[0 0 0 0 0 0 [[{()1 Sl()WB()SM(QName)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(qname_pimpl)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(xml_schema::qname)ES()BR()0 31 1 A(Section 6.1, + ")SM(QName)ES( Parser")31 0 TN TL()Ec /AF f D( + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB(ID/IDREF types + )} 0 0 1 0 3 1 1 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +0 +0 +]] +[0 0 0 0 0 0 [[{()1 Sl()WB()SM(ID)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(id_pimpl)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(std::string)ES( or )SM(std::wstring)ES( + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB()SM(IDREF)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(idref_pimpl)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(std::string)ES( or )SM(std::wstring)ES( + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB(list types + )} 0 0 1 0 3 1 1 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +0 +0 +]] +[0 0 0 0 0 0 [[{()1 Sl()WB()SM(NMTO)HY(KENS)YH()ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(nmto)HY(kens)YH(_pimpl)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(xml_schema::string_sequence)ES()BR()0 32 1 A(Section + 6.2, ")SM(NMTO)HY(KENS)YH()ES( and )SM(IDREFS)ES( Parsers")32 0 TN TL()Ec /AF f D( + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB()SM(IDREFS)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(idrefs_pimpl)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(xml_schema::string_sequence)ES()BR()0 32 1 A(Section + 6.2, ")SM(NMTO)HY(KENS)YH()ES( and )SM(IDREFS)ES( Parsers")32 0 TN TL()Ec /AF f D( + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB(URI types + )} 0 0 1 0 3 1 1 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +0 +0 +]] +[0 0 0 0 0 0 [[{()1 Sl()WB()SM(anyURI)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(uri_pimpl)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(std::string)ES( or )SM(std::wstring)ES( + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB(binary types + )} 0 0 1 0 3 1 1 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +0 +0 +]] +[0 0 0 0 0 0 [[{()1 Sl()WB()SM(base64Binary)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(base64_binary_pimpl)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(std::[auto|unique]_ptr< xml_schema::buffer>)ES()BR( )0 33 1 A(Section 6.3, ")SM(base64Binary)ES( and + )SM(hexBi)HY(nary)YH()ES( Parsers")33 0 TN TL()Ec /AF f D( + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB()SM(hexBi)HY(nary)YH()ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(hex_binary_pimpl)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(std::[auto|unique]_ptr< xml_schema::buffer>)ES()BR( )0 33 1 A(Section 6.3, ")SM(base64Binary)ES( and + )SM(hexBi)HY(nary)YH()ES( Parsers")33 0 TN TL()Ec /AF f D( + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB(date/time types + )} 0 0 1 0 3 1 1 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +0 +0 +]] +[0 0 0 0 0 0 [[{()1 Sl()WB()SM(date)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(date_pimpl)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(xml_schema::date)ES()BR()0 35 1 A(Section 6.5, + ")SM(date)ES( Parser")35 0 TN TL()Ec /AF f D( + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB()SM(date)HY(Time)YH()ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(date_time_pimpl)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(xml_schema::date_time)ES()BR()0 36 1 A(Section 6.6, + ")SM(date)HY(Time)YH()ES( Parser")36 0 TN TL()Ec /AF f D( + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB()SM(dura)HY(tion)YH()ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(dura)HY(tion)YH(_pimpl)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(xml_schema::dura)HY(tion)YH()ES()BR()0 37 1 A(Section 6.7, + ")SM(dura)HY(tion)YH()ES( Parser")37 0 TN TL()Ec /AF f D( + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB()SM(gDay)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(gday_pimpl)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(xml_schema::gday)ES()BR()0 38 1 A(Section 6.8, + ")SM(gDay)ES( Parser")38 0 TN TL()Ec /AF f D( + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB()SM(gMonth)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(gmonth_pimpl)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(xml_schema::gmonth)ES()BR()0 39 1 A(Section 6.9, + ")SM(gMonth)ES( Parser")39 0 TN TL()Ec /AF f D( + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB()SM(gMon)HY(th)HY(Day)YH()ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(gmonth_day_pimpl)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(xml_schema::gmonth_day)ES()BR()0 40 1 A(Section 6.10, + ")SM(gMon)HY(th)HY(Day)YH()ES( Parser")40 0 TN TL()Ec /AF f D( + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB()SM(gYear)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(gyear_pimpl)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(xml_schema::gyear)ES()BR()0 41 1 A(Section 6.11, + ")SM(gYear)ES( Parser")41 0 TN TL()Ec /AF f D( + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB()SM(gYear)HY(Month)YH()ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(gyear_month_pimpl)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(xml_schema::gyear_month)ES()BR()0 42 1 A(Section + 6.12, ")SM(gYear)HY(Month)YH()ES( Parser")42 0 TN TL()Ec /AF f D( + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB()SM(time)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(time_pimpl)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(xml_schema::time)ES()BR()0 43 1 A(Section 6.13, + ")SM(time)ES( Parser")43 0 TN TL()Ec /AF f D( + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +]] +[[0 0 0 0 0 -1 0 0 1 57 1 0 0 9 5 {()} -1] + [[0 0 0 0 0 0 0][0 0 0 0 0 0 0]] + [[0 0 0 0 0 0 [[{()1 Sl()WB(Construct)} 0 0 1 0 1 1 1 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB(Notes)} 0 0 1 0 1 1 1 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB(Struc)HY(ture)YH()} 0 0 1 0 2 1 1 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +0 +]] +[0 0 0 0 0 0 [[{()1 Sl()WB(element)} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB(attribute)} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB(any)} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB(anyAt)HY(tribute)YH()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB(all)} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB(sequence)} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB(choice)} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB(complex type, empty content)} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB(complex type, mixed content)} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB(complex type, simple content exten)HY(sion)YH()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB(complex type, simple content restric)HY(tion)YH()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB(Simple type facets are not vali)HY(dated)YH(.)} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB(complex type, complex content exten)HY(sion)YH()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB(complex type, complex content restric)HY(tion)YH()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB(list)} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB(Datatypes)} 0 0 1 0 2 1 1 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +0 +]] +[0 0 0 0 0 0 [[{()1 Sl()WB(byte)} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB(unsigned)HY(Byte)YH()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB(short)} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB(unsigned)HY(Short)YH()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB(int)} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB(unsignedInt)} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB(long)} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB(unsigned)HY(Long)YH()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB(integer)} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB(nonPos)HY(i)HY(tiveIn)HY(te)HY(ger)YH()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB(nonNeg)HY(a)HY(tiveIn)HY(te)HY(ger)YH()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB(posi)HY(tiveIn)HY(te)HY(ger)YH()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB(nega)HY(tiveIn)HY(te)HY(ger)YH()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB(boolean)} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB(float)} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB(double)} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB(decimal)} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB(string)} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB(normal)HY(ized)HY(String)YH()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB(token)} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB(Name)} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB(NMTOKEN)} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB(NCName)} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB(language)} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB(anyURI)} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB(ID)} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB(Iden)HY(tity)YH( constraint is not enforced.)} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB(IDREF)} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB(Iden)HY(tity)YH( constraint is not enforced.)} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB(NMTO)HY(KENS)YH()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB(IDREFS)} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB(Iden)HY(tity)YH( constraint is not enforced.)} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB(QName)} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB(base64Binary)} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB(hexBi)HY(nary)YH()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB(date)} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB(date)HY(Time)YH()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB(dura)HY(tion)YH()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB(gDay)} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB(gMonth)} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB(gMon)HY(th)HY(Day)YH()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB(gYear)} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB(gYear)HY(Month)YH()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB(time)} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +]] +] D +0 1 1{TS}for RC ZF +/Ba f D /BO 0 D Bs +/UR (/home/boris/work/xsd/xsd/doc/cxx/parser/guide/index.xhtml) D +/Ti (C++/Parser Mapping Getting Started Guide) D +/Au () D +/Df f D +/ME [] D +Pt +/BO 0 D TC /Ba f D Bs /AU f D /UR () D RC ZF + tH WB +ND 1 gt{Ts 3 mul Np 0()0 C()BD(C++/Parser Mapping Getting Started Guide)ES()0 1 TN()EA()BN}if +1 NH le{50(1\240\240)1 C(Preface)WB 3 Sn()50 1 TN()EA()BN}if +2 NH le{51(1.1\240\240)2 C(About)WB 4 Sn( This Docu)HY(ment)YH()51 1 TN()EA()BN}if +2 NH le{52(1.2\240\240)2 C(More)WB 5 Sn( Infor)HY(ma)HY(tion)YH()52 1 TN()EA()BN}if +1 NH le{53(2\240\240)1 C(1)WB 6 Sn( Intro)HY(duc)HY(tion)YH()53 1 TN()EA()BN}if +2 NH le{54(2.1\240\240)2 C(1.1)WB 7 Sn( Mapping Overview)54 1 TN()EA()BN}if +2 NH le{55(2.2\240\240)2 C(1.2)WB 8 Sn( Bene)HY(fits)YH()55 1 TN()EA()BN}if +1 NH le{56(3\240\240)1 C(2)WB 9 Sn( Hello World Example)56 1 TN()EA()BN}if +2 NH le{57(3.1\240\240)2 C(2.1)WB 10 Sn( Writing XML Docu)HY(ment)YH( and Schema)57 1 TN()EA()BN}if +2 NH le{58(3.2\240\240)2 C(2.2)WB 11 Sn( Trans)HY(lat)HY(ing)YH( Schema to C++)58 1 TN()EA()BN}if +2 NH le{59(3.3\240\240)2 C(2.3)WB 12 Sn( Imple)HY(ment)HY(ing)YH( Appli)HY(ca)HY(tion)YH( Logic)59 1 TN()EA()BN}if +2 NH le{60(3.4\240\240)2 C(2.4)WB 13 Sn( Compil)HY(ing)YH( and Running)60 1 TN()EA()BN}if +1 NH le{61(4\240\240)1 C(3)WB 14 Sn( Parser Skele)HY(tons)YH()61 1 TN()EA()BN}if +2 NH le{62(4.1\240\240)2 C(3.1)WB 15 Sn( Imple)HY(ment)HY(ing)YH( the Gender Parser)62 1 TN()EA()BN}if +2 NH le{63(4.2\240\240)2 C(3.2)WB 16 Sn( Imple)HY(ment)HY(ing)YH( the Person Parser)63 1 TN()EA()BN}if +2 NH le{64(4.3\240\240)2 C(3.3)WB 17 Sn( Imple)HY(ment)HY(ing)YH( the People Parser)64 1 TN()EA()BN}if +2 NH le{65(4.4\240\240)2 C(3.4)WB 18 Sn( Connect)HY(ing)YH( the Parsers Together)65 1 TN()EA()BN}if +1 NH le{66(5\240\240)1 C(4)WB 19 Sn( Type Maps)66 1 TN()EA()BN}if +2 NH le{67(5.1\240\240)2 C(4.1)WB 20 Sn( Object Model)67 1 TN()EA()BN}if +2 NH le{68(5.2\240\240)2 C(4.2)WB 21 Sn( Type Map File Format)68 1 TN()EA()BN}if +2 NH le{69(5.3\240\240)2 C(4.3)WB 22 Sn( Parser Imple)HY(men)HY(ta)HY(tions)YH()69 1 TN()EA()BN}if +1 NH le{70(6\240\240)1 C(5)WB 23 Sn( Mapping Config)HY(u)HY(ra)HY(tion)YH()70 1 TN()EA()BN}if +2 NH le{71(6.1\240\240)2 C(5.1)WB 24 Sn( C++ Stan)HY(dard)YH()71 1 TN()EA()BN}if +2 NH le{72(6.2\240\240)2 C(5.2)WB 25 Sn( Char)HY(ac)HY(ter)YH( Type and Encod)HY(ing)YH()72 1 TN()EA()BN}if +2 NH le{73(6.3\240\240)2 C(5.3)WB 26 Sn( Under)HY(ly)HY(ing)YH( XML Parser)73 1 TN()EA()BN}if +2 NH le{74(6.4\240\240)2 C(5.4)WB 27 Sn( XML Schema Vali)HY(da)HY(tion)YH()74 1 TN()EA()BN}if +2 NH le{75(6.5\240\240)2 C(5.5)WB 28 Sn( Support for Poly)HY(mor)HY(phism)YH()75 1 TN()EA()BN}if +1 NH le{76(7\240\240)1 C(6)WB 29 Sn( Built-In XML Schema Type Parsers)76 1 TN()EA()BN}if +2 NH le{77(7.1\240\240)2 C(6.1)WB 31 Sn( )SM(QName)ES( Parser)77 1 TN()EA()BN}if +2 NH le{78(7.2\240\240)2 C(6.2)WB 32 Sn( )SM(NMTO)HY(KENS)YH()ES( and )SM(IDREFS)ES( Parsers)78 1 TN()EA()BN}if +2 NH le{79(7.3\240\240)2 C(6.3)WB 33 Sn( )SM(base64Binary)ES( and )SM(hexBi)HY(nary)YH()ES( Parsers)79 1 TN()EA()BN}if +2 NH le{80(7.4\240\240)2 C(6.4)WB 34 Sn( Time Zone Repre)HY(sen)HY(ta)HY(tion)YH()80 1 TN()EA()BN}if +2 NH le{81(7.5\240\240)2 C(6.5)WB 35 Sn( )SM(date)ES( Parser)81 1 TN()EA()BN}if +2 NH le{82(7.6\240\240)2 C(6.6)WB 36 Sn( )SM(date)HY(Time)YH()ES( Parser)82 1 TN()EA()BN}if +2 NH le{83(7.7\240\240)2 C(6.7)WB 37 Sn( )SM(dura)HY(tion)YH()ES( Parser)83 1 TN()EA()BN}if +2 NH le{84(7.8\240\240)2 C(6.8)WB 38 Sn( )SM(gDay)ES( Parser)84 1 TN()EA()BN}if +2 NH le{85(7.9\240\240)2 C(6.9)WB 39 Sn( )SM(gMonth)ES( Parser)85 1 TN()EA()BN}if +2 NH le{86(7.10\240\240)2 C(6.10)WB 40 Sn( )SM(gMon)HY(th)HY(Day)YH()ES( Parser)86 1 TN()EA()BN}if +2 NH le{87(7.11\240\240)2 C(6.11)WB 41 Sn( )SM(gYear)ES( Parser)87 1 TN()EA()BN}if +2 NH le{88(7.12\240\240)2 C(6.12)WB 42 Sn( )SM(gYear)HY(Month)YH()ES( Parser)88 1 TN()EA()BN}if +2 NH le{89(7.13\240\240)2 C(6.13)WB 43 Sn( )SM(time)ES( Parser)89 1 TN()EA()BN}if +1 NH le{90(8\240\240)1 C(7)WB 44 Sn( Docu)HY(ment)YH( Parser and Error Handling)90 1 TN()EA()BN}if +2 NH le{91(8.1\240\240)2 C(7.1)WB 45 Sn( Xerces-C++ Docu)HY(ment)YH( Parser)91 1 TN()EA()BN}if +2 NH le{92(8.2\240\240)2 C(7.2)WB 46 Sn( Expat Docu)HY(ment)YH( Parser)92 1 TN()EA()BN}if +2 NH le{93(8.3\240\240)2 C(7.3)WB 47 Sn( Error Handling)93 1 TN()EA()BN}if +1 NH le{94(9\240\240)1 C(Appendix)WB 48 Sn( A \236 Supported XML Schema Constructs)94 1 TN()EA()BN}if +/OU t D /Cb Db D NP Ep ET +/Cb Db D /Ct [16#00 16#00 16#00] D /Cl [16#00 16#00 16#00] D /CL -1 D Ct Sc + +/Ba f D /BO 0 D Bs +/UR (/home/boris/work/xsd/xsd/doc/cxx/parser/guide/index.xhtml) D +/Ti (C++/Parser Mapping Getting Started Guide) D +/Au () D +/Df f D +/ME [] D + +NP RC ZF +()1 Sl()WB 0 Sn( + +)BR()WB 1 Sn( )BR()WB 2 Sn( + + + )0 1 0 H(Preface)WB 50 Sn()WB 3 Sn()EA()EH( + + )0 2 1 H(About)WB 51 Sn()WB 4 Sn( This Docu)HY(ment)YH()EA()EH( + + )0 P(The goal of this docu)HY(ment)YH( is to provide you with an under)HY(stand)HY(ing)YH( of + the C++/Parser program)HY(ming)YH( model and allow you to effi)HY(ciently)YH( eval)HY(u)HY(ate)YH( + XSD against your project's tech)HY(ni)HY(cal)YH( require)HY(ments)YH(. As such, this + docu)HY(ment)YH( is intended for C++ devel)HY(op)HY(ers)YH( and soft)HY(ware)YH( archi)HY(tects)YH( + who are looking for an XML process)HY(ing)YH( solu)HY(tion)YH(. Prior expe)HY(ri)HY(ence)YH( + with XML and C++ is required to under)HY(stand)YH( this docu)HY(ment)YH(. Basic + under)HY(stand)HY(ing)YH( of XML Schema is advan)HY(ta)HY(geous)YH( but not expected + or required. + )EP( + + + )0 2 2 H(More)WB 52 Sn()WB 5 Sn( Infor)HY(ma)HY(tion)YH()EA()EH( + + )0 P(Beyond this guide, you may also find the follow)HY(ing)YH( sources of + infor)HY(ma)HY(tion)YH( useful:)EP( + + )UL( )-1 LI()R1 2 A(XSD + Compiler Command Line Manual)EA( + + )-1 LI(The )SM(exam)HY(ples)YH(/cxx/parser/)ES( direc)HY(tory)YH( in the XSD + distri)HY(bu)HY(tion)YH( contains a collec)HY(tion)YH( of exam)HY(ples)YH( and a README + file with an overview of each example. + + )-1 LI(The )SM(README)ES( file in the XSD distri)HY(bu)HY(tion)YH( explains + how to compile the exam)HY(ples)YH( on various plat)HY(forms)YH(. + + )-1 LI(The )R2 2 A(xsd-users)EA( + mailing list is the place to ask tech)HY(ni)HY(cal)YH( ques)HY(tions)YH( about XSD and the C++/Parser mapping. + Further)HY(more)YH(, the )R3 2 A(archives)EA( + may already have answers to some of your ques)HY(tions)YH(. + + )LU( + + + + )0 1 3 H(1)WB 53 Sn()WB 6 Sn( Intro)HY(duc)HY(tion)YH()EA()EH( + + )0 P(Welcome to CodeSyn)HY(the)HY(sis)YH( XSD and the C++/Parser mapping. XSD is a + cross-plat)HY(form)YH( W3C XML Schema to C++ data binding compiler. C++/Parser + is a W3C XML Schema to C++ mapping that repre)HY(sents)YH( an XML vocab)HY(u)HY(lary)YH( + as a set of parser skele)HY(tons)YH( which you can imple)HY(ment)YH( to perform XML + process)HY(ing)YH( as required by your appli)HY(ca)HY(tion)YH( logic. + )EP( + + )0 2 4 H(1.1)WB 54 Sn()WB 7 Sn( Mapping Overview)EA()EH( + + )0 P(The C++/Parser mapping provides event-driven, stream-oriented + XML parsing, XML Schema vali)HY(da)HY(tion)YH(, and C++ data binding. It was + specif)HY(i)HY(cally)YH( designed and opti)HY(mized)YH( for high perfor)HY(mance)YH( and + small foot)HY(print)YH(. Based on the static anal)HY(y)HY(sis)YH( of the schemas, XSD + gener)HY(ates)YH( compact, highly-opti)HY(mized)YH( hier)HY(ar)HY(chi)HY(cal)YH( state machines + that combine data extrac)HY(tion)YH(, vali)HY(da)HY(tion)YH(, and even dispatch)HY(ing)YH( + in a single step. As a result, the gener)HY(ated)YH( code is typi)HY(cally)YH( + 2-10 times faster than general-purpose vali)HY(dat)HY(ing)YH( XML parsers + while main)HY(tain)HY(ing)YH( the lowest static and dynamic memory foot)HY(prints)YH(. + )EP( + + )0 P(To speed up appli)HY(ca)HY(tion)YH( devel)HY(op)HY(ment)YH(, the C++/Parser mapping + can be instructed to gener)HY(ate)YH( sample parser imple)HY(men)HY(ta)HY(tions)YH( + and a test driver which can then be filled with the appli)HY(ca)HY(tion)YH( + logic code. The mapping also provides a wide range of + mech)HY(a)HY(nisms)YH( for control)HY(ling)YH( and customiz)HY(ing)YH( the gener)HY(ated)YH( code.)EP( + + )0 P(The next chapter shows how to create a simple appli)HY(ca)HY(tion)YH( that uses + the C++/Parser mapping to parse, vali)HY(date)YH(, and extract data from a + simple XML docu)HY(ment)YH(. The follow)HY(ing)YH( chap)HY(ters)YH( show how to + use the C++/Parser mapping in more detail.)EP( + + )0 2 5 H(1.2)WB 55 Sn()WB 8 Sn( Bene)HY(fits)YH()EA()EH( + + )0 P(Tradi)HY(tional)YH( XML access APIs such as Docu)HY(ment)YH( Object Model \201DOM\202 + or Simple API for XML \201SAX\202 have a number of draw)HY(backs)YH( that + make them less suit)HY(able)YH( for creat)HY(ing)YH( robust and main)HY(tain)HY(able)YH( + XML process)HY(ing)YH( appli)HY(ca)HY(tions)YH(. These draw)HY(backs)YH( include: + )EP( + + )UL( )-1 LI(Generic repre)HY(sen)HY(ta)HY(tion)YH( of XML in terms of elements, attributes, + and text forces an appli)HY(ca)HY(tion)YH( devel)HY(oper)YH( to write a substan)HY(tial)YH( + amount of bridg)HY(ing)YH( code that iden)HY(ti)HY(fies)YH( and trans)HY(forms)YH( pieces + of infor)HY(ma)HY(tion)YH( encoded in XML to a repre)HY(sen)HY(ta)HY(tion)YH( more suit)HY(able)YH( + for consump)HY(tion)YH( by the appli)HY(ca)HY(tion)YH( logic. + + )-1 LI(String-based flow control defers error detec)HY(tion)YH( to runtime. + It also reduces code read)HY(abil)HY(ity)YH( and main)HY(tain)HY(abil)HY(ity)YH(. + + )-1 LI(Lack of type safety because the data is repre)HY(sented)YH( + as text. + + )-1 LI(Result)HY(ing)YH( appli)HY(ca)HY(tions)YH( are hard to debug, change, and + main)HY(tain)YH(. + )LU( + + )0 P(In contrast, stat)HY(i)HY(cally)YH(-typed, vocab)HY(u)HY(lary)YH(-specific parser + skele)HY(tons)YH( produced by the C++/Parser mapping allow you to + operate in your domain terms instead of the generic elements, + attributes, and text. Static typing helps catch errors at + compile-time rather than at run-time. Auto)HY(matic)YH( code gener)HY(a)HY(tion)YH( + frees you for more inter)HY(est)HY(ing)YH( tasks \201such as doing some)HY(thing)YH( + useful with the infor)HY(ma)HY(tion)YH( stored in the XML docu)HY(ments)YH(\202 and + mini)HY(mizes)YH( the effort needed to adapt your appli)HY(ca)HY(tions)YH( to + changes in the docu)HY(ment)YH( struc)HY(ture)YH(. To summa)HY(rize)YH(, the C++/Parser + mapping has the follow)HY(ing)YH( key advan)HY(tages)YH( over generic XML + access APIs:)EP( + + )UL( )-1 LI()BD(Ease of use.)ES( The gener)HY(ated)YH( code hides all the complex)HY(ity)YH( + asso)HY(ci)HY(ated)YH( with recre)HY(at)HY(ing)YH( the docu)HY(ment)YH( struc)HY(ture)YH(, main)HY(tain)HY(ing)YH( the + dispatch state, and convert)HY(ing)YH( the data from the text repre)HY(sen)HY(ta)HY(tion)YH( + to data types suit)HY(able)YH( for manip)HY(u)HY(la)HY(tion)YH( by the appli)HY(ca)HY(tion)YH( logic. + Parser skele)HY(tons)YH( also provide a conve)HY(nient)YH( mech)HY(a)HY(nism)YH( for build)HY(ing)YH( + custom in-memory repre)HY(sen)HY(ta)HY(tions)YH(. + + )-1 LI()BD(Natural repre)HY(sen)HY(ta)HY(tion)YH(.)ES( The gener)HY(ated)YH( parser skele)HY(tons)YH( + imple)HY(ment)YH( parser call)HY(backs)YH( as virtual func)HY(tions)YH( with names + corre)HY(spond)HY(ing)YH( to elements and attributes in XML. As a result, + you process the XML data using your domain vocab)HY(u)HY(lary)YH( instead + of generic elements, attributes, and text. + + + )-1 LI()BD(Concise code.)ES( With a sepa)HY(rate)YH( parser skele)HY(ton)YH( for each + XML Schema type, the appli)HY(ca)HY(tion)YH( imple)HY(men)HY(ta)HY(tion)YH( is + simpler and thus easier to read and under)HY(stand)YH(. + + )-1 LI()BD(Safety.)ES( The XML data is deliv)HY(ered)YH( to parser call)HY(backs)YH( as + stat)HY(i)HY(cally)YH( typed objects. The parser call)HY(backs)YH( them)HY(selves)YH( are virtual + func)HY(tions)YH(. This helps catch program)HY(ming)YH( errors at compile-time + rather than at runtime. + + )-1 LI()BD(Main)HY(tain)HY(abil)HY(ity)YH(.)ES( Auto)HY(matic)YH( code gener)HY(a)HY(tion)YH( mini)HY(mizes)YH( the + effort needed to adapt the appli)HY(ca)HY(tion)YH( to changes in the + docu)HY(ment)YH( struc)HY(ture)YH(. With static typing, the C++ compiler + can pin-point the places in the appli)HY(ca)HY(tion)YH( code that need to be + changed. + + )-1 LI()BD(Effi)HY(ciency)YH(.)ES( The gener)HY(ated)YH( parser skele)HY(tons)YH( combine + data extrac)HY(tion)YH(, vali)HY(da)HY(tion)YH(, and even dispatch)HY(ing)YH( in a single + step. This makes them much more effi)HY(cient)YH( than tradi)HY(tional)YH( + archi)HY(tec)HY(tures)YH( with sepa)HY(rate)YH( stages for vali)HY(da)HY(tion)YH( and data + extrac)HY(tion)YH(/dispatch. + )LU( + + + + + )0 1 6 H(2)WB 56 Sn()WB 9 Sn( Hello World Example)EA()EH( + + )0 P(In this chapter we will examine how to parse a very simple XML + docu)HY(ment)YH( using the XSD-gener)HY(ated)YH( C++/Parser skele)HY(tons)YH(. + The code presented in this chapter is based on the )SM(hello)ES( + example which can be found in the )SM(exam)HY(ples)YH(/cxx/parser/)ES( + direc)HY(tory)YH( of the XSD distri)HY(bu)HY(tion)YH(.)EP( + + )0 2 7 H(2.1)WB 57 Sn()WB 10 Sn( Writing XML Docu)HY(ment)YH( and Schema)EA()EH( + + )0 P(First, we need to get an idea about the struc)HY(ture)YH( + of the XML docu)HY(ments)YH( we are going to process. Our + )SM(hello.xml)ES(, for example, could look like this:)EP( + + ) 10 28 PR( + + + Hello + + sun + moon + world + +)RP( + + )0 P(Then we can write a descrip)HY(tion)YH( of the above XML in the + XML Schema language and save it into )SM(hello.xsd)ES(:)EP( + + ) 13 70 PR( + + + + + + + + + + + +)RP( + + )0 P(Even if you are not famil)HY(iar)YH( with XML Schema, it + should be easy to connect decla)HY(ra)HY(tions)YH( in )SM(hello.xsd)ES( + to elements in )SM(hello.xml)ES(. The )SM(hello)ES( type + is defined as a sequence of the nested )SM(greet)HY(ing)YH()ES( and + )SM(name)ES( elements. Note that the term sequence in XML + Schema means that elements should appear in a partic)HY(u)HY(lar)YH( order + as opposed to appear)HY(ing)YH( multi)HY(ple)YH( times. The )SM(name)ES( + element has its )SM(maxOc)HY(curs)YH()ES( prop)HY(erty)YH( set to + )SM(unbounded)ES( which means it can appear multi)HY(ple)YH( times + in an XML docu)HY(ment)YH(. Finally, the glob)HY(ally)YH(-defined )SM(hello)ES( + element prescribes the root element for our vocab)HY(u)HY(lary)YH(. For an + easily-approach)HY(able)YH( intro)HY(duc)HY(tion)YH( to XML Schema refer to + )R4 2 A(XML Schema Part 0: + Primer)EA(.)EP( + + )0 P(The above schema is a spec)HY(i)HY(fi)HY(ca)HY(tion)YH( of our XML vocab)HY(u)HY(lary)YH(; it tells + every)HY(body)YH( what valid docu)HY(ments)YH( of our XML-based language should look + like. The next step is to compile this schema to gener)HY(ate)YH( + the object model and parsing func)HY(tions)YH(.)EP( + + )0 2 8 H(2.2)WB 58 Sn()WB 11 Sn( Trans)HY(lat)HY(ing)YH( Schema to C++)EA()EH( + + )0 P(Now we are ready to trans)HY(late)YH( our )SM(hello.xsd)ES( to C++ parser + skele)HY(tons)YH(. To do this we invoke the XSD compiler from a termi)HY(nal)YH( + \201UNIX\202 or a command prompt \201Windows\202: + )EP( + + ) 1 45 PR($ xsd cxx-parser --xml-parser expat hello.xsd)RP( + + )0 P(The )SM(--xml-parser)ES( option indi)HY(cates)YH( that we want to + use Expat as the under)HY(ly)HY(ing)YH( XML parser \201see )0 26 1 A(Section + 5.3, "Under)HY(ly)HY(ing)YH( XML Parser")26 0 TN TL()Ec /AF f D(\202. The XSD compiler produces two + C++ files: )SM(hello-pskel.hxx)ES( and )SM(hello-pskel.cxx)ES(. + The follow)HY(ing)YH( code frag)HY(ment)YH( is taken from )SM(hello-pskel.hxx)ES(; + it should give you an idea about what gets gener)HY(ated)YH(: + )EP( + + ) 32 60 PR(class hello_pskel +{ +public: + // Parser callbacks. Override them in your implementation. + // + virtual void + pre \201\202; + + virtual void + greeting \201const std::string&\202; + + virtual void + name \201const std::string&\202; + + virtual void + post_hello \201\202; + + // Parser construction API. + // + void + greeting_parser \201xml_schema::string_pskel&\202; + + void + name_parser \201xml_schema::string_pskel&\202; + + void + parsers \201xml_schema::string_pskel& /* greeting */, + xml_schema::string_pskel& /* name */\202; + +private: + ...)WR( +};)RP( + + )0 P(The first four member func)HY(tions)YH( shown above are called parser + call)HY(backs)YH(. You would normally over)HY(ride)YH( them in your imple)HY(men)HY(ta)HY(tion)YH( + of the parser to do some)HY(thing)YH( useful. Let's go through all of + them one by one.)EP( + + )0 P(The )SM(pre\201\202)ES( func)HY(tion)YH( is an initial)HY(iza)HY(tion)YH( call)HY(back)YH(. It is + called when a new element of type )SM(hello)ES( is about + to be parsed. You would normally use this func)HY(tion)YH( to allo)HY(cate)YH( a new + instance of the result)HY(ing)YH( type or clear accu)HY(mu)HY(la)HY(tors)YH( that are used + to gather infor)HY(ma)HY(tion)YH( during parsing. The default imple)HY(men)HY(ta)HY(tion)YH( + of this func)HY(tion)YH( does nothing.)EP( + + )0 P(The )SM(post_hello\201\202)ES( func)HY(tion)YH( is a final)HY(iza)HY(tion)YH( call)HY(back)YH(. Its + name is constructed by adding the parser skele)HY(ton)YH( name to the + )SM(post_)ES( prefix. The final)HY(iza)HY(tion)YH( call)HY(back)YH( is called when + parsing of the element is complete and the result, if any, should + be returned. Note that in our case the return type of + )SM(post_hello\201\202)ES( is )SM(void)ES( which means there + is nothing to return. More on parser return types later. + )EP( + + )0 P(You may be wonder)HY(ing)YH( why the final)HY(iza)HY(tion)YH( call)HY(back)YH( is called + )SM(post_hello\201\202)ES( instead of )SM(post\201\202)ES( just + like )SM(pre\201\202)ES(. The reason for this is that + final)HY(iza)HY(tion)YH( call)HY(backs)YH( can have differ)HY(ent)YH( return types and + result in func)HY(tion)YH( signa)HY(ture)YH( clashes across inher)HY(i)HY(tance)YH( + hier)HY(ar)HY(chies)YH(. To prevent this the signa)HY(tures)YH( of final)HY(iza)HY(tion)YH( + call)HY(backs)YH( are made unique by adding the type name to their names.)EP( + + )0 P(The )SM(greet)HY(ing)YH(\201\202)ES( and )SM(name\201\202)ES( func)HY(tions)YH( are + called when the )SM(greet)HY(ing)YH()ES( and )SM(name)ES( elements + have been parsed, respec)HY(tively)YH(. Their argu)HY(ments)YH( are of type + )SM(std::string)ES( and contain the data extracted from XML.)EP( + + )0 P(The last three func)HY(tions)YH( are for connect)HY(ing)YH( parsers to each other. + For example, there is a prede)HY(fined)YH( parser for built-in XML Schema type + )SM(string)ES( in the XSD runtime. We will be using + it to parse the contents of )SM(greet)HY(ing)YH()ES( and + )SM(name)ES( elements, as shown in the next section.)EP( + + )0 2 9 H(2.3)WB 59 Sn()WB 12 Sn( Imple)HY(ment)HY(ing)YH( Appli)HY(ca)HY(tion)YH( Logic)EA()EH( + + )0 P(At this point we have all the parts we need to do some)HY(thing)YH( useful + with the infor)HY(ma)HY(tion)YH( stored in our XML docu)HY(ment)YH(. The first step is + to imple)HY(ment)YH( the parser: + )EP( + + ) 21 60 PR(#include +#include "hello-pskel.hxx" + +class hello_pimpl: public hello_pskel +{ +public: + virtual void + greeting \201const std::string& g\202 + { + greeting_ = g; + } + + virtual void + name \201const std::string& n\202 + { + std::cout << greeting_ << ", " << n << "!" << std::endl; + } + +private: + std::string greeting_; +};)RP( + + )0 P(We left both )SM(pre\201\202)ES( and )SM(post_hello\201\202)ES( with the + default imple)HY(men)HY(ta)HY(tions)YH(; we don't have anything to initial)HY(ize)YH( or + return. The rest is pretty straight)HY(for)HY(ward)YH(: we store the greet)HY(ing)YH( + in a member vari)HY(able)YH( and later, when parsing names, use it to + say hello.)EP( + + )0 P(An obser)HY(vant)YH( reader my ask what happens if the )SM(name)ES( + element comes before )SM(greet)HY(ing)YH()ES(? Don't we need to + make sure )SM(greet)HY(ing)YH(_)ES( was initial)HY(ized)YH( and report + an error other)HY(wise)YH(? The answer is no, we don't have to do + any of this. The )SM(hello_pskel)ES( parser skele)HY(ton)YH( + performs vali)HY(da)HY(tion)YH( of XML accord)HY(ing)YH( to the schema from which + it was gener)HY(ated)YH(. As a result, it will check the order + of the )SM(greet)HY(ing)YH()ES( and )SM(name)ES( elements + and report an error if it is violated.)EP( + + )0 P(Now it is time to put this parser imple)HY(men)HY(ta)HY(tion)YH( to work:)EP( + + ) 29 50 PR(using namespace std; + +int +main \201int argc, char* argv[]\202 +{ + try + { + // Construct the parser. + // + xml_schema::string_pimpl string_p; + hello_pimpl hello_p; + + hello_p.greeting_parser \201string_p\202; + hello_p.name_parser \201string_p\202; + + // Parse the XML instance. + // + xml_schema::document doc_p \201hello_p, "hello"\202; + + hello_p.pre \201\202; + doc_p.parse \201argv[1]\202; + hello_p.post_hello \201\202; + } + catch \201const xml_schema::exception& e\202 + { + cerr << e << endl; + return 1; + } +})RP( + + )0 P(The first part of this code snippet instan)HY(ti)HY(ates)YH( indi)HY(vid)HY(ual)YH( parsers + and assem)HY(bles)YH( them into a complete vocab)HY(u)HY(lary)YH( parser. + )SM(xml_schema::string_pimpl)ES( is an imple)HY(men)HY(ta)HY(tion)YH( of a parser + for built-in XML Schema type )SM(string)ES(. It is provided by + the XSD runtime along with parsers for other built-in types \201for + more infor)HY(ma)HY(tion)YH( on the built-in parsers see )0 29 1 A(Chapter 6, + "Built-In XML Schema Type Parsers")29 0 TN TL()Ec /AF f D(\202. We use )SM(string_pimpl)ES( + to parse the )SM(greet)HY(ing)YH()ES( and )SM(name)ES( elements as + indi)HY(cated)YH( by the calls to )SM(greet)HY(ing)YH(_parser\201\202)ES( and + )SM(name_parser\201\202)ES(. + )EP( + + )0 P(Then we instan)HY(ti)HY(ate)YH( a docu)HY(ment)YH( parser \201)SM(doc_p)ES(\202. The + first argu)HY(ment)YH( to its construc)HY(tor)YH( is the parser for + the root element \201)SM(hello_p)ES( in our case\202. The + second argu)HY(ment)YH( is the root element name. + )EP( + + )0 P(The final piece is the calls to )SM(pre\201\202)ES(, )SM(parse\201\202)ES(, + and )SM(post_hello\201\202)ES(. The call to )SM(parse\201\202)ES( + perform the actual XML parsing while the calls to )SM(pre\201\202)ES( and + )SM(post_hello\201\202)ES( make sure that the parser for the root + element can perform proper initial)HY(iza)HY(tion)YH( and cleanup.)EP( + + )0 P(While our parser imple)HY(men)HY(ta)HY(tion)YH( and test driver are pretty small and + easy to write by hand, for bigger XML vocab)HY(u)HY(lar)HY(ies)YH( it can be a + substan)HY(tial)YH( effort. To help with this task XSD can auto)HY(mat)HY(i)HY(cally)YH( + gener)HY(ate)YH( sample parser imple)HY(men)HY(ta)HY(tions)YH( and a test driver from your + schemas. You can request the gener)HY(a)HY(tion)YH( of a sample imple)HY(men)HY(ta)HY(tion)YH( with + empty func)HY(tion)YH( bodies by spec)HY(i)HY(fy)HY(ing)YH( the )SM(--gener)HY(ate)YH(-noop-impl)ES( + option. Or you can gener)HY(ate)YH( a sample imple)HY(men)HY(ta)HY(tion)YH( that prints the + data store in XML by using the )SM(--gener)HY(ate)YH(-print-impl)ES( + option. To request the gener)HY(a)HY(tion)YH( of a test driver you can use the + )SM(--gener)HY(ate)YH(-test-driver)ES( option. For more infor)HY(ma)HY(tion)YH( + on these options refer to the + )R1 2 A(XSD + Compiler Command Line Manual)EA(. The )SM('gener)HY(ated)YH(')ES( example + in the XSD distri)HY(bu)HY(tion)YH( shows the sample imple)HY(men)HY(ta)HY(tion)YH( gener)HY(a)HY(tion)YH( + feature in action.)EP( + + + )0 2 10 H(2.4)WB 60 Sn()WB 13 Sn( Compil)HY(ing)YH( and Running)EA()EH( + + )0 P(After saving all the parts from the previ)HY(ous)YH( section in + )SM(driver.cxx)ES(, we are ready to compile our first + appli)HY(ca)HY(tion)YH( and run it on the test XML docu)HY(ment)YH(. On a UNIX + system this can be done with the follow)HY(ing)YH( commands: + )EP( + + ) 6 48 PR($ c++ -I.../libxsd -c driver.cxx hello-pskel.cxx +$ c++ -o driver driver.o hello-pskel.o -lexpat +$ ./driver hello.xml +Hello, sun! +Hello, moon! +Hello, world!)RP( + + )0 P(Here )SM(.../libxsd)ES( repre)HY(sents)YH( the path to the + )SM(libxsd)ES( direc)HY(tory)YH( in the XSD distri)HY(bu)HY(tion)YH(. + We can also test the error handling. To test XML well-formed)HY(ness)YH( + check)HY(ing)YH(, we can try to parse )SM(hello-pskel.hxx)ES(:)EP( + + ) 2 52 PR($ ./driver hello-pskel.hxx +hello-pskel.hxx:1:0: not well-formed \201invalid token\202)RP( + + )0 P(We can also try to parse a valid XML but not from our + vocab)HY(u)HY(lary)YH(, for example )SM(hello.xsd)ES(:)EP( + + ) 3 50 PR($ ./driver hello.xsd +hello.xsd:2:0: expected element 'hello' instead of +'http://www.w3.org/2001/XMLSchema#schema')RP( + + + + + + )0 1 11 H(3)WB 61 Sn()WB 14 Sn( Parser Skele)HY(tons)YH()EA()EH( + + )0 P(As we have seen in the previ)HY(ous)YH( chapter, the XSD compiler gener)HY(ates)YH( + a parser skele)HY(ton)YH( class for each type defined in XML Schema. In + this chapter we will take a closer look at differ)HY(ent)YH( func)HY(tions)YH( + that comprise a parser skele)HY(ton)YH( as well as the way to connect + our imple)HY(men)HY(ta)HY(tions)YH( of these parser skele)HY(tons)YH( to create a complete + parser.)EP( + + )0 P(In this and subse)HY(quent)YH( chap)HY(ters)YH( we will use the follow)HY(ing)YH( schema + that describes a collec)HY(tion)YH( of person records. We save it in + )SM(people.xsd)ES(:)EP( + + ) 28 69 PR( + + + + + + + + + + + + + + + + + + + + + + + + + + +)RP( + + )0 P(A sample XML instance to go along with this schema is saved + in )SM(people.xml)ES(:)EP( + + ) 15 33 PR( + + + John + Doe + male + 32 + + + Jane + Doe + female + 28 + +)RP( + + )0 P(Compil)HY(ing)YH( )SM(people.xsd)ES( with the XSD compiler results + in three parser skele)HY(tons)YH( being gener)HY(ated)YH(: )SM(gender_pskel)ES(, + )SM(person_pskel)ES(, and )SM(people_pskel)ES(. We are going + to examine and imple)HY(ment)YH( each of them in the subse)HY(quent)YH( sections.)EP( + + )0 2 12 H(3.1)WB 62 Sn()WB 15 Sn( Imple)HY(ment)HY(ing)YH( the Gender Parser)EA()EH( + + )0 P(The gener)HY(ated)YH( )SM(gender_pskel)ES( parser skele)HY(ton)YH( looks like + this:)EP( + + ) 11 60 PR(class gender_pskel: public virtual xml_schema::string_pskel +{ +public: + // Parser callbacks. Override them in your implementation. + // + virtual void + pre \201\202; + + virtual void + post_gender \201\202; +};)RP( + + )0 P(Notice that )SM(gender_pskel)ES( inher)HY(its)YH( from + )SM(xml_schema::string_skel)ES( which is a parser skele)HY(ton)YH( + for built-in XML Schema type )SM(string)ES( and is + prede)HY(fined)YH( in the XSD runtime library. This is an example + of the general rule that parser skele)HY(tons)YH( follow: if a type + in XML Schema inher)HY(its)YH( from another then there will be an + equiv)HY(a)HY(lent)YH( inher)HY(i)HY(tance)YH( between the corre)HY(spond)HY(ing)YH( parser + skele)HY(ton)YH( classes.)EP( + + )0 P(The )SM(pre\201\202)ES( and )SM(post_gender\201\202)ES( call)HY(backs)YH( + should look famil)HY(iar)YH( from the previ)HY(ous)YH( chapter. Let's now + imple)HY(ment)YH( the parser. Our imple)HY(men)HY(ta)HY(tion)YH( will simply print + the gender to )SM(cout)ES(:)EP( + + + ) 11 51 PR(class gender_pimpl: public gender_pskel, + public xml_schema::string_pimpl +{ +public: + virtual void + post_gender \201\202 + { + std::string s = post_string \201\202; + cout << "gender: " << s << endl; + } +};)RP( + + )0 P(While the code is quite short, there is a lot going on. First, + notice that we are inher)HY(it)HY(ing)YH( from )SM(gender_pskel)ES( )EM(and)ES( + from )SM(xml_schema::string_pimpl)ES(. We've encoun)HY(tered)YH( + )SM(xml_schema::string_pimpl)ES( already; it is an + imple)HY(men)HY(ta)HY(tion)YH( of the )SM(xml_schema::string_pskel)ES( parser + skele)HY(ton)YH( for built-in XML Schema type )SM(string)ES(.)EP( + + )0 P(This is another common theme in the C++/Parser program)HY(ming)YH( model: + reusing imple)HY(men)HY(ta)HY(tions)YH( of the base parsers in the derived ones with + the C++ mixin idiom. In our case, )SM(string_pimpl)ES( will + do all the dirty work of extract)HY(ing)YH( the data and we can just get + it at the end with the call to )SM(post_string\201\202)ES(.)EP( + + )0 P(In case you are curious, here is what + )SM(xml_schema::string_pskel)ES( and + )SM(xml_schema::string_pimpl)ES( look like:)EP( + + ) 25 49 PR(namespace xml_schema +{ + class string_pskel: public simple_content + { + public: + virtual std::string + post_string \201\202 = 0; + }; + + class string_pimpl: public virtual string_pskel + { + public: + virtual void + _pre \201\202; + + virtual void + _characters \201const xml_schema::ro_string&\202; + + virtual std::string + post_string \201\202; + + protected: + std::string str_; + }; +})RP( + + )0 P(There are three new pieces in this code that we haven't seen yet. + They are the )SM(simple_content)ES( class as well as + the )SM(_pre\201\202)ES( and )SM(_char)HY(ac)HY(ters)YH(\201\202)ES( func)HY(tions)YH(. + The )SM(simple_content)ES( class is defined in the XSD + runtime and is a base class for all parser skele)HY(tons)YH( that conform + to the simple content model in XML Schema. Types with the + simple content model cannot have nested elements\236only text + and attributes. There is also the )SM(complex_content)ES( + class which corre)HY(sponds)YH( to the complex content mode \201types with + nested elements, for example, )SM(person)ES( from + )SM(people.xsd)ES(\202.)EP( + + )0 P(The )SM(_pre\201\202)ES( func)HY(tion)YH( is a parser call)HY(back)YH(. Remem)HY(ber)YH( we + talked about the )SM(pre\201\202)ES( and )SM(post_*\201\202)ES( call)HY(backs)YH( + in the previ)HY(ous)YH( chapter? There are actu)HY(ally)YH( two more call)HY(backs)YH( + with similar roles: )SM(_pre\201\202)ES( and )SM(_post \201\202)ES(. + As a result, each parser skele)HY(ton)YH( has four special call)HY(backs)YH(:)EP( + + ) 11 15 PR( virtual void + pre \201\202; + + virtual void + _pre \201\202; + + virtual void + _post \201\202; + + virtual void + post_name \201\202;)RP( + + )0 P()SM(pre\201\202)ES( and )SM(_pre\201\202)ES( are initial)HY(iza)HY(tion)YH( + call)HY(backs)YH(. They get called in that order before a new instance of the type + is about to be parsed. The differ)HY(ence)YH( between )SM(pre\201\202)ES( and + )SM(_pre\201\202)ES( is conven)HY(tional)YH(: )SM(pre\201\202)ES( can + be completely over)HY(rid)HY(den)YH( by a derived parser. The derived + parser can also over)HY(ride)YH( )SM(_pre\201\202)ES( but has to always call + the orig)HY(i)HY(nal)YH( version. This allows you to parti)HY(tion)YH( initial)HY(iza)HY(tion)YH( + into customiz)HY(able)YH( and required parts.)EP( + + )0 P(Simi)HY(larly)YH(, )SM(_post\201\202)ES( and )SM(post_name\201\202)ES( are + final)HY(iza)HY(tion)YH( call)HY(backs)YH( with exactly the same seman)HY(tics)YH(: + )SM(post_name\201\202)ES( can be completely over)HY(rid)HY(den)YH( by the derived + parser while the orig)HY(i)HY(nal)YH( )SM(_post\201\202)ES( should always be called. + )EP( + + )0 P(The final bit we need to discuss in this section is the + )SM(_char)HY(ac)HY(ters)YH(\201\202)ES( func)HY(tion)YH(. As you might have guessed, it + is also a call)HY(back)YH(. A low-level one that deliv)HY(ers)YH( raw char)HY(ac)HY(ter)YH( content + for the type being parsed. You will seldom need to use this call)HY(back)YH( + directly. Using imple)HY(men)HY(ta)HY(tions)YH( for the built-in parsers provided by + the XSD runtime is usually a simpler and more conve)HY(nient)YH( + alter)HY(na)HY(tive)YH(.)EP( + + )0 P(At this point you might be wonder)HY(ing)YH( why some )SM(post_*\201\202)ES( + call)HY(backs)YH(, for example )SM(post_string\201\202)ES(, return some data + while others, for example )SM(post_gender\201\202)ES(, have + )SM(void)ES( as a return type. This is a valid concern + and it will be addressed in the next chapter.)EP( + + )0 2 13 H(3.2)WB 63 Sn()WB 16 Sn( Imple)HY(ment)HY(ing)YH( the Person Parser)EA()EH( + + )0 P(The gener)HY(ated)YH( )SM(person_pskel)ES( parser skele)HY(ton)YH( looks like + this:)EP( + + ) 43 60 PR(class person_pskel: public xml_schema::complex_content +{ +public: + // Parser callbacks. Override them in your implementation. + // + virtual void + pre \201\202; + + virtual void + first_name \201const std::string&\202; + + virtual void + last_name \201const std::string&\202; + + virtual void + gender \201\202; + + virtual void + age \201short\202; + + virtual void + post_person \201\202; + + // Parser construction API. + // + void + first_name_parser \201xml_schema::string_pskel&\202; + + void + last_name_parser \201xml_schema::string_pskel&\202; +)WR( + void + gender_parser \201gender_pskel&\202; + + void + age_parser \201xml_schema::short_pskel&\202; + + void + parsers \201xml_schema::string_pskel& /* first-name */, + xml_schema::string_pskel& /* last-name */, + gender_pskel& /* gender */, + xml_schema::short_pskel& /* age */\202; +};)RP( + + + )0 P(As you can see, we have a parser call)HY(back)YH( for each of the nested + elements found in the )SM(person)ES( XML Schema type. + The imple)HY(men)HY(ta)HY(tion)YH( of this parser is straight)HY(for)HY(ward)YH(:)EP( + + ) 21 39 PR(class person_pimpl: public person_pskel +{ +public: + virtual void + first_name \201const std::string& n\202 + { + cout << "first: " << f << endl; + } + + virtual void + last_name \201const std::string& l\202 + { + cout << "last: " << l << endl; + } + + virtual void + age \201short a\202 + { + cout << "age: " << a << endl; + } +};)RP( + + )0 P(Notice that we didn't over)HY(ride)YH( the )SM(gender\201\202)ES( call)HY(back)YH( + because all the print)HY(ing)YH( is done by )SM(gender_pimpl)ES(.)EP( + + + )0 2 14 H(3.3)WB 64 Sn()WB 17 Sn( Imple)HY(ment)HY(ing)YH( the People Parser)EA()EH( + + )0 P(The gener)HY(ated)YH( )SM(people_pskel)ES( parser skele)HY(ton)YH( looks like + this:)EP( + + ) 22 60 PR(class people_pskel: public xml_schema::complex_content +{ +public: + // Parser callbacks. Override them in your implementation. + // + virtual void + pre \201\202; + + virtual void + person \201\202; + + virtual void + post_people \201\202; + + // Parser construction API. + // + void + person_parser \201person_pskel&\202; + + void + parsers \201person_pskel& /* person */\202; +};)RP( + + )0 P(The )SM(person\201\202)ES( call)HY(back)YH( will be called after parsing each + )SM(person)ES( element. While )SM(person_pimpl)ES( does + all the print)HY(ing)YH(, one useful thing we can do in this call)HY(back)YH( is to + print an extra newline after each person record so that our + output is more read)HY(able)YH(:)EP( + + ) 9 39 PR(class people_pimpl: public people_pskel +{ +public: + virtual void + person \201\202 + { + cout << endl; + } +};)RP( + + )0 P(Now it is time to put every)HY(thing)YH( together.)EP( + + + )0 2 15 H(3.4)WB 65 Sn()WB 18 Sn( Connect)HY(ing)YH( the Parsers Together)EA()EH( + + )0 P(At this point we have all the indi)HY(vid)HY(ual)YH( parsers imple)HY(mented)YH( + and can proceed to assem)HY(ble)YH( them into a complete parser + for our XML vocab)HY(u)HY(lary)YH(. The first step is to instan)HY(ti)HY(ate)YH( + all the indi)HY(vid)HY(ual)YH( parsers that we will need:)EP( + + ) 6 34 PR(xml_schema::short_pimpl short_p; +xml_schema::string_pimpl string_p; + +gender_pimpl gender_p; +person_pimpl person_p; +people_pimpl people_p;)RP( + + )0 P(Notice that our schema uses two built-in XML Schema types: + )SM(string)ES( for the )SM(first-name)ES( and + )SM(last-name)ES( elements as well as )SM(short)ES( + for )SM(age)ES(. We will use prede)HY(fined)YH( parsers that + come with the XSD runtime to handle these types. The next + step is to connect all the indi)HY(vid)HY(ual)YH( parsers. We do this + with the help of func)HY(tions)YH( defined in the parser + skele)HY(tons)YH( and marked with the "Parser Construc)HY(tion)YH( API" + comment. One way to do it is to connect each indi)HY(vid)HY(ual)YH( + parser by calling the )SM(*_parser\201\202)ES( func)HY(tions)YH(:)EP( + + ) 6 38 PR(person_p.first_name_parser \201string_p\202; +person_p.last_name_parser \201string_p\202; +person_p.gender_parser \201gender_p\202; +person_p.age_parser \201short_p\202; + +people_p.person_parser \201person_p\202;)RP( + + )0 P(You might be wonder)HY(ing)YH( what happens if you do not provide + a parser by not calling one of the )SM(*_parser\201\202)ES( func)HY(tions)YH(. + In that case the corre)HY(spond)HY(ing)YH( XML content will be skipped, + includ)HY(ing)YH( vali)HY(da)HY(tion)YH(. This is an effi)HY(cient)YH( way to ignore parts + of the docu)HY(ment)YH( that you are not inter)HY(ested)YH( in.)EP( + + + )0 P(An alter)HY(na)HY(tive)YH(, shorter, way to connect the parsers is by using + the )SM(parsers\201\202)ES( func)HY(tions)YH( which connects all the parsers + for a given type at once:)EP( + + ) 2 57 PR(person_p.parsers \201string_p, string_p, gender_p, short_p\202; +people_p.parsers \201person_p\202;)RP( + + )0 P(The follow)HY(ing)YH( figure illus)HY(trates)YH( the result)HY(ing)YH( connec)HY(tions)YH(. Notice + the corre)HY(spon)HY(dence)YH( between return types of the )SM(post_*\201\202)ES( + func)HY(tions)YH( and argu)HY(ment)YH( types of element call)HY(backs)YH( that are connected + by the arrows.)EP( + + + )2 Al()BR()0 0 IM()Ea()BR( + + )0 P(The last step is the construc)HY(tion)YH( of the docu)HY(ment)YH( parser and + invo)HY(ca)HY(tion)YH( of the complete parser on our sample XML instance:)EP( + + ) 5 48 PR(xml_schema::document doc_p \201people_p, "people"\202; + +people_p.pre \201\202; +doc_p.parse \201"people.xml"\202; +people_p.post_people \201\202;)RP( + + )0 P(Let's consider )SM(xml_schema::docu)HY(ment)YH()ES( in + more detail. While the exact defi)HY(ni)HY(tion)YH( of this class + varies depend)HY(ing)YH( on the under)HY(ly)HY(ing)YH( parser selected, + here is the common part:)EP( + + ) 24 56 PR(namespace xml_schema +{ + class document + { + public: + document \201xml_schema::parser_base&, + const std::string& root_element_name, + bool polymorphic = false\202; + + document \201xml_schema::parser_base&, + const std::string& root_element_namespace, + const std::string& root_element_name, + bool polymorphic = false\202; + + void + parse \201const std::string& file\202; + + void + parse \201std::istream&\202; + + ... + + }; +})RP( + + )0 P()SM(xml_schema::docu)HY(ment)YH()ES( is a root parser for + the vocab)HY(u)HY(lary)YH(. The first argu)HY(ment)YH( to its construc)HY(tors)YH( is the + parser for the type of the root element \201)SM(people_impl)ES( + in our case\202. Because a type parser is only concerned with + the element's content and not with the element's name, we need + to specify the root element's name some)HY(where)YH(. That's + what is passed as the second and third argu)HY(ments)YH( to the + )SM(docu)HY(ment)YH()ES('s construc)HY(tors)YH(.)EP( + + )0 P(There are also two over)HY(loaded)YH( )SM(parse\201\202)ES( func)HY(tions)YH( + defined in the )SM(docu)HY(ment)YH()ES( class \201there are actu)HY(ally)YH( + more but the others are specific to the under)HY(ly)HY(ing)YH( XML parser\202. + The first version parses a local file iden)HY(ti)HY(fied)YH( by a name. The + second version reads the data from an input stream. For more + infor)HY(ma)HY(tion)YH( on the )SM(xml_schema::docu)HY(ment)YH()ES( class + refer to )0 44 1 A(Chapter 7, "Docu)HY(ment)YH( Parser and Error + Handling")44 0 TN TL()Ec /AF f D(.)EP( + + )0 P(Let's now consider a step-by-step list of actions that happen + as we parse through )SM(people.xml)ES(. The content of + )SM(people.xml)ES( is repeated below for conve)HY(nience)YH(.)EP( + + ) 15 33 PR( + + + John + Doe + male + 32 + + + Jane + Doe + female + 28 + +)RP( + + + )4 OL( )-1 LI()SM(people_p.pre\201\202)ES( is called from + )SM(main\201\202)ES(. We did not provide any imple)HY(men)HY(ta)HY(tion)YH( + for this call)HY(back)YH( so this call is a no-op. + + )-1 LI()SM(doc_p.parse\201"people.xml"\202)ES( is called from + )SM(main\201\202)ES(. The parser opens the file and starts + parsing its content. + + )-1 LI(The parser encoun)HY(ters)YH( the root element. )SM(doc_p)ES( + veri)HY(fies)YH( that the root element is correct and calls + )SM(_pre\201\202)ES( on )SM(people_p)ES( which is also + a no-op. Parsing is now dele)HY(gated)YH( to )SM(people_p)ES(. + + )-1 LI(The parser encoun)HY(ters)YH( the )SM(person)ES( element. + )SM(people_p)ES( deter)HY(mines)YH( that )SM(person_p)ES( + is respon)HY(si)HY(ble)YH( for parsing this element. )SM(pre\201\202)ES( + and )SM(_pre\201\202)ES( call)HY(backs)YH( are called on )SM(person_p)ES(. + Parsing is now dele)HY(gated)YH( to )SM(person_p)ES(. + + )-1 LI(The parser encoun)HY(ters)YH( the )SM(first-name)ES( element. + )SM(person_p)ES( deter)HY(mines)YH( that )SM(string_p)ES( + is respon)HY(si)HY(ble)YH( for parsing this element. )SM(pre\201\202)ES( + and )SM(_pre\201\202)ES( call)HY(backs)YH( are called on )SM(string_p)ES(. + Parsing is now dele)HY(gated)YH( to )SM(string_p)ES(. + + )-1 LI(The parser encoun)HY(ters)YH( char)HY(ac)HY(ter)YH( content consist)HY(ing)YH( of + )SM("John")ES(. The )SM(_char)HY(ac)HY(ters)YH(\201\202)ES( call)HY(back)YH( is + called on )SM(string_p)ES(. + + )-1 LI(The parser encoun)HY(ters)YH( the end of )SM(first-name)ES( + element. The )SM(_post\201\202)ES( and )SM(post_string\201\202)ES( + call)HY(backs)YH( are called on )SM(string_p)ES(. The + )SM(first_name\201\202)ES( call)HY(back)YH( is called on )SM(person_p)ES( + with the return value of )SM(post_string\201\202)ES(. The + )SM(first_name\201\202)ES( imple)HY(men)HY(ta)HY(tion)YH( prints + )SM("first: John")ES( to )SM(cout)ES(. + Parsing is now returned to )SM(person_p)ES(. + + )-1 LI(Steps anal)HY(o)HY(gous)YH( to 5-7 are performed for the )SM(last-name)ES(, + )SM(gender)ES(, and )SM(age)ES( elements. + + )-1 LI(The parser encoun)HY(ters)YH( the end of )SM(person)ES( + element. The )SM(_post\201\202)ES( and )SM(post_person\201\202)ES( + call)HY(backs)YH( are called on )SM(person_p)ES(. The + )SM(person\201\202)ES( call)HY(back)YH( is called on )SM(people_p)ES(. + The )SM(person\201\202)ES( imple)HY(men)HY(ta)HY(tion)YH( prints a new line + to )SM(cout)ES(. Parsing is now returned to + )SM(people_p)ES(. + + )-1 LI(Steps 4-9 are performed for the second )SM(person)ES( + element. + + )-1 LI(The parser encoun)HY(ters)YH( the end of )SM(people)ES( + element. The )SM(_post\201\202)ES( call)HY(back)YH( is called on + )SM(people_p)ES(. The )SM(doc_p.parse\201"people.xml"\202)ES( + call returns to )SM(main\201\202)ES(. + + )-1 LI()SM(people_p.post_people\201\202)ES( is called from + )SM(main\201\202)ES( which is a no-op. + + )LO( + + + + + + )0 1 16 H(4)WB 66 Sn()WB 19 Sn( Type Maps)EA()EH( + + )0 P(There are many useful things you can do inside parser call)HY(backs)YH( as they + are right now. There are, however, times when you want to prop)HY(a)HY(gate)YH( + some infor)HY(ma)HY(tion)YH( from one parser to another or to the caller of the + parser. One common task that would greatly benefit from such a + possi)HY(bil)HY(ity)YH( is build)HY(ing)YH( a tree-like in-memory object model of the + data stored in XML. During execu)HY(tion)YH(, each indi)HY(vid)HY(ual)YH( sub-parser + would create a sub-tree and return it to its )EM(parent)ES( parser + which can then incor)HY(po)HY(rate)YH( this sub-tree into the whole tree.)EP( + + )0 P(In this chapter we will discuss the mech)HY(a)HY(nisms)YH( offered by the + C++/Parser mapping for return)HY(ing)YH( infor)HY(ma)HY(tion)YH( from indi)HY(vid)HY(ual)YH( + parsers and see how to use them to build an object model + of our people vocab)HY(u)HY(lary)YH(.)EP( + + )0 2 17 H(4.1)WB 67 Sn()WB 20 Sn( Object Model)EA()EH( + + )0 P(An object model for our person record example could + look like this \201saved in the )SM(people.hxx)ES( file\202:)EP( + + ) 53 35 PR(#include +#include + +enum gender +{ + male, + female +}; + +class person +{ +public: + person \201const std::string& first, + const std::string& last, + ::gender gender, + short age\202 + : first_ \201first\202, last_ \201last\202, + gender_ \201gender\202, age_ \201age\202 + { + } + + const std::string& + first \201\202 const + { + return first_; + } + + const std::string& + last \201\202 const + { + return last_;)WR( + } + + ::gender + gender \201\202 const + { + return gender_; + } + + short + age \201\202 const + { + return age_; + } + +private: + std::string first_; + std::string last_; + ::gender gender_; + short age_; +}; + +typedef std::vector people;)RP( + + )0 P(While it is clear which parser is respon)HY(si)HY(ble)YH( for which part of + the object model, it is not exactly clear how, for + example, )SM(gender_pimpl)ES( will deliver )SM(gender)ES( + to )SM(person_pimpl)ES(. You might have noticed that + )SM(string_pimpl)ES( manages to deliver its value to the + )SM(first_name\201\202)ES( call)HY(back)YH( of )SM(person_pimpl)ES(. Let's + see how we can utilize the same mech)HY(a)HY(nism)YH( to prop)HY(a)HY(gate)YH( our + own data.)EP( + + )0 P(There is a way to tell the XSD compiler that you want to + exchange data between parsers. More precisely, for each + type defined in XML Schema, you can tell the compiler two things. + First, the return type of the )SM(post_*\201\202)ES( call)HY(back)YH( + in the parser skele)HY(ton)YH( gener)HY(ated)YH( for this type. And, second, + the argu)HY(ment)YH( type for call)HY(backs)YH( corre)HY(spond)HY(ing)YH( to elements and + attributes of this type. For example, for XML Schema type + )SM(gender)ES( we can specify the return type for + )SM(post_gender\201\202)ES( in the )SM(gender_pskel)ES( + skele)HY(ton)YH( and the argu)HY(ment)YH( type for the )SM(gender\201\202)ES( call)HY(back)YH( + in the )SM(person_pskel)ES( skele)HY(ton)YH(. As you might have guessed, + the gener)HY(ated)YH( code will then pass the return value from the + )SM(post_*\201\202)ES( call)HY(back)YH( as an argu)HY(ment)YH( to the element or + attribute call)HY(back)YH(.)EP( + + )0 P(The way to tell the XSD compiler about these XML Schema to + C++ mappings is with type map files. Here is a simple type + map for the )SM(gender)ES( type from the previ)HY(ous)YH( para)HY(graph)YH(:)EP( + + ) 2 25 PR(include "people.hxx"; +gender ::gender ::gender;)RP( + + )0 P(The first line indi)HY(cates)YH( that the gener)HY(ated)YH( code must include + )SM(people.hxx)ES( in order to get the defi)HY(ni)HY(tion)YH( for the + )SM(gender)ES( type. The second line spec)HY(i)HY(fies)YH( that both + argu)HY(ment)YH( and return types for the )SM(gender)ES( + XML Schema type should be the )SM(::gender)ES( C++ enum + \201we use fully-qual)HY(i)HY(fied)YH( C++ names to avoid name clashes\202. + The next section will describe the type map format in detail. + We save this type map in )SM(people.map)ES( and + then trans)HY(late)YH( our schemas with the )SM(--type-map)ES( + option to let the XSD compiler know about our type map:)EP( + + ) 1 49 PR($ xsd cxx-parser --type-map people.map people.xsd)RP( + + )0 P(If we now look at the gener)HY(ated)YH( )SM(people-pskel.hxx)ES(, + we will see the follow)HY(ing)YH( changes in the )SM(gender_pskel)ES( and + )SM(person_pskel)ES( skele)HY(tons)YH(:)EP( + + ) 17 59 PR(#include "people.hxx" + +class gender_pskel: public virtual xml_schema::string_pskel +{ + virtual ::gender + post_gender \201\202 = 0; + + ... +}; + +class person_pskel: public xml_schema::complex_content +{ + virtual void + gender \201::gender\202; + + ... +};)RP( + + )0 P(Notice that )SM(#include "people.hxx")ES( was added to + the gener)HY(ated)YH( header file from the type map to provide the + defi)HY(ni)HY(tion)YH( for the )SM(gender)ES( enum.)EP( + + )0 2 18 H(4.2)WB 68 Sn()WB 21 Sn( Type Map File Format)EA()EH( + + )0 P(Type map files are used to define a mapping between XML Schema + and C++ types. The compiler uses this infor)HY(ma)HY(tion)YH( + to deter)HY(mine)YH( return types of )SM(post_*\201\202)ES( + call)HY(backs)YH( in parser skele)HY(tons)YH( corre)HY(spond)HY(ing)YH( to XML Schema + types as well as argu)HY(ment)YH( types for call)HY(backs)YH( corre)HY(spond)HY(ing)YH( + to elements and attributes of these types.)EP( + + )0 P(The compiler has a set of prede)HY(fined)YH( mapping rules that map + the built-in XML Schema types to suit)HY(able)YH( C++ types \201discussed + below\202 and all other types to )SM(void)ES(. + By provid)HY(ing)YH( your own type maps you can over)HY(ride)YH( these prede)HY(fined)YH( + rules. The format of the type map file is presented below: + )EP( + + ) 5 58 PR(namespace [] +{ + \201include ;\202* + \201[type] [];\202* +})RP( + + )0 P(Both )SM()I()ES()ES( and + )SM()I()ES()ES( are regex patterns while + )SM()I()ES()ES(, + )SM()I()ES()ES(, and + )SM()I()ES()ES( are regex pattern + substi)HY(tu)HY(tions)YH(. All names can be option)HY(ally)YH( enclosed in + )SM(" ")ES(, for example, to include white-spaces.)EP( + + )0 P()SM()I()ES()ES( deter)HY(mines)YH( XML + Schema names)HY(pace)YH(. Optional )SM()I()ES()ES( + is prefixed to every C++ type name in this names)HY(pace)YH( decla)HY(ra)HY(tion)YH(. + )SM()I()ES()ES( is a C++ type name that is + used as a return type for the )SM(post_*\201\202)ES( call)HY(back)YH(. + Optional )SM()I()ES()ES( is an argu)HY(ment)YH( + type for call)HY(backs)YH( corre)HY(spond)HY(ing)YH( to elements and attributes + of this type. If )SM()I()ES()ES( is not + spec)HY(i)HY(fied)YH(, it defaults to )SM()I()ES()ES( + if )SM()I()ES()ES( ends with )SM(*)ES( or + )SM(&)ES( \201that is, it is a pointer or a refer)HY(ence)YH(\202 and + )SM(const\240)I()ES(&)ES( + other)HY(wise)YH(. + )SM()I()ES()ES( is a file name either in the + )SM(" ")ES( or )SM(< >)ES( format + and is added with the )SM(#include)ES( direc)HY(tive)YH( to + the gener)HY(ated)YH( code.)EP( + + )0 P(The )SM()BD(#)ES()ES( char)HY(ac)HY(ter)YH( starts a comment that ends + with a new line or end of file. To specify a name that contains + )SM()BD(#)ES()ES( enclose it in )SM()BD(" ")ES()ES(. + For example:)EP( + + ) 12 44 PR(namespace http://www.example.com/xmlns/my my +{ + include "my.hxx"; + + # Pass apples by value. + # + apple apple; + + # Pass oranges as pointers. + # + orange orange_t*; +})RP( + + )0 P(In the example above, for the + )SM(http://www.example.com/xmlns/my#orange)ES( + XML Schema type, the )SM(my::orange_t*)ES( C++ type will + be used as both return and argu)HY(ment)YH( types.)EP( + + )0 P(Several names)HY(pace)YH( decla)HY(ra)HY(tions)YH( can be spec)HY(i)HY(fied)YH( in a single + file. The names)HY(pace)YH( decla)HY(ra)HY(tion)YH( can also be completely + omitted to map types in a schema without a names)HY(pace)YH(. For + instance:)EP( + + ) 7 41 PR(include "my.hxx"; +apple apple; + +namespace http://www.example.com/xmlns/my +{ + orange "const orange_t*"; +})RP( + + )0 P(The compiler has a number of prede)HY(fined)YH( mapping rules for + the built-in XML Schema types which can be presented as the + follow)HY(ing)YH( map files. The string-based XML Schema types are + mapped to either )SM(std::string)ES( or + )SM(std::wstring)ES( depend)HY(ing)YH( on the char)HY(ac)HY(ter)YH( type + selected \201see )0 25 1 A( Section 5.2, "Char)HY(ac)HY(ter)YH( Type and + Encod)HY(ing)YH(")25 0 TN TL()Ec /AF f D( for more infor)HY(ma)HY(tion)YH(\202. The binary XML Schema + types are mapped to either )SM(std::auto_ptr)ES( + or )SM(std::unique_ptr)ES( + depend)HY(ing)YH( on the C++ stan)HY(dard)YH( selected \201C++98 or C++11, + respec)HY(tively)YH(; refer to the )SM(--std)ES( XSD compiler + command line option for details\202.)EP( + + ) 59 63 PR(namespace http://www.w3.org/2001/XMLSchema +{ + boolean bool bool; + + byte "signed char" "signed char"; + unsignedByte "unsigned char" "unsigned char"; + + short short short; + unsignedShort "unsigned short" "unsigned short"; + + int int int; + unsignedInt "unsigned int" "unsigned int"; + + long "long long" "long long"; + unsignedLong "unsigned long long" "unsigned long long"; + + integer "long long" "long long"; + + negativeInteger "long long" "long long"; + nonPositiveInteger "long long" "long long"; + + positiveInteger "unsigned long long" "unsigned long long"; + nonNegativeInteger "unsigned long long" "unsigned long long"; + + float float float; + double double double; + decimal double double; + + string std::string; + normalizedString std::string; + token std::string;)WR( + Name std::string; + NMTOKEN std::string; + NCName std::string; + ID std::string; + IDREF std::string; + language std::string; + anyURI std::string; + + NMTOKENS xml_schema::string_sequence; + IDREFS xml_schema::string_sequence; + + QName xml_schema::qname; + + base64Binary std::[auto|unique]_ptr + std::[auto|unique]_ptr; + hexBinary std::[auto|unique]_ptr + std::[auto|unique]_ptr; + + date xml_schema::date; + dateTime xml_schema::date_time; + duration xml_schema::duration; + gDay xml_schema::gday; + gMonth xml_schema::gmonth; + gMonthDay xml_schema::gmonth_day; + gYear xml_schema::gyear; + gYearMonth xml_schema::gyear_month; + time xml_schema::time; +})RP( + + )0 P(For more infor)HY(ma)HY(tion)YH( about the mapping of the built-in XML Schema types + to C++ types refer to )0 29 1 A(Chapter 6, "Built-In XML Schema Type + Parsers")29 0 TN TL()Ec /AF f D(. The last prede)HY(fined)YH( rule maps anything that wasn't + mapped by previ)HY(ous)YH( rules to )SM(void)ES(:)EP( + + ) 4 15 PR(namespace .* +{ + .* void void; +})RP( + + + )0 P(When you provide your own type maps with the + )SM(--type-map)ES( option, they are eval)HY(u)HY(ated)YH( first. This + allows you to selec)HY(tively)YH( over)HY(ride)YH( any of the prede)HY(fined)YH( rules. + Note also that if you change the mapping + of a built-in XML Schema type then it becomes your respon)HY(si)HY(bil)HY(ity)YH( + to provide the corre)HY(spond)HY(ing)YH( parser skele)HY(ton)YH( and imple)HY(men)HY(ta)HY(tion)YH( + in the )SM(xml_schema)ES( names)HY(pace)YH(. You can include the + custom defi)HY(ni)HY(tions)YH( into the gener)HY(ated)YH( header file using the + )SM(--hxx-prologue-*)ES( options.)EP( + + )0 2 19 H(4.3)WB 69 Sn()WB 22 Sn( Parser Imple)HY(men)HY(ta)HY(tions)YH()EA()EH( + + )0 P(With the knowl)HY(edge)YH( from the previ)HY(ous)YH( section, we can proceed + with creat)HY(ing)YH( a type map that maps types in the )SM(people.xsd)ES( + schema to our object model classes in + )SM(people.hxx)ES(. In fact, we already have the begin)HY(ning)YH( + of our type map file in )SM(people.map)ES(. Let's extend + it with the rest of the types:)EP( + + ) 5 25 PR(include "people.hxx"; + +gender ::gender ::gender; +person ::person; +people ::people;)RP( + + )0 P(There are a few things to note about this type map. We did not + provide the argu)HY(ment)YH( types for )SM(person)ES( and + )SM(people)ES( because the default constant refer)HY(ence)YH( is + exactly what we need. We also did not provide any mappings + for built-in XML Schema types )SM(string)ES( and + )SM(short)ES( because they are handled by the prede)HY(fined)YH( + rules and we are happy with the result. Note also that + all C++ types are fully qual)HY(i)HY(fied)YH(. This is done to avoid + poten)HY(tial)YH( name conflicts in the gener)HY(ated)YH( code. Now we can + recom)HY(pile)YH( our schema and move on to imple)HY(ment)HY(ing)YH( the parsers:)EP( + + ) 1 68 PR($ xsd cxx-parser --xml-parser expat --type-map people.map people.xsd)RP( + + )0 P(Here is the imple)HY(men)HY(ta)HY(tion)YH( of our three parsers in full. One + way to save typing when imple)HY(ment)HY(ing)YH( your own parsers is + to open the gener)HY(ated)YH( code and copy the signa)HY(tures)YH( of parser + call)HY(backs)YH( into your code. Or you could always auto gener)HY(ate)YH( the + sample imple)HY(men)HY(ta)HY(tions)YH( and fill them with your code.)EP( + + + ) 73 52 PR(#include "people-pskel.hxx" + +class gender_pimpl: public gender_pskel, + public xml_schema::string_pimpl +{ +public: + virtual ::gender + post_gender \201\202 + { + return post_string \201\202 == "male" ? male : female; + } +}; + +class person_pimpl: public person_pskel +{ +public: + virtual void + first_name \201const std::string& f\202 + { + first_ = f; + } + + virtual void + last_name \201const std::string& l\202 + { + last_ = l; + } + + virtual void + gender \201::gender g\202 + {)WR( + gender_ = g; + } + + virtual void + age \201short a\202 + { + age_ = a; + } + + virtual ::person + post_person \201\202 + { + return ::person \201first_, last_, gender_, age_\202; + } + +private: + std::string first_; + std::string last_; + ::gender gender_; + short age_; +}; + +class people_pimpl: public people_pskel +{ +public: + virtual void + person \201const ::person& p\202 + { + people_.push_back \201p\202; + })WR( + + virtual ::people + post_people \201\202 + { + ::people r; + r.swap \201people_\202; + return r; + } + +private: + ::people people_; +};)RP( + + )0 P(This code frag)HY(ment)YH( should look famil)HY(iar)YH( by now. Just note that + all the )SM(post_*\201\202)ES( call)HY(backs)YH( now have return types instead + of )SM(void)ES(. Here is the imple)HY(men)HY(ta)HY(tion)YH( of the test + driver for this example:)EP( + + ) 38 76 PR(#include + +using namespace std; + +int +main \201int argc, char* argv[]\202 +{ + // Construct the parser. + // + xml_schema::short_pimpl short_p; + xml_schema::string_pimpl string_p; + + gender_pimpl gender_p; + person_pimpl person_p; + people_pimpl people_p; + + person_p.parsers \201string_p, string_p, gender_p, short_p\202; + people_p.parsers \201person_p\202; + + // Parse the document to obtain the object model. + // + xml_schema::document doc_p \201people_p, "people"\202; + + people_p.pre \201\202; + doc_p.parse \201argv[1]\202; + people ppl = people_p.post_people \201\202; + + // Print the object model. + // + for \201people::iterator i \201ppl.begin \201\202\202; i != ppl.end \201\202; ++i\202 + {)WR( + cout << "first: " << i->first \201\202 << endl + << "last: " << i->last \201\202 << endl + << "gender: " << \201i->gender \201\202 == male ? "male" : "female"\202 << endl + << "age: " << i->age \201\202 << endl + << endl; + } +})RP( + + )0 P(The parser creation and assem)HY(bly)YH( part is exactly the same as in + the previ)HY(ous)YH( chapter. The parsing part is a bit differ)HY(ent)YH(: + )SM(post_people\201\202)ES( now has a return value which is the + complete object model. We store it in the + )SM(ppl)ES( vari)HY(able)YH(. The last bit of the code simply iter)HY(ates)YH( + over the )SM(people)ES( vector and prints the infor)HY(ma)HY(tion)YH( + for each person. We save the last two code frag)HY(ments)YH( to + )SM(driver.cxx)ES( and proceed to compile and test + our new appli)HY(ca)HY(tion)YH(:)EP( + + + ) 12 49 PR($ c++ -I.../libxsd -c driver.cxx people-pskel.cxx +$ c++ -o driver driver.o people-pskel.o -lexpat +$ ./driver people.xml +first: John +last: Doe +gender: male +age: 32 + +first: Jane +last: Doe +gender: female +age: 28)RP( + + + + + + )0 1 20 H(5)WB 70 Sn()WB 23 Sn( Mapping Config)HY(u)HY(ra)HY(tion)YH()EA()EH( + + )0 P(The C++/Parser mapping has a number of config)HY(u)HY(ra)HY(tion)YH( param)HY(e)HY(ters)YH( that + deter)HY(mine)YH( the overall prop)HY(er)HY(ties)YH( and behav)HY(ior)YH( of the gener)HY(ated)YH( code. + Config)HY(u)HY(ra)HY(tion)YH( param)HY(e)HY(ters)YH( are spec)HY(i)HY(fied)YH( with the XSD command line + options and include the C++ stan)HY(dard)YH(, the char)HY(ac)HY(ter)YH( type that is used + by the gener)HY(ated)YH( code, the under)HY(ly)HY(ing)YH( XML parser, whether the XML Schema + vali)HY(da)HY(tion)YH( is performed in the gener)HY(ated)YH( code, and support for XML Schema + poly)HY(mor)HY(phism)YH(. This chapter describes these config)HY(u)HY(ra)HY(tion)YH( + param)HY(e)HY(ters)YH( in more detail. For more ways to config)HY(ure)YH( the gener)HY(ated)YH( + code refer to the + )R1 2 A(XSD + Compiler Command Line Manual)EA(. + )EP( + + )0 2 21 H(5.1)WB 71 Sn()WB 24 Sn( C++ Stan)HY(dard)YH()EA()EH( + + )0 P(The C++/Parser mapping provides support for ISO/IEC C++ 1998/2003 \201C++98\202 + and ISO/IEC C++ 2011 \201C++11\202. To select the C++ stan)HY(dard)YH( for the + gener)HY(ated)YH( code we use the )SM(--std)ES( XSD compiler command + line option. While the major)HY(ity)YH( of the exam)HY(ples)YH( in this guide use + C++98, support for the new func)HY(tion)HY(al)HY(ity)YH( and library compo)HY(nents)YH( + intro)HY(duced)YH( in C++11 are discussed through)HY(out)YH( the docu)HY(ment)YH(.)EP( + + )0 2 22 H(5.2)WB 72 Sn()WB 25 Sn( Char)HY(ac)HY(ter)YH( Type and Encod)HY(ing)YH()EA()EH( + + )0 P(The C++/Parser mapping has built-in support for two char)HY(ac)HY(ter)YH( types: + )SM(char)ES( and )SM(wchar_t)ES(. You can select the + char)HY(ac)HY(ter)YH( type with the )SM(--char-type)ES( command line + option. The default char)HY(ac)HY(ter)YH( type is )SM(char)ES(. The + string-based built-in XML Schema types are returned as either + )SM(std::string)ES( or )SM(std::wstring)ES( depend)HY(ing)YH( + on the char)HY(ac)HY(ter)YH( type selected.)EP( + + )0 P(Another aspect of the mapping that depends on the char)HY(ac)HY(ter)YH( type + is char)HY(ac)HY(ter)YH( encod)HY(ing)YH(. For the )SM(char)ES( char)HY(ac)HY(ter)YH( type + the default encod)HY(ing)YH( is UTF-8. Other supported encod)HY(ings)YH( are + ISO-8859-1, Xerces-C++ Local Code Page \201LPC\202, as well as + custom encod)HY(ings)YH(. You can select which encod)HY(ing)YH( should be used + in the object model with the )SM(--char-encod)HY(ing)YH()ES( command + line option.)EP( + + )0 P(For the )SM(wchar_t)ES( char)HY(ac)HY(ter)YH( type the encod)HY(ing)YH( is + auto)HY(mat)HY(i)HY(cally)YH( selected between UTF-16 and UTF-32/UCS-4 depend)HY(ing)YH( + on the size of the )SM(wchar_t)ES( type. On some plat)HY(forms)YH( + \201for example, Windows with Visual C++ and AIX with IBM XL C++\202 + )SM(wchar_t)ES( is 2 bytes long. For these plat)HY(forms)YH( the + encod)HY(ing)YH( is UTF-16. On other plat)HY(forms)YH( )SM(wchar_t)ES( is 4 bytes + long and UTF-32/UCS-4 is used.)EP( + + )0 P(Note also that the char)HY(ac)HY(ter)YH( encod)HY(ing)YH( that is used in the object model + is inde)HY(pen)HY(dent)YH( of the encod)HY(ings)YH( used in input and output XML. In fact, + all three \201object mode, input XML, and output XML\202 can have differ)HY(ent)YH( + encod)HY(ings)YH(.)EP( + + )0 2 23 H(5.3)WB 73 Sn()WB 26 Sn( Under)HY(ly)HY(ing)YH( XML Parser)EA()EH( + + )0 P(The C++/Parser mapping can be used with either Xerces-C++ or Expat + as the under)HY(ly)HY(ing)YH( XML parser. You can select the XML parser with + the )SM(--xml-parser)ES( command line option. Valid values + for this option are )SM(xerces)ES( and )SM(expat)ES(. + The default XML parser is Xerces-C++.)EP( + + )0 P(The gener)HY(ated)YH( code is iden)HY(ti)HY(cal)YH( for both parsers except for the + )SM(xml_schema::docu)HY(ment)YH()ES( class in which some of the + )SM(parse\201\202)ES( func)HY(tions)YH( are parser-specific as described + in )0 44 1 A(Chapter 7, "Docu)HY(ment)YH( Parser and Error Handling")44 0 TN TL()Ec /AF f D(.)EP( + + + )0 2 24 H(5.4)WB 74 Sn()WB 27 Sn( XML Schema Vali)HY(da)HY(tion)YH()EA()EH( + + )0 P(The C++/Parser mapping provides support for vali)HY(dat)HY(ing)YH( a + commonly-used subset of W3C XML Schema in the gener)HY(ated)YH( code. + For the list of supported XML Schema constructs refer to + )0 48 1 A(Appendix A, "Supported XML Schema Constructs")48 0 TN TL()Ec /AF f D(.)EP( + + )0 P(By default vali)HY(da)HY(tion)YH( in the gener)HY(ated)YH( code is disabled if + the under)HY(ly)HY(ing)YH( XML parser is vali)HY(dat)HY(ing)YH( \201Xerces-C++\202 and + enabled other)HY(wise)YH( \201Expat\202. See )0 26 1 A(Section 5.3, + "Under)HY(ly)HY(ing)YH( XML Parser")26 0 TN TL()Ec /AF f D( for more infor)HY(ma)HY(tion)YH( about + the under)HY(ly)HY(ing)YH( XML parser. You can over)HY(ride)YH( the default + behav)HY(ior)YH( with the )SM(--gener)HY(ate)YH(-vali)HY(da)HY(tion)YH()ES( + and )SM(--suppress-vali)HY(da)HY(tion)YH()ES( command line options.)EP( + + + )0 2 25 H(5.5)WB 75 Sn()WB 28 Sn( Support for Poly)HY(mor)HY(phism)YH()EA()EH( + + )0 P(By default the XSD compiler gener)HY(ates)YH( non-poly)HY(mor)HY(phic)YH( code. If your + vocab)HY(u)HY(lary)YH( uses XML Schema poly)HY(mor)HY(phism)YH( in the form of )SM(xsi:type)ES( + and/or substi)HY(tu)HY(tion)YH( groups, then you will need to compile your schemas + with the )SM(--gener)HY(ate)YH(-poly)HY(mor)HY(phic)YH()ES( option to produce + poly)HY(mor)HY(phism)YH(-aware code as well as pass )SM(true)ES( as the last + argu)HY(ment)YH( to the )SM(xml_schema::docu)HY(ment)YH()ES('s construc)HY(tors)YH(.)EP( + + )0 P(When using the poly)HY(mor)HY(phism)YH(-aware gener)HY(ated)YH( code, you can specify + several parsers for a single element by passing a parser map + instead of an indi)HY(vid)HY(ual)YH( parser to the parser connec)HY(tion)YH( func)HY(tion)YH( + for the element. One of the parsers will then be looked up and used + depend)HY(ing)YH( on the )SM(xsi:type)ES( attribute value or an element + name from a substi)HY(tu)HY(tion)YH( group. Consider the follow)HY(ing)YH( schema as an + example:)EP( + + ) 44 62 PR( + + + + + + + + + + + + + + + + + + + + + + + + + + + +)WR( + + + + + + + + + + +)RP( + + )0 P(Conform)HY(ing)YH( XML docu)HY(ments)YH( can use the )SM(super)HY(man)YH()ES( + and )SM(batman)ES( types in place of the )SM(person)ES( + type either by spec)HY(i)HY(fy)HY(ing)YH( the type with the )SM(xsi:type)ES( + attributes or by using the elements from the substi)HY(tu)HY(tion)YH( + group, for instance:)EP( + + + ) 15 64 PR( + + + John Doe + + + + James "007" Bond + + + + Bruce Wayne + + +)RP( + + )0 P(To print the data stored in such XML docu)HY(ments)YH( we can imple)HY(ment)YH( + the parsers as follows:)EP( + + ) 79 52 PR(class person_pimpl: public virtual person_pskel +{ +public: + virtual void + pre \201\202 + { + cout << "starting to parse person" << endl; + } + + virtual void + name \201const std::string& v\202 + { + cout << "name: " << v << endl; + } + + virtual void + post_person \201\202 + { + cout << "finished parsing person" << endl; + } +}; + +class superman_pimpl: public virtual superman_pskel, + public person_pimpl +{ +public: + virtual void + pre \201\202 + { + cout << "starting to parse superman" << endl; + })WR( + + virtual void + can_fly \201bool v\202 + { + cout << "can-fly: " << v << endl; + } + + virtual void + post_person \201\202 + { + post_superman \201\202; + } + + virtual void + post_superman \201\202 + { + cout << "finished parsing superman" << endl + } +}; + +class batman_pimpl: public virtual batman_pskel, + public superman_pimpl +{ +public: + virtual void + pre \201\202 + { + cout << "starting to parse batman" << endl; + } +)WR( + virtual void + wing_span \201unsigned int v\202 + { + cout << "wing-span: " << v << endl; + } + + virtual void + post_superman \201\202 + { + post_batman \201\202; + } + + virtual void + post_batman \201\202 + { + cout << "finished parsing batman" << endl; + } +};)RP( + + )0 P(Note that because the derived type parsers \201)SM(super)HY(man)YH(_pskel)ES( + and )SM(batman_pskel)ES(\202 are called via the )SM(person_pskel)ES( + inter)HY(face)YH(, we have to over)HY(ride)YH( the )SM(post_person\201\202)ES( + virtual func)HY(tion)YH( in )SM(super)HY(man)YH(_pimpl)ES( to call + )SM(post_super)HY(man)YH(\201\202)ES( and the )SM(post_super)HY(man)YH(\201\202)ES( + virtual func)HY(tion)YH( in )SM(batman_pimpl)ES( to call + )SM(post_batman\201\202)ES(.)EP( + + )0 P(The follow)HY(ing)YH( code frag)HY(ment)YH( shows how to connect the parsers together. + Notice that for the )SM(person)ES( element in the )SM(super)HY(men)YH(_p)ES( + parser we specify a parser map instead of a specific parser and we pass + )SM(true)ES( as the last argu)HY(ment)YH( to the docu)HY(ment)YH( parser construc)HY(tor)YH( + to indi)HY(cate)YH( that we are parsing poten)HY(tially)YH(-poly)HY(mor)HY(phic)YH( XML docu)HY(ments)YH(:)EP( + + ) 39 64 PR(int +main \201int argc, char* argv[]\202 +{ + // Construct the parser. + // + xml_schema::string_pimpl string_p; + xml_schema::boolean_pimpl boolean_p; + xml_schema::unsigned_int_pimpl unsigned_int_p; + + person_pimpl person_p; + superman_pimpl superman_p; + batman_pimpl batman_p; + + xml_schema::parser_map_impl person_map; + supermen_pimpl supermen_p; + + person_p.parsers \201string_p\202; + superman_p.parsers \201string_p, boolean_p\202; + batman_p.parsers \201string_p, boolean_p, unsigned_int_p\202; + + // Here we are specifying a parser map which containes several + // parsers that can be used to parse the person element. + // + person_map.insert \201person_p\202; + person_map.insert \201superman_p\202; + person_map.insert \201batman_p\202; + + supermen_p.person_parser \201person_map\202; + + // Parse the XML document. The last argument to the document's + // constructor indicates that we are parsing polymorphic XML)WR( + // documents. + // + xml_schema::document doc_p \201supermen_p, "supermen", true\202; + + supermen_p.pre \201\202; + doc_p.parse \201argv[1]\202; + supermen_p.post_supermen \201\202; +})RP( + + )0 P(When poly)HY(mor)HY(phism)YH(-aware code is gener)HY(ated)YH(, each element's + )SM(*_parser\201\202)ES( func)HY(tion)YH( is over)HY(loaded)YH( to also accept + an object of the )SM(xml_schema::parser_map)ES( type. + For example, the )SM(super)HY(men)YH(_pskel)ES( class from the + above example looks like this:)EP( + + ) 21 63 PR(class supermen_pskel: public xml_schema::parser_complex_content +{ +public: + + ... + + // Parser construction API. + // + void + parsers \201person_pskel&\202; + + // Individual element parsers. + // + void + person_parser \201person_pskel&\202; + + void + person_parser \201const xml_schema::parser_map&\202; + + ... +};)RP( + + )0 P(Note that you can specify both the indi)HY(vid)HY(ual)YH( \201static\202 parser and + the parser map. The indi)HY(vid)HY(ual)YH( parser will be used when the static + element type and the dynamic type of the object being parsed are + the same. This is the case, for example, when there is no + )SM(xsi:type)ES( attribute and the element hasn't been + substi)HY(tuted)YH(. Because the indi)HY(vid)HY(ual)YH( parser for an element is + cached and no map lookup is neces)HY(sary)YH(, it makes sense to specify + both the indi)HY(vid)HY(ual)YH( parser and the parser map when most of the + objects being parsed are of the static type and optimal + perfor)HY(mance)YH( is impor)HY(tant)YH(. The follow)HY(ing)YH( code frag)HY(ment)YH( shows + how to change the above example to set both the indi)HY(vid)HY(ual)YH( + parser and the parser map:)EP( + + ) 13 40 PR(int +main \201int argc, char* argv[]\202 +{ + ... + + person_map.insert \201superman_p\202; + person_map.insert \201batman_p\202; + + supermen_p.person_parser \201person_p\202; + supermen_p.person_parser \201person_map\202; + + ... +})RP( + + + )0 P(The )SM(xml_schema::parser_map)ES( inter)HY(face)YH( and the + )SM(xml_schema::parser_map_impl)ES( default imple)HY(men)HY(ta)HY(tion)YH( + are presented below:)EP( + + ) 27 45 PR(namespace xml_schema +{ + class parser_map + { + public: + virtual parser_base* + find \201const ro_string* type\202 const = 0; + }; + + class parser_map_impl: public parser_map + { + public: + void + insert \201parser_base&\202; + + virtual parser_base* + find \201const ro_string* type\202 const; + + private: + parser_map_impl \201const parser_map_impl&\202; + + parser_map_impl& + operator= \201const parser_map_impl&\202; + + ... + }; +})RP( + + )0 P(The )SM(type)ES( argu)HY(ment)YH( in the )SM(find\201\202)ES( virtual + func)HY(tion)YH( is the type name and names)HY(pace)YH( from the xsi:type attribute + \201the names)HY(pace)YH( prefix is resolved to the actual XML names)HY(pace)YH(\202 + or the type of an element from the substi)HY(tu)HY(tion)YH( group in the form + )SM("\240")ES( with the space and the + names)HY(pace)YH( part absent if the type does not have a names)HY(pace)YH(. + You can obtain a parser's dynamic type in the same format + using the )SM(_dynamic_type\201\202)ES( func)HY(tion)YH(. The static + type can be obtained by calling the static )SM(_static_type\201\202)ES( + func)HY(tion)YH(, for example )SM(person_pskel::_static_type\201\202)ES(. + Both func)HY(tions)YH( return a C string \201)SM(const char*)ES( or + )SM(const wchar_t*)ES(, depend)HY(ing)YH( on the char)HY(ac)HY(ter)YH( type + used\202 which is valid for as long as the appli)HY(ca)HY(tion)YH( is running. + The follow)HY(ing)YH( example shows how we can imple)HY(ment)YH( our own parser + map using )SM(std::map)ES(:)EP( + + + ) 23 62 PR(#include +#include + +class parser_map: public xml_schema::parser_map +{ +public: + void + insert \201xml_schema::parser_base& p\202 + { + map_[p._dynamic_type \201\202] = &p; + } + + virtual xml_schema::parser_base* + find \201const xml_schema::ro_string* type\202 const + { + map::const_iterator i = map_.find \201type\202; + return i != map_.end \201\202 ? i->second : 0; + } + +private: + typedef std::map map; + map map_; +};)RP( + + )0 P(Most of code presented in this section is taken from the + )SM(poly)HY(mor)HY(phism)YH()ES( example which can be found in the + )SM(exam)HY(ples)YH(/cxx/parser/)ES( direc)HY(tory)YH( of the XSD distri)HY(bu)HY(tion)YH(. + Handling of )SM(xsi:type)ES( and substi)HY(tu)HY(tion)YH( groups when used + on root elements requires a number of special actions as shown in + the )SM(poly)HY(root)YH()ES( example.)EP( + + + + + + )0 1 26 H(6)WB 76 Sn()WB 29 Sn( Built-In XML Schema Type Parsers)EA()EH( + + )0 P(The XSD runtime provides parser imple)HY(men)HY(ta)HY(tions)YH( for all built-in + XML Schema types as summa)HY(rized)YH( in the follow)HY(ing)YH( table. Decla)HY(ra)HY(tions)YH( + for these types are auto)HY(mat)HY(i)HY(cally)YH( included into each gener)HY(ated)YH( + header file. As a result you don't need to include any headers + to gain access to these parser imple)HY(men)HY(ta)HY(tions)YH(. Note that some + parsers return either )SM(std::string)ES( or + )SM(std::wstring)ES( depend)HY(ing)YH( on the char)HY(ac)HY(ter)YH( type selected.)EP( + + + )0 PT( + + )0 2 27 H(6.1)WB 77 Sn()WB 31 Sn( )SM(QName)ES( Parser)EA()EH( + + )0 P(The return type of the )SM(qname_pimpl)ES( parser imple)HY(men)HY(ta)HY(tion)YH( + is )SM(xml_schema::qname)ES( which repre)HY(sents)YH( an XML qual)HY(i)HY(fied)YH( + name. Its inter)HY(face)YH( is presented below. + Note that the )SM(std::string)ES( type in the inter)HY(face)YH( becomes + )SM(std::wstring)ES( if the selected char)HY(ac)HY(ter)YH( type is + )SM(wchar_t)ES(.)EP( + + ) 28 63 PR(namespace xml_schema +{ + class qname + { + public: + explicit + qname \201const std::string& name\202; + qname \201const std::string& prefix, const std::string& name\202; + + const std::string& + prefix \201\202 const; + + void + prefix \201const std::string&\202; + + const std::string& + name \201\202 const; + + void + name \201const std::string&\202; + }; + + bool + operator== \201const qname&, const qname&\202; + + bool + operator!= \201const qname&, const qname&\202; +})RP( + + + )0 2 28 H(6.2)WB 78 Sn()WB 32 Sn( )SM(NMTO)HY(KENS)YH()ES( and )SM(IDREFS)ES( Parsers)EA()EH( + + )0 P(The return type of the )SM(nmto)HY(kens)YH(_pimpl)ES( and + )SM(idrefs_pimpl)ES( parser imple)HY(men)HY(ta)HY(tions)YH( is + )SM(xml_schema::string_sequence)ES( which repre)HY(sents)YH( a + sequence of strings. Its inter)HY(face)YH( is presented below. + Note that the )SM(std::string)ES( type in the inter)HY(face)YH( becomes + )SM(std::wstring)ES( if the selected char)HY(ac)HY(ter)YH( type is + )SM(wchar_t)ES(.)EP( + + ) 21 62 PR(namespace xml_schema +{ + class string_sequence: public std::vector + { + public: + string_sequence \201\202; + + explicit + string_sequence \201std::vector::size_type n, + const std::string& x = std::string \201\202\202; + + template + string_sequence \201const I& begin, const I& end\202; + }; + + bool + operator== \201const string_sequence&, const string_sequence&\202; + + bool + operator!= \201const string_sequence&, const string_sequence&\202; +})RP( + + + )0 2 29 H(6.3)WB 79 Sn()WB 33 Sn( )SM(base64Binary)ES( and )SM(hexBi)HY(nary)YH()ES( Parsers)EA()EH( + + )0 P(The return type of the )SM(base64_binary_pimpl)ES( and + )SM(hex_binary_pimpl)ES( parser imple)HY(men)HY(ta)HY(tions)YH( is either + )SM(std::auto_ptr)ES( \201C++98\202 or + )SM(std::unique_ptr)ES( \201C++11\202, + depend)HY(ing)YH( on the C++ stan)HY(dard)YH( selected \201)SM(--std)ES( XSD + compiler option\202. The )SM(xml_schema::buffer)ES( type + repre)HY(sents)YH( a binary buffer and its inter)HY(face)YH( is presented below.)EP( + + ) 69 60 PR(namespace xml_schema +{ + class buffer + { + public: + typedef std::size_t size_t; + + class bounds {}; // Out of bounds exception. + + public: + explicit + buffer \201size_t size = 0\202; + buffer \201size_t size, size_t capacity\202; + buffer \201const void* data, size_t size\202; + buffer \201const void* data, size_t size, size_t capacity\202; + buffer \201void* data, + size_t size, + size_t capacity, + bool assume_ownership\202; + + public: + buffer \201const buffer&\202; + + buffer& + operator= \201const buffer&\202; + + void + swap \201buffer&\202; + + public: + size_t)WR( + capacity \201\202 const; + + bool + capacity \201size_t\202; + + public: + size_t + size \201\202 const; + + bool + size \201size_t\202; + + public: + const char* + data \201\202 const; + + char* + data \201\202; + + const char* + begin \201\202 const; + + char* + begin \201\202; + + const char* + end \201\202 const; + + char* + end \201\202;)WR( + }; + + bool + operator== \201const buffer&, const buffer&\202; + + bool + operator!= \201const buffer&, const buffer&\202; +})RP( + + )0 P(If the )SM(assume_owner)HY(ship)YH()ES( argu)HY(ment)YH( to the construc)HY(tor)YH( + is )SM(true)ES(, the instance assumes the owner)HY(ship)YH( of the + memory block pointed to by the )SM(data)ES( argu)HY(ment)YH( and will + even)HY(tu)HY(ally)YH( release it by calling )SM(oper)HY(a)HY(tor)YH( delete\201\202)ES(. The + )SM(capac)HY(ity)YH(\201\202)ES( and )SM(size\201\202)ES( modi)HY(fier)YH( func)HY(tions)YH( + return )SM(true)ES( if the under)HY(ly)HY(ing)YH( buffer has moved. + )EP( + + )0 P(The )SM(bounds)ES( excep)HY(tion)YH( is thrown if the construc)HY(tor)YH( + argu)HY(ments)YH( violate the )SM(\201size\240<=\240capac)HY(ity)YH(\202)ES( + constraint.)EP( + + + )0 2 30 H(6.4)WB 80 Sn()WB 34 Sn( Time Zone Repre)HY(sen)HY(ta)HY(tion)YH()EA()EH( + + )0 P(The )SM(date)ES(, )SM(date)HY(Time)YH()ES(, )SM(gDay)ES(, + )SM(gMonth)ES(, )SM(gMon)HY(th)HY(Day)YH()ES(, )SM(gYear)ES(, + )SM(gYear)HY(Month)YH()ES(, and )SM(time)ES( XML Schema built-in + types all include an optional time zone compo)HY(nent)YH(. The follow)HY(ing)YH( + )SM(xml_schema::time_zone)ES( base class is used to repre)HY(sent)YH( + this infor)HY(ma)HY(tion)YH(:)EP( + + ) 33 50 PR(namespace xml_schema +{ + class time_zone + { + public: + time_zone \201\202; + time_zone \201short hours, short minutes\202; + + bool + zone_present \201\202 const; + + void + zone_reset \201\202; + + short + zone_hours \201\202 const; + + void + zone_hours \201short\202; + + short + zone_minutes \201\202 const; + + void + zone_minutes \201short\202; + }; + + bool + operator== \201const time_zone&, const time_zone&\202; + + bool)WR( + operator!= \201const time_zone&, const time_zone&\202; +})RP( + + )0 P(The )SM(zone_present\201\202)ES( acces)HY(sor)YH( func)HY(tion)YH( returns )SM(true)ES( + if the time zone is spec)HY(i)HY(fied)YH(. The )SM(zone_reset\201\202)ES( modi)HY(fier)YH( + func)HY(tion)YH( resets the time zone object to the )EM(not spec)HY(i)HY(fied)YH()ES( + state. If the time zone offset is nega)HY(tive)YH( then both hours and + minutes compo)HY(nents)YH( are repre)HY(sented)YH( as nega)HY(tive)YH( inte)HY(gers)YH(.)EP( + + + )0 2 31 H(6.5)WB 81 Sn()WB 35 Sn( )SM(date)ES( Parser)EA()EH( + + )0 P(The return type of the )SM(date_pimpl)ES( parser imple)HY(men)HY(ta)HY(tion)YH( + is )SM(xml_schema::date)ES( which repre)HY(sents)YH( a year, a day, and a month + with an optional time zone. Its inter)HY(face)YH( is presented below. + For more infor)HY(ma)HY(tion)YH( on the base )SM(xml_schema::time_zone)ES( + class refer to )0 34 1 A(Section 6.4, "Time Zone + Repre)HY(sen)HY(ta)HY(tion)YH(")34 0 TN TL()Ec /AF f D(.)EP( + + ) 34 62 PR(namespace xml_schema +{ + class date + { + public: + date \201int year, unsigned short month, unsigned short day\202; + date \201int year, unsigned short month, unsigned short day, + short zone_hours, short zone_minutes\202; + + int + year \201\202 const; + + void + year \201int\202; + + unsigned short + month \201\202 const; + + void + month \201unsigned short\202; + + unsigned short + day \201\202 const; + + void + day \201unsigned short\202; + }; + + bool + operator== \201const date&, const date&\202; +)WR( + bool + operator!= \201const date&, const date&\202; +})RP( + + )0 2 32 H(6.6)WB 82 Sn()WB 36 Sn( )SM(date)HY(Time)YH()ES( Parser)EA()EH( + + )0 P(The return type of the )SM(date_time_pimpl)ES( parser imple)HY(men)HY(ta)HY(tion)YH( + is )SM(xml_schema::date_time)ES( which repre)HY(sents)YH( a year, a month, a day, + hours, minutes, and seconds with an optional time zone. Its inter)HY(face)YH( + is presented below. + For more infor)HY(ma)HY(tion)YH( on the base )SM(xml_schema::time_zone)ES( + class refer to )0 34 1 A(Section 6.4, "Time Zone + Repre)HY(sen)HY(ta)HY(tion)YH(")34 0 TN TL()Ec /AF f D(.)EP( + + ) 56 69 PR(namespace xml_schema +{ + class date_time + { + public: + date_time \201int year, unsigned short month, unsigned short day, + unsigned short hours, unsigned short minutes, + double seconds\202; + + date_time \201int year, unsigned short month, unsigned short day, + unsigned short hours, unsigned short minutes, + double seconds, short zone_hours, short zone_minutes\202; + + int + year \201\202 const; + + void + year \201int\202; + + unsigned short + month \201\202 const; + + void + month \201unsigned short\202; + + unsigned short + day \201\202 const; + + void + day \201unsigned short\202; +)WR( + unsigned short + hours \201\202 const; + + void + hours \201unsigned short\202; + + unsigned short + minutes \201\202 const; + + void + minutes \201unsigned short\202; + + double + seconds \201\202 const; + + void + seconds \201double\202; + }; + + bool + operator== \201const date_time&, const date_time&\202; + + bool + operator!= \201const date_time&, const date_time&\202; +})RP( + + )0 2 33 H(6.7)WB 83 Sn()WB 37 Sn( )SM(dura)HY(tion)YH()ES( Parser)EA()EH( + + )0 P(The return type of the )SM(dura)HY(tion)YH(_pimpl)ES( parser imple)HY(men)HY(ta)HY(tion)YH( + is )SM(xml_schema::dura)HY(tion)YH()ES( which repre)HY(sents)YH( a poten)HY(tially)YH( + nega)HY(tive)YH( dura)HY(tion)YH( in the form of years, months, days, hours, minutes, + and seconds. Its inter)HY(face)YH( is presented below.)EP( + + ) 58 73 PR(namespace xml_schema +{ + class duration + { + public: + duration \201bool negative, + unsigned int years, unsigned int months, unsigned int days, + unsigned int hours, unsigned int minutes, double seconds\202; + + bool + negative \201\202 const; + + void + negative \201bool\202; + + unsigned int + years \201\202 const; + + void + years \201unsigned int\202; + + unsigned int + months \201\202 const; + + void + months \201unsigned int\202; + + unsigned int + days \201\202 const; + + void)WR( + days \201unsigned int\202; + + unsigned int + hours \201\202 const; + + void + hours \201unsigned int\202; + + unsigned int + minutes \201\202 const; + + void + minutes \201unsigned int\202; + + double + seconds \201\202 const; + + void + seconds \201double\202; + }; + + bool + operator== \201const duration&, const duration&\202; + + bool + operator!= \201const duration&, const duration&\202; +})RP( + + + )0 2 34 H(6.8)WB 84 Sn()WB 38 Sn( )SM(gDay)ES( Parser)EA()EH( + + )0 P(The return type of the )SM(gday_pimpl)ES( parser imple)HY(men)HY(ta)HY(tion)YH( + is )SM(xml_schema::gday)ES( which repre)HY(sents)YH( a day of the month with + an optional time zone. Its inter)HY(face)YH( is presented below. + For more infor)HY(ma)HY(tion)YH( on the base )SM(xml_schema::time_zone)ES( + class refer to )0 34 1 A(Section 6.4, "Time Zone + Repre)HY(sen)HY(ta)HY(tion)YH(")34 0 TN TL()Ec /AF f D(.)EP( + + ) 22 68 PR(namespace xml_schema +{ + class gday + { + public: + explicit + gday \201unsigned short day\202; + gday \201unsigned short day, short zone_hours, short zone_minutes\202; + + unsigned short + day \201\202 const; + + void + day \201unsigned short\202; + }; + + bool + operator== \201const gday&, const gday&\202; + + bool + operator!= \201const gday&, const gday&\202; +})RP( + + )0 2 35 H(6.9)WB 85 Sn()WB 39 Sn( )SM(gMonth)ES( Parser)EA()EH( + + )0 P(The return type of the )SM(gmonth_pimpl)ES( parser imple)HY(men)HY(ta)HY(tion)YH( + is )SM(xml_schema::gmonth)ES( which repre)HY(sents)YH( a month of the year + with an optional time zone. Its inter)HY(face)YH( is presented below. + For more infor)HY(ma)HY(tion)YH( on the base )SM(xml_schema::time_zone)ES( + class refer to )0 34 1 A(Section 6.4, "Time Zone + Repre)HY(sen)HY(ta)HY(tion)YH(")34 0 TN TL()Ec /AF f D(.)EP( + + ) 22 72 PR(namespace xml_schema +{ + class gmonth + { + public: + explicit + gmonth \201unsigned short month\202; + gmonth \201unsigned short month, short zone_hours, short zone_minutes\202; + + unsigned short + month \201\202 const; + + void + month \201unsigned short\202; + }; + + bool + operator== \201const gmonth&, const gmonth&\202; + + bool + operator!= \201const gmonth&, const gmonth&\202; +})RP( + + )0 2 36 H(6.10)WB 86 Sn()WB 40 Sn( )SM(gMon)HY(th)HY(Day)YH()ES( Parser)EA()EH( + + )0 P(The return type of the )SM(gmonth_day_pimpl)ES( parser imple)HY(men)HY(ta)HY(tion)YH( + is )SM(xml_schema::gmonth_day)ES( which repre)HY(sents)YH( a day and a month + of the year with an optional time zone. Its inter)HY(face)YH( is presented below. + For more infor)HY(ma)HY(tion)YH( on the base )SM(xml_schema::time_zone)ES( + class refer to )0 34 1 A(Section 6.4, "Time Zone + Repre)HY(sen)HY(ta)HY(tion)YH(")34 0 TN TL()Ec /AF f D(.)EP( + + ) 28 58 PR(namespace xml_schema +{ + class gmonth_day + { + public: + gmonth_day \201unsigned short month, unsigned short day\202; + gmonth_day \201unsigned short month, unsigned short day, + short zone_hours, short zone_minutes\202; + + unsigned short + month \201\202 const; + + void + month \201unsigned short\202; + + unsigned short + day \201\202 const; + + void + day \201unsigned short\202; + }; + + bool + operator== \201const gmonth_day&, const gmonth_day&\202; + + bool + operator!= \201const gmonth_day&, const gmonth_day&\202; +})RP( + + )0 2 37 H(6.11)WB 87 Sn()WB 41 Sn( )SM(gYear)ES( Parser)EA()EH( + + )0 P(The return type of the )SM(gyear_pimpl)ES( parser imple)HY(men)HY(ta)HY(tion)YH( + is )SM(xml_schema::gyear)ES( which repre)HY(sents)YH( a year with + an optional time zone. Its inter)HY(face)YH( is presented below. + For more infor)HY(ma)HY(tion)YH( on the base )SM(xml_schema::time_zone)ES( + class refer to )0 34 1 A(Section 6.4, "Time Zone + Repre)HY(sen)HY(ta)HY(tion)YH(")34 0 TN TL()Ec /AF f D(.)EP( + + ) 22 59 PR(namespace xml_schema +{ + class gyear + { + public: + explicit + gyear \201int year\202; + gyear \201int year, short zone_hours, short zone_minutes\202; + + int + year \201\202 const; + + void + year \201int\202; + }; + + bool + operator== \201const gyear&, const gyear&\202; + + bool + operator!= \201const gyear&, const gyear&\202; +})RP( + + )0 2 38 H(6.12)WB 88 Sn()WB 42 Sn( )SM(gYear)HY(Month)YH()ES( Parser)EA()EH( + + )0 P(The return type of the )SM(gyear_month_pimpl)ES( parser imple)HY(men)HY(ta)HY(tion)YH( + is )SM(xml_schema::gyear_month)ES( which repre)HY(sents)YH( a year and a month + with an optional time zone. Its inter)HY(face)YH( is presented below. + For more infor)HY(ma)HY(tion)YH( on the base )SM(xml_schema::time_zone)ES( + class refer to )0 34 1 A(Section 6.4, "Time Zone + Repre)HY(sen)HY(ta)HY(tion)YH(")34 0 TN TL()Ec /AF f D(.)EP( + + ) 28 55 PR(namespace xml_schema +{ + class gyear_month + { + public: + gyear_month \201int year, unsigned short month\202; + gyear_month \201int year, unsigned short month, + short zone_hours, short zone_minutes\202; + + int + year \201\202 const; + + void + year \201int\202; + + unsigned short + month \201\202 const; + + void + month \201unsigned short\202; + }; + + bool + operator== \201const gyear_month&, const gyear_month&\202; + + bool + operator!= \201const gyear_month&, const gyear_month&\202; +})RP( + + + )0 2 39 H(6.13)WB 89 Sn()WB 43 Sn( )SM(time)ES( Parser)EA()EH( + + )0 P(The return type of the )SM(time_pimpl)ES( parser imple)HY(men)HY(ta)HY(tion)YH( + is )SM(xml_schema::time)ES( which repre)HY(sents)YH( hours, minutes, + and seconds with an optional time zone. Its inter)HY(face)YH( is presented below. + For more infor)HY(ma)HY(tion)YH( on the base )SM(xml_schema::time_zone)ES( + class refer to )0 34 1 A(Section 6.4, "Time Zone + Repre)HY(sen)HY(ta)HY(tion)YH(")34 0 TN TL()Ec /AF f D(.)EP( + + ) 34 72 PR(namespace xml_schema +{ + class time + { + public: + time \201unsigned short hours, unsigned short minutes, double seconds\202; + time \201unsigned short hours, unsigned short minutes, double seconds, + short zone_hours, short zone_minutes\202; + + unsigned short + hours \201\202 const; + + void + hours \201unsigned short\202; + + unsigned short + minutes \201\202 const; + + void + minutes \201unsigned short\202; + + double + seconds \201\202 const; + + void + seconds \201double\202; + }; + + bool + operator== \201const time&, const time&\202; +)WR( + bool + operator!= \201const time&, const time&\202; +})RP( + + + + + + )0 1 40 H(7)WB 90 Sn()WB 44 Sn( Docu)HY(ment)YH( Parser and Error Handling)EA()EH( + + )0 P(In this chapter we will discuss the )SM(xml_schema::docu)HY(ment)YH()ES( + type as well as the error handling mech)HY(a)HY(nisms)YH( provided by the mapping + in more detail. As mentioned in )0 18 1 A(Section 3.4, + "Connect)HY(ing)YH( the Parsers Together")18 0 TN TL()Ec /AF f D(, the inter)HY(face)YH( of + )SM(xml_schema::docu)HY(ment)YH()ES( depends on the under)HY(ly)HY(ing)YH( XML + parser selected \201)0 26 1 A(Section 5.3, "Under)HY(ly)HY(ing)YH( XML + Parser")26 0 TN TL()Ec /AF f D(\202. The follow)HY(ing)YH( sections describe the + )SM(docu)HY(ment)YH()ES( type inter)HY(face)YH( for Xerces-C++ and + Expat as under)HY(ly)HY(ing)YH( parsers.)EP( + + )0 2 41 H(7.1)WB 91 Sn()WB 45 Sn( Xerces-C++ Docu)HY(ment)YH( Parser)EA()EH( + + )0 P(When Xerces-C++ is used as the under)HY(ly)HY(ing)YH( XML parser, the + )SM(docu)HY(ment)YH()ES( type has the follow)HY(ing)YH( inter)HY(face)YH(. Note that + if the char)HY(ac)HY(ter)YH( type is )SM(wchar_t)ES(, then the string type + in the inter)HY(face)YH( becomes )SM(std::wstring)ES( + \201see )0 25 1 A(Section 5.2, "Char)HY(ac)HY(ter)YH( Type and Encod)HY(ing)YH(")25 0 TN TL()Ec /AF f D(\202.)EP( + + ) 248 72 PR(namespace xml_schema +{ + class parser_base; + class error_handler; + + class flags + { + public: + // Do not validate XML documents with the Xerces-C++ validator. + // + static const unsigned long dont_validate; + + // Do not initialize the Xerces-C++ runtime. + // + static const unsigned long dont_initialize; + + // Disable handling of subsequent imports for the same namespace + // in Xerces-C++ 3.1.0 and later. + // + static const unsigned long no_multiple_imports; + }; + + class properties + { + public: + // Add a location for a schema with a target namespace. + // + void + schema_location \201const std::string& namespace_, + const std::string& location\202; +)WR( + // Add a location for a schema without a target namespace. + // + void + no_namespace_schema_location \201const std::string& location\202; + }; + + class document + { + public: + document \201parser_base& root, + const std::string& root_element_name, + bool polymorphic = false\202; + + document \201parser_base& root, + const std::string& root_element_namespace, + const std::string& root_element_name, + bool polymorphic = false\202; + + public: + // Parse URI or a local file. + // + void + parse \201const std::string& uri, + flags = 0, + const properties& = properties \201\202\202; + + // Parse URI or a local file with a user-provided error_handler + // object. + // + void)WR( + parse \201const std::string& uri, + error_handler&, + flags = 0, + const properties& = properties \201\202\202; + + // Parse URI or a local file with a user-provided ErrorHandler + // object. Note that you must initialize the Xerces-C++ runtime + // before calling this function. + // + void + parse \201const std::string& uri, + xercesc::ErrorHandler&, + flags = 0, + const properties& = properties \201\202\202; + + // Parse URI or a local file using a user-provided SAX2XMLReader + // object. Note that you must initialize the Xerces-C++ runtime + // before calling this function. + // + void + parse \201const std::string& uri, + xercesc::SAX2XMLReader&, + flags = 0, + const properties& = properties \201\202\202; + + public: + // Parse std::istream. + // + void + parse \201std::istream&,)WR( + flags = 0, + const properties& = properties \201\202\202; + + // Parse std::istream with a user-provided error_handler object. + // + void + parse \201std::istream&, + error_handler&, + flags = 0, + const properties& = properties \201\202\202; + + // Parse std::istream with a user-provided ErrorHandler object. + // Note that you must initialize the Xerces-C++ runtime before + // calling this function. + // + void + parse \201std::istream&, + xercesc::ErrorHandler&, + flags = 0, + const properties& = properties \201\202\202; + + // Parse std::istream using a user-provided SAX2XMLReader object. + // Note that you must initialize the Xerces-C++ runtime before + // calling this function. + // + void + parse \201std::istream&, + xercesc::SAX2XMLReader&, + flags = 0, + const properties& = properties \201\202\202;)WR( + + public: + // Parse std::istream with a system id. + // + void + parse \201std::istream&, + const std::string& system_id, + flags = 0, + const properties& = properties \201\202\202; + + // Parse std::istream with a system id and a user-provided + // error_handler object. + // + void + parse \201std::istream&, + const std::string& system_id, + error_handler&, + flags = 0, + const properties& = properties \201\202\202; + + // Parse std::istream with a system id and a user-provided + // ErrorHandler object. Note that you must initialize the + // Xerces-C++ runtime before calling this function. + // + void + parse \201std::istream&, + const std::string& system_id, + xercesc::ErrorHandler&, + flags = 0, + const properties& = properties \201\202\202;)WR( + + // Parse std::istream with a system id using a user-provided + // SAX2XMLReader object. Note that you must initialize the + // Xerces-C++ runtime before calling this function. + // + void + parse \201std::istream&, + const std::string& system_id, + xercesc::SAX2XMLReader&, + flags = 0, + const properties& = properties \201\202\202; + + public: + // Parse std::istream with system and public ids. + // + void + parse \201std::istream&, + const std::string& system_id, + const std::string& public_id, + flags = 0, + const properties& = properties \201\202\202; + + // Parse std::istream with system and public ids and a user-provided + // error_handler object. + // + void + parse \201std::istream&, + const std::string& system_id, + const std::string& public_id, + error_handler&,)WR( + flags = 0, + const properties& = properties \201\202\202; + + // Parse std::istream with system and public ids and a user-provided + // ErrorHandler object. Note that you must initialize the Xerces-C++ + // runtime before calling this function. + // + void + parse \201std::istream&, + const std::string& system_id, + const std::string& public_id, + xercesc::ErrorHandler&, + flags = 0, + const properties& = properties \201\202\202; + + // Parse std::istream with system and public ids using a user- + // provided SAX2XMLReader object. Note that you must initialize + // the Xerces-C++ runtime before calling this function. + // + void + parse \201std::istream&, + const std::string& system_id, + const std::string& public_id, + xercesc::SAX2XMLReader&, + flags = 0, + const properties& = properties \201\202\202; + + public: + // Parse InputSource. Note that you must initialize the Xerces-C++ + // runtime before calling this function.)WR( + // + void + parse \201const xercesc::InputSource&, + flags = 0, + const properties& = properties \201\202\202; + + // Parse InputSource with a user-provided error_handler object. + // Note that you must initialize the Xerces-C++ runtime before + // calling this function. + // + void + parse \201const xercesc::InputSource&, + error_handler&, + flags = 0, + const properties& = properties \201\202\202; + + // Parse InputSource with a user-provided ErrorHandler object. + // Note that you must initialize the Xerces-C++ runtime before + // calling this function. + // + void + parse \201const xercesc::InputSource&, + xercesc::ErrorHandler&, + flags = 0, + const properties& = properties \201\202\202; + + // Parse InputSource using a user-provided SAX2XMLReader object. + // Note that you must initialize the Xerces-C++ runtime before + // calling this function. + //)WR( + void + parse \201const xercesc::InputSource&, + xercesc::SAX2XMLReader&, + flags = 0, + const properties& = properties \201\202\202; + }; +})RP( + + )0 P(The )SM(docu)HY(ment)YH()ES( class is a root parser for + the vocab)HY(u)HY(lary)YH(. The first argu)HY(ment)YH( to its construc)HY(tors)YH( is the + parser for the type of the root element. The )SM(parser_base)ES( + class is the base type for all parser skele)HY(tons)YH(. The second and + third argu)HY(ments)YH( to the )SM(docu)HY(ment)YH()ES('s construc)HY(tors)YH( are + the root element's name and names)HY(pace)YH(. The last argu)HY(ment)YH(, + )SM(poly)HY(mor)HY(phic)YH()ES(, spec)HY(i)HY(fies)YH( whether the XML docu)HY(ments)YH( + being parsed use poly)HY(mor)HY(phism)YH(. For more infor)HY(ma)HY(tion)YH( on support + for XML Schema poly)HY(mor)HY(phism)YH( in the C++/Parser mapping refer + to )0 28 1 A(Section 5.5, "Support for Poly)HY(mor)HY(phism)YH(")28 0 TN TL()Ec /AF f D(.)EP( + + )0 P(The rest of the )SM(docu)HY(ment)YH()ES( inter)HY(face)YH( consists of over)HY(loaded)YH( + )SM(parse\201\202)ES( func)HY(tions)YH(. The last two argu)HY(ments)YH( in each of these + func)HY(tions)YH( are )SM(flags)ES( and )SM(prop)HY(er)HY(ties)YH()ES(. The + )SM(flags)ES( argu)HY(ment)YH( allows you to modify the default behav)HY(ior)YH( + of the parsing func)HY(tions)YH(. The )SM(prop)HY(er)HY(ties)YH()ES( argu)HY(ment)YH( allows + you to over)HY(ride)YH( the schema loca)HY(tion)YH( attributes spec)HY(i)HY(fied)YH( in XML + docu)HY(ments)YH(. Note that the schema loca)HY(tion)YH( paths are rela)HY(tive)YH( to an + XML docu)HY(ment)YH( unless they are complete URIs. For example if you want + to use a local schema file then you will need to use a URI in the + form )SM(file:///abso)HY(lute)YH(/path/to/your/schema)ES(.)EP( + + )0 P(A number of over)HY(loaded)YH( )SM(parse\201\202)ES( func)HY(tions)YH( have the + )SM(system_id)ES( and )SM(public_id)ES( argu)HY(ments)YH(. The + system id is a )EM(system)ES( iden)HY(ti)HY(fier)YH( of the resources being + parsed \201for example, URI or a full file path\202. The public id is a + )EM(public)ES( iden)HY(ti)HY(fier)YH( of the resource \201for example, an + appli)HY(ca)HY(tion)YH(-specific name or a rela)HY(tive)YH( file path\202. The system id + is used to resolve rela)HY(tive)YH( paths \201for example, schema paths\202. In + diag)HY(nos)HY(tics)YH( messages the public id is used if it is avail)HY(able)YH(. + Other)HY(wise)YH( the system id is used.)EP( + + )0 P(The error handling mech)HY(a)HY(nisms)YH( employed by the )SM(docu)HY(ment)YH()ES( + parser are described in )0 47 1 A(Section 7.3, "Error + Handling")47 0 TN TL()Ec /AF f D(.)EP( + + )0 2 42 H(7.2)WB 92 Sn()WB 46 Sn( Expat Docu)HY(ment)YH( Parser)EA()EH( + + )0 P(When Expat is used as the under)HY(ly)HY(ing)YH( XML parser, the + )SM(docu)HY(ment)YH()ES( type has the follow)HY(ing)YH( inter)HY(face)YH(. Note that + if the char)HY(ac)HY(ter)YH( type is )SM(wchar_t)ES(, then the string type + in the inter)HY(face)YH( becomes )SM(std::wstring)ES( + \201see )0 25 1 A(Section 5.2, "Char)HY(ac)HY(ter)YH( Type and Encod)HY(ing)YH(")25 0 TN TL()Ec /AF f D(\202.)EP( + + ) 123 72 PR(namespace xml_schema +{ + class parser_base; + class error_handler; + + class document + { + public: + document \201parser_base&, + const std::string& root_element_name, + bool polymorphic = false\202; + + document \201parser_base&, + const std::string& root_element_namespace, + const std::string& root_element_name, + bool polymorphic = false\202; + + public: + // Parse a local file. The file is accessed with std::ifstream + // in binary mode. The std::ios_base::failure exception is used + // to report io errors \201badbit and failbit\202. + void + parse \201const std::string& file\202; + + // Parse a local file with a user-provided error_handler + // object. The file is accessed with std::ifstream in binary + // mode. The std::ios_base::failure exception is used to report + // io errors \201badbit and failbit\202. + // + void + parse \201const std::string& file, error_handler&\202;)WR( + + public: + // Parse std::istream. + // + void + parse \201std::istream&\202; + + // Parse std::istream with a user-provided error_handler object. + // + void + parse \201std::istream&, error_handler&\202; + + // Parse std::istream with a system id. + // + void + parse \201std::istream&, const std::string& system_id\202; + + // Parse std::istream with a system id and a user-provided + // error_handler object. + // + void + parse \201std::istream&, + const std::string& system_id, + error_handler&\202; + + // Parse std::istream with system and public ids. + // + void + parse \201std::istream&, + const std::string& system_id,)WR( + const std::string& public_id\202; + + // Parse std::istream with system and public ids and a user-provided + // error_handler object. + // + void + parse \201std::istream&, + const std::string& system_id, + const std::string& public_id, + error_handler&\202; + + public: + // Parse a chunk of input. You can call these functions multiple + // times with the last call having the last argument true. + // + void + parse \201const void* data, std::size_t size, bool last\202; + + void + parse \201const void* data, std::size_t size, bool last, + error_handler&\202; + + void + parse \201const void* data, std::size_t size, bool last, + const std::string& system_id\202; + + void + parse \201const void* data, std::size_t size, bool last, + const std::string& system_id, + error_handler&\202;)WR( + + void + parse \201const void* data, std::size_t size, bool last, + const std::string& system_id, + const std::string& public_id\202; + + void + parse \201const void* data, std::size_t size, bool last, + const std::string& system_id, + const std::string& public_id, + error_handler&\202; + + public: + // Low-level Expat-specific parsing API. + // + void + parse_begin \201XML_Parser\202; + + void + parse_begin \201XML_Parser, const std::string& public_id\202; + + void + parse_begin \201XML_Parser, error_handler&\202; + + void + parse_begin \201XML_Parser, + const std::string& public_id, + error_handler&\202; + void + parse_end \201\202;)WR( + }; +})RP( + + )0 P(The )SM(docu)HY(ment)YH()ES( class is a root parser for + the vocab)HY(u)HY(lary)YH(. The first argu)HY(ment)YH( to its construc)HY(tors)YH( is the + parser for the type of the root element. The )SM(parser_base)ES( + class is the base type for all parser skele)HY(tons)YH(. The second and + third argu)HY(ments)YH( to the )SM(docu)HY(ment)YH()ES('s construc)HY(tors)YH( are + the root element's name and names)HY(pace)YH(. The last argu)HY(ment)YH(, + )SM(poly)HY(mor)HY(phic)YH()ES(, spec)HY(i)HY(fies)YH( whether the XML docu)HY(ments)YH( + being parsed use poly)HY(mor)HY(phism)YH(. For more infor)HY(ma)HY(tion)YH( on support + for XML Schema poly)HY(mor)HY(phism)YH( in the C++/Parser mapping refer + to )0 28 1 A(Section 5.5, "Support for Poly)HY(mor)HY(phism)YH(")28 0 TN TL()Ec /AF f D(.)EP( + + )0 P(A number of over)HY(loaded)YH( )SM(parse\201\202)ES( func)HY(tions)YH( have the + )SM(system_id)ES( and )SM(public_id)ES( argu)HY(ments)YH(. The + system id is a )EM(system)ES( iden)HY(ti)HY(fier)YH( of the resources being + parsed \201for example, URI or a full file path\202. The public id is a + )EM(public)ES( iden)HY(ti)HY(fier)YH( of the resource \201for example, an + appli)HY(ca)HY(tion)YH(-specific name or a rela)HY(tive)YH( file path\202. The system id + is used to resolve rela)HY(tive)YH( paths. In diag)HY(nos)HY(tics)YH( messages the + public id is used if it is avail)HY(able)YH(. Other)HY(wise)YH( the system id + is used.)EP( + + )0 P(The )SM(parse_begin\201\202)ES( and )SM(parse_end\201\202)ES( func)HY(tions)YH( + present a low-level, Expat-specific parsing API for maximum control. + A typical use-case would look like this \201pseudo-code\202:)EP( + + ) 20 55 PR(xxx_pimpl root_p; +document doc_p \201root_p, "root"\202; + +root_p.pre \201\202; +doc_p.parse_begin \201xml_parser, "file.xml"\202; + +while \201more_data_to_parse\202 +{ + // Call XML_Parse or XML_ParseBuffer. + + if \201status == XML_STATUS_ERROR\202 + break; +} + +// Call parse_end even in case of an error to translate +// XML and Schema errors to exceptions or error_handler +// calls. +// +doc.parse_end \201\202; +result_type result \201root_p.post_xxx \201\202\202;)RP( + + )0 P(Note that if your vocab)HY(u)HY(lary)YH( uses XML names)HY(paces)YH(, the + )SM(XML_Parser)HY(Cre)HY(at)HY(eNS)YH(\201\202)ES( func)HY(tions)YH( should be used to create + the XML parser. Space \201)SM(XML_Char \201' '\202)ES(\202 should be used + as a sepa)HY(ra)HY(tor)YH( \201the second argu)HY(ment)YH( to )SM(XML_Parser)HY(Cre)HY(at)HY(eNS)YH(\201\202)ES(\202. + )EP( + + )0 P(The error handling mech)HY(a)HY(nisms)YH( employed by the )SM(docu)HY(ment)YH()ES( + parser are described in )0 47 1 A(Section 7.3, "Error + Handling")47 0 TN TL()Ec /AF f D(.)EP( + + + )0 2 43 H(7.3)WB 93 Sn()WB 47 Sn( Error Handling)EA()EH( + + )0 P(There are three cate)HY(gories)YH( of errors that can result from running + a parser on an XML docu)HY(ment)YH(: System, XML, and Appli)HY(ca)HY(tion)YH(. + The System cate)HY(gory)YH( contains memory allo)HY(ca)HY(tion)YH( and file/stream + oper)HY(a)HY(tion)YH( errors. The XML cate)HY(gory)YH( covers XML parsing and + well-formed)HY(ness)YH( check)HY(ing)YH( as well as XML Schema vali)HY(da)HY(tion)YH( errors. + Finally, the Appli)HY(ca)HY(tion)YH( cate)HY(gory)YH( is for appli)HY(ca)HY(tion)YH( logic errors + that you may want to prop)HY(a)HY(gate)YH( from parser imple)HY(men)HY(ta)HY(tions)YH( to the + caller of the parser. + )EP( + + )0 P(The System errors are mapped to the stan)HY(dard)YH( excep)HY(tions)YH(. The + out of memory condi)HY(tion)YH( is indi)HY(cated)YH( by throw)HY(ing)YH( an instance + of )SM(std::bad_alloc)ES(. The stream oper)HY(a)HY(tion)YH( errors + are reported either by throw)HY(ing)YH( an instance of + )SM(std::ios_base::failure)ES( if excep)HY(tions)YH( are enabled + or by setting the stream state.)EP( + + )0 P(Note that if you are parsing )SM(std::istream)ES( on + which excep)HY(tions)YH( are not enabled, then you will need to + check the stream state before calling the )SM(post\201\202)ES( + call)HY(back)YH(, as shown in the follow)HY(ing)YH( example:)EP( + + ) 24 50 PR(int +main \201int argc, char* argv[]\202 +{ + ... + + std::ifstream ifs \201argv[1]\202; + + if \201ifs.fail \201\202\202 + { + cerr << argv[1] << ": unable to open" << endl; + return 1; + } + + root_p.pre \201\202; + doc_p.parse \201ifs\202; + + if \201ifs.fail \201\202\202 + { + cerr << argv[1] << ": io failure" << endl; + return 1; + } + + result_type result \201root_p.post_xxx \201\202\202; +})RP( + + )0 P(The above example can be rewrit)HY(ten)YH( to use excep)HY(tions)YH( + as shown below:)EP( + + ) 21 68 PR(int +main \201int argc, char* argv[]\202 +{ + try + { + ... + + std::ifstream ifs; + ifs.exceptions \201std::ifstream::badbit | std::ifstream::failbit\202; + ifs.open \201argv[1]\202; + + root_p.pre \201\202; + doc_p.parse \201ifs\202; + result_type result \201root_p.post_xxx \201\202\202; + } + catch \201const std::ifstream::failure&\202 + { + cerr << argv[1] << ": unable to open or io failure" << endl; + return 1; + } +})RP( + + + )0 P(For report)HY(ing)YH( appli)HY(ca)HY(tion)YH( errors from parsing call)HY(backs)YH(, you + can throw any excep)HY(tions)YH( of your choice. They are prop)HY(a)HY(gated)YH( to + the caller of the parser without any alter)HY(ations)YH(.)EP( + + )0 P(The XML errors can be reported either by throw)HY(ing)YH( the + )SM(xml_schema::parsing)ES( excep)HY(tion)YH( or by a call)HY(back)YH( + to the )SM(xml_schema::error_handler)ES( object \201and + )SM(xercesc::ErrorHan)HY(dler)YH()ES( object in case of Xerces-C++\202.)EP( + + )0 P(The )SM(xml_schema::parsing)ES( excep)HY(tion)YH( contains + a list of warn)HY(ings)YH( and errors that were accu)HY(mu)HY(lated)YH( during + parsing. Note that this excep)HY(tion)YH( is thrown only if there + was an error. This makes it impos)HY(si)HY(ble)YH( to obtain warn)HY(ings)YH( + from an other)HY(wise)YH( success)HY(ful)YH( parsing using this mech)HY(a)HY(nism)YH(. + The follow)HY(ing)YH( listing shows the defi)HY(ni)HY(tion)YH( of + )SM(xml_schema::parsing)ES( excep)HY(tion)YH(. Note that if the + char)HY(ac)HY(ter)YH( type is )SM(wchar_t)ES(, then the string type + and output stream type in the defi)HY(ni)HY(tion)YH( become + )SM(std::wstring)ES( and )SM(std::wostream)ES(, + respec)HY(tively)YH( \201see )0 25 1 A(Section 5.2, "Char)HY(ac)HY(ter)YH( Type + and Encod)HY(ing)YH(")25 0 TN TL()Ec /AF f D(\202.)EP( + + ) 82 51 PR(namespace xml_schema +{ + class exception: public std::exception + { + protected: + virtual void + print \201std::ostream&\202 const = 0; + }; + + inline std::ostream& + operator<< \201std::ostream& os, const exception& e\202 + { + e.print \201os\202; + return os; + } + + + class severity + { + public: + enum value + { + warning, + error + }; + }; + + + class error + { + public:)WR( + error \201xml_schema::severity, + const std::string& id, + unsigned long line, + unsigned long column, + const std::string& message\202; + + xml_schema::severity + severity \201\202 const; + + const std::string& + id \201\202 const; + + unsigned long + line \201\202 const; + + unsigned long + column \201\202 const; + + const std::string& + message \201\202 const; + }; + + std::ostream& + operator<< \201std::ostream&, const error&\202; + + + class diagnostics: public std::vector + { + }; +)WR( + std::ostream& + operator<< \201std::ostream&, const diagnostics&\202; + + + class parsing: public exception + { + public: + parsing \201\202; + parsing \201const xml_schema::diagnostics&\202; + + const xml_schema::diagnostics& + diagnostics \201\202 const; + + virtual const char* + what \201\202 const throw \201\202; + + protected: + virtual void + print \201std::ostream&\202 const; + }; +})RP( + + )0 P(The follow)HY(ing)YH( example shows how we can catch and print this + excep)HY(tion)YH(. The code will print diag)HY(nos)HY(tics)YH( messages one per line + in case of an error.)EP( + + ) 13 38 PR(int +main \201int argc, char* argv[]\202 +{ + try + { + // Parse. + } + catch \201const xml_schema::parsing& e\202 + { + cerr << e << endl; + return 1; + } +})RP( + + )0 P(With the )SM(error_handler)ES( approach the diag)HY(nos)HY(tics)YH( + messages are deliv)HY(ered)YH( as parsing progresses. The follow)HY(ing)YH( + listing presents the defi)HY(ni)HY(tion)YH( of the )SM(error_handler)ES( + inter)HY(face)YH(. Note that if the char)HY(ac)HY(ter)YH( type is )SM(wchar_t)ES(, + then the string type in the inter)HY(face)YH( becomes )SM(std::wstring)ES( + \201see )0 25 1 A(Section 5.2, "Char)HY(ac)HY(ter)YH( Type and Encod)HY(ing)YH(")25 0 TN TL()Ec /AF f D(\202.)EP( + + ) 24 44 PR(namespace xml_schema +{ + class error_handler + { + public: + class severity + { + public: + enum value + { + warning, + error, + fatal + }; + }; + + virtual bool + handle \201const std::string& id, + unsigned long line, + unsigned long column, + severity, + const std::string& message\202 = 0; + }; +})RP( + + )0 P(The return value of the )SM(handle\201\202)ES( func)HY(tion)YH( indi)HY(cates)YH( whether + parsing should continue if possi)HY(ble)YH(. The error with the fatal sever)HY(ity)YH( + level termi)HY(nates)YH( the parsing process regard)HY(less)YH( of the returned value. + At the end of the parsing process with an error that was reported via + the )SM(error_handler)ES( object, an empty + )SM(xml_schema::parsing)ES( excep)HY(tion)YH( is thrown to indi)HY(cate)YH( + the failure to the caller. You can alter this behav)HY(ior)YH( by throw)HY(ing)YH( + your own excep)HY(tion)YH( from the )SM(handle\201\202)ES( func)HY(tion)YH(.)EP( + + + + + + )0 1 44 H(Appendix)WB 94 Sn()WB 48 Sn( A \236 Supported XML Schema Constructs)EA()EH( + + )0 P(The C++/Parser mapping supports vali)HY(da)HY(tion)YH( of the follow)HY(ing)YH( W3C XML + Schema constructs in the gener)HY(ated)YH( code.)EP( + + + )1 PT( + + + )BR( +)BR( + +)WB NL +/TE t D NP /OU t D TU PM 1 eq and{/Pn () D showpage}if end restore diff --git a/xsd/doc/cxx/parser/guide/figure-1.png b/xsd/doc/cxx/parser/guide/figure-1.png new file mode 100644 index 0000000..15d1723 Binary files /dev/null and b/xsd/doc/cxx/parser/guide/figure-1.png differ diff --git a/xsd/doc/cxx/parser/guide/figure-1.svg b/xsd/doc/cxx/parser/guide/figure-1.svg new file mode 100644 index 0000000..d994a79 --- /dev/null +++ b/xsd/doc/cxx/parser/guide/figure-1.svg @@ -0,0 +1,373 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + class people_pimpl{ void person ();}; + + + + class person_pimpl{ void first_name (string); void last_name (string); void gender (); void age (short); void post_person ();}; + + + + class string_pimpl{ string post_string ();}; + + + class short_pimpl{ short post_short ();}; + + + class gender_pimpl{ void post_gender ();}; + + + + + + + diff --git a/xsd/doc/cxx/parser/guide/guide.html2ps b/xsd/doc/cxx/parser/guide/guide.html2ps new file mode 100644 index 0000000..c2f6314 --- /dev/null +++ b/xsd/doc/cxx/parser/guide/guide.html2ps @@ -0,0 +1,65 @@ +@html2ps { + option { + toc: hb; + colour: 1; + hyphenate: 1; + titlepage: 1; + } + + datefmt: "%B %Y"; + + titlepage { + content: " +
+

C++/Parser Mapping

+

Getting Started Guide

+

 

+

 

+

 

+

 

+

 

+

 

+
+

Copyright © 2005-2014 CODE SYNTHESIS TOOLS CC

+ +

Permission is granted to copy, distribute and/or modify this + document under the terms of the + GNU Free + Documentation License, version 1.2; with no Invariant Sections, + no Front-Cover Texts and no Back-Cover Texts. +

+ +

This document is available in the following formats: + XHTML, + PDF, and + PostScript.

"; + } + + toc { + indent: 2em; + } + + header { + odd-right: $H; + even-left: $H; + } + + footer { + odd-left: $D; + odd-center: $T; + odd-right: $N; + + even-left: $N; + even-center: $T; + even-right: $D; + } +} + +body { + font-size: 12pt; + text-align: justify; +} + +pre { + font-size: 10pt; +} diff --git a/xsd/doc/cxx/parser/guide/index.xhtml b/xsd/doc/cxx/parser/guide/index.xhtml new file mode 100644 index 0000000..1eef533 --- /dev/null +++ b/xsd/doc/cxx/parser/guide/index.xhtml @@ -0,0 +1,4158 @@ + + + + + + C++/Parser Mapping Getting Started Guide + + + + + + + + + + + + + +
+
+ +
+ +
+
C++/Parser Mapping
+
Getting Started Guide
+ +

Copyright © 2005-2014 CODE SYNTHESIS TOOLS CC

+ +

Permission is granted to copy, distribute and/or modify this + document under the terms of the + GNU Free + Documentation License, version 1.2; with no Invariant Sections, + no Front-Cover Texts and no Back-Cover Texts. +

+ +

This document is available in the following formats: + XHTML, + PDF, and + PostScript.

+ +
+ +

Table of Contents

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Preface + + + +
About This Document
More Information
+
1Introduction + + + +
1.1Mapping Overview
1.2Benefits
+
2Hello World Example + + + + + +
2.1Writing XML Document and Schema
2.2Translating Schema to C++
2.3Implementing Application Logic
2.4Compiling and Running
+
3Parser Skeletons + + + + + +
3.1Implementing the Gender Parser
3.2Implementing the Person Parser
3.3Implementing the People Parser
3.4Connecting the Parsers Together
+
4Type Maps + + + + +
4.1Object Model
4.2Type Map File Format
4.3Parser Implementations
+
5Mapping Configuration + + + + + + +
5.1C++ Standard
5.2Character Type and Encoding
5.3Underlying XML Parser
5.4XML Schema Validation
5.5Support for Polymorphism
+
6Built-In XML Schema Type Parsers + + + + + + + + + + + + + + +
6.1QName Parser
6.2NMTOKENS and IDREFS Parsers
6.3base64Binary and hexBinary Parsers
6.4Time Zone Representation
6.5date Parser
6.6dateTime Parser
6.7duration Parser
6.8gDay Parser
6.9gMonth Parser
6.10gMonthDay Parser
6.11gYear Parser
6.12gYearMonth Parser
6.13time Parser
+
7Document Parser and Error Handling + + + + +
7.1Xerces-C++ Document Parser
7.2Expat Document Parser
7.3Error Handling
+
Appendix A — Supported XML Schema Constructs
+
+ +

Preface

+ +

About This Document

+ +

The goal of this document is to provide you with an understanding of + the C++/Parser programming model and allow you to efficiently evaluate + XSD against your project's technical requirements. As such, this + document is intended for C++ developers and software architects + who are looking for an XML processing solution. Prior experience + with XML and C++ is required to understand this document. Basic + understanding of XML Schema is advantageous but not expected + or required. +

+ + +

More Information

+ +

Beyond this guide, you may also find the following sources of + information useful:

+ +
    +
  • XSD + Compiler Command Line Manual
  • + +
  • The examples/cxx/parser/ directory in the XSD + distribution contains a collection of examples and a README + file with an overview of each example.
  • + +
  • The README file in the XSD distribution explains + how to compile the examples on various platforms.
  • + +
  • The xsd-users + mailing list is the place to ask technical questions about XSD and the C++/Parser mapping. + Furthermore, the archives + may already have answers to some of your questions.
  • + +
+ + + +

1 Introduction

+ +

Welcome to CodeSynthesis XSD and the C++/Parser mapping. XSD is a + cross-platform W3C XML Schema to C++ data binding compiler. C++/Parser + is a W3C XML Schema to C++ mapping that represents an XML vocabulary + as a set of parser skeletons which you can implement to perform XML + processing as required by your application logic. +

+ +

1.1 Mapping Overview

+ +

The C++/Parser mapping provides event-driven, stream-oriented + XML parsing, XML Schema validation, and C++ data binding. It was + specifically designed and optimized for high performance and + small footprint. Based on the static analysis of the schemas, XSD + generates compact, highly-optimized hierarchical state machines + that combine data extraction, validation, and even dispatching + in a single step. As a result, the generated code is typically + 2-10 times faster than general-purpose validating XML parsers + while maintaining the lowest static and dynamic memory footprints. +

+ +

To speed up application development, the C++/Parser mapping + can be instructed to generate sample parser implementations + and a test driver which can then be filled with the application + logic code. The mapping also provides a wide range of + mechanisms for controlling and customizing the generated code.

+ +

The next chapter shows how to create a simple application that uses + the C++/Parser mapping to parse, validate, and extract data from a + simple XML document. The following chapters show how to + use the C++/Parser mapping in more detail.

+ +

1.2 Benefits

+ +

Traditional XML access APIs such as Document Object Model (DOM) + or Simple API for XML (SAX) have a number of drawbacks that + make them less suitable for creating robust and maintainable + XML processing applications. These drawbacks include: +

+ +
    +
  • Generic representation of XML in terms of elements, attributes, + and text forces an application developer to write a substantial + amount of bridging code that identifies and transforms pieces + of information encoded in XML to a representation more suitable + for consumption by the application logic.
  • + +
  • String-based flow control defers error detection to runtime. + It also reduces code readability and maintainability.
  • + +
  • Lack of type safety because the data is represented + as text.
  • + +
  • Resulting applications are hard to debug, change, and + maintain.
  • +
+ +

In contrast, statically-typed, vocabulary-specific parser + skeletons produced by the C++/Parser mapping allow you to + operate in your domain terms instead of the generic elements, + attributes, and text. Static typing helps catch errors at + compile-time rather than at run-time. Automatic code generation + frees you for more interesting tasks (such as doing something + useful with the information stored in the XML documents) and + minimizes the effort needed to adapt your applications to + changes in the document structure. To summarize, the C++/Parser + mapping has the following key advantages over generic XML + access APIs:

+ +
    +
  • Ease of use. The generated code hides all the complexity + associated with recreating the document structure, maintaining the + dispatch state, and converting the data from the text representation + to data types suitable for manipulation by the application logic. + Parser skeletons also provide a convenient mechanism for building + custom in-memory representations.
  • + +
  • Natural representation. The generated parser skeletons + implement parser callbacks as virtual functions with names + corresponding to elements and attributes in XML. As a result, + you process the XML data using your domain vocabulary instead + of generic elements, attributes, and text. +
  • + +
  • Concise code. With a separate parser skeleton for each + XML Schema type, the application implementation is + simpler and thus easier to read and understand.
  • + +
  • Safety. The XML data is delivered to parser callbacks as + statically typed objects. The parser callbacks themselves are virtual + functions. This helps catch programming errors at compile-time + rather than at runtime.
  • + +
  • Maintainability. Automatic code generation minimizes the + effort needed to adapt the application to changes in the + document structure. With static typing, the C++ compiler + can pin-point the places in the application code that need to be + changed.
  • + +
  • Efficiency. The generated parser skeletons combine + data extraction, validation, and even dispatching in a single + step. This makes them much more efficient than traditional + architectures with separate stages for validation and data + extraction/dispatch.
  • +
+ + + + +

2 Hello World Example

+ +

In this chapter we will examine how to parse a very simple XML + document using the XSD-generated C++/Parser skeletons. + The code presented in this chapter is based on the hello + example which can be found in the examples/cxx/parser/ + directory of the XSD distribution.

+ +

2.1 Writing XML Document and Schema

+ +

First, we need to get an idea about the structure + of the XML documents we are going to process. Our + hello.xml, for example, could look like this:

+ +
+<?xml version="1.0"?>
+<hello>
+
+  <greeting>Hello</greeting>
+
+  <name>sun</name>
+  <name>moon</name>
+  <name>world</name>
+
+</hello>
+  
+ +

Then we can write a description of the above XML in the + XML Schema language and save it into hello.xsd:

+ +
+<?xml version="1.0"?>
+<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
+
+  <xs:complexType name="hello">
+    <xs:sequence>
+      <xs:element name="greeting" type="xs:string"/>
+      <xs:element name="name" type="xs:string" maxOccurs="unbounded"/>
+    </xs:sequence>
+  </xs:complexType>
+
+  <xs:element name="hello" type="hello"/>
+
+</xs:schema>
+  
+ +

Even if you are not familiar with XML Schema, it + should be easy to connect declarations in hello.xsd + to elements in hello.xml. The hello type + is defined as a sequence of the nested greeting and + name elements. Note that the term sequence in XML + Schema means that elements should appear in a particular order + as opposed to appearing multiple times. The name + element has its maxOccurs property set to + unbounded which means it can appear multiple times + in an XML document. Finally, the globally-defined hello + element prescribes the root element for our vocabulary. For an + easily-approachable introduction to XML Schema refer to + XML Schema Part 0: + Primer.

+ +

The above schema is a specification of our XML vocabulary; it tells + everybody what valid documents of our XML-based language should look + like. The next step is to compile this schema to generate + the object model and parsing functions.

+ +

2.2 Translating Schema to C++

+ +

Now we are ready to translate our hello.xsd to C++ parser + skeletons. To do this we invoke the XSD compiler from a terminal + (UNIX) or a command prompt (Windows): +

+ +
+$ xsd cxx-parser --xml-parser expat hello.xsd
+  
+ +

The --xml-parser option indicates that we want to + use Expat as the underlying XML parser (see Section + 5.3, "Underlying XML Parser"). The XSD compiler produces two + C++ files: hello-pskel.hxx and hello-pskel.cxx. + The following code fragment is taken from hello-pskel.hxx; + it should give you an idea about what gets generated: +

+ +
+class hello_pskel
+{
+public:
+  // Parser callbacks. Override them in your implementation.
+  //
+  virtual void
+  pre ();
+
+  virtual void
+  greeting (const std::string&);
+
+  virtual void
+  name (const std::string&);
+
+  virtual void
+  post_hello ();
+
+  // Parser construction API.
+  //
+  void
+  greeting_parser (xml_schema::string_pskel&);
+
+  void
+  name_parser (xml_schema::string_pskel&);
+
+  void
+  parsers (xml_schema::string_pskel& /* greeting */,
+           xml_schema::string_pskel& /* name */);
+
+private:
+  ...
+};
+  
+ +

The first four member functions shown above are called parser + callbacks. You would normally override them in your implementation + of the parser to do something useful. Let's go through all of + them one by one.

+ +

The pre() function is an initialization callback. It is + called when a new element of type hello is about + to be parsed. You would normally use this function to allocate a new + instance of the resulting type or clear accumulators that are used + to gather information during parsing. The default implementation + of this function does nothing.

+ +

The post_hello() function is a finalization callback. Its + name is constructed by adding the parser skeleton name to the + post_ prefix. The finalization callback is called when + parsing of the element is complete and the result, if any, should + be returned. Note that in our case the return type of + post_hello() is void which means there + is nothing to return. More on parser return types later. +

+ +

You may be wondering why the finalization callback is called + post_hello() instead of post() just + like pre(). The reason for this is that + finalization callbacks can have different return types and + result in function signature clashes across inheritance + hierarchies. To prevent this the signatures of finalization + callbacks are made unique by adding the type name to their names.

+ +

The greeting() and name() functions are + called when the greeting and name elements + have been parsed, respectively. Their arguments are of type + std::string and contain the data extracted from XML.

+ +

The last three functions are for connecting parsers to each other. + For example, there is a predefined parser for built-in XML Schema type + string in the XSD runtime. We will be using + it to parse the contents of greeting and + name elements, as shown in the next section.

+ +

2.3 Implementing Application Logic

+ +

At this point we have all the parts we need to do something useful + with the information stored in our XML document. The first step is + to implement the parser: +

+ +
+#include <iostream>
+#include "hello-pskel.hxx"
+
+class hello_pimpl: public hello_pskel
+{
+public:
+  virtual void
+  greeting (const std::string& g)
+  {
+    greeting_ = g;
+  }
+
+  virtual void
+  name (const std::string& n)
+  {
+    std::cout << greeting_ << ", " << n << "!" << std::endl;
+  }
+
+private:
+  std::string greeting_;
+};
+  
+ +

We left both pre() and post_hello() with the + default implementations; we don't have anything to initialize or + return. The rest is pretty straightforward: we store the greeting + in a member variable and later, when parsing names, use it to + say hello.

+ +

An observant reader my ask what happens if the name + element comes before greeting? Don't we need to + make sure greeting_ was initialized and report + an error otherwise? The answer is no, we don't have to do + any of this. The hello_pskel parser skeleton + performs validation of XML according to the schema from which + it was generated. As a result, it will check the order + of the greeting and name elements + and report an error if it is violated.

+ +

Now it is time to put this parser implementation to work:

+ +
+using namespace std;
+
+int
+main (int argc, char* argv[])
+{
+  try
+  {
+    // Construct the parser.
+    //
+    xml_schema::string_pimpl string_p;
+    hello_pimpl hello_p;
+
+    hello_p.greeting_parser (string_p);
+    hello_p.name_parser (string_p);
+
+    // Parse the XML instance.
+    //
+    xml_schema::document doc_p (hello_p, "hello");
+
+    hello_p.pre ();
+    doc_p.parse (argv[1]);
+    hello_p.post_hello ();
+  }
+  catch (const xml_schema::exception& e)
+  {
+    cerr << e << endl;
+    return 1;
+  }
+}
+  
+ +

The first part of this code snippet instantiates individual parsers + and assembles them into a complete vocabulary parser. + xml_schema::string_pimpl is an implementation of a parser + for built-in XML Schema type string. It is provided by + the XSD runtime along with parsers for other built-in types (for + more information on the built-in parsers see Chapter 6, + "Built-In XML Schema Type Parsers"). We use string_pimpl + to parse the greeting and name elements as + indicated by the calls to greeting_parser() and + name_parser(). +

+ +

Then we instantiate a document parser (doc_p). The + first argument to its constructor is the parser for + the root element (hello_p in our case). The + second argument is the root element name. +

+ +

The final piece is the calls to pre(), parse(), + and post_hello(). The call to parse() + perform the actual XML parsing while the calls to pre() and + post_hello() make sure that the parser for the root + element can perform proper initialization and cleanup.

+ +

While our parser implementation and test driver are pretty small and + easy to write by hand, for bigger XML vocabularies it can be a + substantial effort. To help with this task XSD can automatically + generate sample parser implementations and a test driver from your + schemas. You can request the generation of a sample implementation with + empty function bodies by specifying the --generate-noop-impl + option. Or you can generate a sample implementation that prints the + data store in XML by using the --generate-print-impl + option. To request the generation of a test driver you can use the + --generate-test-driver option. For more information + on these options refer to the + XSD + Compiler Command Line Manual. The 'generated' example + in the XSD distribution shows the sample implementation generation + feature in action.

+ + +

2.4 Compiling and Running

+ +

After saving all the parts from the previous section in + driver.cxx, we are ready to compile our first + application and run it on the test XML document. On a UNIX + system this can be done with the following commands: +

+ +
+$ c++ -I.../libxsd -c driver.cxx hello-pskel.cxx
+$ c++ -o driver driver.o hello-pskel.o -lexpat
+$ ./driver hello.xml
+Hello, sun!
+Hello, moon!
+Hello, world!
+  
+ +

Here .../libxsd represents the path to the + libxsd directory in the XSD distribution. + We can also test the error handling. To test XML well-formedness + checking, we can try to parse hello-pskel.hxx:

+ +
+$ ./driver hello-pskel.hxx
+hello-pskel.hxx:1:0: not well-formed (invalid token)
+  
+ +

We can also try to parse a valid XML but not from our + vocabulary, for example hello.xsd:

+ +
+$ ./driver hello.xsd
+hello.xsd:2:0: expected element 'hello' instead of
+'http://www.w3.org/2001/XMLSchema#schema'
+  
+ + + + + +

3 Parser Skeletons

+ +

As we have seen in the previous chapter, the XSD compiler generates + a parser skeleton class for each type defined in XML Schema. In + this chapter we will take a closer look at different functions + that comprise a parser skeleton as well as the way to connect + our implementations of these parser skeletons to create a complete + parser.

+ +

In this and subsequent chapters we will use the following schema + that describes a collection of person records. We save it in + people.xsd:

+ +
+<?xml version="1.0"?>
+<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
+
+  <xs:simpleType name="gender">
+    <xs:restriction base="xs:string">
+      <xs:enumeration value="male"/>
+      <xs:enumeration value="female"/>
+    </xs:restriction>
+  </xs:simpleType>
+
+  <xs:complexType name="person">
+    <xs:sequence>
+      <xs:element name="first-name" type="xs:string"/>
+      <xs:element name="last-name" type="xs:string"/>
+      <xs:element name="gender" type="gender"/>
+      <xs:element name="age" type="xs:short"/>
+    </xs:sequence>
+  </xs:complexType>
+
+  <xs:complexType name="people">
+    <xs:sequence>
+      <xs:element name="person" type="person" maxOccurs="unbounded"/>
+    </xs:sequence>
+  </xs:complexType>
+
+  <xs:element name="people" type="people"/>
+
+</xs:schema>
+  
+ +

A sample XML instance to go along with this schema is saved + in people.xml:

+ +
+<?xml version="1.0"?>
+<people>
+  <person>
+    <first-name>John</first-name>
+    <last-name>Doe</last-name>
+    <gender>male</gender>
+    <age>32</age>
+  </person>
+  <person>
+    <first-name>Jane</first-name>
+    <last-name>Doe</last-name>
+    <gender>female</gender>
+    <age>28</age>
+  </person>
+</people>
+  
+ +

Compiling people.xsd with the XSD compiler results + in three parser skeletons being generated: gender_pskel, + person_pskel, and people_pskel. We are going + to examine and implement each of them in the subsequent sections.

+ +

3.1 Implementing the Gender Parser

+ +

The generated gender_pskel parser skeleton looks like + this:

+ +
+class gender_pskel: public virtual xml_schema::string_pskel
+{
+public:
+  // Parser callbacks. Override them in your implementation.
+  //
+  virtual void
+  pre ();
+
+  virtual void
+  post_gender ();
+};
+  
+ +

Notice that gender_pskel inherits from + xml_schema::string_skel which is a parser skeleton + for built-in XML Schema type string and is + predefined in the XSD runtime library. This is an example + of the general rule that parser skeletons follow: if a type + in XML Schema inherits from another then there will be an + equivalent inheritance between the corresponding parser + skeleton classes.

+ +

The pre() and post_gender() callbacks + should look familiar from the previous chapter. Let's now + implement the parser. Our implementation will simply print + the gender to cout:

+ + +
+class gender_pimpl: public gender_pskel,
+                    public xml_schema::string_pimpl
+{
+public:
+  virtual void
+  post_gender ()
+  {
+    std::string s = post_string ();
+    cout << "gender: " << s << endl;
+  }
+};
+  
+ +

While the code is quite short, there is a lot going on. First, + notice that we are inheriting from gender_pskel and + from xml_schema::string_pimpl. We've encountered + xml_schema::string_pimpl already; it is an + implementation of the xml_schema::string_pskel parser + skeleton for built-in XML Schema type string.

+ +

This is another common theme in the C++/Parser programming model: + reusing implementations of the base parsers in the derived ones with + the C++ mixin idiom. In our case, string_pimpl will + do all the dirty work of extracting the data and we can just get + it at the end with the call to post_string().

+ +

In case you are curious, here is what + xml_schema::string_pskel and + xml_schema::string_pimpl look like:

+ +
+namespace xml_schema
+{
+  class string_pskel: public simple_content
+  {
+  public:
+    virtual std::string
+    post_string () = 0;
+  };
+
+  class string_pimpl: public virtual string_pskel
+  {
+  public:
+    virtual void
+    _pre ();
+
+    virtual void
+    _characters (const xml_schema::ro_string&);
+
+    virtual std::string
+    post_string ();
+
+  protected:
+    std::string str_;
+  };
+}
+  
+ +

There are three new pieces in this code that we haven't seen yet. + They are the simple_content class as well as + the _pre() and _characters() functions. + The simple_content class is defined in the XSD + runtime and is a base class for all parser skeletons that conform + to the simple content model in XML Schema. Types with the + simple content model cannot have nested elements—only text + and attributes. There is also the complex_content + class which corresponds to the complex content mode (types with + nested elements, for example, person from + people.xsd).

+ +

The _pre() function is a parser callback. Remember we + talked about the pre() and post_*() callbacks + in the previous chapter? There are actually two more callbacks + with similar roles: _pre() and _post (). + As a result, each parser skeleton has four special callbacks:

+ +
+  virtual void
+  pre ();
+
+  virtual void
+  _pre ();
+
+  virtual void
+  _post ();
+
+  virtual void
+  post_name ();
+  
+ +

pre() and _pre() are initialization + callbacks. They get called in that order before a new instance of the type + is about to be parsed. The difference between pre() and + _pre() is conventional: pre() can + be completely overridden by a derived parser. The derived + parser can also override _pre() but has to always call + the original version. This allows you to partition initialization + into customizable and required parts.

+ +

Similarly, _post() and post_name() are + finalization callbacks with exactly the same semantics: + post_name() can be completely overridden by the derived + parser while the original _post() should always be called. +

+ +

The final bit we need to discuss in this section is the + _characters() function. As you might have guessed, it + is also a callback. A low-level one that delivers raw character content + for the type being parsed. You will seldom need to use this callback + directly. Using implementations for the built-in parsers provided by + the XSD runtime is usually a simpler and more convenient + alternative.

+ +

At this point you might be wondering why some post_*() + callbacks, for example post_string(), return some data + while others, for example post_gender(), have + void as a return type. This is a valid concern + and it will be addressed in the next chapter.

+ +

3.2 Implementing the Person Parser

+ +

The generated person_pskel parser skeleton looks like + this:

+ +
+class person_pskel: public xml_schema::complex_content
+{
+public:
+  // Parser callbacks. Override them in your implementation.
+  //
+  virtual void
+  pre ();
+
+  virtual void
+  first_name (const std::string&);
+
+  virtual void
+  last_name (const std::string&);
+
+  virtual void
+  gender ();
+
+  virtual void
+  age (short);
+
+  virtual void
+  post_person ();
+
+  // Parser construction API.
+  //
+  void
+  first_name_parser (xml_schema::string_pskel&);
+
+  void
+  last_name_parser (xml_schema::string_pskel&);
+
+  void
+  gender_parser (gender_pskel&);
+
+  void
+  age_parser (xml_schema::short_pskel&);
+
+  void
+  parsers (xml_schema::string_pskel& /* first-name */,
+           xml_schema::string_pskel& /* last-name */,
+           gender_pskel&             /* gender */,
+           xml_schema::short_pskel&  /* age */);
+};
+  
+ + +

As you can see, we have a parser callback for each of the nested + elements found in the person XML Schema type. + The implementation of this parser is straightforward:

+ +
+class person_pimpl: public person_pskel
+{
+public:
+  virtual void
+  first_name (const std::string& n)
+  {
+    cout << "first: " << f << endl;
+  }
+
+  virtual void
+  last_name (const std::string& l)
+  {
+    cout << "last: " << l << endl;
+  }
+
+  virtual void
+  age (short a)
+  {
+    cout << "age: " << a << endl;
+  }
+};
+  
+ +

Notice that we didn't override the gender() callback + because all the printing is done by gender_pimpl.

+ + +

3.3 Implementing the People Parser

+ +

The generated people_pskel parser skeleton looks like + this:

+ +
+class people_pskel: public xml_schema::complex_content
+{
+public:
+  // Parser callbacks. Override them in your implementation.
+  //
+  virtual void
+  pre ();
+
+  virtual void
+  person ();
+
+  virtual void
+  post_people ();
+
+  // Parser construction API.
+  //
+  void
+  person_parser (person_pskel&);
+
+  void
+  parsers (person_pskel& /* person */);
+};
+  
+ +

The person() callback will be called after parsing each + person element. While person_pimpl does + all the printing, one useful thing we can do in this callback is to + print an extra newline after each person record so that our + output is more readable:

+ +
+class people_pimpl: public people_pskel
+{
+public:
+  virtual void
+  person ()
+  {
+    cout << endl;
+  }
+};
+  
+ +

Now it is time to put everything together.

+ + +

3.4 Connecting the Parsers Together

+ +

At this point we have all the individual parsers implemented + and can proceed to assemble them into a complete parser + for our XML vocabulary. The first step is to instantiate + all the individual parsers that we will need:

+ +
+xml_schema::short_pimpl short_p;
+xml_schema::string_pimpl string_p;
+
+gender_pimpl gender_p;
+person_pimpl person_p;
+people_pimpl people_p;
+  
+ +

Notice that our schema uses two built-in XML Schema types: + string for the first-name and + last-name elements as well as short + for age. We will use predefined parsers that + come with the XSD runtime to handle these types. The next + step is to connect all the individual parsers. We do this + with the help of functions defined in the parser + skeletons and marked with the "Parser Construction API" + comment. One way to do it is to connect each individual + parser by calling the *_parser() functions:

+ +
+person_p.first_name_parser (string_p);
+person_p.last_name_parser (string_p);
+person_p.gender_parser (gender_p);
+person_p.age_parser (short_p);
+
+people_p.person_parser (person_p);
+  
+ +

You might be wondering what happens if you do not provide + a parser by not calling one of the *_parser() functions. + In that case the corresponding XML content will be skipped, + including validation. This is an efficient way to ignore parts + of the document that you are not interested in.

+ + +

An alternative, shorter, way to connect the parsers is by using + the parsers() functions which connects all the parsers + for a given type at once:

+ +
+person_p.parsers (string_p, string_p, gender_p, short_p);
+people_p.parsers (person_p);
+  
+ +

The following figure illustrates the resulting connections. Notice + the correspondence between return types of the post_*() + functions and argument types of element callbacks that are connected + by the arrows.

+ + +
+ +

The last step is the construction of the document parser and + invocation of the complete parser on our sample XML instance:

+ +
+xml_schema::document doc_p (people_p, "people");
+
+people_p.pre ();
+doc_p.parse ("people.xml");
+people_p.post_people ();
+  
+ +

Let's consider xml_schema::document in + more detail. While the exact definition of this class + varies depending on the underlying parser selected, + here is the common part:

+ +
+namespace xml_schema
+{
+  class document
+  {
+  public:
+    document (xml_schema::parser_base&,
+              const std::string& root_element_name,
+              bool polymorphic = false);
+
+    document (xml_schema::parser_base&,
+              const std::string& root_element_namespace,
+              const std::string& root_element_name,
+              bool polymorphic = false);
+
+    void
+    parse (const std::string& file);
+
+    void
+    parse (std::istream&);
+
+    ...
+
+  };
+}
+  
+ +

xml_schema::document is a root parser for + the vocabulary. The first argument to its constructors is the + parser for the type of the root element (people_impl + in our case). Because a type parser is only concerned with + the element's content and not with the element's name, we need + to specify the root element's name somewhere. That's + what is passed as the second and third arguments to the + document's constructors.

+ +

There are also two overloaded parse() functions + defined in the document class (there are actually + more but the others are specific to the underlying XML parser). + The first version parses a local file identified by a name. The + second version reads the data from an input stream. For more + information on the xml_schema::document class + refer to Chapter 7, "Document Parser and Error + Handling".

+ +

Let's now consider a step-by-step list of actions that happen + as we parse through people.xml. The content of + people.xml is repeated below for convenience.

+ +
+<?xml version="1.0"?>
+<people>
+  <person>
+    <first-name>John</first-name>
+    <last-name>Doe</last-name>
+    <gender>male</gender>
+    <age>32</age>
+  </person>
+  <person>
+    <first-name>Jane</first-name>
+    <last-name>Doe</last-name>
+    <gender>female</gender>
+    <age>28</age>
+  </person>
+</people>
+  
+ + +
    +
  1. people_p.pre() is called from + main(). We did not provide any implementation + for this callback so this call is a no-op.
  2. + +
  3. doc_p.parse("people.xml") is called from + main(). The parser opens the file and starts + parsing its content.
  4. + +
  5. The parser encounters the root element. doc_p + verifies that the root element is correct and calls + _pre() on people_p which is also + a no-op. Parsing is now delegated to people_p.
  6. + +
  7. The parser encounters the person element. + people_p determines that person_p + is responsible for parsing this element. pre() + and _pre() callbacks are called on person_p. + Parsing is now delegated to person_p.
  8. + +
  9. The parser encounters the first-name element. + person_p determines that string_p + is responsible for parsing this element. pre() + and _pre() callbacks are called on string_p. + Parsing is now delegated to string_p.
  10. + +
  11. The parser encounters character content consisting of + "John". The _characters() callback is + called on string_p.
  12. + +
  13. The parser encounters the end of first-name + element. The _post() and post_string() + callbacks are called on string_p. The + first_name() callback is called on person_p + with the return value of post_string(). The + first_name() implementation prints + "first: John" to cout. + Parsing is now returned to person_p.
  14. + +
  15. Steps analogous to 5-7 are performed for the last-name, + gender, and age elements.
  16. + +
  17. The parser encounters the end of person + element. The _post() and post_person() + callbacks are called on person_p. The + person() callback is called on people_p. + The person() implementation prints a new line + to cout. Parsing is now returned to + people_p.
  18. + +
  19. Steps 4-9 are performed for the second person + element.
  20. + +
  21. The parser encounters the end of people + element. The _post() callback is called on + people_p. The doc_p.parse("people.xml") + call returns to main().
  22. + +
  23. people_p.post_people() is called from + main() which is a no-op.
  24. + +
+ + + + + +

4 Type Maps

+ +

There are many useful things you can do inside parser callbacks as they + are right now. There are, however, times when you want to propagate + some information from one parser to another or to the caller of the + parser. One common task that would greatly benefit from such a + possibility is building a tree-like in-memory object model of the + data stored in XML. During execution, each individual sub-parser + would create a sub-tree and return it to its parent parser + which can then incorporate this sub-tree into the whole tree.

+ +

In this chapter we will discuss the mechanisms offered by the + C++/Parser mapping for returning information from individual + parsers and see how to use them to build an object model + of our people vocabulary.

+ +

4.1 Object Model

+ +

An object model for our person record example could + look like this (saved in the people.hxx file):

+ +
+#include <string>
+#include <vector>
+
+enum gender
+{
+  male,
+  female
+};
+
+class person
+{
+public:
+  person (const std::string& first,
+          const std::string& last,
+          ::gender gender,
+          short age)
+    : first_ (first), last_ (last),
+      gender_ (gender), age_ (age)
+  {
+  }
+
+  const std::string&
+  first () const
+  {
+    return first_;
+  }
+
+  const std::string&
+  last () const
+  {
+    return last_;
+  }
+
+  ::gender
+  gender () const
+  {
+    return gender_;
+  }
+
+  short
+  age () const
+  {
+    return age_;
+  }
+
+private:
+  std::string first_;
+  std::string last_;
+  ::gender gender_;
+  short age_;
+};
+
+typedef std::vector<person> people;
+  
+ +

While it is clear which parser is responsible for which part of + the object model, it is not exactly clear how, for + example, gender_pimpl will deliver gender + to person_pimpl. You might have noticed that + string_pimpl manages to deliver its value to the + first_name() callback of person_pimpl. Let's + see how we can utilize the same mechanism to propagate our + own data.

+ +

There is a way to tell the XSD compiler that you want to + exchange data between parsers. More precisely, for each + type defined in XML Schema, you can tell the compiler two things. + First, the return type of the post_*() callback + in the parser skeleton generated for this type. And, second, + the argument type for callbacks corresponding to elements and + attributes of this type. For example, for XML Schema type + gender we can specify the return type for + post_gender() in the gender_pskel + skeleton and the argument type for the gender() callback + in the person_pskel skeleton. As you might have guessed, + the generated code will then pass the return value from the + post_*() callback as an argument to the element or + attribute callback.

+ +

The way to tell the XSD compiler about these XML Schema to + C++ mappings is with type map files. Here is a simple type + map for the gender type from the previous paragraph:

+ +
+include "people.hxx";
+gender ::gender ::gender;
+  
+ +

The first line indicates that the generated code must include + people.hxx in order to get the definition for the + gender type. The second line specifies that both + argument and return types for the gender + XML Schema type should be the ::gender C++ enum + (we use fully-qualified C++ names to avoid name clashes). + The next section will describe the type map format in detail. + We save this type map in people.map and + then translate our schemas with the --type-map + option to let the XSD compiler know about our type map:

+ +
+$ xsd cxx-parser --type-map people.map people.xsd
+  
+ +

If we now look at the generated people-pskel.hxx, + we will see the following changes in the gender_pskel and + person_pskel skeletons:

+ +
+#include "people.hxx"
+
+class gender_pskel: public virtual xml_schema::string_pskel
+{
+  virtual ::gender
+  post_gender () = 0;
+
+  ...
+};
+
+class person_pskel: public xml_schema::complex_content
+{
+  virtual void
+  gender (::gender);
+
+  ...
+};
+  
+ +

Notice that #include "people.hxx" was added to + the generated header file from the type map to provide the + definition for the gender enum.

+ +

4.2 Type Map File Format

+ +

Type map files are used to define a mapping between XML Schema + and C++ types. The compiler uses this information + to determine return types of post_*() + callbacks in parser skeletons corresponding to XML Schema + types as well as argument types for callbacks corresponding + to elements and attributes of these types.

+ +

The compiler has a set of predefined mapping rules that map + the built-in XML Schema types to suitable C++ types (discussed + below) and all other types to void. + By providing your own type maps you can override these predefined + rules. The format of the type map file is presented below: +

+ +
+namespace <schema-namespace> [<cxx-namespace>]
+{
+  (include <file-name>;)*
+  ([type] <schema-type> <cxx-ret-type> [<cxx-arg-type>];)*
+}
+  
+ +

Both <schema-namespace> and + <schema-type> are regex patterns while + <cxx-namespace>, + <cxx-ret-type>, and + <cxx-arg-type> are regex pattern + substitutions. All names can be optionally enclosed in + " ", for example, to include white-spaces.

+ +

<schema-namespace> determines XML + Schema namespace. Optional <cxx-namespace> + is prefixed to every C++ type name in this namespace declaration. + <cxx-ret-type> is a C++ type name that is + used as a return type for the post_*() callback. + Optional <cxx-arg-type> is an argument + type for callbacks corresponding to elements and attributes + of this type. If <cxx-arg-type> is not + specified, it defaults to <cxx-ret-type> + if <cxx-ret-type> ends with * or + & (that is, it is a pointer or a reference) and + const <cxx-ret-type>& + otherwise. + <file-name> is a file name either in the + " " or < > format + and is added with the #include directive to + the generated code.

+ +

The # character starts a comment that ends + with a new line or end of file. To specify a name that contains + # enclose it in " ". + For example:

+ +
+namespace http://www.example.com/xmlns/my my
+{
+  include "my.hxx";
+
+  # Pass apples by value.
+  #
+  apple apple;
+
+  # Pass oranges as pointers.
+  #
+  orange orange_t*;
+}
+  
+ +

In the example above, for the + http://www.example.com/xmlns/my#orange + XML Schema type, the my::orange_t* C++ type will + be used as both return and argument types.

+ +

Several namespace declarations can be specified in a single + file. The namespace declaration can also be completely + omitted to map types in a schema without a namespace. For + instance:

+ +
+include "my.hxx";
+apple apple;
+
+namespace http://www.example.com/xmlns/my
+{
+  orange "const orange_t*";
+}
+  
+ +

The compiler has a number of predefined mapping rules for + the built-in XML Schema types which can be presented as the + following map files. The string-based XML Schema types are + mapped to either std::string or + std::wstring depending on the character type + selected (see Section 5.2, "Character Type and + Encoding" for more information). The binary XML Schema + types are mapped to either std::auto_ptr<xml_schema::buffer> + or std::unique_ptr<xml_schema::buffer> + depending on the C++ standard selected (C++98 or C++11, + respectively; refer to the --std XSD compiler + command line option for details).

+ +
+namespace http://www.w3.org/2001/XMLSchema
+{
+  boolean bool bool;
+
+  byte "signed char" "signed char";
+  unsignedByte "unsigned char" "unsigned char";
+
+  short short short;
+  unsignedShort "unsigned short" "unsigned short";
+
+  int int int;
+  unsignedInt "unsigned int" "unsigned int";
+
+  long "long long" "long long";
+  unsignedLong "unsigned long long" "unsigned long long";
+
+  integer "long long" "long long";
+
+  negativeInteger "long long" "long long";
+  nonPositiveInteger "long long" "long long";
+
+  positiveInteger "unsigned long long" "unsigned long long";
+  nonNegativeInteger "unsigned long long" "unsigned long long";
+
+  float float float;
+  double double double;
+  decimal double double;
+
+  string std::string;
+  normalizedString std::string;
+  token std::string;
+  Name std::string;
+  NMTOKEN std::string;
+  NCName std::string;
+  ID std::string;
+  IDREF std::string;
+  language std::string;
+  anyURI std::string;
+
+  NMTOKENS xml_schema::string_sequence;
+  IDREFS xml_schema::string_sequence;
+
+  QName xml_schema::qname;
+
+  base64Binary std::[auto|unique]_ptr<xml_schema::buffer>
+               std::[auto|unique]_ptr<xml_schema::buffer>;
+  hexBinary std::[auto|unique]_ptr<xml_schema::buffer>
+            std::[auto|unique]_ptr<xml_schema::buffer>;
+
+  date xml_schema::date;
+  dateTime xml_schema::date_time;
+  duration xml_schema::duration;
+  gDay xml_schema::gday;
+  gMonth xml_schema::gmonth;
+  gMonthDay xml_schema::gmonth_day;
+  gYear xml_schema::gyear;
+  gYearMonth xml_schema::gyear_month;
+  time xml_schema::time;
+}
+  
+ +

For more information about the mapping of the built-in XML Schema types + to C++ types refer to Chapter 6, "Built-In XML Schema Type + Parsers". The last predefined rule maps anything that wasn't + mapped by previous rules to void:

+ +
+namespace .*
+{
+  .* void void;
+}
+  
+ + +

When you provide your own type maps with the + --type-map option, they are evaluated first. This + allows you to selectively override any of the predefined rules. + Note also that if you change the mapping + of a built-in XML Schema type then it becomes your responsibility + to provide the corresponding parser skeleton and implementation + in the xml_schema namespace. You can include the + custom definitions into the generated header file using the + --hxx-prologue-* options.

+ +

4.3 Parser Implementations

+ +

With the knowledge from the previous section, we can proceed + with creating a type map that maps types in the people.xsd + schema to our object model classes in + people.hxx. In fact, we already have the beginning + of our type map file in people.map. Let's extend + it with the rest of the types:

+ +
+include "people.hxx";
+
+gender ::gender ::gender;
+person ::person;
+people ::people;
+  
+ +

There are a few things to note about this type map. We did not + provide the argument types for person and + people because the default constant reference is + exactly what we need. We also did not provide any mappings + for built-in XML Schema types string and + short because they are handled by the predefined + rules and we are happy with the result. Note also that + all C++ types are fully qualified. This is done to avoid + potential name conflicts in the generated code. Now we can + recompile our schema and move on to implementing the parsers:

+ +
+$ xsd cxx-parser --xml-parser expat --type-map people.map people.xsd
+  
+ +

Here is the implementation of our three parsers in full. One + way to save typing when implementing your own parsers is + to open the generated code and copy the signatures of parser + callbacks into your code. Or you could always auto generate the + sample implementations and fill them with your code.

+ + +
+#include "people-pskel.hxx"
+
+class gender_pimpl: public gender_pskel,
+                    public xml_schema::string_pimpl
+{
+public:
+  virtual ::gender
+  post_gender ()
+  {
+    return post_string () == "male" ? male : female;
+  }
+};
+
+class person_pimpl: public person_pskel
+{
+public:
+  virtual void
+  first_name (const std::string& f)
+  {
+    first_ = f;
+  }
+
+  virtual void
+  last_name (const std::string& l)
+  {
+    last_ = l;
+  }
+
+  virtual void
+  gender (::gender g)
+  {
+    gender_ = g;
+  }
+
+  virtual void
+  age (short a)
+  {
+    age_ = a;
+  }
+
+  virtual ::person
+  post_person ()
+  {
+    return ::person (first_, last_, gender_, age_);
+  }
+
+private:
+  std::string first_;
+  std::string last_;
+  ::gender gender_;
+  short age_;
+};
+
+class people_pimpl: public people_pskel
+{
+public:
+  virtual void
+  person (const ::person& p)
+  {
+    people_.push_back (p);
+  }
+
+  virtual ::people
+  post_people ()
+  {
+    ::people r;
+    r.swap (people_);
+    return r;
+  }
+
+private:
+  ::people people_;
+};
+  
+ +

This code fragment should look familiar by now. Just note that + all the post_*() callbacks now have return types instead + of void. Here is the implementation of the test + driver for this example:

+ +
+#include <iostream>
+
+using namespace std;
+
+int
+main (int argc, char* argv[])
+{
+  // Construct the parser.
+  //
+  xml_schema::short_pimpl short_p;
+  xml_schema::string_pimpl string_p;
+
+  gender_pimpl gender_p;
+  person_pimpl person_p;
+  people_pimpl people_p;
+
+  person_p.parsers (string_p, string_p, gender_p, short_p);
+  people_p.parsers (person_p);
+
+  // Parse the document to obtain the object model.
+  //
+  xml_schema::document doc_p (people_p, "people");
+
+  people_p.pre ();
+  doc_p.parse (argv[1]);
+  people ppl = people_p.post_people ();
+
+  // Print the object model.
+  //
+  for (people::iterator i (ppl.begin ()); i != ppl.end (); ++i)
+  {
+    cout << "first:  " << i->first () << endl
+         << "last:   " << i->last () << endl
+         << "gender: " << (i->gender () == male ? "male" : "female") << endl
+         << "age:    " << i->age () << endl
+         << endl;
+  }
+}
+  
+ +

The parser creation and assembly part is exactly the same as in + the previous chapter. The parsing part is a bit different: + post_people() now has a return value which is the + complete object model. We store it in the + ppl variable. The last bit of the code simply iterates + over the people vector and prints the information + for each person. We save the last two code fragments to + driver.cxx and proceed to compile and test + our new application:

+ + +
+$ c++ -I.../libxsd -c driver.cxx people-pskel.cxx
+$ c++ -o driver driver.o people-pskel.o -lexpat
+$ ./driver people.xml
+first:  John
+last:   Doe
+gender: male
+age:    32
+
+first:  Jane
+last:   Doe
+gender: female
+age:    28
+  
+ + + + + +

5 Mapping Configuration

+ +

The C++/Parser mapping has a number of configuration parameters that + determine the overall properties and behavior of the generated code. + Configuration parameters are specified with the XSD command line + options and include the C++ standard, the character type that is used + by the generated code, the underlying XML parser, whether the XML Schema + validation is performed in the generated code, and support for XML Schema + polymorphism. This chapter describes these configuration + parameters in more detail. For more ways to configure the generated + code refer to the + XSD + Compiler Command Line Manual. +

+ +

5.1 C++ Standard

+ +

The C++/Parser mapping provides support for ISO/IEC C++ 1998/2003 (C++98) + and ISO/IEC C++ 2011 (C++11). To select the C++ standard for the + generated code we use the --std XSD compiler command + line option. While the majority of the examples in this guide use + C++98, support for the new functionality and library components + introduced in C++11 are discussed throughout the document.

+ +

5.2 Character Type and Encoding

+ +

The C++/Parser mapping has built-in support for two character types: + char and wchar_t. You can select the + character type with the --char-type command line + option. The default character type is char. The + string-based built-in XML Schema types are returned as either + std::string or std::wstring depending + on the character type selected.

+ +

Another aspect of the mapping that depends on the character type + is character encoding. For the char character type + the default encoding is UTF-8. Other supported encodings are + ISO-8859-1, Xerces-C++ Local Code Page (LPC), as well as + custom encodings. You can select which encoding should be used + in the object model with the --char-encoding command + line option.

+ +

For the wchar_t character type the encoding is + automatically selected between UTF-16 and UTF-32/UCS-4 depending + on the size of the wchar_t type. On some platforms + (for example, Windows with Visual C++ and AIX with IBM XL C++) + wchar_t is 2 bytes long. For these platforms the + encoding is UTF-16. On other platforms wchar_t is 4 bytes + long and UTF-32/UCS-4 is used.

+ +

Note also that the character encoding that is used in the object model + is independent of the encodings used in input and output XML. In fact, + all three (object mode, input XML, and output XML) can have different + encodings.

+ +

5.3 Underlying XML Parser

+ +

The C++/Parser mapping can be used with either Xerces-C++ or Expat + as the underlying XML parser. You can select the XML parser with + the --xml-parser command line option. Valid values + for this option are xerces and expat. + The default XML parser is Xerces-C++.

+ +

The generated code is identical for both parsers except for the + xml_schema::document class in which some of the + parse() functions are parser-specific as described + in Chapter 7, "Document Parser and Error Handling".

+ + +

5.4 XML Schema Validation

+ +

The C++/Parser mapping provides support for validating a + commonly-used subset of W3C XML Schema in the generated code. + For the list of supported XML Schema constructs refer to + Appendix A, "Supported XML Schema Constructs".

+ +

By default validation in the generated code is disabled if + the underlying XML parser is validating (Xerces-C++) and + enabled otherwise (Expat). See Section 5.3, + "Underlying XML Parser" for more information about + the underlying XML parser. You can override the default + behavior with the --generate-validation + and --suppress-validation command line options.

+ + +

5.5 Support for Polymorphism

+ +

By default the XSD compiler generates non-polymorphic code. If your + vocabulary uses XML Schema polymorphism in the form of xsi:type + and/or substitution groups, then you will need to compile your schemas + with the --generate-polymorphic option to produce + polymorphism-aware code as well as pass true as the last + argument to the xml_schema::document's constructors.

+ +

When using the polymorphism-aware generated code, you can specify + several parsers for a single element by passing a parser map + instead of an individual parser to the parser connection function + for the element. One of the parsers will then be looked up and used + depending on the xsi:type attribute value or an element + name from a substitution group. Consider the following schema as an + example:

+ +
+<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
+
+  <xs:complexType name="person">
+    <xs:sequence>
+      <xs:element name="name" type="xs:string"/>
+    </xs:sequence>
+  </xs:complexType>
+
+  <!-- substitution group root -->
+  <xs:element name="person" type="person"/>
+
+  <xs:complexType name="superman">
+    <xs:complexContent>
+      <xs:extension base="person">
+        <xs:attribute name="can-fly" type="xs:boolean"/>
+      </xs:extension>
+    </xs:complexContent>
+  </xs:complexType>
+
+  <xs:element name="superman"
+              type="superman"
+              substitutionGroup="person"/>
+
+  <xs:complexType name="batman">
+    <xs:complexContent>
+      <xs:extension base="superman">
+        <xs:attribute name="wing-span" type="xs:unsignedInt"/>
+      </xs:extension>
+    </xs:complexContent>
+  </xs:complexType>
+
+  <xs:element name="batman"
+              type="batman"
+              substitutionGroup="superman"/>
+
+  <xs:complexType name="supermen">
+    <xs:sequence>
+      <xs:element ref="person" maxOccurs="unbounded"/>
+    </xs:sequence>
+  </xs:complexType>
+
+  <xs:element name="supermen" type="supermen"/>
+
+</xs:schema>
+  
+ +

Conforming XML documents can use the superman + and batman types in place of the person + type either by specifying the type with the xsi:type + attributes or by using the elements from the substitution + group, for instance:

+ + +
+<supermen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+
+  <person>
+    <name>John Doe</name>
+  </person>
+
+  <superman can-fly="false">
+    <name>James "007" Bond</name>
+  </superman>
+
+  <superman can-fly="true" wing-span="10" xsi:type="batman">
+    <name>Bruce Wayne</name>
+  </superman>
+
+</supermen>
+  
+ +

To print the data stored in such XML documents we can implement + the parsers as follows:

+ +
+class person_pimpl: public virtual person_pskel
+{
+public:
+  virtual void
+  pre ()
+  {
+    cout << "starting to parse person" << endl;
+  }
+
+  virtual void
+  name (const std::string& v)
+  {
+    cout << "name: " << v << endl;
+  }
+
+  virtual void
+  post_person ()
+  {
+    cout << "finished parsing person" << endl;
+  }
+};
+
+class superman_pimpl: public virtual superman_pskel,
+                      public person_pimpl
+{
+public:
+  virtual void
+  pre ()
+  {
+    cout << "starting to parse superman" << endl;
+  }
+
+  virtual void
+  can_fly (bool v)
+  {
+    cout << "can-fly: " << v << endl;
+  }
+
+  virtual void
+  post_person ()
+  {
+    post_superman ();
+  }
+
+  virtual void
+  post_superman ()
+  {
+    cout << "finished parsing superman" << endl
+  }
+};
+
+class batman_pimpl: public virtual batman_pskel,
+                    public superman_pimpl
+{
+public:
+  virtual void
+  pre ()
+  {
+    cout << "starting to parse batman" << endl;
+  }
+
+  virtual void
+  wing_span (unsigned int v)
+  {
+    cout << "wing-span: " << v << endl;
+  }
+
+  virtual void
+  post_superman ()
+  {
+    post_batman ();
+  }
+
+  virtual void
+  post_batman ()
+  {
+    cout << "finished parsing batman" << endl;
+  }
+};
+  
+ +

Note that because the derived type parsers (superman_pskel + and batman_pskel) are called via the person_pskel + interface, we have to override the post_person() + virtual function in superman_pimpl to call + post_superman() and the post_superman() + virtual function in batman_pimpl to call + post_batman().

+ +

The following code fragment shows how to connect the parsers together. + Notice that for the person element in the supermen_p + parser we specify a parser map instead of a specific parser and we pass + true as the last argument to the document parser constructor + to indicate that we are parsing potentially-polymorphic XML documents:

+ +
+int
+main (int argc, char* argv[])
+{
+  // Construct the parser.
+  //
+  xml_schema::string_pimpl string_p;
+  xml_schema::boolean_pimpl boolean_p;
+  xml_schema::unsigned_int_pimpl unsigned_int_p;
+
+  person_pimpl person_p;
+  superman_pimpl superman_p;
+  batman_pimpl batman_p;
+
+  xml_schema::parser_map_impl person_map;
+  supermen_pimpl supermen_p;
+
+  person_p.parsers (string_p);
+  superman_p.parsers (string_p, boolean_p);
+  batman_p.parsers (string_p, boolean_p, unsigned_int_p);
+
+  // Here we are specifying a parser map which containes several
+  // parsers that can be used to parse the person element.
+  //
+  person_map.insert (person_p);
+  person_map.insert (superman_p);
+  person_map.insert (batman_p);
+
+  supermen_p.person_parser (person_map);
+
+  // Parse the XML document. The last argument to the document's
+  // constructor indicates that we are parsing polymorphic XML
+  // documents.
+  //
+  xml_schema::document doc_p (supermen_p, "supermen", true);
+
+  supermen_p.pre ();
+  doc_p.parse (argv[1]);
+  supermen_p.post_supermen ();
+}
+  
+ +

When polymorphism-aware code is generated, each element's + *_parser() function is overloaded to also accept + an object of the xml_schema::parser_map type. + For example, the supermen_pskel class from the + above example looks like this:

+ +
+class supermen_pskel: public xml_schema::parser_complex_content
+{
+public:
+
+  ...
+
+  // Parser construction API.
+  //
+  void
+  parsers (person_pskel&);
+
+  // Individual element parsers.
+  //
+  void
+  person_parser (person_pskel&);
+
+  void
+  person_parser (const xml_schema::parser_map&);
+
+  ...
+};
+  
+ +

Note that you can specify both the individual (static) parser and + the parser map. The individual parser will be used when the static + element type and the dynamic type of the object being parsed are + the same. This is the case, for example, when there is no + xsi:type attribute and the element hasn't been + substituted. Because the individual parser for an element is + cached and no map lookup is necessary, it makes sense to specify + both the individual parser and the parser map when most of the + objects being parsed are of the static type and optimal + performance is important. The following code fragment shows + how to change the above example to set both the individual + parser and the parser map:

+ +
+int
+main (int argc, char* argv[])
+{
+  ...
+
+  person_map.insert (superman_p);
+  person_map.insert (batman_p);
+
+  supermen_p.person_parser (person_p);
+  supermen_p.person_parser (person_map);
+
+  ...
+}
+  
+ + +

The xml_schema::parser_map interface and the + xml_schema::parser_map_impl default implementation + are presented below:

+ +
+namespace xml_schema
+{
+  class parser_map
+  {
+  public:
+    virtual parser_base*
+    find (const ro_string* type) const = 0;
+  };
+
+  class parser_map_impl: public parser_map
+  {
+  public:
+    void
+    insert (parser_base&);
+
+    virtual parser_base*
+    find (const ro_string* type) const;
+
+  private:
+    parser_map_impl (const parser_map_impl&);
+
+    parser_map_impl&
+    operator= (const parser_map_impl&);
+
+    ...
+  };
+}
+  
+ +

The type argument in the find() virtual + function is the type name and namespace from the xsi:type attribute + (the namespace prefix is resolved to the actual XML namespace) + or the type of an element from the substitution group in the form + "<name> <namespace>" with the space and the + namespace part absent if the type does not have a namespace. + You can obtain a parser's dynamic type in the same format + using the _dynamic_type() function. The static + type can be obtained by calling the static _static_type() + function, for example person_pskel::_static_type(). + Both functions return a C string (const char* or + const wchar_t*, depending on the character type + used) which is valid for as long as the application is running. + The following example shows how we can implement our own parser + map using std::map:

+ + +
+#include <map>
+#include <string>
+
+class parser_map: public xml_schema::parser_map
+{
+public:
+ void
+ insert (xml_schema::parser_base& p)
+ {
+   map_[p._dynamic_type ()] = &p;
+ }
+
+ virtual xml_schema::parser_base*
+ find (const xml_schema::ro_string* type) const
+ {
+   map::const_iterator i = map_.find (type);
+   return i != map_.end () ? i->second : 0;
+ }
+
+private:
+  typedef std::map<std::string, xml_schema::parser_base*> map;
+  map map_;
+};
+  
+ +

Most of code presented in this section is taken from the + polymorphism example which can be found in the + examples/cxx/parser/ directory of the XSD distribution. + Handling of xsi:type and substitution groups when used + on root elements requires a number of special actions as shown in + the polyroot example.

+ + + + + +

6 Built-In XML Schema Type Parsers

+ +

The XSD runtime provides parser implementations for all built-in + XML Schema types as summarized in the following table. Declarations + for these types are automatically included into each generated + header file. As a result you don't need to include any headers + to gain access to these parser implementations. Note that some + parsers return either std::string or + std::wstring depending on the character type selected.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
XML Schema typeParser implementation in the xml_schema namespaceParser return type
anyType and anySimpleType types
anyTypeany_type_pimplvoid
anySimpleTypeany_simple_type_pimplvoid
fixed-length integral types
bytebyte_pimplsigned char
unsignedByteunsigned_byte_pimplunsigned char
shortshort_pimplshort
unsignedShortunsigned_short_pimplunsigned short
intint_pimplint
unsignedIntunsigned_int_pimplunsigned int
longlong_pimpllong long
unsignedLongunsigned_long_pimplunsigned long long
arbitrary-length integral types
integerinteger_pimpllong long
nonPositiveIntegernon_positive_integer_pimpllong long
nonNegativeIntegernon_negative_integer_pimplunsigned long long
positiveIntegerpositive_integer_pimplunsigned long long
negativeIntegernegative_integer_pimpllong long
boolean types
booleanboolean_pimplbool
fixed-precision floating-point types
floatfloat_pimplfloat
doubledouble_pimpldouble
arbitrary-precision floating-point types
decimaldecimal_pimpldouble
string-based types
stringstring_pimplstd::string or std::wstring
normalizedStringnormalized_string_pimplstd::string or std::wstring
tokentoken_pimplstd::string or std::wstring
Namename_pimplstd::string or std::wstring
NMTOKENnmtoken_pimplstd::string or std::wstring
NCNamencname_pimplstd::string or std::wstring
languagelanguage_pimplstd::string or std::wstring
qualified name
QNameqname_pimplxml_schema::qname
Section 6.1, + "QName Parser"
ID/IDREF types
IDid_pimplstd::string or std::wstring
IDREFidref_pimplstd::string or std::wstring
list types
NMTOKENSnmtokens_pimplxml_schema::string_sequence
Section + 6.2, "NMTOKENS and IDREFS Parsers"
IDREFSidrefs_pimplxml_schema::string_sequence
Section + 6.2, "NMTOKENS and IDREFS Parsers"
URI types
anyURIuri_pimplstd::string or std::wstring
binary types
base64Binarybase64_binary_pimplstd::[auto|unique]_ptr< xml_schema::buffer>
+ Section 6.3, "base64Binary and + hexBinary Parsers"
hexBinaryhex_binary_pimplstd::[auto|unique]_ptr< xml_schema::buffer>
+ Section 6.3, "base64Binary and + hexBinary Parsers"
date/time types
datedate_pimplxml_schema::date
Section 6.5, + "date Parser"
dateTimedate_time_pimplxml_schema::date_time
Section 6.6, + "dateTime Parser"
durationduration_pimplxml_schema::duration
Section 6.7, + "duration Parser"
gDaygday_pimplxml_schema::gday
Section 6.8, + "gDay Parser"
gMonthgmonth_pimplxml_schema::gmonth
Section 6.9, + "gMonth Parser"
gMonthDaygmonth_day_pimplxml_schema::gmonth_day
Section 6.10, + "gMonthDay Parser"
gYeargyear_pimplxml_schema::gyear
Section 6.11, + "gYear Parser"
gYearMonthgyear_month_pimplxml_schema::gyear_month
Section + 6.12, "gYearMonth Parser"
timetime_pimplxml_schema::time
Section 6.13, + "time Parser"
+ +

6.1 QName Parser

+ +

The return type of the qname_pimpl parser implementation + is xml_schema::qname which represents an XML qualified + name. Its interface is presented below. + Note that the std::string type in the interface becomes + std::wstring if the selected character type is + wchar_t.

+ +
+namespace xml_schema
+{
+  class qname
+  {
+  public:
+    explicit
+    qname (const std::string& name);
+    qname (const std::string& prefix, const std::string& name);
+
+    const std::string&
+    prefix () const;
+
+    void
+    prefix (const std::string&);
+
+    const std::string&
+    name () const;
+
+    void
+    name (const std::string&);
+  };
+
+  bool
+  operator== (const qname&, const qname&);
+
+  bool
+  operator!= (const qname&, const qname&);
+}
+  
+ + +

6.2 NMTOKENS and IDREFS Parsers

+ +

The return type of the nmtokens_pimpl and + idrefs_pimpl parser implementations is + xml_schema::string_sequence which represents a + sequence of strings. Its interface is presented below. + Note that the std::string type in the interface becomes + std::wstring if the selected character type is + wchar_t.

+ +
+namespace xml_schema
+{
+  class string_sequence: public std::vector<std::string>
+  {
+  public:
+    string_sequence ();
+
+    explicit
+    string_sequence (std::vector<std::string>::size_type n,
+                     const std::string& x = std::string ());
+
+    template <typename I>
+    string_sequence (const I& begin, const I& end);
+  };
+
+  bool
+  operator== (const string_sequence&, const string_sequence&);
+
+  bool
+  operator!= (const string_sequence&, const string_sequence&);
+}
+  
+ + +

6.3 base64Binary and hexBinary Parsers

+ +

The return type of the base64_binary_pimpl and + hex_binary_pimpl parser implementations is either + std::auto_ptr<xml_schema::buffer> (C++98) or + std::unique_ptr<xml_schema::buffer> (C++11), + depending on the C++ standard selected (--std XSD + compiler option). The xml_schema::buffer type + represents a binary buffer and its interface is presented below.

+ +
+namespace xml_schema
+{
+  class buffer
+  {
+  public:
+    typedef std::size_t size_t;
+
+    class bounds {}; // Out of bounds exception.
+
+  public:
+    explicit
+    buffer (size_t size = 0);
+    buffer (size_t size, size_t capacity);
+    buffer (const void* data, size_t size);
+    buffer (const void* data, size_t size, size_t capacity);
+    buffer (void* data,
+            size_t size,
+            size_t capacity,
+            bool assume_ownership);
+
+  public:
+    buffer (const buffer&);
+
+    buffer&
+    operator= (const buffer&);
+
+    void
+    swap (buffer&);
+
+  public:
+    size_t
+    capacity () const;
+
+    bool
+    capacity (size_t);
+
+  public:
+    size_t
+    size () const;
+
+    bool
+    size (size_t);
+
+  public:
+    const char*
+    data () const;
+
+    char*
+    data ();
+
+    const char*
+    begin () const;
+
+    char*
+    begin ();
+
+    const char*
+    end () const;
+
+    char*
+    end ();
+  };
+
+  bool
+  operator== (const buffer&, const buffer&);
+
+  bool
+  operator!= (const buffer&, const buffer&);
+}
+  
+ +

If the assume_ownership argument to the constructor + is true, the instance assumes the ownership of the + memory block pointed to by the data argument and will + eventually release it by calling operator delete(). The + capacity() and size() modifier functions + return true if the underlying buffer has moved. +

+ +

The bounds exception is thrown if the constructor + arguments violate the (size <= capacity) + constraint.

+ + +

6.4 Time Zone Representation

+ +

The date, dateTime, gDay, + gMonth, gMonthDay, gYear, + gYearMonth, and time XML Schema built-in + types all include an optional time zone component. The following + xml_schema::time_zone base class is used to represent + this information:

+ +
+namespace xml_schema
+{
+  class time_zone
+  {
+  public:
+    time_zone ();
+    time_zone (short hours, short minutes);
+
+    bool
+    zone_present () const;
+
+    void
+    zone_reset ();
+
+    short
+    zone_hours () const;
+
+    void
+    zone_hours (short);
+
+    short
+    zone_minutes () const;
+
+    void
+    zone_minutes (short);
+  };
+
+  bool
+  operator== (const time_zone&, const time_zone&);
+
+  bool
+  operator!= (const time_zone&, const time_zone&);
+}
+  
+ +

The zone_present() accessor function returns true + if the time zone is specified. The zone_reset() modifier + function resets the time zone object to the not specified + state. If the time zone offset is negative then both hours and + minutes components are represented as negative integers.

+ + +

6.5 date Parser

+ +

The return type of the date_pimpl parser implementation + is xml_schema::date which represents a year, a day, and a month + with an optional time zone. Its interface is presented below. + For more information on the base xml_schema::time_zone + class refer to Section 6.4, "Time Zone + Representation".

+ +
+namespace xml_schema
+{
+  class date
+  {
+  public:
+    date (int year, unsigned short month, unsigned short day);
+    date (int year, unsigned short month, unsigned short day,
+          short zone_hours, short zone_minutes);
+
+    int
+    year () const;
+
+    void
+    year (int);
+
+    unsigned short
+    month () const;
+
+    void
+    month (unsigned short);
+
+    unsigned short
+    day () const;
+
+    void
+    day (unsigned short);
+  };
+
+  bool
+  operator== (const date&, const date&);
+
+  bool
+  operator!= (const date&, const date&);
+}
+  
+ +

6.6 dateTime Parser

+ +

The return type of the date_time_pimpl parser implementation + is xml_schema::date_time which represents a year, a month, a day, + hours, minutes, and seconds with an optional time zone. Its interface + is presented below. + For more information on the base xml_schema::time_zone + class refer to Section 6.4, "Time Zone + Representation".

+ +
+namespace xml_schema
+{
+  class date_time
+  {
+  public:
+    date_time (int year, unsigned short month, unsigned short day,
+               unsigned short hours, unsigned short minutes,
+               double seconds);
+
+    date_time (int year, unsigned short month, unsigned short day,
+               unsigned short hours, unsigned short minutes,
+               double seconds, short zone_hours, short zone_minutes);
+
+    int
+    year () const;
+
+    void
+    year (int);
+
+    unsigned short
+    month () const;
+
+    void
+    month (unsigned short);
+
+    unsigned short
+    day () const;
+
+    void
+    day (unsigned short);
+
+    unsigned short
+    hours () const;
+
+    void
+    hours (unsigned short);
+
+    unsigned short
+    minutes () const;
+
+    void
+    minutes (unsigned short);
+
+    double
+    seconds () const;
+
+    void
+    seconds (double);
+  };
+
+  bool
+  operator== (const date_time&, const date_time&);
+
+  bool
+  operator!= (const date_time&, const date_time&);
+}
+  
+ +

6.7 duration Parser

+ +

The return type of the duration_pimpl parser implementation + is xml_schema::duration which represents a potentially + negative duration in the form of years, months, days, hours, minutes, + and seconds. Its interface is presented below.

+ +
+namespace xml_schema
+{
+  class duration
+  {
+  public:
+    duration (bool negative,
+              unsigned int years, unsigned int months, unsigned int days,
+              unsigned int hours, unsigned int minutes, double seconds);
+
+    bool
+    negative () const;
+
+    void
+    negative (bool);
+
+    unsigned int
+    years () const;
+
+    void
+    years (unsigned int);
+
+    unsigned int
+    months () const;
+
+    void
+    months (unsigned int);
+
+    unsigned int
+    days () const;
+
+    void
+    days (unsigned int);
+
+    unsigned int
+    hours () const;
+
+    void
+    hours (unsigned int);
+
+    unsigned int
+    minutes () const;
+
+    void
+    minutes (unsigned int);
+
+    double
+    seconds () const;
+
+    void
+    seconds (double);
+  };
+
+  bool
+  operator== (const duration&, const duration&);
+
+  bool
+  operator!= (const duration&, const duration&);
+}
+  
+ + +

6.8 gDay Parser

+ +

The return type of the gday_pimpl parser implementation + is xml_schema::gday which represents a day of the month with + an optional time zone. Its interface is presented below. + For more information on the base xml_schema::time_zone + class refer to Section 6.4, "Time Zone + Representation".

+ +
+namespace xml_schema
+{
+  class gday
+  {
+  public:
+    explicit
+    gday (unsigned short day);
+    gday (unsigned short day, short zone_hours, short zone_minutes);
+
+    unsigned short
+    day () const;
+
+    void
+    day (unsigned short);
+  };
+
+  bool
+  operator== (const gday&, const gday&);
+
+  bool
+  operator!= (const gday&, const gday&);
+}
+  
+ +

6.9 gMonth Parser

+ +

The return type of the gmonth_pimpl parser implementation + is xml_schema::gmonth which represents a month of the year + with an optional time zone. Its interface is presented below. + For more information on the base xml_schema::time_zone + class refer to Section 6.4, "Time Zone + Representation".

+ +
+namespace xml_schema
+{
+  class gmonth
+  {
+  public:
+    explicit
+    gmonth (unsigned short month);
+    gmonth (unsigned short month, short zone_hours, short zone_minutes);
+
+    unsigned short
+    month () const;
+
+    void
+    month (unsigned short);
+  };
+
+  bool
+  operator== (const gmonth&, const gmonth&);
+
+  bool
+  operator!= (const gmonth&, const gmonth&);
+}
+  
+ +

6.10 gMonthDay Parser

+ +

The return type of the gmonth_day_pimpl parser implementation + is xml_schema::gmonth_day which represents a day and a month + of the year with an optional time zone. Its interface is presented below. + For more information on the base xml_schema::time_zone + class refer to Section 6.4, "Time Zone + Representation".

+ +
+namespace xml_schema
+{
+  class gmonth_day
+  {
+  public:
+    gmonth_day (unsigned short month, unsigned short day);
+    gmonth_day (unsigned short month, unsigned short day,
+                short zone_hours, short zone_minutes);
+
+    unsigned short
+    month () const;
+
+    void
+    month (unsigned short);
+
+    unsigned short
+    day () const;
+
+    void
+    day (unsigned short);
+  };
+
+  bool
+  operator== (const gmonth_day&, const gmonth_day&);
+
+  bool
+  operator!= (const gmonth_day&, const gmonth_day&);
+}
+  
+ +

6.11 gYear Parser

+ +

The return type of the gyear_pimpl parser implementation + is xml_schema::gyear which represents a year with + an optional time zone. Its interface is presented below. + For more information on the base xml_schema::time_zone + class refer to Section 6.4, "Time Zone + Representation".

+ +
+namespace xml_schema
+{
+  class gyear
+  {
+  public:
+    explicit
+    gyear (int year);
+    gyear (int year, short zone_hours, short zone_minutes);
+
+    int
+    year () const;
+
+    void
+    year (int);
+  };
+
+  bool
+  operator== (const gyear&, const gyear&);
+
+  bool
+  operator!= (const gyear&, const gyear&);
+}
+  
+ +

6.12 gYearMonth Parser

+ +

The return type of the gyear_month_pimpl parser implementation + is xml_schema::gyear_month which represents a year and a month + with an optional time zone. Its interface is presented below. + For more information on the base xml_schema::time_zone + class refer to Section 6.4, "Time Zone + Representation".

+ +
+namespace xml_schema
+{
+  class gyear_month
+  {
+  public:
+    gyear_month (int year, unsigned short month);
+    gyear_month (int year, unsigned short month,
+                 short zone_hours, short zone_minutes);
+
+    int
+    year () const;
+
+    void
+    year (int);
+
+    unsigned short
+    month () const;
+
+    void
+    month (unsigned short);
+  };
+
+  bool
+  operator== (const gyear_month&, const gyear_month&);
+
+  bool
+  operator!= (const gyear_month&, const gyear_month&);
+}
+  
+ + +

6.13 time Parser

+ +

The return type of the time_pimpl parser implementation + is xml_schema::time which represents hours, minutes, + and seconds with an optional time zone. Its interface is presented below. + For more information on the base xml_schema::time_zone + class refer to Section 6.4, "Time Zone + Representation".

+ +
+namespace xml_schema
+{
+  class time
+  {
+  public:
+    time (unsigned short hours, unsigned short minutes, double seconds);
+    time (unsigned short hours, unsigned short minutes, double seconds,
+          short zone_hours, short zone_minutes);
+
+    unsigned short
+    hours () const;
+
+    void
+    hours (unsigned short);
+
+    unsigned short
+    minutes () const;
+
+    void
+    minutes (unsigned short);
+
+    double
+    seconds () const;
+
+    void
+    seconds (double);
+  };
+
+  bool
+  operator== (const time&, const time&);
+
+  bool
+  operator!= (const time&, const time&);
+}
+  
+ + + + + +

7 Document Parser and Error Handling

+ +

In this chapter we will discuss the xml_schema::document + type as well as the error handling mechanisms provided by the mapping + in more detail. As mentioned in Section 3.4, + "Connecting the Parsers Together", the interface of + xml_schema::document depends on the underlying XML + parser selected (Section 5.3, "Underlying XML + Parser"). The following sections describe the + document type interface for Xerces-C++ and + Expat as underlying parsers.

+ +

7.1 Xerces-C++ Document Parser

+ +

When Xerces-C++ is used as the underlying XML parser, the + document type has the following interface. Note that + if the character type is wchar_t, then the string type + in the interface becomes std::wstring + (see Section 5.2, "Character Type and Encoding").

+ +
+namespace xml_schema
+{
+  class parser_base;
+  class error_handler;
+
+  class flags
+  {
+  public:
+    // Do not validate XML documents with the Xerces-C++ validator.
+    //
+    static const unsigned long dont_validate;
+
+    // Do not initialize the Xerces-C++ runtime.
+    //
+    static const unsigned long dont_initialize;
+
+    // Disable handling of subsequent imports for the same namespace
+    // in Xerces-C++ 3.1.0 and later.
+    //
+    static const unsigned long no_multiple_imports;
+  };
+
+  class properties
+  {
+  public:
+    // Add a location for a schema with a target namespace.
+    //
+    void
+    schema_location (const std::string& namespace_,
+                     const std::string& location);
+
+    // Add a location for a schema without a target namespace.
+    //
+    void
+    no_namespace_schema_location (const std::string& location);
+  };
+
+  class document
+  {
+  public:
+    document (parser_base& root,
+              const std::string& root_element_name,
+	      bool polymorphic = false);
+
+    document (parser_base& root,
+              const std::string& root_element_namespace,
+              const std::string& root_element_name,
+	      bool polymorphic = false);
+
+  public:
+    // Parse URI or a local file.
+    //
+    void
+    parse (const std::string& uri,
+           flags = 0,
+           const properties& = properties ());
+
+    // Parse URI or a local file with a user-provided error_handler
+    // object.
+    //
+    void
+    parse (const std::string& uri,
+           error_handler&,
+           flags = 0,
+           const properties& = properties ());
+
+    // Parse URI or a local file with a user-provided ErrorHandler
+    // object. Note that you must initialize the Xerces-C++ runtime
+    // before calling this function.
+    //
+    void
+    parse (const std::string& uri,
+           xercesc::ErrorHandler&,
+           flags = 0,
+           const properties& = properties ());
+
+    // Parse URI or a local file using a user-provided SAX2XMLReader
+    // object. Note that you must initialize the Xerces-C++ runtime
+    // before calling this function.
+    //
+    void
+    parse (const std::string& uri,
+           xercesc::SAX2XMLReader&,
+           flags = 0,
+           const properties& = properties ());
+
+  public:
+    // Parse std::istream.
+    //
+    void
+    parse (std::istream&,
+           flags = 0,
+           const properties& = properties ());
+
+    // Parse std::istream with a user-provided error_handler object.
+    //
+    void
+    parse (std::istream&,
+           error_handler&,
+           flags = 0,
+           const properties& = properties ());
+
+    // Parse std::istream with a user-provided ErrorHandler object.
+    // Note that you must initialize the Xerces-C++ runtime before
+    // calling this function.
+    //
+    void
+    parse (std::istream&,
+           xercesc::ErrorHandler&,
+           flags = 0,
+           const properties& = properties ());
+
+    // Parse std::istream using a user-provided SAX2XMLReader object.
+    // Note that you must initialize the Xerces-C++ runtime before
+    // calling this function.
+    //
+    void
+    parse (std::istream&,
+           xercesc::SAX2XMLReader&,
+           flags = 0,
+           const properties& = properties ());
+
+  public:
+    // Parse std::istream with a system id.
+    //
+    void
+    parse (std::istream&,
+           const std::string& system_id,
+           flags = 0,
+           const properties& = properties ());
+
+    // Parse std::istream with a system id and a user-provided
+    // error_handler object.
+    //
+    void
+    parse (std::istream&,
+           const std::string& system_id,
+           error_handler&,
+           flags = 0,
+           const properties& = properties ());
+
+    // Parse std::istream with a system id and a user-provided
+    // ErrorHandler object. Note that you must initialize the
+    // Xerces-C++ runtime before calling this function.
+    //
+    void
+    parse (std::istream&,
+           const std::string& system_id,
+           xercesc::ErrorHandler&,
+           flags = 0,
+           const properties& = properties ());
+
+    // Parse std::istream with a system id using a user-provided
+    // SAX2XMLReader object. Note that you must initialize the
+    // Xerces-C++ runtime before calling this function.
+    //
+    void
+    parse (std::istream&,
+           const std::string& system_id,
+           xercesc::SAX2XMLReader&,
+           flags = 0,
+           const properties& = properties ());
+
+  public:
+    // Parse std::istream with system and public ids.
+    //
+    void
+    parse (std::istream&,
+           const std::string& system_id,
+           const std::string& public_id,
+           flags = 0,
+           const properties& = properties ());
+
+    // Parse std::istream with system and public ids and a user-provided
+    // error_handler object.
+    //
+    void
+    parse (std::istream&,
+           const std::string& system_id,
+           const std::string& public_id,
+           error_handler&,
+           flags = 0,
+           const properties& = properties ());
+
+    // Parse std::istream with system and public ids and a user-provided
+    // ErrorHandler object. Note that you must initialize the Xerces-C++
+    // runtime before calling this function.
+    //
+    void
+    parse (std::istream&,
+           const std::string& system_id,
+           const std::string& public_id,
+           xercesc::ErrorHandler&,
+           flags = 0,
+           const properties& = properties ());
+
+    // Parse std::istream with system and public ids using a user-
+    // provided SAX2XMLReader object. Note that you must initialize
+    // the Xerces-C++ runtime before calling this function.
+    //
+    void
+    parse (std::istream&,
+           const std::string& system_id,
+           const std::string& public_id,
+           xercesc::SAX2XMLReader&,
+           flags = 0,
+           const properties& = properties ());
+
+  public:
+    // Parse InputSource. Note that you must initialize the Xerces-C++
+    // runtime before calling this function.
+    //
+    void
+    parse (const xercesc::InputSource&,
+           flags = 0,
+           const properties& = properties ());
+
+    // Parse InputSource with a user-provided error_handler object.
+    // Note that you must initialize the Xerces-C++ runtime before
+    // calling this function.
+    //
+    void
+    parse (const xercesc::InputSource&,
+           error_handler&,
+           flags = 0,
+           const properties& = properties ());
+
+    // Parse InputSource with a user-provided ErrorHandler object.
+    // Note that you must initialize the Xerces-C++ runtime before
+    // calling this function.
+    //
+    void
+    parse (const xercesc::InputSource&,
+           xercesc::ErrorHandler&,
+           flags = 0,
+           const properties& = properties ());
+
+    // Parse InputSource using a user-provided SAX2XMLReader object.
+    // Note that you must initialize the Xerces-C++ runtime before
+    // calling this function.
+    //
+    void
+    parse (const xercesc::InputSource&,
+           xercesc::SAX2XMLReader&,
+           flags = 0,
+           const properties& = properties ());
+  };
+}
+  
+ +

The document class is a root parser for + the vocabulary. The first argument to its constructors is the + parser for the type of the root element. The parser_base + class is the base type for all parser skeletons. The second and + third arguments to the document's constructors are + the root element's name and namespace. The last argument, + polymorphic, specifies whether the XML documents + being parsed use polymorphism. For more information on support + for XML Schema polymorphism in the C++/Parser mapping refer + to Section 5.5, "Support for Polymorphism".

+ +

The rest of the document interface consists of overloaded + parse() functions. The last two arguments in each of these + functions are flags and properties. The + flags argument allows you to modify the default behavior + of the parsing functions. The properties argument allows + you to override the schema location attributes specified in XML + documents. Note that the schema location paths are relative to an + XML document unless they are complete URIs. For example if you want + to use a local schema file then you will need to use a URI in the + form file:///absolute/path/to/your/schema.

+ +

A number of overloaded parse() functions have the + system_id and public_id arguments. The + system id is a system identifier of the resources being + parsed (for example, URI or a full file path). The public id is a + public identifier of the resource (for example, an + application-specific name or a relative file path). The system id + is used to resolve relative paths (for example, schema paths). In + diagnostics messages the public id is used if it is available. + Otherwise the system id is used.

+ +

The error handling mechanisms employed by the document + parser are described in Section 7.3, "Error + Handling".

+ +

7.2 Expat Document Parser

+ +

When Expat is used as the underlying XML parser, the + document type has the following interface. Note that + if the character type is wchar_t, then the string type + in the interface becomes std::wstring + (see Section 5.2, "Character Type and Encoding").

+ +
+namespace xml_schema
+{
+  class parser_base;
+  class error_handler;
+
+  class document
+  {
+  public:
+    document (parser_base&,
+              const std::string& root_element_name,
+              bool polymorphic = false);
+
+    document (parser_base&,
+              const std::string& root_element_namespace,
+              const std::string& root_element_name,
+              bool polymorphic = false);
+
+  public:
+    // Parse a local file. The file is accessed with std::ifstream
+    // in binary mode. The std::ios_base::failure exception is used
+    // to report io errors (badbit and failbit).
+    void
+    parse (const std::string& file);
+
+    // Parse a local file with a user-provided error_handler
+    // object. The file is accessed with std::ifstream in binary
+    // mode. The std::ios_base::failure exception is used to report
+    // io errors (badbit and failbit).
+    //
+    void
+    parse (const std::string& file, error_handler&);
+
+  public:
+    // Parse std::istream.
+    //
+    void
+    parse (std::istream&);
+
+    // Parse std::istream with a user-provided error_handler object.
+    //
+    void
+    parse (std::istream&, error_handler&);
+
+    // Parse std::istream with a system id.
+    //
+    void
+    parse (std::istream&, const std::string& system_id);
+
+    // Parse std::istream with a system id and a user-provided
+    // error_handler object.
+    //
+    void
+    parse (std::istream&,
+           const std::string& system_id,
+           error_handler&);
+
+    // Parse std::istream with system and public ids.
+    //
+    void
+    parse (std::istream&,
+           const std::string& system_id,
+           const std::string& public_id);
+
+    // Parse std::istream with system and public ids and a user-provided
+    // error_handler object.
+    //
+    void
+    parse (std::istream&,
+           const std::string& system_id,
+           const std::string& public_id,
+           error_handler&);
+
+  public:
+    // Parse a chunk of input. You can call these functions multiple
+    // times with the last call having the last argument true.
+    //
+    void
+    parse (const void* data, std::size_t size, bool last);
+
+    void
+    parse (const void* data, std::size_t size, bool last,
+           error_handler&);
+
+    void
+    parse (const void* data, std::size_t size, bool last,
+           const std::string& system_id);
+
+    void
+    parse (const void* data, std::size_t size, bool last,
+           const std::string& system_id,
+           error_handler&);
+
+    void
+    parse (const void* data, std::size_t size, bool last,
+           const std::string& system_id,
+           const std::string& public_id);
+
+    void
+    parse (const void* data, std::size_t size, bool last,
+           const std::string& system_id,
+           const std::string& public_id,
+           error_handler&);
+
+  public:
+    // Low-level Expat-specific parsing API.
+    //
+    void
+    parse_begin (XML_Parser);
+
+    void
+    parse_begin (XML_Parser, const std::string& public_id);
+
+    void
+    parse_begin (XML_Parser, error_handler&);
+
+    void
+    parse_begin (XML_Parser,
+                 const std::string& public_id,
+                 error_handler&);
+    void
+    parse_end ();
+  };
+}
+  
+ +

The document class is a root parser for + the vocabulary. The first argument to its constructors is the + parser for the type of the root element. The parser_base + class is the base type for all parser skeletons. The second and + third arguments to the document's constructors are + the root element's name and namespace. The last argument, + polymorphic, specifies whether the XML documents + being parsed use polymorphism. For more information on support + for XML Schema polymorphism in the C++/Parser mapping refer + to Section 5.5, "Support for Polymorphism".

+ +

A number of overloaded parse() functions have the + system_id and public_id arguments. The + system id is a system identifier of the resources being + parsed (for example, URI or a full file path). The public id is a + public identifier of the resource (for example, an + application-specific name or a relative file path). The system id + is used to resolve relative paths. In diagnostics messages the + public id is used if it is available. Otherwise the system id + is used.

+ +

The parse_begin() and parse_end() functions + present a low-level, Expat-specific parsing API for maximum control. + A typical use-case would look like this (pseudo-code):

+ +
+xxx_pimpl root_p;
+document doc_p (root_p, "root");
+
+root_p.pre ();
+doc_p.parse_begin (xml_parser, "file.xml");
+
+while (more_data_to_parse)
+{
+  // Call XML_Parse or XML_ParseBuffer.
+
+  if (status == XML_STATUS_ERROR)
+    break;
+}
+
+// Call parse_end even in case of an error to translate
+// XML and Schema errors to exceptions or error_handler
+// calls.
+//
+doc.parse_end ();
+result_type result (root_p.post_xxx ());
+  
+ +

Note that if your vocabulary uses XML namespaces, the + XML_ParserCreateNS() functions should be used to create + the XML parser. Space (XML_Char (' ')) should be used + as a separator (the second argument to XML_ParserCreateNS()). +

+ +

The error handling mechanisms employed by the document + parser are described in Section 7.3, "Error + Handling".

+ + +

7.3 Error Handling

+ +

There are three categories of errors that can result from running + a parser on an XML document: System, XML, and Application. + The System category contains memory allocation and file/stream + operation errors. The XML category covers XML parsing and + well-formedness checking as well as XML Schema validation errors. + Finally, the Application category is for application logic errors + that you may want to propagate from parser implementations to the + caller of the parser. +

+ +

The System errors are mapped to the standard exceptions. The + out of memory condition is indicated by throwing an instance + of std::bad_alloc. The stream operation errors + are reported either by throwing an instance of + std::ios_base::failure if exceptions are enabled + or by setting the stream state.

+ +

Note that if you are parsing std::istream on + which exceptions are not enabled, then you will need to + check the stream state before calling the post() + callback, as shown in the following example:

+ +
+int
+main (int argc, char* argv[])
+{
+  ...
+
+  std::ifstream ifs (argv[1]);
+
+  if (ifs.fail ())
+  {
+    cerr << argv[1] << ": unable to open" << endl;
+    return 1;
+  }
+
+  root_p.pre ();
+  doc_p.parse (ifs);
+
+  if (ifs.fail ())
+  {
+    cerr << argv[1] << ": io failure" << endl;
+    return 1;
+  }
+
+  result_type result (root_p.post_xxx ());
+}
+  
+ +

The above example can be rewritten to use exceptions + as shown below:

+ +
+int
+main (int argc, char* argv[])
+{
+  try
+  {
+    ...
+
+    std::ifstream ifs;
+    ifs.exceptions (std::ifstream::badbit | std::ifstream::failbit);
+    ifs.open (argv[1]);
+
+    root_p.pre ();
+    doc_p.parse (ifs);
+    result_type result (root_p.post_xxx ());
+  }
+  catch (const std::ifstream::failure&)
+  {
+    cerr << argv[1] << ": unable to open or io failure" << endl;
+    return 1;
+  }
+}
+  
+ + +

For reporting application errors from parsing callbacks, you + can throw any exceptions of your choice. They are propagated to + the caller of the parser without any alterations.

+ +

The XML errors can be reported either by throwing the + xml_schema::parsing exception or by a callback + to the xml_schema::error_handler object (and + xercesc::ErrorHandler object in case of Xerces-C++).

+ +

The xml_schema::parsing exception contains + a list of warnings and errors that were accumulated during + parsing. Note that this exception is thrown only if there + was an error. This makes it impossible to obtain warnings + from an otherwise successful parsing using this mechanism. + The following listing shows the definition of + xml_schema::parsing exception. Note that if the + character type is wchar_t, then the string type + and output stream type in the definition become + std::wstring and std::wostream, + respectively (see Section 5.2, "Character Type + and Encoding").

+ +
+namespace xml_schema
+{
+  class exception: public std::exception
+  {
+  protected:
+    virtual void
+    print (std::ostream&) const = 0;
+  };
+
+  inline std::ostream&
+  operator<< (std::ostream& os, const exception& e)
+  {
+    e.print (os);
+    return os;
+  }
+
+
+  class severity
+  {
+  public:
+    enum value
+    {
+      warning,
+      error
+    };
+  };
+
+
+  class error
+  {
+  public:
+    error (xml_schema::severity,
+           const std::string& id,
+           unsigned long line,
+           unsigned long column,
+           const std::string& message);
+
+    xml_schema::severity
+    severity () const;
+
+    const std::string&
+    id () const;
+
+    unsigned long
+    line () const;
+
+    unsigned long
+    column () const;
+
+    const std::string&
+    message () const;
+  };
+
+  std::ostream&
+  operator<< (std::ostream&, const error&);
+
+
+  class diagnostics: public std::vector<error>
+  {
+  };
+
+  std::ostream&
+  operator<< (std::ostream&, const diagnostics&);
+
+
+  class parsing: public exception
+  {
+  public:
+    parsing ();
+    parsing (const xml_schema::diagnostics&);
+
+    const xml_schema::diagnostics&
+    diagnostics () const;
+
+    virtual const char*
+    what () const throw ();
+
+  protected:
+    virtual void
+    print (std::ostream&) const;
+  };
+}
+  
+ +

The following example shows how we can catch and print this + exception. The code will print diagnostics messages one per line + in case of an error.

+ +
+int
+main (int argc, char* argv[])
+{
+  try
+  {
+    // Parse.
+  }
+  catch (const xml_schema::parsing& e)
+  {
+    cerr << e << endl;
+    return 1;
+  }
+}
+  
+ +

With the error_handler approach the diagnostics + messages are delivered as parsing progresses. The following + listing presents the definition of the error_handler + interface. Note that if the character type is wchar_t, + then the string type in the interface becomes std::wstring + (see Section 5.2, "Character Type and Encoding").

+ +
+namespace xml_schema
+{
+  class error_handler
+  {
+  public:
+    class severity
+    {
+    public:
+      enum value
+      {
+        warning,
+        error,
+        fatal
+      };
+    };
+
+    virtual bool
+    handle (const std::string& id,
+            unsigned long line,
+            unsigned long column,
+            severity,
+            const std::string& message) = 0;
+  };
+}
+  
+ +

The return value of the handle() function indicates whether + parsing should continue if possible. The error with the fatal severity + level terminates the parsing process regardless of the returned value. + At the end of the parsing process with an error that was reported via + the error_handler object, an empty + xml_schema::parsing exception is thrown to indicate + the failure to the caller. You can alter this behavior by throwing + your own exception from the handle() function.

+ + + + + +

Appendix A — Supported XML Schema Constructs

+ +

The C++/Parser mapping supports validation of the following W3C XML + Schema constructs in the generated code.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ConstructNotes
Structure
element
attribute
any
anyAttribute
all
sequence
choice
complex type, empty content
complex type, mixed content
complex type, simple content extension
complex type, simple content restrictionSimple type facets are not validated.
complex type, complex content extension
complex type, complex content restriction
list
Datatypes
byte
unsignedByte
short
unsignedShort
int
unsignedInt
long
unsignedLong
integer
nonPositiveInteger
nonNegativeInteger
positiveInteger
negativeInteger
boolean
float
double
decimal
string
normalizedString
token
Name
NMTOKEN
NCName
language
anyURI
IDIdentity constraint is not enforced.
IDREFIdentity constraint is not enforced.
NMTOKENS
IDREFSIdentity constraint is not enforced.
QName
base64Binary
hexBinary
date
dateTime
duration
gDay
gMonth
gMonthDay
gYear
gYearMonth
time
+ + +
+
+ + + diff --git a/xsd/doc/cxx/parser/guide/makefile b/xsd/doc/cxx/parser/guide/makefile new file mode 100644 index 0000000..127a0fa --- /dev/null +++ b/xsd/doc/cxx/parser/guide/makefile @@ -0,0 +1,56 @@ +# file : doc/cxx/parser/guide/makefile +# copyright : Copyright (c) 2006-2014 Code Synthesis Tools CC +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +include $(dir $(lastword $(MAKEFILE_LIST)))../../../../build/bootstrap.make + +default := $(out_base)/ +install := $(out_base)/.install +dist := $(out_base)/.dist +dist-win := $(out_base)/.dist-win +clean := $(out_base)/.clean + +# Build. +# +$(default): $(out_base)/cxx-parser-guide.ps $(out_base)/cxx-parser-guide.pdf + +$(out_base)/cxx-parser-guide.ps: $(src_base)/index.xhtml \ + $(src_base)/figure-1.png \ + $(src_base)/guide.html2ps \ + | $(out_base)/. + $(call message,html2ps $<,html2ps -f $(src_base)/guide.html2ps -o $@ $<) + +$(out_base)/cxx-parser-guide.pdf: $(out_base)/cxx-parser-guide.ps | $(out_base)/. + $(call message,ps2pdf $<,ps2pdf14 $< $@) + +# Install & Dist. +# +$(install): path := $(subst $(src_root)/doc/,,$(src_base)) +$(dist): path := $(subst $(src_root)/,,$(src_base)) + +$(install): $(out_base)/cxx-parser-guide.ps $(out_base)/cxx-parser-guide.pdf + $(call install-data,$(src_base)/figure-1.png,$(install_doc_dir)/xsd/$(path)/figure-1.png) + $(call install-data,$(src_base)/index.xhtml,$(install_doc_dir)/xsd/$(path)/index.xhtml) + $(call install-data,$(out_base)/cxx-parser-guide.ps,$(install_doc_dir)/xsd/$(path)/cxx-parser-guide.ps) + $(call install-data,$(out_base)/cxx-parser-guide.pdf,$(install_doc_dir)/xsd/$(path)/cxx-parser-guide.pdf) + +$(dist): $(out_base)/cxx-parser-guide.ps $(out_base)/cxx-parser-guide.pdf + $(call install-data,$(src_base)/figure-1.png,$(dist_prefix)/$(path)/figure-1.png) + $(call install-data,$(src_base)/index.xhtml,$(dist_prefix)/$(path)/index.xhtml) + $(call install-data,$(out_base)/cxx-parser-guide.ps,$(dist_prefix)/$(path)/cxx-parser-guide.ps) + $(call install-data,$(out_base)/cxx-parser-guide.pdf,$(dist_prefix)/$(path)/cxx-parser-guide.pdf) + +$(dist-win): $(dist) + + +# Clean +# +$(clean): +ifneq ($(xsd_clean_gen),n) + $(call message,rm $$1,rm -f $$1,$(out_base)/cxx-parser-guide.ps) + $(call message,rm $$1,rm -f $$1,$(out_base)/cxx-parser-guide.pdf) +endif + +# How to. +# +$(call include,$(bld_root)/install.make) diff --git a/xsd/doc/cxx/parser/makefile b/xsd/doc/cxx/parser/makefile new file mode 100644 index 0000000..1e1c22c --- /dev/null +++ b/xsd/doc/cxx/parser/makefile @@ -0,0 +1,21 @@ +# file : doc/cxx/parser/makefile +# copyright : Copyright (c) 2006-2014 Code Synthesis Tools CC +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +include $(dir $(lastword $(MAKEFILE_LIST)))../../../build/bootstrap.make + +docs := guide + +default := $(out_base)/ +install := $(out_base)/.install +dist := $(out_base)/.dist +dist-win := $(out_base)/.dist-win +clean := $(out_base)/.clean + +$(default): $(addprefix $(out_base)/,$(addsuffix /,$(docs))) +$(install): $(addprefix $(out_base)/,$(addsuffix /.install,$(docs))) +$(dist): $(addprefix $(out_base)/,$(addsuffix /.dist,$(docs))) +$(dist-win): $(addprefix $(out_base)/,$(addsuffix /.dist-win,$(docs))) +$(clean): $(addprefix $(out_base)/,$(addsuffix /.clean,$(docs))) + +$(foreach m,$(docs),$(call import,$(src_base)/$m/makefile)) diff --git a/xsd/doc/cxx/tree/guide/cxx-tree-guide.pdf b/xsd/doc/cxx/tree/guide/cxx-tree-guide.pdf new file mode 100644 index 0000000..3e19f3e Binary files /dev/null and b/xsd/doc/cxx/tree/guide/cxx-tree-guide.pdf differ diff --git a/xsd/doc/cxx/tree/guide/cxx-tree-guide.ps b/xsd/doc/cxx/tree/guide/cxx-tree-guide.ps new file mode 100644 index 0000000..a6c4a2b --- /dev/null +++ b/xsd/doc/cxx/tree/guide/cxx-tree-guide.ps @@ -0,0 +1,3509 @@ +%!PS +%%Title: C++/Tree Mapping Getting Started Guide +%%Creator: html2ps version 1.0 beta7 +%%EndComments +save +2000 dict begin +/d {bind def} bind def +/D {def} d +/t true D +/f false D +/FL [/Times-Roman +/Times-Italic +/Times-Bold +/Times-BoldItalic +/Courier +/Courier-Oblique +/Courier-Bold +/Courier-BoldOblique +/Helvetica +/Helvetica-Oblique +/Helvetica-Bold +/Helvetica-BoldOblique] D +/WF t D +/WI 0 D +/F 1 D +/IW 471 F div D +/IL 621 F div D +/PS 791 D +/EF [0 1 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 2 2] D +/EZ [12 10 19 17 15 13 12 11 12 12 12 12 12 12 12 12 12 12 12 12 12 12 8 8] D +/Ey [0 0 2 2 2 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0] D +/EG [-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1] D +/Tm [1 1 0.8 0.8 0.8 0.8 0.8 0.8 0 0 0 0 0 0 0.5 1 1 1 1 0 0 1.3 0 0] D +/Bm [1 1 0.5 0.5 0.5 0.5 0.5 0.5 0 0 0 0 0 0 0.5 1 1 1 1 0 0 1 0 0] D +/Lm [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 2 2 0 0 2 0 0 0] D +/Rm [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0] D +/EU [-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 0 0] D +/NO f D +/YY [[{()}{ h }][{ h }{()}][{()}{()}]] D +/ZZ [[{ (July 2014) }{ Pn }][{ Pn }{ (July 2014) }][{ Ti }{ Ti }]] D +/Ts EZ 0 get D +/TU f D +/Xp t D +/AU f D +/SN 0 D +/Cf t D +/Tp t D +/Fe f D +/TI 2 Ts mul D +/Fm 14 D +/xL 71 D +/xR 71 D +/yL 706 D +/yR 706 D +/Wl 471 F div D +/Wr 471 F div D +/hL 621 F div D +/hR 621 F div D +/FE {newpath Fm neg Fm M CP BB IW Fm add Fm L IW Fm add IL Fm add neg L CP BB + Fm neg IL Fm add neg L closepath} D +/LA {PM 0 eq{/IW Wl D /IL hL D}{/IW Wr D /IL hR D}ie /W IW D /LL W D /LS W D + TU PM 0 eq and{IW 56 F div add SA{Sf div}if 0 translate} + {PM 0 eq{xL yL}{xR yR}ie translate F SA{Sf mul}if dup scale + CS CF FS Cf{CA CL get VC}if /Bb f D}ie 0 0 M + TF not Tc or {Cf{gsave SA{1 Sf div dup scale}if Cb VC FE fill grestore}if}if}D +/Pi 0 Ts mul D +/SG [0.8 1 1] D +/Ab 15 D +/J 0 D +/Tc t D +/NH 6 D +/Nf f D +/Pa f D +/LH 1.2 D +/XR f D +/Xr {/pN E D ( [p ) WB pN WB (] )WB} D +/Db [16#FF 16#FF 16#FF] D +/Dt [16#00 16#00 16#00] D +/eA f D +/Fi f D +/bT f D +/Lc t D +/Dl [16#00 16#00 16#00] D +/LX f D +/Br 0.25 D +/IA ([IMAGE]) D +/DS {/PF f D()WB NL NP()pop RC ZF} D +/Gb f D +/Mb t D +/Hc [16#00 16#00 16#00] D +/Bl 3 D +/MI -15.6 D +/DX (DRAFT) D +/Di 0 D +/Tt 113.385826771654 D +/Th { ( +) 2 Al()BR ( + ) 0 1 -1 H()4 FZ (C++/Tree Mapping) ES()EH ( + ) 0 1 -1 H()4 FZ (Getting Started Guide) ES()EH ( + ) 0 1 -1 H ( ) EH ( + ) 0 1 -1 H ( ) EH ( + ) 0 1 -1 H ( ) EH ( + ) 0 1 -1 H ( ) EH ( + ) 0 1 -1 H ( ) EH ( + ) 0 1 -1 H ( ) EH ( +) Ea()BR ( + ) 0 P (Copyright © 2005-2014 CODE SYNTHESIS TOOLS CC) EP ( + + ) 0 P (Permission is granted to copy, distribute and/or modify this + document under the terms of the + ) R0 2 A (GNU Free + Documentation License, version 1.2) EA (; with no Invariant Sections, + no Front-Cover Texts and no Back-Cover Texts. + ) EP ( + + ) 0 P (This document is available in the following formats: + ) R1 2 A (XHTML) EA (, + ) R2 2 A (PDF) EA (, and + ) R3 2 A (PostScript) EA (.) EP()} D +/tH {()0 1 -1 H (Table of Contents) EH()} D +/FD 2 D +/Dy 2 D +/cD [16#F0 16#F0 16#F0] D +/FW 0.6 D +/FU [16#00 16#00 16#00] D +/ET {/RM f D /A0 3 D /PN SN D /OU t D /Ou t D /W IW D /LL W D D1 + Ms not TP and{Ip}if /TF f D} D + +%-- End of variable part -- +/MySymbol 10 dict dup begin + /FontType 3 D /FontMatrix [.001 0 0 .001 0 0 ] D /FontBBox [25 -10 600 600] D + /Encoding 256 array D 0 1 255{Encoding exch /.notdef put}for + Encoding (e) 0 get /euro put + /Metrics 2 dict D Metrics begin + /.notdef 0 D + /euro 651 D + end + /BBox 2 dict D BBox begin + /.notdef [0 0 0 0] D + /euro [25 -10 600 600] D + end + /CharacterDefs 2 dict D CharacterDefs begin + /.notdef {} D + /euro{newpath 114 600 moveto 631 600 lineto 464 200 lineto 573 200 lineto + 573 0 lineto -94 0 lineto 31 300 lineto -10 300 lineto closepath clip + 50 setlinewidth newpath 656 300 moveto 381 300 275 0 360 arc stroke + -19 350 moveto 600 0 rlineto -19 250 moveto 600 0 rlineto stroke}d + end + /BuildChar{0 begin + /char E D /fontdict E D /charname fontdict /Encoding get char get D + fontdict begin + Metrics charname get 0 BBox charname get aload pop setcachedevice + CharacterDefs charname get exec + end + end}D + /BuildChar load 0 3 dict put /UniqueID 1 D +end +definefont pop + +/Cd {aload length 2 idiv dup dict begin {D} repeat currentdict end} D +/EX {EC cvx exec} D +/DU {} d +/BB {pop pop}d +/ie {ifelse} d +/E {exch} d +/M {moveto} d +/R {rmoveto} d +/L {lineto} d +/RL {rlineto} d +/CP {currentpoint} d +/SW {stringwidth} d +/GI {getinterval} d +/PI {putinterval} d +/Sg {setgray} d +/LW {setlinewidth} d +/S {dup () ne OU and{0 Co R AT 3 eq LB and HF not and A1 0 ne A2 0 ne or and + {A2 0 32 A1 0 6 -1 roll awidthshow}{show}ie 0 Co neg R}{pop}ie + OU PH 3 eq or{/Ms t D}if} D +/U {OU{gsave CP currentfont /FontInfo get /UnderlinePosition get + 0 E currentfont /FontMatrix get dtransform E pop add newpath M dup SW pop + CJ 0 RL stroke grestore}if} D +/B {OU Br 0 gt and{CP Ts neg Ts .33 mul R gsave 0 Sg + CP newpath Ts Br mul 0 360 arc closepath UI 2 mod 0 eq{stroke}{fill}ie + grestore M CP E Ts Br 1 add mul sub E BB /Ms t D}if}D +/NP {Ms TP not or PA and OU and{TP{OR}if f1{mF k2 /mF E D /YC 0 D}if + TP TU not PM 0 eq or and{showpage}if DU Ip TE not{LA}if 0.6 LW + /CI 0 D /TP t D /Hs f D /hl 6 D /Hv 6 D /HI hi D /Ms f D}if Bs XO BO M} D +/Np {LE sub CP E pop gt PL 0 eq and{NP}if}D +/Ip {/PN PN 1 add D /Pn RM{1}{4}ie PN Ns D /PM PN SN sub 2 mod D} D +/GP {E dup 3 -1 roll get PN 1 add 2 mod get dup type /integertype eq + {get 0 get}{E pop}ie}d +/Fc {dup 2 GP exec SW pop /S1 E D dup 1 GP exec SW pop /S2 E D 0 GP exec SW + pop /S3 E D S1 0 gt{S2 2 mul S1 add S3 2 mul S1 add 2 copy lt{E}if pop}{0}ie + S2 S3 add 2 copy lt{E}if pop IW .9 mul div dup 1 gt{1 E div}{pop 1}ie}D +/OR {Df{Sd}if tp not{gsave SA{1 Sf div dup scale}if Fe{Cf{FU VC}if FW LW + 1 setlinejoin FE stroke}if /YO {60 F div dup 40 gt{pop 40}if}D /cs CS D + /cf CF D /CF 0 D /pf PF D /PF f D /Fn FN D /At AT D /AT 0 D /FN EF Hf 1 add + get D Fz Fs FS ZZ Fc Fz mul Fs FS EU Hf 1 add get dup type /arraytype eq + Cf and{VC}{pop 0 Sg}ie IW IL neg YO sub M ZZ 1 GP exec dup SW pop neg 0 R Sh + 0 IL neg YO sub M ZZ 0 GP exec Sh ZZ 2 GP exec dup SW pop IW E sub 2 div + IL neg YO sub M Sh Fz Fs FS NO{/AW IW Pn SW pop sub D AW 2 div IL neg YO sub + S1 0 gt S2 AW .45 mul gt or S3 AW .45 mul gt or{Fz 2 mul sub}if M Pn Sh}if + EU Hf get dup type /arraytype eq Cf and{VC}{pop 0 Sg}ie YY Fc /FN EF Hf get D + Hz mul HS FS IW YO M YY 1 GP exec dup SW pop neg 0 R Sh 0 YO M YY 0 GP exec Sh + YY 2 GP exec dup SW pop IW E sub 2 div YO M Sh /FN Fn D /AT At D t Pb XO SZ + SL get neg R /PF pf D grestore /CF 0 D cs cf FS}if}D +/Sh {dup () ne{CP Hz 4 div sub BB show CP CS add BB}{pop}ie}D +/Pb {/OU E D /Ou OU D /PB t D 0 0 M Ba{/Sa save D /BP t D /Fl t D RC /PL 0 D + /PH 0 D /W IW D /LE IL .7 mul D /EO 0 D SI ZF /YA 0 D /BO 0 D /C1 () D + BA 0 Ts neg R Bb{Xl Yl Xh Yh}if Bb CP Sa restore M + {/Yh E D /Xh E D /Yl E D /Xl E D}if /Fl t D}if + BL /OU t D /HM f D /Ou t D /PB f D} D +/Bs {/BP Ba not D}D +/reencodeISO { + dup dup findfont dup length dict begin{1 index /FID ne{D}{pop pop}ie}forall + /Encoding ISOLatin1Encoding D currentdict end definefont} D +/ISOLatin1Encoding [ +/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef +/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef +/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef +/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef +/space/exclam/quotedbl/numbersign/dollar/percent/ampersand/quoteright +/parenleft/parenright/asterisk/plus/comma/hyphen/period/slash +/zero/one/two/three/four/five/six/seven/eight/nine/colon/semicolon +/less/equal/greater/question/at/A/B/C/D/E/F/G/H/I/J/K/L/M/N +/O/P/Q/R/S/T/U/V/W/X/Y/Z/bracketleft/backslash/bracketright +/asciicircum/underscore/quoteleft/a/b/c/d/e/f/g/h/i/j/k/l/m +/n/o/p/q/r/s/t/u/v/w/x/y/z/braceleft/bar/braceright/asciitilde +/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef +/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef +/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef +/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef +/.notdef/space/exclamdown/cent/sterling/currency/yen/brokenbar +/section/dieresis/copyright/ordfeminine/guillemotleft/logicalnot +/hyphen/registered/macron/degree/plusminus/twosuperior/threesuperior +/acute/mu/paragraph/periodcentered/cedilla/onesuperior/ordmasculine +/guillemotright/onequarter/onehalf/threequarters/questiondown +/Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE/Ccedilla +/Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex +/Idieresis/Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis +/multiply/Oslash/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute +/Thorn/germandbls/agrave/aacute/acircumflex/atilde/adieresis +/aring/ae/ccedilla/egrave/eacute/ecircumflex/edieresis/igrave +/iacute/icircumflex/idieresis/eth/ntilde/ograve/oacute/ocircumflex +/otilde/odieresis/divide/oslash/ugrave/uacute/ucircumflex/udieresis +/yacute/thorn/ydieresis +] D +[128/backslash 129/parenleft 130/parenright 141/circumflex 142/tilde +143/perthousand 144/dagger 145/daggerdbl 146/Ydieresis 147/scaron 148/Scaron +149/oe 150/OE 151/guilsinglleft 152/guilsinglright 153/quotesinglbase +154/quotedblbase 155/quotedblleft 156/quotedblright 157/endash 158/emdash +159/trademark] +aload length 2 idiv 1 1 3 -1 roll{pop ISOLatin1Encoding 3 1 roll put}for +/colorimage where{pop}{ + /colorimage { + pop pop /Pr E D {/Cv Pr D /Gr Cv length 3 idiv string D 0 1 Gr length 1 sub + {Gr E dup /i E 3 mul D Cv i get 0.299 mul Cv i 1 add get 0.587 mul add + Cv i 2 add get 0.114 mul add cvi put}for Gr} image} D +}ie +/pdfmark where{pop}{userdict /pdfmark /cleartomark load put}ie +WF{FL{reencodeISO D}forall}{4 1 FL length 1 sub{FL E get reencodeISO D}for}ie +/Symbol dup dup findfont dup length dict begin + {1 index /FID ne{D}{pop pop}ie}forall /Encoding [Encoding aload pop] + dup 128 /therefore put D currentdict end definefont D + +/SF {/CS E D SZ SL CS put FO SL FN put /YI CS LH neg mul D dup ST cvs ( ) join + CS ST cvs join C1 E join ( NF ) join /C1 E D CS NF /Wf WF FN 0 gt or D + /BW Wf{( ) SW pop}{0}ie D}D +/NF {/cS E D /cF E D cF 0 ge{FL cF get}{cF -1 eq{/Symbol}{/MySymbol}ie}ie + findfont cS scalefont setfont} D +/FS {CF or /CF E D FR SL CF put CF CF 0 ge{FN 4 mul add}if E SF} D +/PC {SH /BP f D fin not GL not and{NL}if /HM t D /LL LS D} D +/BS {/TX E D Wf{/fin f D /CW 0 D /LK 0 D /SC 0 D + /RT TX D {RT ( ) search{/NW E D pop /RT E D /WH NW SW pop D CW WH add LL gt + {TX SC LK SC sub 1 sub NN GI GL{SH cF cS OC + 2 copy cS ne E cF ne or{NF}{pop pop}ie}{PC /CW WH BW add D}ie + /SC LK D} + {GL{JC}if + /CW CW WH add BW add D /HM t D}ie /GL f D /Ph f D + /LK LK NW length 1 add add D}{pop exit}ie}loop + /fin t D TX SC LK SC sub GI SH RT () ne{GL not{CC}if}if + /LC TX length D /WH RT SW pop D CW WH add Hy{HC SW pop add}if LL gt + {RT GL{SH cF cS OC 2 copy cS ne E cF ne or{NF}{pop pop}ie + Hy{/Ph t D}if /LL LS D}{NL /LL LS D SH}ie} + {RT PC Hy{CC}if /Ph Ph Hy or D}ie RT () ne{/GL t D /HM t D}if} + {TX SW pop LL le{TX SH}{/NW () D 0 2 TX length 1 sub + {/CW E D TX 0 CW GI dup SW pop LL gt{pop NW SH /HM t D NL/LL W XO sub MR sub D + /CW CW 2 sub NN D /TX TX CW TX length CW sub GI D TX BS exit} + {/NW E D}ie}for}ie}ie /HM t D}D +/CC {C0 length 0 gt{JC}if /C0 [C1 L1 YA YB Mf NS NB TB AF Bw] D + /C1 () D /L0 L1 D /YA 0 D /YB 0 D /Mf 0 D /NS 0 D /NB 0 D}D +/JC {C0 aload length 0 gt{pop pop pop NB add /NB E D NS add /NS E D + dup Mf gt{/Mf E D}{pop}ie dup YB gt{/YB E D}{pop}ie + dup YA gt{/YA E D}{pop}ie pop C1 join /C1 E D /C0 [] D}if}D +/OC {C0 length 0 gt{C1 L1 L0 sub YA YB Mf NS NB TB AF Bw GL C0 aload pop + /Bw E D /AF E D /TB E D /NB E D /NS E D /Mf E D /YB E D /YA E D /C0 [] D + /L1 E D /C1 E D Ph{HC SH}if NL /GL E D /Bw E D /AF E D /TB E D /NB E D /NS E D + /Mf E D /YB E D /YA E D /L1 E D /LL W L1 sub XO sub MR sub WH sub D /CW 0 D + C1 E join /C1 E D}if}D +/BT {/LB t D dup length string copy RS dup dup () ne E ( ) ne and + {/CI 0 D /LS LL D /LL W L1 sub XO sub MR sub D BS} + {dup ( ) eq{/GL f D}if dup () eq L1 0 eq or{pop}{SH /BP f D /Ph f D}ie}ie + /LB f D} D +/BL {CP E pop XO E M} D +/NL {JC /GL f D /SK W XO sub MR sub L1 sub TB{Bw add}if D + /YA LF{Mf HM Fl not and PF or{LH mul}if}{0 /LF t D}ie YA 2 copy lt{E}if pop D + C1 () ne{/FB YB Mf SA{Sf mul}if 4 div 2 copy lt{E}if pop D}if Fl{/Ya YA D}if + CP E pop YA sub YB sub LE neg lt Fl not and PB not and{NP}if NT TL BL + OU PF not and PB or{/RE L1 TB{Bw sub}if + W XO sub MR sub div YA YB add LE BO add div 2 copy lt{E}if pop D + RE 1 gt{BL 1 RE div dup scale}if}if + AT 2 le{SK AT mul 2 div YA neg R}if + AT 3 eq{0 YA neg R TB{/NB NB 1 sub D /NS NS 1 sub D}if /NB NB 1 sub NN D + /A3 NS 6 mul NB add D NS NB add 0 eq + {/A1 0 D /A2 0 D} + {NS 0 eq{/A1 SK NB div dup J gt{pop 0}if D /A2 0 D}{J A3 mul SK lt + {/A1 J D /A2 SK J NB mul sub NS div dup Ab gt{/A1 0 D pop 0}if D} + {/A1 SK A3 div D /A2 A1 6 mul D}ie}ie}ie /A1 A1 NN D /A2 A2 NN D}if + AT 4 eq{0 YA neg R PH 2 le{PD 0 lt{/PD L1 D}if PD M1 gt{/M1 PD D}if + L1 PD sub M2 gt{/M2 L1 PD sub D}if}{DV ID 1 sub get 0 ge{Lo 0 R}if}ie}if + F0 cF ne Cs cS ne or{F0 Cs NF}if + /ms Ms D /Ms f D CP FB sub + C1 cvx exec XO EO sub L1 add TB{BW sub}if dup LM gt{/LM E D}{pop}ie + PH 0 eq PH 4 eq or Ms and{HF not{/PO t D /AH t D}if + BB CP YA add E AT 3 eq LB and{A1 sub}if TB{BW sub}if E BB} + {pop pop}ie Ms HM PH 3 eq and or{/BP f D /Fl f D}if + /Lo 0 D /L1 0 D /F0 cF D /Cs cS D BP not{0 YB NN neg R}if + OU f1 and mF not and{k2 /f1 f D}if + OU PF not and PB or{RE 1 gt{RE dup scale}if}if /Ms ms Ms or D + /C1 AF{(Cp )}{()}ie D /YA 0 D /YB 0 D BL + AT 4 eq LB not and PH 3 ge and + {ID DV length lt{DV ID get dup 0 ge{DO E sub /Lo E D /L1 Lo D}{pop}ie + /ID ID 1 add D}if}if /T t D CD{/LN LN 1 add D PD}if + /PD -1 D /NS 0 D /NB 0 D /TB f D /Ph f D /Mf 0 D /HM f D} D +/RS {/TM E D /CN 0 D TM{10 eq{TM CN ( ) PI}if /CN CN 1 add D}forall + /CN 0 D /BK HM EN and{0}{1}ie D TM + {dup 32 ne{TM CN 3 2 roll put /CN CN 1 add D /BK 0 D} + {pop BK 0 eq{TM CN 32 put /CN CN 1 add D}if /BK 1 D}ie}forall + TM 0 CN GI dup dup () ne E ( ) ne and + {dup CN 1 sub get 32 eq{/EN f D}{/EN t D}ie}if} D +/join {2 copy length E length add string dup 4 2 roll 2 index 0 3 index + PI E length E PI}d +/WR {(\n) search{dup () ne BP not or + {Li 4 le CP E pop YI Li mul add LE add 0 lt and PL 0 eq and{NP}if + SH NL pop /Li Li 1 sub D WR}{pop pop WR}ie}{SH}ie /CI 0 D /BP f D} D +/SH {dup dup () ne E ( ) ne and PF or CS Mf gt and{/Mf CS D}if + T not Wf and{( ) E join /T t D}if dup BP{/MF CS D}if + AT 3 eq{2 copy length dup 0 gt{/NB E NB add D + {( ) search{/NS NS 1 add D pop pop}{pop exit}ie}loop}{pop pop}ie}if + CD PD 0 lt and{dup DC search{SW pop /PD E L1 add D pop pop}{pop}ie}if + 0 Np dup SW pop L1 add /L1 E D dup () ne + {C1 (\() join E join (\)) join AU AF and UF or Wf and{( U ) join}if + sF{( s ) join}if ( S ) join + /C1 E D dup length 1 sub get 32 eq /TB E D /Bw BW D}{pop pop}ie} D +/BG {AI LG BC add add 0 eq} D +/ON {OU{Ty AR AI NN get dup 1 add Ln Ns Ty 2 mod 0 eq{(. )}{(\) )}ie join + dup SW pop neg 0 R CP E 0 lt{0 E M}{pop}ie CP BB show /Ms t D}if} D +/Ln {AR AI 3 -1 roll put}D +/SP {dup CI lt BP not and{dup CI sub 0 E R /CI E D}{pop}ie} D +/BN {PF{WR /HM f D}{BT NL}ie} D +/NN {dup 0 lt{pop 0}if} D +/h {(h) HI ST cvs join cvx exec dup 1 get E Nf{0 get E join}{pop}ie} D +/H {/fn FN D /Hi E 1 add D 1 sub /HL E D /H2 HL 2 add D /GS EZ H2 get D + E Tm H2 get GS mul BE dup 0 gt{1 sub}{pop EG H2 get dup 0 lt{pop AT}if}ie NA + WW Np /SL SL 1 add D /FN EF H2 get D GS Ey H2 get FS + EU H2 get Sc Hs not HL Hl lt and Hs HL hl lt and or Hi 0 eq or + {/HI Hi D /Hs t D /hl HL D /Hv HL D}if HL Hl lt{/hi Hi D}if + Nf HI 0 gt and{(h) Hi ST cvs join cvx exec 0 get WB}if + /HF t D /AH f D /PO f D} D +/EH {Bm H2 get GS mul BE OA /SL SL 1 sub NN D /CF 0 D /FN fn D + SZ SL get FR SL get FS /HF f D /GS Ts D ()Ec} D +/P {E PF{WR}{PO{EP}{BN}ie Ts 4 mul Np AE not{Tm 0 get Ts mul neg SP}if + dup 0 ge AH and{Pi Pd}if}ie 1 sub dup 0 lt{pop AV AL get}if /AT E D /PO t D} D +/EP {PF{WR}{BN Ts 4 mul Np}ie AE not{Bm 0 get Ts mul neg SP}if + /AT AV AL get D /PO f D} D +/BE {E PO{EP}{BN}ie Ts 4 mul Np neg SP} D +/HR {/Aw W EO sub D /RW E dup 0 gt{Aw mul}{neg}ie dup Aw gt{pop Aw}if D /RZ E D + E BN Ts neg SP 1 sub 2 div Aw RW sub mul EO add CP E pop M PF{0 Ps neg R}if + 0 Np OU{gsave RZ LW Cf{Hc VC}{0 Sg}ie CP BB RW 0 RL CP BB stroke grestore}if + /CI 0 D /BP f D PF not{Ts neg SP}if /Ms t D} D +/AD {I NL EG 14 get dup 0 lt{pop AT}if NA /AE t D Tm 14 get Ts mul neg SP + Cf{EU 14 get dup -1 eq{pop CA CL get}if Sc}if} D +/DA {BN ()ES OA /AE f D ()Ec Bm 14 get Ts mul neg SP} D +/PR {/MW E D /Li E D Tm 1 get Ps mul BE 0 NA /FN Fp D /PF t D SI /SL SL 1 add D + /CF 0 D Ps CS mul Ts div MW WC mul CS mul Ts div dup LL gt PL 0 eq and + {LL div div}{pop}ie Ey 1 get FS CP E pop LE add YI neg div cvi dup Li lt + AH and{4 lt YI Li mul 5 mul LE add 0 gt or PL 0 eq and{NP}if}{pop}ie + EU 1 get Sc /GS Ps D}D +/RP {WR NL () /PF f D SI /FN 0 D ES Bm 1 get Ps mul neg SP OA /GS Ts D} D +/SI {/XO Lm 15 get BC NN mul Lm 16 get AI UI sub NN mul add + Lm 17 get UI NN mul add Lm 20 get LG NN mul add Ts mul + PF{Lm 1 get Ps mul add}if EO add D + /MR Rm 15 get BC NN mul Rm 16 get AI UI sub NN mul add + Rm 17 get UI NN mul add Rm 20 get LG NN mul add Ts mul + PF{Rm 1 get Ps mul add}if D /LL W XO sub MR sub D} D +/DT {/cC E D BN /LG LG 1 sub D SI /LG LG 1 add D WW 2 div Np BL} D +/DD {WB Cc 0 eq cC 0 eq and L1 0 eq or Lm 20 get Ts mul L1 sub TB{BW add}if + Ts 2 div lt or NL /LF E D SI BL /cC 0 D} D +/DL {Dc LG Cc put /Cc E D BG{Tm 18 get Ts mul BE}{BN}ie /LG LG 1 add D BL} D +/LD {BN LG 0 gt{/LG LG 1 sub D}if /Cc Dc LG get D SI + BG{()Bm 18 get Ts mul BE}if BL} D +/UL {BG{Tm 17 get Ts mul BE}{BN}ie NR AI NN 0 put /UI UI 1 add D + /AI AI 1 add D SI BL} D +/LU {BN /UI UI 1 sub D /AI AI 1 sub D SI BG{()Bm 17 get Ts mul BE}if BL} D +/OL {E BG{Tm 16 get Ts mul BE}{BN}ie TR AI NN Ty put /Ty E D NR AI NN 1 put + /AI AI 1 add D SI BL 1 Ln} D +/LO {BN /AI AI 1 sub D /Ty TR AI get D SI BG{()Bm 16 get Ts mul BE}if BL} D +/LI {E BN -1 SP /BP f D /CI 0 D 0 Np NR AI 1 sub NN get 1 eq + {dup dup 0 gt E 4 le and{/Ty E D}{pop}ie + /L1 L1 Ty AR AI NN get Ns SW pop XO sub dup 0 lt{pop 0}if add D ( ON )} + {pop ( B )}ie C1 E join /C1 E D CS Mf gt{/Mf CS D}if BL} D +/BQ {Tm 15 get Ts mul BE /BC BC 1 add D SI BL} D +/QB {Bm 15 get Ts mul BE /BC BC 1 sub D SI BL} D +/Al {E EP 1 sub dup 0 lt{pop AV AL get}if NA} D +/Ea {EP OA} D +/WB {PF{WR}{BT}ie} D +/F1 {WB /FN 0 D CS 0 FS} D +/F2 {WB /FN WI D CS 0 FS} D +/HY {/Hy t D WB /Hy f D} D +/YH {WB} D +/A {/LT E D LT 1 eq{/RN E D}if /Lh E D WB /C1 C1 ( Cp ) join D + Lc AF not and{Cl Sc}if /AF t D} D +/EA {Lc AF and{Ec}{WB}ie TL Pa AF and Lh 0 ne and + {( \() Lh join (\)) join /AF f D WB}if /AF f D} D +/TL {C1 ( Tl ) apa /C1 E D} d +/apa {AF OU and Lh 0 ne LT 1 eq or and{LT 1 eq{RN ( /) E ST cvs join} + {(\() Lh join (\)) join}ie E join join}{pop}ie} d +/Cp {/Xc CP /Yc E D D} D +/SS {Cf{dup 0 ge{EU E get dup -1 eq{pop CA CL get}if}{pop CA CL get}ie Sc} + {pop}ie SZ SL get /SL SL 1 add D} D +/I {WB 8 SS 1 FS} D +/EM {WB 8 SS /CF CF 1 xor D 0 FS} D +/BD {WB 9 SS 2 FS} D +/TT {WB 10 SS /FN Fp D 0 FS} D +/KB {WB 11 SS /FN Fp D 2 FS} D +/CT {WB 12 SS 1 FS} D +/SM {WB 13 SS /FN Fp D 0 FS} D +/Q {/QL QL 1 add D QO QL 2 mod get La get join WB} D +/EQ {QC QL 2 mod get La get join WB /QL QL 1 sub D} D +/RO {WB -1 SS /CF 0 D 0 FS} D +/SY {WB -1 SS -1 FS} D +/MY {WB -1 SS -2 FS} D +/ES {WB /SL SL 1 sub NN D /CF 0 D /FN FO SL get D SZ SL get FR SL get FS ()Ec}D +/FZ {3 sub 1.2 E exp GS mul E WB TL /C1 C1 ( Cp ) join D /SL SL 1 add D 0 FS} D +/Ef {WB TL ()ES /C1 C1 ( Cp ) join D} D +/BZ {dup /Bf E D FZ}D +/Sc {dup -1 ne Cf and{/CL CL 1 add D dup 0 eq{pop [0 0 0]}if + dup CA E CL E put VS ( VC ) join C1 E join /C1 E D}{pop}ie} D +/Ec {WB Cf{/CL CL 1 sub NN D CA CL get VS ( VC ) join C1 E join /C1 E D}if} D +/VS {dup type /arraytype eq{([) E {ST cvs join ( ) join}forall (]) join}if} D +/VC {{255 div}forall setrgbcolor} D +/Sl {dup type /integertype ne{Ds}if /La E D WB}d +/UN {WB /UF t D} D +/NU {WB /UF f D} D +/SE {WB /sF t D} D +/XE {WB /sF f D} D +/sM {/C1 C1 ( k1 ) join D}d +/eM {/C1 C1 ( k2 ) join D}d +/k1 {/YC CP E pop Ts add D /mF t D /f1 t D}d +/k2 {gsave 3 LW -9 CP E pop Ts 0.2 mul sub M -9 YC L stroke grestore /mF f D}d +/Ac {/AC E D WB}d +/Ca {eA{( \()join AC join(\) )join}if WB}d +/s {OU{gsave 0 CS .25 mul R dup SW pop CJ 0 RL stroke grestore}if}D +/CJ {AT 3 eq LB and{E dup dup length 1 sub A1 mul E + {( ) search{pop pop E A2 add E}{pop exit}ie}loop 3 -1 roll add + W CP pop sub 2 copy gt{E}if pop}if}D +/So {/Co E D} D +/SO {C1 Yo ST cvs join ( So ) join /C1 E D (j) SW pop 2 div Pd} D +/Se {E WB CS E div Pd}D +/Pd {dup type /stringtype eq{SW pop}if dup /L1 E L1 add D + ST cvs ( 0 R ) join C1 E join /C1 E D} D +/Sp {0.35 CO} D +/Sb {-0.2 CO} D +/CO {OV Io Yo put /Yo E CS mul Yo add D /Io Io 1 add D -1.5 Io mul 3 add FZ SO + CS Yo add dup YA gt{/YA E D}{pop}ie + Yo neg dup YB gt{/YB E D}{pop}ie} D +/Es {ES /Io Io 1 sub NN D /Yo OV Io get D SO} D +/SB {/N2 0 D 0 1 NI{/N E D{IX N2 get 0 lt{/N2 N2 1 add D}{exit}ie}loop + /K WS N get FC N get mul D /NY AY N2 get D /BV NY array D + 0 1 NY 1 sub{/TM K string D currentfile TM readhexstring pop pop BV E TM put} + for BM N BV put /N2 N2 1 add D}for} D +/IC [{/MA E D /MB 0 D}{2 div /MA E D /MB MA D}{/MB E CS sub D /MA CS D} + {pop /MA YS AB mul D /MB 1 AB sub YS mul D}{pop /MA 0 D /MB 0 D}] D +/IP {BV N get /N N 1 add D} D +/II {/K E D IX K get 0 lt{/EC E D}if /TY E D + TY 4 eq{/Y E D /X E D}if TY 3 eq{/AB E D}if + /XW AX K get D /YW AY K get D /IS SG IT K get get D /XS XW IS mul D + /YS YW IS mul D YS IC TY get exec /MA MA Fl not{3 add}if D} D +/IM {II /ty TY D /xs XS D /ys YS D /ya YA D /yb YB D /ma MA D /mb MB D /k K D + /ec EC D /BP f D /CI 0 D WB TL L1 xs add dup XO add MR add W gt + {pop /ma ma Fl{3 add}if D NL /YA ma D /YB mb D /YS ys D /L1 xs D} + {/L1 E D ma YA gt{/YA ma D}if mb YB gt{/YB mb D}if}ie /TB f D + OU{CP E pop YS sub LE neg lt Fl not and PB not and{NP /YA ma D /YB mb D}if + /BP f D ty ST cvs ( ) join IX k get 0 lt{(\() join ec join (\) ) join}if + k ST cvs join ty 3 eq{AB ST cvs ( ) join E join}if + ty 4 eq{X ST cvs ( ) join Y ST cvs join ( ) join E join}if C1 E join + ( DI ) join FP 2 eq FP 1 eq AF and or{( FM ) join}if + ( Il Cp ) apa /C1 E D /EN f D}if /HM t D /T f D} D +/DI {II /Xc CP /Yc E D D /YN YW neg D /HM t D /CI 0 D /K2 IX K get D gsave + TY 4 eq{OX X IS mul add OY FY add YS sub Y IS mul sub} + {/FY YS D CP MB sub 2 copy /OY E D /OX E D}ie + translate K2 0 ge{/DP AZ K2 get D /BV BM K2 get D XS YS scale /N 0 D XW YW DP + [XW 0 0 YN 0 YW] {IP} FC K2 get 1 eq{image}{f 3 colorimage}ie} + {EX}ie grestore XS 0 R /Ms t D} D +/FM {gsave 0 Sg CP MB sub translate XS neg 0 M 0 YS RL XS 0 RL 0 YS neg RL + XS neg 0 RL stroke grestore} D +/NA {/AT E D /AL AL 1 add D AV AL AT put} D +/OA {AL 0 gt{/AL AL 1 sub D /AT AV AL get D}if} D +/D1 {/BR {CP E pop E BN Mb{CP E pop eq{0 YI R}if}{pop}ie} D + /Sn {OU{C1 E ST cvs join ( Ld ) join /C1 E D}{pop}ie} D} D +/D1 {/BR {BN} D /Sn {OU {C1 E ST cvs join ( Ld ) join /C1 E D} {pop} ie} D} D +/TC {/TF t D /ML 0 D HN{SW pop dup ML gt{/ML E D}{pop}ie}forall NP /RM RM not D + RC /OU Tc D Ep /PN 0 D Ms not TP and{Ip}if /W IW ML sub Ts sub D + /A0 0 D TH{/BR {( ) join BT} D /Sn {pop} D /Au () D}if} D +/TN {0 eq{E EA PF HF or not XR and{HN E get Xr}{pop}ie} + {OU{Tn 0 ge{() BN}if /Tn E D}{pop}ie WB}ie} D +/NT {OU LB not and Tn 0 ge and{PL 0 eq{Ms not{CS CF FS}if CP dup + /y E YA sub D W 9 sub CS -1.8 mul XO L1 add 2 add{y M (.) show}for + HN Tn get dup SW pop IW E sub y M show CP BB M}if /Tn -1 D}if} D +/Ld {/DN E D HN DN Pn put [/View [/XYZ -4 Fl{PS}{CP YA add US E pop}ie null] + /Dest DN ST cvs cvn /DEST pdfmark} D +/C {ND 1 eq{1 sub}if TI mul /XO E D NL Nf not{pop()}if 0 3 -1 roll 1 A} D +/OP {BP not{NP}if PN 2 mod 0 eq{/Ms t D NP}if}D +/Ep {Xp PN 2 mod 0 eq and OU and{/Pn (-) D showpage /PM 1 D LA}if}D +/Dg [73 86 88 76 67 68 77] D +/Rd [0 [1 1 0][2 1 0][3 1 0][2 1 1][1 1 1][2 2 1][3 3 1][4 4 1][2 1 2]] D +/Ns {/m E D /c E 32 mul D /j m 1000 idiv D /p j 12 add string D + c 96 le m 0 gt and{c 32 le {/i 0 D /d 77 D /l 100 D /m m j 1000 mul sub D + j -1 1 {pop p i d c add put /i i 1 add D}for + 4 -2 0 {/j E D /n m l idiv D /m m n l mul sub D /d Dg j get D + n 0 gt {/x Rd n get D x 0 get -1 1 {pop p i d c add put /i i 1 add D}for + p i x 1 get sub Dg x 2 get j add get c add put}if /l l 10 idiv D + }for p 0 i GI} + {/i ST length 1 sub D m {1 sub dup 0 ge{dup 26 mod c add 1 add + ST i 3 -1 roll put 26 idiv dup 0 eq{pop exit}if}if /i i 1 sub D}loop + ST i ST length i sub GI}ie} + {m p cvs}ie} D +/US {matrix currentmatrix matrix defaultmatrix matrix invertmatrix + matrix concatmatrix transform} D +/GB {Gb{US}if}D +/Tl {/Rn E D Xc CP pop ne{ + [/Rect [Xc 1 sub Yc cS 0.25 mul sub GB CP E 1 add E cS 0.85 mul add GB] + /Subtype /Link /Border [0 0 Cf Lc and LX and AU or{0}{1}ie] Rn type + /nametype eq {/Dest Rn}{/Action [/Subtype /URI /URI Rn] Cd}ie + /ANN pdfmark}if} D +/Il {/Rn E D [/Rect [Xc Yc GB Xc XS add Yc YS add GB] /Subtype /Link + /Border [0 0 0] Rn type /nametype eq{/Dest Rn} + {/Action [/Subtype /URI /URI Rn] Cd}ie /ANN pdfmark} D +/XP {[{/Z Bz 2 div D Z 0 R Z Z RL Z neg Z RL Z neg Z neg RL Z Z neg RL + Fi cH 1 eq and{fill}if} {Bz 0 RL 0 Bz RL Bz neg 0 RL 0 Bz neg RL + Fi cH 1 eq and{fill}if} {0 -5 R Bz 0 RL 0 21 RL Bz neg 0 RL 0 -21 RL}]} D +/MS {/Sm E D WB}D +/O {BN()0 Sm BX} D +/BX {/Bt E D Bt 2 lt{/Ch E D CS 0.8 mul}{11 mul}ie W XO sub MR sub + 2 copy gt{E}if pop /HZ E D Bt 2 eq{Fi not{pop()}if ( )E join /Ft E D TT + /PF t D /MW 1 D /Li 1 D /Fw Ft SW pop D Fw HZ gt{/HZ Fw 8 add D}if + HZ ST cvs( )join}{WB Ch ST cvs( )join}ie L1 HZ add XO add MR add W gt{NL}if + Bt 2 eq{Ft ES Fw neg HM{CS sub}if Pd}if Bt ST cvs join( Bx )join + Bt 2 eq HM and{CS Pd}if C1 E join /C1 E D /L1 L1 HZ add D /T f D + ( ) Pd /PF f D Bt 2 lt{YA CS .8 mul lt{/YA CS .8 mul D}if} + {YB 5 lt{/YB 5 D}if YA 21 lt{/YA 21 D}if}ie /CI 0 D} D +/Bx {dup 2 eq{E /Bz E D}{E /cH E D /Bz CS .8 mul D}ie + OU {gsave 0 Sg XP E get exec stroke grestore}{pop}ie Bz 0 R /Ms t D}D +/SD {FD 4 mul Dy add DZ NF newpath 0 0 M DX t charpath pathbbox + 3 -1 roll sub /DY E D E dup /X1 E D sub WM mul WX DY mul add WM DG mul E div + /DF E D /DR WX DF mul DY mul WM div 2 div D} d +/Sd {gsave 0 IL Di mul neg translate IL IW atan Di 0 eq{neg}if rotate + FD 4 mul Dy add DZ NF DR X1 sub DY 2 div neg M cD VC DX show grestore} d +/Pt {/tp t D Tp{NP /Pn (TP) D 0 Tt neg R Th BN NP Ep ET RC ZF}if /tp f D} D +/RC {/AI 0 D /LG 0 D /BC 0 D /UI 0 D /PF f D /Cc 0 D /cC 0 D /Dc 10 array D + /NR [0 1 9{pop 0}for] D /La Ds D /AR 10 array D /TR 10 array D /AV 30 array D + SI /AL -1 D /AT A0 D AT NA /OV 9 array D /Yo 0 D /Co 0 D /Io 0 D /Hy f D + /Ph f D /CL -1 D Ct Sc}D +/ZF {/FR [0 1 30{pop 0}for] D /SZ [0 1 30{pop 0}for] D /FO [0 1 30{pop 0}for] D + /SL 0 D /CF 0 D /FN 0 D 0 Ts SF}D +/QO [[(\234)(\233)(\253\240)(\232)(\273)(\253)][(')(`)(\253\240)(\231)(\273)(\253)]] D +/QC [[(\234)(\234)(\240\273)(\233)(\253)(\273)][(')(')(\240\273)(`)(\253)(\273)]] D +/Hf EF length 2 sub D +/Hz EZ Hf get D +/HS Ey Hf get D +/Fz EZ Hf 1 add get D +/Fs Ey Hf 1 add get D +/LE IL D +/Ps EZ 1 get D +/Fp EF 1 get D +/XO 0 D +/YI 0 D +/CI 0 D +/FP 0 D +/WW Ts 7 mul D +/Mf 0 D +/YA 0 D +/YB 0 D +/Cs Ts D +/GS Ts D +/F0 0 D +/NS 0 D +/NB 0 D +/N 0 D +/C0 [] D +/C1 () D +/Lo 0 D +/L1 0 D +/LM 0 D +/PH 0 D +/EC 0 D +/Lh 0 D +/LT 0 D +/CH 1 string D +/ST 16 string D +/CA 9 array D +/HC (\255) D +/HM f D +/PF f D +/EN f D +/TB f D +/UF f D +/sF f D +/AE f D +/AF f D +/BP t D +/CD f D +/PA t D +/GL f D +/T t D +/HF f D +/AH f D +/SA f D +/PB f D +/f1 f D +/mF f D +/OX 0 D +/OY 0 D +/FY 0 D +/EO 0 D +/FB 0 D +/PL 0 D +/Bw 0 D +/PD -1 D +/TP f D +/tp f D +/TH t D +/Ty 4 D +/Tn -1 D +/Fl t D +/LB t D +/PM 1 D +/Ms f D +/Ba f D +/Bb f D +/Hl 3 D +/hl 6 D +/Hv 6 D +/Hs f D +/HI 0 D +/hi 0 D +/PO t D +/TE f D +/LF t D +/BO 0 D +/Sm 1 D +/Bf 3 D +/A1 0 D +/A2 0 D +/Ds 1 D +/QL -1 D +/Cb Db D +/Ct Dt D +/Cl Dl D +[/Creator (html2ps version 1.0 beta7) /Author () /Keywords (xsd, xml, schema, c++, mapping, data, binding, parsing, serialization, validation) /Subject () + /Title (C++/Tree Mapping Getting Started Guide) /DOCINFO pdfmark +/ND 1 D +/HN [(1) (1) (1) (1) (1) (1) (1) (1) (2) (3) (3) (5) (7) (7) (8) (11) (13) (15) +(16) (16) (16) (17) (17) (18) (20) (23) (24) (26) (29) (??) (32) (33) (35) +(36) (37) (38) (1) (1) (1) (1) (1) (2) (3) (3) (5) (7) (7) (8) (11) (13) +(15) (16) (16) (16) (17) (17) (18) (20) (23) (24) (26) (29) (32) (33) (35) +(36) (37) (38)] D +/h0 [()(Table of Contents)] D +/h1 [(1\240\240)(Preface)] D +/h2 [(1.1\240\240)(About This Document)] D +/h3 [(1.2\240\240)(More Information)] D +/h4 [(2\240\240)(1 Introduction)] D +/h5 [(2.1\240\240)(1.1 Mapping Overview)] D +/h6 [(2.2\240\240)(1.2 Benefits)] D +/h7 [(3\240\240)(2 Hello World Example)] D +/h8 [(3.1\240\240)(2.1 Writing XML Document and Schema)] D +/h9 [(3.2\240\240)(2.2 Translating Schema to C++)] D +/h10 [(3.3\240\240)(2.3 Implementing Application Logic)] D +/h11 [(3.4\240\240)(2.4 Compiling and Running)] D +/h12 [(3.5\240\240)(2.5 Adding Serialization)] D +/h13 [(3.6\240\240)(2.6 Selecting Naming Convention)] D +/h14 [(3.7\240\240)(2.7 Generating Documentation)] D +/h15 [(4\240\240)(3 Overall Mapping Configuration)] D +/h16 [(4.1\240\240)(3.1 C++ Standard)] D +/h17 [(4.2\240\240)(3.2 Character Type and Encoding)] D +/h18 [(4.3\240\240)(3.3 Support for Polymorphism)] D +/h19 [(4.4\240\240)(3.4 Namespace Mapping)] D +/h20 [(4.5\240\240)(3.5 Thread Safety)] D +/h21 [(5\240\240)(4 Working with Object Models)] D +/h22 [(5.1\240\240)(4.1 Attribute and Element Cardinalities)] D +/h23 [(5.2\240\240)(4.2 Accessing the Object Model)] D +/h24 [(5.3\240\240)(4.3 Modifying the Object Model)] D +/h25 [(5.4\240\240)(4.4 Creating the Object Model from Scratch)] D +/h26 [(5.5\240\240)(4.5 Mapping for the Built-in XML Schema Types)] D +/h27 [(6\240\240)(5 Parsing)] D +/h28 [(6.1\240\240)(5.1 XML Schema Validation and Searching)] D +/h29 [(6.2\240\240)(5.2 Error Handling)] D +/h30 [(7\240\240)(6 Serialization)] D +/h31 [(7.1\240\240)(6.1 Namespace and Schema Information)] D +/h32 [(7.2\240\240)(6.2 Error Handling)] D +/Hr [36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 +58 59 60 61 62 63 64 65 66 67]D +/HV [1 2 2 1 2 2 1 2 2 2 2 2 2 2 1 2 2 2 2 2 1 2 2 2 2 2 1 2 2 1 2 2]D +/Cn [2 0 0 2 0 0 7 0 0 0 0 0 0 0 5 0 0 0 0 0 5 0 0 0 0 0 2 0 0 2 0 0]D +Hr length 0 gt{[/PageMode /UseOutlines /DOCVIEW pdfmark}if +/Hn 1 D +0 1 Hr length 1 sub{ + /Bn E D [Cn Bn get dup 0 gt{/Count E HV Bn get Bl ge{neg}if}{pop}ie + /Dest Hr Bn get dup abs ST cvs cvn E 0 ge{(h)Hn ST cvs join cvx exec + dup 1 get E Nf{0 get E join}{pop}ie /Hn Hn 1 add D}{()}ie + /Title E dup length 255 gt{0 255 getinterval}if /OUT pdfmark}for +ZF /FN Fp D Ps 0 FS /WC Wf{( )}{}ie SW pop D +ET RC ZF +/Df f D +/R0 (http://www.codesynthesis.com/licenses/fdl-1.2.txt) D +/R1 (http://www.codesynthesis.com/projects/xsd/documentation/cxx/tree/guide/index.xhtml) D +/R2 (http://www.codesynthesis.com/projects/xsd/documentation/cxx/tree/guide/cxx-parser-guide.pdf) D +/R3 (http://www.codesynthesis.com/projects/xsd/documentation/cxx/tree/guide/cxx-parser-guide.ps) D +/R1 (http://www.codesynthesis.com/projects/xsd/documentation/cxx/tree/manual/) D +/R2 (http://wiki.codesynthesis.com/Tree/Customization_guide) D +/R3 (http://wiki.codesynthesis.com/Tree/FAQ) D +/R4 (http://www.codesynthesis.com/projects/xsd/documentation/xsd.xhtml) D +/R5 (http://www.codesynthesis.com/mailman/listinfo/xsd-users) D +/R6 (http://www.codesynthesis.com/pipermail/xsd-users/) D +/R7 (http://www.w3.org/TR/xmlschema-0/) D +/R8 (http://www.doxygen.org/) D +/R9 (http://www.codesynthesis.com/projects/xsd/documentation/cxx/tree/hello/html/annotated.html) D +/R10 (http://www.codesynthesis.com/projects/xsd/documentation/cxx/tree/manual/#2.11) D +/R11 (http://www.codesynthesis.com/projects/xsd/documentation/cxx/tree/manual/#2.8.4) D +/R12 (http://www.codesynthesis.com/projects/xsd/documentation/cxx/tree/manual/#2.8) D +/R13 (http://www.codesynthesis.com/projects/xsd/documentation/cxx/tree/manual/#2.5) D +/R14 (http://www.codesynthesis.com/projects/xsd/documentation/cxx/tree/manual/#2.9) D +/R15 (http://www.codesynthesis.com/projects/xsd/documentation/cxx/tree/manual/#3) D +/R16 (http://www.codesynthesis.com/projects/xsd/documentation/cxx/tree/manual/#3.3) D +/R17 (http://www.codesynthesis.com/projects/xsd/documentation/cxx/tree/manual/#4) D +/R18 (http://www.codesynthesis.com/projects/xsd/documentation/cxx/tree/manual/#4.4) D +/TS { + tables E get /table E D + table aload pop /rdesc E D /cdesc E D /tdesc E D + tdesc aload pop /capalg E D /caption E D /rules E D /frame E D /nfoot E D + /nhead E D /ncol E D /nrow E D /border E D /twid E D /units E D /talign E D + /flow E D /clear E D /tclass E D pop pop + /w W D /eps 0.1 D /OU f D /PL 1 D + /FN EF 21 get D EZ 21 get Ey 21 get FS + 0 1 1{ + /pass E D + 0 1 nrow{ + /irow E D + /cells rdesc irow get 6 get D + 0 1 ncol{ + /icol E D + /cell cells icol get D + cell 0 ne{ + cell aload pop /ang E D /CB E D pop pop pop + /DV E D /bot E D /top E D /right E D /left E D /nowrap E D /valign E D + /dp E D /align E D /rspan E D /cspan E D /cclass E D /ctype E D /cmax E D + /cmin E D /proc E D + rspan 0 eq{/rspan nrow irow sub 1 add D}if + cspan 0 eq{/cspan ncol icol sub 1 add D}if + pass 0 eq cspan 1 eq and pass 1 eq cspan 1 gt and or{ + /W 1e5 D /LL W D /PH 1 D + ctype 1 eq{() BD}if + RC align NA + AT 4 eq{/CD t D /DC dp D /LN 0 D /M1 0 D /M2 0 D}{/CD f D}ie + 0 0 M /LM 0 D proc exec BN + AT 4 eq{ + LN array astore cell 15 3 -1 roll put + cdesc icol get dup dup 5 get M1 lt{5 M1 put}{5 get /M1 E D}ie + dup 6 get M2 lt{6 M2 put}{6 get /M2 E D}ie + /LM M1 M2 add D + }if + /CD f D + ang 0 ne{/LM CP E pop neg D}if + /thiswid LM left add right add eps add D + /oldmin 0 D /oldmax 0 D + 0 1 cspan 1 sub{ + icol add cdesc E get dup 2 get /oldmax E oldmax add D + 1 get /oldmin E oldmin add D + }for + thiswid oldmax ge{ + 0 1 cspan 1 sub{ + icol add cdesc E get dup 2 E 2 get oldmax 0 eq + {pop thiswid cspan div}{thiswid mul oldmax div}ie + put + }for + }if + nowrap 1 eq{ + thiswid oldmin ge{ + 0 1 cspan 1 sub{ + icol add cdesc E get dup 1 E 1 get oldmin 0 eq + {pop thiswid cspan div}{thiswid mul oldmin div}ie + put + }for + }if + }{ + /W 0 D /LL W D /PH 2 D + ctype 1 eq{() ES () BD}if + 0 0 M /LM 0 D RC proc exec BN + /thiswid LM left add right add eps add D + thiswid oldmin ge{ + 0 1 cspan 1 sub{ + icol add cdesc E get dup 1 E 1 get oldmin 0 eq + {pop thiswid cspan div}{thiswid mul oldmin div}ie + put + }for + }if + }ie + ctype 1 eq{() ES}if + }if + }if + }for + }for + }for + /tmin 0 D /tmax 0 D + 0 1 ncol{ + cdesc E get dup 1 get E 2 get 2 copy gt{pop dup}if + tmax add /tmax E D tmin add /tmin E D + }for + twid 0 lt{twid neg IW gt{IW neg}{twid}ie /twid E D}if + tdesc 0 twid neg tmin 2 copy lt{E}if pop put + tdesc 1 twid neg tmax 2 copy lt{E}if pop put + /W w D /LL W D /OU t D /PH 0 D /PL 0 D +} D +/PT { + /PL PL 1 add D + tables E get /table E D Tm 21 get Ts mul BE + PL 2 ge{save}if + /SL SL 1 add D /FN EF 21 get D EZ 21 get Ey 21 get FS + table aload pop /rdesc E D /cdesc E D /tdesc E D + tdesc aload pop /capalg E D /caption E D /rules E D /frame E D /nfoot E D + /nhead E D /ncol E D /nrow E D /border E D /twid E D /units E D /talign E D + /flow E D /clear E D /tclass E D /tmax E D /tmin E D + /w W D /xo XO D /mr MR D /ll LL D /lg LG D /ai AI D /bc BC D /nr NR D /ar AR D + /tr TR D /ui UI D /ph PH D /a0 A0 D /pf PF D /at AT D /av AV D /al AL D + /Le LE D /la La D + talign 0 lt{/talign AL 0 gt{AV AL get}{A0 2 le{A0}{0}ie}ie D}if + ph 1 eq ph 2 eq or{ + NL ph 1 eq{tmax}{tmin}ie dup XO add LM gt{/LM E XO add D}{pop}ie LM E + }{ + /PH 3 D /LE 1e5 D RC %ZF + border 0 gt{/border 1 D}if + /twidth 0 D /avail W xo sub D + twid 0 eq{0 1 ncol{cdesc E get dup 2 get E 3 get dup 0 gt{div neg dup twid lt + {/twid E D}{pop}ie}{pop pop}ie}for}if + /twid twid dup 0 lt{neg avail 2 copy gt{E}if pop}{avail mul}ie D + /OK t D 0 1 ncol{cdesc E get dup 1 get E 3 get twid mul gt{/OK f D}if}for + 0 1 ncol{ + cdesc E get dup 1 get /colmin E D dup 3 get /cwid E twid mul D dup + tmax avail le{2 get}if + tmin avail le tmax avail gt and{ + dup 2 get E 1 get dup 3 1 roll sub avail tmin sub mul tmax tmin sub div add + }if + tmin avail gt{1 get}if + 0 E colmin cwid lt OK and{pop cwid}if dup /twidth E twidth add D put + }for + /OU f D CP + tmin twid le{ + 0 1 ncol{cdesc E get dup 0 get twidth div twid mul 0 E put}for + /twidth twid D + }if + CP printcap CP E pop sub /caphig E D pop + 0 1 1{ + /pass E D + 0 1 nrow{ + /irow E D + /cells rdesc irow get 6 get D + 0 1 ncol{ + /icol E D + /cell cells icol get D + cell 0 ne{ + cell aload pop /ang E D /CB E D pop pop pop + /DV E D /bot E D /top E D /right E D /left E D /nowrap E D /valign E D + /dp E D /align E D /rspan E D /cspan E D /cclass E D /ctype E D /cmax E D + /cmin E D /proc E D + rspan 0 eq{/rspan nrow irow sub 1 add D}if + cspan 0 eq{/cspan ncol icol sub 1 add D}if + /W 0 D + 0 1 cspan 1 sub{icol add cdesc E get 0 get /W E W add D}for + pass 0 eq rspan 1 eq and pass 1 eq rspan 1 gt and or{ + ctype 1 eq{() BD}if + /W W left sub right sub D /XO 0 D /EO 0 D SI + /A0 align D RC align NA + AT 4 eq{ + /DC dp D /DO 0 D /ID 1 D + 0 1 DV length 1 sub{DV E get dup DO gt{/DO E D}{pop}ie}for + /Lo DO DV 0 get sub D /L1 Lo D + }if + 0 0 M /BP t D /Fl t D /MF 0 D /FB 0 D + proc exec T not{/CI 0 D}if BN 0 FB neg R MF 0 eq{/MF CS D}if + CP /thishig E neg bot add top add CI add D pop + ang 0 ne{/thishig LM bot add top add D}if + cell 16 MF put cell 17 Ya put cell 18 thishig put + valign 4 eq{ + /below thishig Ya sub D + rdesc irow get dup dup 4 get Ya lt + {4 Ya put}{4 get /Ya E D}ie + dup 5 get below lt{5 below put}{5 get /below E D}ie + /thishig Ya below add D + }if + ctype 1 eq{()ES}if + /oldhig 0 D + 0 1 rspan 1 sub{ + irow add rdesc E get 0 get /oldhig E oldhig add D + }for + thishig oldhig ge{ + 0 1 rspan 1 sub{ + irow add rdesc E get dup 0 E 0 get oldhig 0 eq + {pop thishig rspan div}{thishig mul oldhig div}ie + put + }for + }if + }if + }if + }for + }for + }for M RC %ZF + /thight 0 D /racc 0 D /maxh 0 D /brk 0 D /rbeg nhead nfoot add D + 0 1 nrow{ + rdesc E get dup 0 get dup /thight E thight add D + brk 0 eq{/racc E D}{/racc E racc add D}ie + racc maxh gt{/maxh racc D}if 2 get /brk E D + }for + ph 3 ge{thight caphig add E}if + ph 0 eq ph 4 eq or{ + /PH 4 D /LE Le D /OU Ou D /yoff 0 D /headsz 0 D + 0 1 nhead 1 sub{rdesc E get 0 get headsz add /headsz E D}for + /footsz 0 D + 0 1 nfoot 1 sub{rdesc E nhead add get 0 get footsz add /footsz E D}for + /ahig LE BO add MI add D /maxh maxh headsz add footsz add D + /thight thight headsz add footsz add D + tmin avail gt maxh ahig gt or + {/Sf avail tmin div dup ahig maxh div gt{pop ahig maxh div}if D /SA t D} + {/Sf 1 D}ie + tclass 1 eq thight LE 15 sub gt and + {/SA t D LE 15 sub thight div dup Sf lt{/Sf E D}{pop}ie}if + SA{Sf Sf scale /ll ll Sf div D /xo xo Sf div D /LE LE Sf div D + /mr mr Sf div D /BO BO Sf div D /ahig ahig Sf div D}if + nhead nfoot add getwid + LE CP E pop add capalg 0 eq{caphig sub}if + bT{f}{dup thight lt thight ahig lt and}ie + E headsz sub footsz sub rwid lt or{NP}if + capalg 0 eq{printcap -8 SP}if + CP /ycur E D pop + printhead + rbeg 1 nrow{/row E D row + getwid + ycur yoff add rwid sub footsz sub LE add 0 lt + {nfoot 0 gt{printfoot}if Tf NP /rbeg irow1 D + Ba{MI /MI MI SA{Sf div}if D MI SP /MI E D}if + CP /ycur E D pop /yoff 0 D printhead}if + irow1 printrow + }for + printfoot /row row 1 add D Tf + 0 ycur yoff add M + capalg 1 eq{/EO 0 D SI -3 SP printcap}if + Sf 1 lt{1 Sf div dup scale /ll ll Sf mul D /xo xo Sf mul D /LE LE Sf mul D + /mr mr Sf mul D /BO BO Sf mul D /SA f D}if + /EO 0 D + }if + }ie + /W w D /XO xo D /MR mr D /LL ll D /LG lg D /AI ai D /BC bc D /NR nr D /AR ar D + /TR tr D /UI ui D /PH ph D /A0 a0 D /PF pf D /AT at D /AV av D /AL al D + /La la D + /SL SL 1 sub NN D /CF 0 D /FN 0 D SZ SL get FR SL get FS Wf not{()F2}if + PL 2 ge{Ms E restore Ms or /Ms E D PH 1 eq PH 2 eq or + {/LM E D}if PH 3 ge{/CI 0 D NL 0 E neg R}if + }if + /PL PL 1 sub D /CI 0 D /BP f D /PO f D () Bm 21 get Ts mul BE BL %CF CS SF +} D +/printcap{ + capalg 0 ge{ + SA{/W w Sf div D} + {talign 1 eq{/XO xo ll twidth sub 2 div add D}if + talign 2 eq{/XO xo ll twidth sub add D}if + /W XO twidth add D + }ie /XO xo D /LL W XO sub MR sub D + /PA f D /Fl capalg 0 eq D + 1 NA BL caption exec BN OA /PA t D + }if +} D +/getwid{ + /irow1 E D + /irow2 irow1 D + /rwid 0 D + {rdesc irow2 get dup 0 get rwid add /rwid E D 2 get 0 eq + {exit}{/irow2 irow2 1 add D}ie + }loop +} D +/printrow{ + /xoff ll twidth PL 2 ge{Sf div}if sub talign mul 2 div D + /xleft xoff xo add D + /irow E D + /cells rdesc irow get 6 get D + 0 1 ncol{ + /icol E D + /cell cells icol get D + cell 0 ne{ + cell aload pop /ang E D /CB E D /cvsize E D /above E D /fontsz E D + /DV E D /bot E D /top E D /right E D /left E D /nowrap E D /valign E D + /dp E D /align E D /rspan E D /cspan E D /cclass E D /ctype E D /cmax E D + /cmin E D /proc E D + rspan 0 eq{/rspan nrow irow sub 1 add D}if + cspan 0 eq{/cspan ncol icol sub 1 add D}if + /width 0 D + 0 1 cspan 1 sub{icol add cdesc E get 0 get /width E width add D}for + /rhight rdesc irow get 0 get D + /hight rhight D + 1 1 rspan 1 sub{irow add rdesc E get 0 get /hight E hight add D}for + /W xo xoff add width add right sub D + ang 0 ne{/W xo xoff add hight add right sub D}if + /EO xo xoff add left add D SI + Cf{ + gsave CB VC xo xoff add ycur yoff add M + 0 hight neg RL width 0 RL 0 hight RL width neg 0 RL fill + grestore + }if + ctype 1 eq{() BD}if + /A0 align D RC + AT 4 eq{ + /DC dp D /ID 1 D /DO cdesc icol get 5 get D /Lo DO DV 0 get sub D /L1 Lo D + }if + ang 0 ne{ + gsave ang 90 eq + {xoff ycur add hight cvsize sub 2 div sub ycur hight sub xoff sub} + {xoff ycur sub width add hight cvsize sub 2 div add ycur xoff add}ie + translate ang rotate + }if + valign 3 le{0 ycur yoff add top sub + hight cvsize sub valign 1 sub mul 2 div sub M} + {0 ycur yoff add top sub above add rdesc irow get 4 get sub M}ie + /PA f D /BP t D /Fl t D + BL proc exec BN + ang 0 ne{grestore}if + /PA t D + ctype 1 eq{() ES}if + }if + /xoff xoff cdesc icol get 0 get add D + }for + /yoff yoff rhight sub D +} D +/printhead {0 1 nhead 1 sub{printrow}for} D +/printfoot {nhead 1 nhead nfoot add 1 sub{printrow}for} D +/Tf { + OU{rules 2 ge{/yoff 0 D + gsave 0 Sg + [0 1 nhead 1 sub{}for rbeg 1 row 1 sub{}for nhead 1 nhead nfoot add 1 sub{}for]{ + /irow E D + /xoff ll twidth PL 2 ge{Sf div}if sub talign mul 2 div D + /cells rdesc irow get 6 get D + 0 1 ncol{ + /icol E D + /cell cells icol get D + cell 0 ne{ + /rspan cell 6 get D + /cspan cell 5 get D + rspan 0 eq{/rspan nrow irow sub 1 add D}if + cspan 0 eq{/cspan ncol icol sub 1 add D}if + /width 0 D + 0 1 cspan 1 sub{icol add cdesc E get 0 get /width E width add D}for + /rhight rdesc irow get 0 get D + /hight rhight D + 1 1 rspan 1 sub{irow add rdesc E get 0 get /hight E hight add D}for + xo xoff add width add ycur yoff add M + 0 hight neg icol cspan add 1 sub ncol lt + {cdesc icol 1 add get 4 get dup rules 3 le{1 eq}{pop t}ie + {1 eq{0.8}{0.3}ie + LW RL CP stroke M}{pop R}ie}{R}ie + irow nhead nfoot add 1 sub ne nfoot 0 eq or + {irow rspan add 1 sub nrow lt + {rdesc irow rspan add get 3 get}{nfoot 0 eq{0}{1}ie}ie + dup rules 2 mod 0 eq{1 eq}{pop t}ie + {1 eq irow rspan add nhead eq or irow rspan add row eq nfoot 0 gt and or + {0.8}{0.3}ie LW width neg 0 RL CP stroke M}{pop}ie}if + }if + /xoff xoff cdesc icol get 0 get add D + }for + /yoff yoff rhight sub D + }forall + grestore + /Ms t D + }if + frame 1 gt{ + gsave + 1 LW 0 Sg + xleft ycur M CP BB + 0 yoff frame 5 eq frame 7 ge or{RL}{R}ie + twidth 0 frame 3 eq frame 4 eq or frame 8 ge or{RL}{R}ie CP BB + 0 yoff neg frame 6 ge{RL}{R}ie + twidth neg 0 frame 2 eq frame 4 eq or frame 8 ge or{RL}{R}ie + closepath stroke + grestore + /Ms t D + }if + }if +} D +/tables [[[0 0 0 0 0 -1 0 0 1 55 2 0 0 9 5 {()} -1] + [[0 0 0 0 0 0 0][0 0 0 0 0 0 0][0 0 0 0 0 0 0]] + [[0 0 0 0 0 0 [[{()1 Sl()WB(XML Schema type)} 0 0 1 0 1 1 1 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB(Alias in the )SM(xml_schema)ES( names)HY(pace)YH()} 0 0 1 0 1 1 1 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB(C++ type + )} 0 0 1 0 1 1 1 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB(fixed-length inte)HY(gral)YH( types + )} 0 0 1 0 3 1 1 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +0 +0 +]] +[0 0 0 0 0 0 [[{()1 Sl()WB()SM(byte)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(byte)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(signed\240char)ES( + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB()SM(unsigned)HY(Byte)YH()ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(unsigned_byte)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(unsigned\240char)ES( + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB()SM(short)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(short_)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(short)ES( + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB()SM(unsigned)HY(Short)YH()ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(unsigned_short)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(unsigned\240short)ES( + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB()SM(int)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(int_)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(int)ES( + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB()SM(unsignedInt)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(unsigned_int)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(unsigned\240int)ES( + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB()SM(long)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(long_)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(long\240long)ES( + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB()SM(unsigned)HY(Long)YH()ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(unsigned_long)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(unsigned\240long\240long)ES( + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB(arbi)HY(trary)YH(-length inte)HY(gral)YH( types + )} 0 0 1 0 3 1 1 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +0 +0 +]] +[0 0 0 0 0 0 [[{()1 Sl()WB()SM(integer)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(integer)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(long\240long)ES( + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB()SM(nonPos)HY(i)HY(tiveIn)HY(te)HY(ger)YH()ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(non_posi)HY(tive)YH(_integer)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(long\240long)ES( + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB()SM(nonNeg)HY(a)HY(tiveIn)HY(te)HY(ger)YH()ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(non_nega)HY(tive)YH(_integer)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(unsigned long\240long)ES( + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB()SM(posi)HY(tiveIn)HY(te)HY(ger)YH()ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(posi)HY(tive)YH(_integer)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(unsigned long\240long)ES( + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB()SM(nega)HY(tiveIn)HY(te)HY(ger)YH()ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(nega)HY(tive)YH(_integer)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(long\240long)ES( + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB(boolean types + )} 0 0 1 0 3 1 1 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +0 +0 +]] +[0 0 0 0 0 0 [[{()1 Sl()WB()SM(boolean)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(boolean)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(bool)ES( + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB(fixed-preci)HY(sion)YH( float)HY(ing)YH(-point types + )} 0 0 1 0 3 1 1 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +0 +0 +]] +[0 0 0 0 0 0 [[{()1 Sl()WB()SM(float)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(float_)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(float)ES( + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB()SM(double)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(double_)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(double)ES( + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB(arbi)HY(trary)YH(-preci)HY(sion)YH( float)HY(ing)YH(-point types + )} 0 0 1 0 3 1 1 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +0 +0 +]] +[0 0 0 0 0 0 [[{()1 Sl()WB()SM(decimal)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(decimal)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(double)ES( + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB(string types + )} 0 0 1 0 3 1 1 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +0 +0 +]] +[0 0 0 0 0 0 [[{()1 Sl()WB()SM(string)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(string)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB(type derived from )SM(std::basic_string)ES( + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB()SM(normal)HY(ized)HY(String)YH()ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(normal)HY(ized)YH(_string)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB(type derived from )SM(string)ES( + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB()SM(token)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(token)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB(type\240derived\240from\240)SM(normal)HY(ized)YH(_string)ES( + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB()SM(Name)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(name)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB(type derived from )SM(token)ES( + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB()SM(NMTOKEN)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(nmtoken)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB(type derived from )SM(token)ES( + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB()SM(NMTO)HY(KENS)YH()ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(nmto)HY(kens)YH()ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB(type derived from )SM(sequence)ES( + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB()SM(NCName)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(ncname)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB(type derived from )SM(name)ES( + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB()SM(language)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(language)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB(type derived from )SM(token)ES( + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB(qual)HY(i)HY(fied)YH( name + )} 0 0 1 0 3 1 1 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +0 +0 +]] +[0 0 0 0 0 0 [[{()1 Sl()WB()SM(QName)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(qname)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(xml_schema::qname)ES( + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB(ID/IDREF types + )} 0 0 1 0 3 1 1 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +0 +0 +]] +[0 0 0 0 0 0 [[{()1 Sl()WB()SM(ID)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(id)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB(type derived from )SM(ncname)ES( + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB()SM(IDREF)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(idref)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB(type derived from )SM(ncname)ES( + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB()SM(IDREFS)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(idrefs)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB(type derived from )SM(sequence)ES( + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB(URI types + )} 0 0 1 0 3 1 1 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +0 +0 +]] +[0 0 0 0 0 0 [[{()1 Sl()WB()SM(anyURI)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(uri)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB(type derived from )SM(std::basic_string)ES( + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB(binary types + )} 0 0 1 0 3 1 1 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +0 +0 +]] +[0 0 0 0 0 0 [[{()1 Sl()WB()SM(base64Binary)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(base64_binary)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(xml_schema::base64_binary)ES( + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB()SM(hexBi)HY(nary)YH()ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(hex_binary)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(xml_schema::hex_binary)ES( + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB(date/time types + )} 0 0 1 0 3 1 1 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +0 +0 +]] +[0 0 0 0 0 0 [[{()1 Sl()WB()SM(date)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(date)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(xml_schema::date)ES( + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB()SM(date)HY(Time)YH()ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(date_time)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(xml_schema::date_time)ES( + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB()SM(dura)HY(tion)YH()ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(dura)HY(tion)YH()ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(xml_schema::dura)HY(tion)YH()ES( + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB()SM(gDay)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(gday)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(xml_schema::gday)ES( + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB()SM(gMonth)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(gmonth)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(xml_schema::gmonth)ES( + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB()SM(gMon)HY(th)HY(Day)YH()ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(gmonth_day)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(xml_schema::gmonth_day)ES( + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB()SM(gYear)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(gyear)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(xml_schema::gyear)ES( + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB()SM(gYear)HY(Month)YH()ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(gyear_month)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(xml_schema::gyear_month)ES( + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB()SM(time)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(time)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(xml_schema::time)ES( + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB(entity types + )} 0 0 1 0 3 1 1 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +0 +0 +]] +[0 0 0 0 0 0 [[{()1 Sl()WB()SM(ENTITY)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(entity)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB(type derived from )SM(name)ES( + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB()SM(ENTI)HY(TIES)YH()ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(enti)HY(ties)YH()ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB(type derived from )SM(sequence)ES( + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +]] +] D +0 1 0{TS}for RC ZF +/Ba f D /BO 0 D Bs +/UR (/home/boris/work/xsd/xsd/doc/cxx/tree/guide/index.xhtml) D +/Ti (C++/Tree Mapping Getting Started Guide) D +/Au () D +/Df f D +/ME [] D +Pt +/BO 0 D TC /Ba f D Bs /AU f D /UR () D RC ZF + tH WB +ND 1 gt{Ts 3 mul Np 0()0 C()BD(C++/Tree Mapping Getting Started Guide)ES()0 1 TN()EA()BN}if +1 NH le{36(1\240\240)1 C(Preface)WB 3 Sn()36 1 TN()EA()BN}if +2 NH le{37(1.1\240\240)2 C(About)WB 4 Sn( This Docu)HY(ment)YH()37 1 TN()EA()BN}if +2 NH le{38(1.2\240\240)2 C(More)WB 5 Sn( Infor)HY(ma)HY(tion)YH()38 1 TN()EA()BN}if +1 NH le{39(2\240\240)1 C(1)WB 6 Sn( Intro)HY(duc)HY(tion)YH()39 1 TN()EA()BN}if +2 NH le{40(2.1\240\240)2 C(1.1)WB 7 Sn( Mapping Overview)40 1 TN()EA()BN}if +2 NH le{41(2.2\240\240)2 C(1.2)WB 8 Sn( Bene)HY(fits)YH()41 1 TN()EA()BN}if +1 NH le{42(3\240\240)1 C(2)WB 9 Sn( Hello World Example)42 1 TN()EA()BN}if +2 NH le{43(3.1\240\240)2 C(2.1)WB 10 Sn( Writing XML Docu)HY(ment)YH( and Schema)43 1 TN()EA()BN}if +2 NH le{44(3.2\240\240)2 C(2.2)WB 11 Sn( Trans)HY(lat)HY(ing)YH( Schema to C++)44 1 TN()EA()BN}if +2 NH le{45(3.3\240\240)2 C(2.3)WB 12 Sn( Imple)HY(ment)HY(ing)YH( Appli)HY(ca)HY(tion)YH( Logic)45 1 TN()EA()BN}if +2 NH le{46(3.4\240\240)2 C(2.4)WB 13 Sn( Compil)HY(ing)YH( and Running)46 1 TN()EA()BN}if +2 NH le{47(3.5\240\240)2 C(2.5)WB 14 Sn( Adding Seri)HY(al)HY(iza)HY(tion)YH()47 1 TN()EA()BN}if +2 NH le{48(3.6\240\240)2 C(2.6)WB 15 Sn( Select)HY(ing)YH( Naming Conven)HY(tion)YH()48 1 TN()EA()BN}if +2 NH le{49(3.7\240\240)2 C(2.7)WB 16 Sn( Gener)HY(at)HY(ing)YH( Docu)HY(men)HY(ta)HY(tion)YH()49 1 TN()EA()BN}if +1 NH le{50(4\240\240)1 C(3)WB 17 Sn( Overall Mapping Config)HY(u)HY(ra)HY(tion)YH()50 1 TN()EA()BN}if +2 NH le{51(4.1\240\240)2 C(3.1)WB 18 Sn( C++ Stan)HY(dard)YH()51 1 TN()EA()BN}if +2 NH le{52(4.2\240\240)2 C(3.2)WB 19 Sn( Char)HY(ac)HY(ter)YH( Type and Encod)HY(ing)YH()52 1 TN()EA()BN}if +2 NH le{53(4.3\240\240)2 C(3.3)WB 20 Sn( Support for Poly)HY(mor)HY(phism)YH()53 1 TN()EA()BN}if +2 NH le{54(4.4\240\240)2 C(3.4)WB 21 Sn( Names)HY(pace)YH( Mapping)54 1 TN()EA()BN}if +2 NH le{55(4.5\240\240)2 C(3.5)WB 22 Sn( Thread Safety)55 1 TN()EA()BN}if +1 NH le{56(5\240\240)1 C(4)WB 23 Sn( Working with Object Models)56 1 TN()EA()BN}if +2 NH le{57(5.1\240\240)2 C(4.1)WB 24 Sn( Attribute and Element Cardi)HY(nal)HY(i)HY(ties)YH()57 1 TN()EA()BN}if +2 NH le{58(5.2\240\240)2 C(4.2)WB 25 Sn( Access)HY(ing)YH( the Object Model)58 1 TN()EA()BN}if +2 NH le{59(5.3\240\240)2 C(4.3)WB 26 Sn( Modi)HY(fy)HY(ing)YH( the Object Model)59 1 TN()EA()BN}if +2 NH le{60(5.4\240\240)2 C(4.4)WB 27 Sn( Creat)HY(ing)YH( the Object Model from Scratch)60 1 TN()EA()BN}if +2 NH le{61(5.5\240\240)2 C(4.5)WB 28 Sn( Mapping for the Built-in XML Schema Types)61 1 TN()EA()BN}if +1 NH le{62(6\240\240)1 C(5)WB 30 Sn( Parsing)62 1 TN()EA()BN}if +2 NH le{63(6.1\240\240)2 C(5.1)WB 31 Sn( XML Schema Vali)HY(da)HY(tion)YH( and Search)HY(ing)YH()63 1 TN()EA()BN}if +2 NH le{64(6.2\240\240)2 C(5.2)WB 32 Sn( Error Handling)64 1 TN()EA()BN}if +1 NH le{65(7\240\240)1 C(6)WB 33 Sn( Seri)HY(al)HY(iza)HY(tion)YH()65 1 TN()EA()BN}if +2 NH le{66(7.1\240\240)2 C(6.1)WB 34 Sn( Names)HY(pace)YH( and Schema Infor)HY(ma)HY(tion)YH()66 1 TN()EA()BN}if +2 NH le{67(7.2\240\240)2 C(6.2)WB 35 Sn( Error Handling)67 1 TN()EA()BN}if +/OU t D /Cb Db D NP Ep ET +/Cb Db D /Ct [16#00 16#00 16#00] D /Cl [16#00 16#00 16#00] D /CL -1 D Ct Sc + +/Ba f D /BO 0 D Bs +/UR (/home/boris/work/xsd/xsd/doc/cxx/tree/guide/index.xhtml) D +/Ti (C++/Tree Mapping Getting Started Guide) D +/Au () D +/Df f D +/ME [] D + +NP RC ZF +()1 Sl()WB 0 Sn( + +)BR()WB 1 Sn( )BR()WB 2 Sn( + + + )0 1 0 H(Preface)WB 36 Sn()WB 3 Sn()EA()EH( + + )0 2 1 H(About)WB 37 Sn()WB 4 Sn( This Docu)HY(ment)YH()EA()EH( + + )0 P(The goal of this docu)HY(ment)YH( is to provide you with an under)HY(stand)HY(ing)YH( of + the C++/Tree program)HY(ming)YH( model and allow you to effi)HY(ciently)YH( eval)HY(u)HY(ate)YH( + XSD against your project's tech)HY(ni)HY(cal)YH( require)HY(ments)YH(. As such, this + docu)HY(ment)YH( is intended for C++ devel)HY(op)HY(ers)YH( and soft)HY(ware)YH( archi)HY(tects)YH( + who are looking for an XML process)HY(ing)YH( solu)HY(tion)YH(. For a more in-depth + descrip)HY(tion)YH( of the C++/Tree mapping refer to the + )R1 2 A(C++/Tree + Mapping User Manual)EA(.)EP( + + )0 P(Prior expe)HY(ri)HY(ence)YH( with XML and C++ is required to under)HY(stand)YH( this + docu)HY(ment)YH(. Basic under)HY(stand)HY(ing)YH( of XML Schema is advan)HY(ta)HY(geous)YH( but + not expected or required. + )EP( + + + )0 2 2 H(More)WB 38 Sn()WB 5 Sn( Infor)HY(ma)HY(tion)YH()EA()EH( + + )0 P(Beyond this guide, you may also find the follow)HY(ing)YH( sources of + infor)HY(ma)HY(tion)YH( useful:)EP( + + )UL( )-1 LI()R1 2 A(C++/Tree + Mapping User Manual)EA( + + )-1 LI()R2 2 A(C++/Tree + Mapping Customiza)HY(tion)YH( Guide)EA( + + )-1 LI()R3 2 A(C++/Tree + Mapping Frequently Asked Ques)HY(tions)YH( \201FAQ\202)EA( + + )-1 LI()R4 2 A(XSD + Compiler Command Line Manual)EA( + + )-1 LI(The )SM(exam)HY(ples)YH(/cxx/tree/)ES( direc)HY(tory)YH( in the XSD + distri)HY(bu)HY(tion)YH( contains a collec)HY(tion)YH( of exam)HY(ples)YH( and a README + file with an overview of each example. + + )-1 LI(The )SM(README)ES( file in the XSD distri)HY(bu)HY(tion)YH( explains + how to compile the exam)HY(ples)YH( on various plat)HY(forms)YH(. + + )-1 LI(The )R5 2 A(xsd-users)EA( + mailing list is the place to ask tech)HY(ni)HY(cal)YH( ques)HY(tions)YH( about XSD and the C++/Parser mapping. + Further)HY(more)YH(, the )R6 2 A(archives)EA( + may already have answers to some of your ques)HY(tions)YH(. + )LU( + + + + )0 1 3 H(1)WB 39 Sn()WB 6 Sn( Intro)HY(duc)HY(tion)YH()EA()EH( + + )0 P(Welcome to CodeSyn)HY(the)HY(sis)YH( XSD and the C++/Tree mapping. XSD is a + cross-plat)HY(form)YH( W3C XML Schema to C++ data binding compiler. C++/Tree + is a W3C XML Schema to C++ mapping that repre)HY(sents)YH( the data stored + in XML as a stat)HY(i)HY(cally)YH(-typed, vocab)HY(u)HY(lary)YH(-specific object model. + )EP( + + )0 2 4 H(1.1)WB 40 Sn()WB 7 Sn( Mapping Overview)EA()EH( + + )0 P(Based on a formal descrip)HY(tion)YH( of an XML vocab)HY(u)HY(lary)YH( \201schema\202, the + C++/Tree mapping produces a tree-like data struc)HY(ture)YH( suit)HY(able)YH( for + in-memory process)HY(ing)YH(. The core of the mapping consists of C++ + classes that consti)HY(tute)YH( the object model and are derived from + types defined in XML Schema as well as XML parsing and + seri)HY(al)HY(iza)HY(tion)YH( code.)EP( + + )0 P(Besides the core features, C++/Tree provide a number of addi)HY(tional)YH( + mapping elements that can be useful in some appli)HY(ca)HY(tions)YH(. These + include seri)HY(al)HY(iza)HY(tion)YH( and extrac)HY(tion)YH( to/from formats others than + XML, such as unstruc)HY(tured)YH( text \201useful for debug)HY(ging)YH(\202 and binary + repre)HY(sen)HY(ta)HY(tions)YH( such as XDR and CDR for high-speed data process)HY(ing)YH( + as well as auto)HY(matic)YH( docu)HY(men)HY(ta)HY(tion)YH( gener)HY(a)HY(tion)YH(. The C++/Tree mapping + also provides a wide range of mech)HY(a)HY(nisms)YH( for control)HY(ling)YH( and + customiz)HY(ing)YH( the gener)HY(ated)YH( code.)EP( + + )0 P(A typical appli)HY(ca)HY(tion)YH( that uses C++/Tree for XML process)HY(ing)YH( usually + performs the follow)HY(ing)YH( three steps: it first reads \201parses\202 an XML + docu)HY(ment)YH( to an in-memory object model, it then performs some useful + compu)HY(ta)HY(tions)YH( on that object model which may involve modi)HY(fi)HY(ca)HY(tion)YH( + of the model, and finally it may write \201seri)HY(al)HY(ize)YH(\202 the modi)HY(fied)YH( + object model back to XML.)EP( + + )0 P(The next chapter presents a simple appli)HY(ca)HY(tion)YH( that performs these + three steps. The follow)HY(ing)YH( chap)HY(ters)YH( show how to use the C++/Tree + mapping in more detail.)EP( + + )0 2 5 H(1.2)WB 41 Sn()WB 8 Sn( Bene)HY(fits)YH()EA()EH( + + )0 P(Tradi)HY(tional)YH( XML access APIs such as Docu)HY(ment)YH( Object Model \201DOM\202 + or Simple API for XML \201SAX\202 have a number of draw)HY(backs)YH( that + make them less suit)HY(able)YH( for creat)HY(ing)YH( robust and main)HY(tain)HY(able)YH( + XML process)HY(ing)YH( appli)HY(ca)HY(tions)YH(. These draw)HY(backs)YH( include: + )EP( + + )UL( )-1 LI(Generic repre)HY(sen)HY(ta)HY(tion)YH( of XML in terms of elements, attributes, + and text forces an appli)HY(ca)HY(tion)YH( devel)HY(oper)YH( to write a substan)HY(tial)YH( + amount of bridg)HY(ing)YH( code that iden)HY(ti)HY(fies)YH( and trans)HY(forms)YH( pieces + of infor)HY(ma)HY(tion)YH( encoded in XML to a repre)HY(sen)HY(ta)HY(tion)YH( more suit)HY(able)YH( + for consump)HY(tion)YH( by the appli)HY(ca)HY(tion)YH( logic. + + )-1 LI(String-based flow control defers error detec)HY(tion)YH( to runtime. + It also reduces code read)HY(abil)HY(ity)YH( and main)HY(tain)HY(abil)HY(ity)YH(. + + )-1 LI(Lack of type safety because the data is repre)HY(sented)YH( as text. + + )-1 LI(Result)HY(ing)YH( appli)HY(ca)HY(tions)YH( are hard to debug, change, and + main)HY(tain)YH(. + )LU( + + )0 P(In contrast, stat)HY(i)HY(cally)YH(-typed, vocab)HY(u)HY(lary)YH(-specific object model + produced by the C++/Tree mapping allows you to operate in your + domain terms instead of the generic elements, attributes, and + text. Static typing helps catch errors at compile-time rather + than at run-time. Auto)HY(matic)YH( code gener)HY(a)HY(tion)YH( frees you for more + inter)HY(est)HY(ing)YH( tasks \201such as doing some)HY(thing)YH( useful with the + infor)HY(ma)HY(tion)YH( stored in the XML docu)HY(ments)YH(\202 and mini)HY(mizes)YH( the + effort needed to adapt your appli)HY(ca)HY(tions)YH( to changes in the + docu)HY(ment)YH( struc)HY(ture)YH(. To summa)HY(rize)YH(, the C++/Tree object model has + the follow)HY(ing)YH( key advan)HY(tages)YH( over generic XML access APIs:)EP( + + )UL( )-1 LI()BD(Ease of use.)ES( The gener)HY(ated)YH( code hides all the complex)HY(ity)YH( + asso)HY(ci)HY(ated)YH( with parsing and seri)HY(al)HY(iz)HY(ing)YH( XML. This includes navi)HY(gat)HY(ing)YH( + the struc)HY(ture)YH( and convert)HY(ing)YH( between the text repre)HY(sen)HY(ta)HY(tion)YH( and + data types suit)HY(able)YH( for manip)HY(u)HY(la)HY(tion)YH( by the appli)HY(ca)HY(tion)YH( + logic. + + )-1 LI()BD(Natural repre)HY(sen)HY(ta)HY(tion)YH(.)ES( The object repre)HY(sen)HY(ta)HY(tion)YH( allows + you to access the XML data using your domain vocab)HY(u)HY(lary)YH( instead + of generic elements, attributes, and text. + + )-1 LI()BD(Concise code.)ES( With the object repre)HY(sen)HY(ta)HY(tion)YH( the + appli)HY(ca)HY(tion)YH( imple)HY(men)HY(ta)HY(tion)YH( is simpler and thus easier + to read and under)HY(stand)YH(. + + )-1 LI()BD(Safety.)ES( The gener)HY(ated)YH( object model is stat)HY(i)HY(cally)YH( + typed and uses func)HY(tions)YH( instead of strings to access the + infor)HY(ma)HY(tion)YH(. This helps catch program)HY(ming)YH( errors at compile-time + rather than at runtime. + + )-1 LI()BD(Main)HY(tain)HY(abil)HY(ity)YH(.)ES( Auto)HY(matic)YH( code gener)HY(a)HY(tion)YH( mini)HY(mizes)YH( the + effort needed to adapt the appli)HY(ca)HY(tion)YH( to changes in the + docu)HY(ment)YH( struc)HY(ture)YH(. With static typing, the C++ compiler + can pin-point the places in the client code that need to be + changed. + + )-1 LI()BD(Compat)HY(i)HY(bil)HY(ity)YH(.)ES( Sequences of elements are repre)HY(sented)YH( in + the object model as contain)HY(ers)YH( conform)HY(ing)YH( to the stan)HY(dard)YH( C++ + sequence require)HY(ments)YH(. This makes it possi)HY(ble)YH( to use stan)HY(dard)YH( + C++ algo)HY(rithms)YH( on the object repre)HY(sen)HY(ta)HY(tion)YH( and frees you from + learn)HY(ing)YH( yet another container inter)HY(face)YH(, as is the case with + DOM. + + )-1 LI()BD(Effi)HY(ciency)YH(.)ES( If the appli)HY(ca)HY(tion)YH( makes repet)HY(i)HY(tive)YH( use + of the data extracted from XML, then the C++/Tree object model + is more effi)HY(cient)YH( because the navi)HY(ga)HY(tion)YH( is performed using + func)HY(tion)YH( calls rather than string compar)HY(isons)YH( and the XML + data is extracted only once. Further)HY(more)YH(, the runtime memory + usage is reduced due to more effi)HY(cient)YH( data storage + \201for instance, storing numeric data as inte)HY(gers)YH( instead of + strings\202 as well as the static knowl)HY(edge)YH( of cardi)HY(nal)HY(ity)YH( + constraints. + )LU( + + + + + + )0 1 6 H(2)WB 42 Sn()WB 9 Sn( Hello World Example)EA()EH( + + )0 P(In this chapter we will examine how to parse, access, modify, and + seri)HY(al)HY(ize)YH( a very simple XML docu)HY(ment)YH( using the XSD-gener)HY(ated)YH( + C++/Tree object model. The code presented in this chapter is + based on the )SM(hello)ES( example which can be found in + the )SM(exam)HY(ples)YH(/cxx/tree/)ES( direc)HY(tory)YH( of the XSD + distri)HY(bu)HY(tion)YH(.)EP( + + )0 2 7 H(2.1)WB 43 Sn()WB 10 Sn( Writing XML Docu)HY(ment)YH( and Schema)EA()EH( + + )0 P(First, we need to get an idea about the struc)HY(ture)YH( + of the XML docu)HY(ments)YH( we are going to process. Our + )SM(hello.xml)ES(, for example, could look like this:)EP( + + ) 10 28 PR( + + + Hello + + sun + moon + world + +)RP( + + )0 P(Then we can write a descrip)HY(tion)YH( of the above XML in the + XML Schema language and save it into )SM(hello.xsd)ES(:)EP( + + ) 13 70 PR( + + + + + + + + + + + +)RP( + + )0 P(Even if you are not famil)HY(iar)YH( with XML Schema, it + should be easy to connect decla)HY(ra)HY(tions)YH( in )SM(hello.xsd)ES( + to elements in )SM(hello.xml)ES(. The )SM(hello_t)ES( type + is defined as a sequence of the nested )SM(greet)HY(ing)YH()ES( and + )SM(name)ES( elements. Note that the term sequence in XML + Schema means that elements should appear in a partic)HY(u)HY(lar)YH( order + as opposed to appear)HY(ing)YH( multi)HY(ple)YH( times. The )SM(name)ES( + element has its )SM(maxOc)HY(curs)YH()ES( prop)HY(erty)YH( set to + )SM(unbounded)ES( which means it can appear multi)HY(ple)YH( times + in an XML docu)HY(ment)YH(. Finally, the glob)HY(ally)YH(-defined )SM(hello)ES( + element prescribes the root element for our vocab)HY(u)HY(lary)YH(. For an + easily-approach)HY(able)YH( intro)HY(duc)HY(tion)YH( to XML Schema refer to + )R7 2 A(XML Schema Part 0: + Primer)EA(.)EP( + + )0 P(The above schema is a spec)HY(i)HY(fi)HY(ca)HY(tion)YH( of our XML vocab)HY(u)HY(lary)YH(; it tells + every)HY(body)YH( what valid docu)HY(ments)YH( of our XML-based language should look + like. We can also update our )SM(hello.xml)ES( to include the + infor)HY(ma)HY(tion)YH( about the schema so that XML parsers can vali)HY(date)YH( + our docu)HY(ment)YH(:)EP( + + ) 11 60 PR( + + + Hello + + sun + moon + world + +)RP( + + + )0 P(The next step is to compile the schema to gener)HY(ate)YH( the object + model and parsing func)HY(tions)YH(.)EP( + + )0 2 8 H(2.2)WB 44 Sn()WB 11 Sn( Trans)HY(lat)HY(ing)YH( Schema to C++)EA()EH( + + )0 P(Now we are ready to trans)HY(late)YH( our )SM(hello.xsd)ES( to C++. + To do this we invoke the XSD compiler from a termi)HY(nal)YH( \201UNIX\202 or + a command prompt \201Windows\202: + )EP( + + ) 1 24 PR($ xsd cxx-tree hello.xsd)RP( + + )0 P(The XSD compiler produces two C++ files: )SM(hello.hxx)ES( and + )SM(hello.cxx)ES(. The follow)HY(ing)YH( code frag)HY(ment)YH( is taken from + )SM(hello.hxx)ES(; it should give you an idea about what gets + gener)HY(ated)YH(: + )EP( + + ) 45 60 PR(class hello_t +{ +public: + // greeting + // + typedef xml_schema::string greeting_type; + + const greeting_type& + greeting \201\202 const; + + greeting_type& + greeting \201\202; + + void + greeting \201const greeting_type& x\202; + + // name + // + typedef xml_schema::string name_type; + typedef xsd::sequence name_sequence; + typedef name_sequence::iterator name_iterator; + typedef name_sequence::const_iterator name_const_iterator; + + const name_sequence& + name \201\202 const; + + name_sequence& + name \201\202; + + void + name \201const name_sequence& s\202;)WR( + + // Constructor. + // + hello_t \201const greeting_type&\202; + + ... + +}; + +std::auto_ptr +hello \201const std::string& uri\202; + +std::auto_ptr +hello \201std::istream&\202;)RP( + + )0 P(The )SM(hello_t)ES( C++ class corre)HY(sponds)YH( to the + )SM(hello_t)ES( XML Schema type. For each element + in this type a set of C++ type defi)HY(ni)HY(tions)YH( as well as + acces)HY(sor)YH( and modi)HY(fier)YH( func)HY(tions)YH( are gener)HY(ated)YH( inside the + )SM(hello_t)ES( class. Note that the type defi)HY(ni)HY(tions)YH( + and member func)HY(tions)YH( for the )SM(greet)HY(ing)YH()ES( and + )SM(name)ES( elements are differ)HY(ent)YH( because of the + cardi)HY(nal)HY(ity)YH( differ)HY(ences)YH( between these two elements + \201)SM(greet)HY(ing)YH()ES( is a required single element and + )SM(name)ES( is a sequence of elements\202.)EP( + + )0 P(The )SM(xml_schema::string)ES( type used in the type + defi)HY(ni)HY(tions)YH( is a C++ class provided by the XSD runtime + that corre)HY(sponds)YH( to built-in XML Schema type + )SM(string)ES(. The )SM(xml_schema::string)ES( + is based on )SM(std::string)ES( and can be used as + such. Simi)HY(larly)YH(, the )SM(sequence)ES( class template + that is used in the )SM(name_sequence)ES( type + defi)HY(ni)HY(tion)YH( is based on and has the same inter)HY(face)YH( as + )SM(std::vector)ES(. The mapping between the built-in + XML Schema types and C++ types is described in more detail in + )0 28 1 A(Section 4.5, "Mapping for the Built-in XML Schema + Types")28 0 TN TL()Ec /AF f D(. The )SM(hello_t)ES( class also includes a + construc)HY(tor)YH( with an initial)HY(izer)YH( for the required + )SM(greet)HY(ing)YH()ES( element as its argu)HY(ment)YH(.)EP( + + )0 P(The )SM(hello)ES( over)HY(loaded)YH( global func)HY(tions)YH( corre)HY(spond)YH( + to the )SM(hello)ES( global element in XML Schema. A + global element in XML Schema is a valid docu)HY(ment)YH( root. + By default XSD gener)HY(ated)YH( a set of parsing func)HY(tions)YH( for each + global element defined in XML Schema \201this can be over)HY(rid)HY(den)YH( + with the )SM(--root-element-*)ES( options\202. Parsing + func)HY(tions)YH( return a dynam)HY(i)HY(cally)YH( allo)HY(cated)YH( object model as an + auto)HY(matic)YH( pointer. The actual pointer used depends on the + C++ stan)HY(dard)YH( selected. For C++98 it is )SM(std::auto_ptr)ES( + as shown above. For C++11 it is )SM(std::unique_ptr)ES(. + For example, if we modify our XSD compiler invo)HY(ca)HY(tion)YH( to + select C++11:)EP( + + ) 1 36 PR($ xsd cxx-tree --std c++11 hello.xsd)RP( + + )0 P(Then the parsing func)HY(tion)YH( signa)HY(tures)YH( will become:)EP( + + ) 5 31 PR(std::unique_ptr +hello \201const std::string& uri\202; + +std::unique_ptr +hello \201std::istream&\202;)RP( + + )0 P(For more infor)HY(ma)HY(tion)YH( on parsing func)HY(tions)YH( see )0 30 1 A(Chapter 5, + "Parsing")30 0 TN TL()Ec /AF f D(.)EP( + + )0 2 9 H(2.3)WB 45 Sn()WB 12 Sn( Imple)HY(ment)HY(ing)YH( Appli)HY(ca)HY(tion)YH( Logic)EA()EH( + + )0 P(At this point we have all the parts we need to do some)HY(thing)YH( useful + with the infor)HY(ma)HY(tion)YH( stored in our XML docu)HY(ment)YH(: + )EP( + + ) 25 62 PR(#include +#include "hello.hxx" + +using namespace std; + +int +main \201int argc, char* argv[]\202 +{ + try + { + auto_ptr h \201hello \201argv[1]\202\202; + + for \201hello_t::name_const_iterator i \201h->name \201\202.begin \201\202\202; + i != h->name \201\202.end \201\202; + ++i\202 + { + cerr << h->greeting \201\202 << ", " << *i << "!" << endl; + } + } + catch \201const xml_schema::exception& e\202 + { + cerr << e << endl; + return 1; + } +})RP( + + )0 P(The first part of our appli)HY(ca)HY(tion)YH( calls one of the parsing + func)HY(tions)YH( to parser an XML file spec)HY(i)HY(fied)YH( in the command line. + We then use the returned object model to iterate over names + and print a greet)HY(ing)YH( line for each of them. Finally, we + catch and print the )SM(xml_schema::excep)HY(tion)YH()ES( + excep)HY(tion)YH( in case some)HY(thing)YH( goes wrong. This excep)HY(tion)YH( + is the root of the excep)HY(tion)YH( hier)HY(ar)HY(chy)YH( used by the + XSD-gener)HY(ated)YH( code. + )EP( + + + )0 2 10 H(2.4)WB 46 Sn()WB 13 Sn( Compil)HY(ing)YH( and Running)EA()EH( + + )0 P(After saving our appli)HY(ca)HY(tion)YH( from the previ)HY(ous)YH( section in + )SM(driver.cxx)ES(, we are ready to compile our first + program and run it on the test XML docu)HY(ment)YH(. On a UNIX + system this can be done with the follow)HY(ing)YH( commands: + )EP( + + ) 6 43 PR($ c++ -I.../libxsd -c driver.cxx hello.cxx +$ c++ -o driver driver.o hello.o -lxerces-c +$ ./driver hello.xml +Hello, sun! +Hello, moon! +Hello, world!)RP( + + )0 P(Here )SM(.../libxsd)ES( repre)HY(sents)YH( the path to the + )SM(libxsd)ES( direc)HY(tory)YH( in the XSD distri)HY(bu)HY(tion)YH(. + Note also that we are required to link our appli)HY(ca)HY(tion)YH( + with the Xerces-C++ library because the gener)HY(ated)YH( code + uses it as the under)HY(ly)HY(ing)YH( XML parser.)EP( + + )0 2 11 H(2.5)WB 47 Sn()WB 14 Sn( Adding Seri)HY(al)HY(iza)HY(tion)YH()EA()EH( + + )0 P(While parsing and access)HY(ing)YH( the XML data may be every)HY(thing)YH( + you need, there are appli)HY(ca)HY(tions)YH( that require creat)HY(ing)YH( new + or modi)HY(fy)HY(ing)YH( exist)HY(ing)YH( XML docu)HY(ments)YH(. By default XSD does + not produce seri)HY(al)HY(iza)HY(tion)YH( code. We will need to request + it with the )SM(--gener)HY(ate)YH(-seri)HY(al)HY(iza)HY(tion)YH()ES( options:)EP( + + ) 1 49 PR($ xsd cxx-tree --generate-serialization hello.xsd)RP( + + )0 P(If we now examine the gener)HY(ated)YH( )SM(hello.hxx)ES( file, + we will find a set of over)HY(loaded)YH( seri)HY(al)HY(iza)HY(tion)YH( func)HY(tions)YH(, + includ)HY(ing)YH( the follow)HY(ing)YH( version:)EP( + + ) 5 45 PR(void +hello \201std::ostream&, + const hello_t&, + const xml_schema::namespace_infomap& = + xml_schema::namespace_infomap \201\202\202; +)RP( + + )0 P(Just like with parsing func)HY(tions)YH(, XSD gener)HY(ates)YH( seri)HY(al)HY(iza)HY(tion)YH( + func)HY(tions)YH( for each global element unless instructed other)HY(wise)YH( + with one of the )SM(--root-element-*)ES( options. For more + infor)HY(ma)HY(tion)YH( on seri)HY(al)HY(iza)HY(tion)YH( func)HY(tions)YH( see )0 33 1 A(Chapter 6, + "Seri)HY(al)HY(iza)HY(tion)YH(")33 0 TN TL()Ec /AF f D(.)EP( + + )0 P(We first examine an appli)HY(ca)HY(tion)YH( that modi)HY(fies)YH( an exist)HY(ing)YH( + object model and seri)HY(al)HY(izes)YH( it back to XML:)EP( + + ) 34 50 PR(#include +#include "hello.hxx" + +using namespace std; + +int +main \201int argc, char* argv[]\202 +{ + try + { + auto_ptr h \201hello \201argv[1]\202\202; + + // Change the greeting phrase. + // + h->greeting \201"Hi"\202; + + // Add another entry to the name sequence. + // + h->name \201\202.push_back \201"mars"\202; + + // Serialize the modified object model to XML. + // + xml_schema::namespace_infomap map; + map[""].name = ""; + map[""].schema = "hello.xsd"; + + hello \201cout, *h, map\202; + } + catch \201const xml_schema::exception& e\202 + { + cerr << e << endl;)WR( + return 1; + } +})RP( + + )0 P(First, our appli)HY(ca)HY(tion)YH( parses an XML docu)HY(ment)YH( and obtains its + object model as in the previ)HY(ous)YH( example. Then it changes the + greet)HY(ing)YH( string and adds another entry to the list of names. + Finally, it seri)HY(al)HY(izes)YH( the object model back to XML by calling + the seri)HY(al)HY(iza)HY(tion)YH( func)HY(tion)YH(.)EP( + + )0 P(The first argu)HY(ment)YH( we pass to the seri)HY(al)HY(iza)HY(tion)YH( func)HY(tion)YH( is + )SM(cout)ES( which results in the XML being written to + the stan)HY(dard)YH( output for us to inspect. We could have also + written the result to a file or memory buffer by creat)HY(ing)YH( an + instance of )SM(std::ofstream)ES( or )SM(std::ostringstream)ES( + and passing it instead of )SM(cout)ES(. The second argu)HY(ment)YH( is the + object model we want to seri)HY(al)HY(ize)YH(. The final argu)HY(ment)YH( is an optional + names)HY(pace)YH( infor)HY(ma)HY(tion)YH( map for our vocab)HY(u)HY(lary)YH(. It captures infor)HY(ma)HY(tion)YH( + such as names)HY(paces)YH(, names)HY(pace)YH( prefixes to which they should be mapped, + and schemas asso)HY(ci)HY(ated)YH( with these names)HY(paces)YH(. If we don't provide + this argu)HY(ment)YH( then generic names)HY(pace)YH( prefixes \201)SM(p1)ES(, + )SM(p2)ES(, etc.\202 will be auto)HY(mat)HY(i)HY(cally)YH( assigned to XML names)HY(paces)YH( + and no schema infor)HY(ma)HY(tion)YH( will be added to the result)HY(ing)YH( docu)HY(ment)YH( + \201see )0 33 1 A(Chapter 6, "Seri)HY(al)HY(iza)HY(tion)YH(")33 0 TN TL()Ec /AF f D( for details\202. + In our case, the prefix \201map key\202 and names)HY(pace)YH( name are empty + because our vocab)HY(u)HY(lary)YH( does not use XML names)HY(paces)YH(.)EP( + + )0 P(If we now compile and run this appli)HY(ca)HY(tion)YH( we will see the + output as shown in the follow)HY(ing)YH( listing:)EP( + + ) 12 60 PR( + + + Hi + + sun + moon + world + mars + +)RP( + + )0 P(We can also create and seri)HY(al)HY(ize)YH( an object model from scratch + as shown in the follow)HY(ing)YH( example:)EP( + + ) 33 43 PR(#include +#include +#include "hello.hxx" + +using namespace std; + +int +main \201int argc, char* argv[]\202 +{ + try + { + hello_t h \201"Hi"\202; + + hello_t::name_sequence& ns \201h.name \201\202\202; + + ns.push_back \201"Jane"\202; + ns.push_back \201"John"\202; + + // Serialize the object model to XML. + // + xml_schema::namespace_infomap map; + map[""].name = ""; + map[""].schema = "hello.xsd"; + + std::ofstream ofs \201argv[1]\202; + hello \201ofs, h, map\202; + } + catch \201const xml_schema::exception& e\202 + { + cerr << e << endl; + return 1;)WR( + } +})RP( + + )0 P(In this example we used the gener)HY(ated)YH( construc)HY(tor)YH( to create + an instance of type )SM(hello_t)ES(. To reduce typing, + we obtained a refer)HY(ence)YH( to the name sequence which we then + used to add a few names. The seri)HY(al)HY(iza)HY(tion)YH( part is iden)HY(ti)HY(cal)YH( + to the previ)HY(ous)YH( example except this time we are writing to + a file. If we compile and run this program, it produces the + follow)HY(ing)YH( XML file:)EP( + + ) 10 60 PR( + + + Hi + + Jane + John + +)RP( + + )0 2 12 H(2.6)WB 48 Sn()WB 15 Sn( Select)HY(ing)YH( Naming Conven)HY(tion)YH()EA()EH( + + )0 P(By default XSD uses the so-called K&R \201Kernighan and Ritchie\202 + iden)HY(ti)HY(fier)YH( naming conven)HY(tion)YH( in the gener)HY(ated)YH( code. In this + conven)HY(tion)YH( both type and func)HY(tion)YH( names are in lower case and + words are sepa)HY(rated)YH( by under)HY(scores)YH(. If your appli)HY(ca)HY(tion)YH( code or + schemas use a differ)HY(ent)YH( nota)HY(tion)YH(, you may want to change the + naming conven)HY(tion)YH( used in the gener)HY(ated)YH( code for consis)HY(tency)YH(. + XSD supports a set of widely-used naming conven)HY(tions)YH( + that you can select with the )SM(--type-naming)ES( and + )SM(--func)HY(tion)YH(-naming)ES( options. You can also further + refine one of the prede)HY(fined)YH( conven)HY(tions)YH( or create a completely + custom naming scheme by using the )SM(--*-regex)ES( options.)EP( + + )0 P(As an example, let's assume that our "Hello World" appli)HY(ca)HY(tion)YH( + uses the so-called upper-camel-case naming conven)HY(tion)YH( for types + \201that is, each word in a type name is capi)HY(tal)HY(ized)YH(\202 and the K&R + conven)HY(tion)YH( for func)HY(tion)YH( names. Since K&R is the default + conven)HY(tion)YH( for both type and func)HY(tion)YH( names, we only need to + change the type naming scheme:)EP( + + ) 1 42 PR($ xsd cxx-tree --type-naming ucc hello.xsd)RP( + + )0 P(The )SM(ucc)ES( argu)HY(ment)YH( to the )SM(--type-naming)ES( + options stands for upper-camel-case. If we now examine the + gener)HY(ated)YH( )SM(hello.hxx)ES(, we will see the follow)HY(ing)YH( + changes compared to the decla)HY(ra)HY(tions)YH( shown in the previ)HY(ous)YH( + sections:)EP( + + ) 45 57 PR(class Hello_t +{ +public: + // greeting + // + typedef xml_schema::String GreetingType; + + const GreetingType& + greeting \201\202 const; + + GreetingType& + greeting \201\202; + + void + greeting \201const GreetingType& x\202; + + // name + // + typedef xml_schema::String NameType; + typedef xsd::sequence NameSequence; + typedef NameSequence::iterator NameIterator; + typedef NameSequence::const_iterator NameConstIterator; + + const NameSequence& + name \201\202 const; + + NameSequence& + name \201\202; + + void + name \201const NameSequence& s\202;)WR( + + // Constructor. + // + Hello_t \201const GreetingType&\202; + + ... + +}; + +std::auto_ptr +hello \201const std::string& uri\202; + +std::auto_ptr +hello \201std::istream&\202;)RP( + + )0 P(Notice that the type names in the )SM(xml_schema)ES( names)HY(pace)YH(, + for example )SM(xml_schema::String)ES(, now also use the + upper-camel-case naming conven)HY(tion)YH(. The only thing that we may + be unhappy about in the above code is the )SM(_t)ES( + suffix in )SM(Hello_t)ES(. If we are not in a posi)HY(tion)YH( + to change the schema, we can )EM(touch-up)ES( the )SM(ucc)ES( + conven)HY(tion)YH( with a custom trans)HY(la)HY(tion)YH( rule using the + )SM(--type-regex)ES( option:)EP( + + ) 1 72 PR($ xsd cxx-tree --type-naming ucc --type-regex '/ \201.+\202_t/\200u$1/' hello.xsd)RP( + + )0 P(This results in the follow)HY(ing)YH( changes to the gener)HY(ated)YH( code:)EP( + + ) 45 57 PR(class Hello +{ +public: + // greeting + // + typedef xml_schema::String GreetingType; + + const GreetingType& + greeting \201\202 const; + + GreetingType& + greeting \201\202; + + void + greeting \201const GreetingType& x\202; + + // name + // + typedef xml_schema::String NameType; + typedef xsd::sequence NameSequence; + typedef NameSequence::iterator NameIterator; + typedef NameSequence::const_iterator NameConstIterator; + + const NameSequence& + name \201\202 const; + + NameSequence& + name \201\202; + + void + name \201const NameSequence& s\202;)WR( + + // Constructor. + // + Hello \201const GreetingType&\202; + + ... + +}; + +std::auto_ptr +hello \201const std::string& uri\202; + +std::auto_ptr +hello \201std::istream&\202;)RP( + + )0 P(For more detailed infor)HY(ma)HY(tion)YH( on the )SM(--type-naming)ES(, + )SM(--func)HY(tion)YH(-naming)ES(, )SM(--type-regex)ES(, and + other )SM(--*-regex)ES( options refer to the NAMING + CONVEN)HY(TION)YH( section in the )R4 2 A(XSD + Compiler Command Line Manual)EA(.)EP( + + )0 2 13 H(2.7)WB 49 Sn()WB 16 Sn( Gener)HY(at)HY(ing)YH( Docu)HY(men)HY(ta)HY(tion)YH()EA()EH( + + )0 P(While our object model is quite simple, real-world vocab)HY(u)HY(lar)HY(ies)YH( + can be quite complex with hundreds of types, elements, and + attributes. For such vocab)HY(u)HY(lar)HY(ies)YH( figur)HY(ing)YH( out which types + provide which member func)HY(tions)YH( by study)HY(ing)YH( the gener)HY(ated)YH( + source code or schemas can be a daunt)HY(ing)YH( task. To provide + appli)HY(ca)HY(tion)YH( devel)HY(op)HY(ers)YH( with a more acces)HY(si)HY(ble)YH( way of + under)HY(stand)HY(ing)YH( the gener)HY(ated)YH( object models, the XSD compiler + can be instructed to produce source code with docu)HY(men)HY(ta)HY(tion)YH( + comments in the Doxygen format. Then the source code can be + processed with the )R8 2 A(Doxygen)EA( + docu)HY(men)HY(ta)HY(tion)YH( system to extract this infor)HY(ma)HY(tion)YH( and produce + docu)HY(men)HY(ta)HY(tion)YH( in various formats. + )EP( + + )0 P(In this section we will see how to gener)HY(ate)YH( docu)HY(men)HY(ta)HY(tion)YH( + for our "Hello World" vocab)HY(u)HY(lary)YH(. To show)HY(case)YH( the full power + of the XSD docu)HY(men)HY(ta)HY(tion)YH( facil)HY(i)HY(ties)YH(, we will first docu)HY(ment)YH( + our schema. The XSD compiler will then trans)HY(fer)YH( + this infor)HY(ma)HY(tion)YH( from the schema to the gener)HY(ated)YH( code and + then to the object model docu)HY(men)HY(ta)HY(tion)YH(. Note that the + docu)HY(men)HY(ta)HY(tion)YH( in the schema is not required for XSD to + gener)HY(ate)YH( useful docu)HY(men)HY(ta)HY(tion)YH(. Below you will find + our )SM(hello.xsd)ES( with added docu)HY(men)HY(ta)HY(tion)YH(:)EP( + + ) 43 69 PR( + + + + + + The hello_t type consists of a greeting phrase and a + collection of names to which this greeting applies. + + + + + + + + + The greeting element contains the greeting phrase + for this hello object. + + + + + + + + The name elements contains names to be greeted. + + + + + )WR( + + + + + + The hello element is a root of the Hello XML vocabulary. + Every conforming document should start with this element. + + + + +)RP( + + )0 P(The first step in obtain)HY(ing)YH( the docu)HY(men)HY(ta)HY(tion)YH( is to recom)HY(pile)YH( + our schema with the )SM(--gener)HY(ate)YH(-doxygen)ES( option:)EP( + + ) 1 68 PR($ xsd cxx-tree --generate-serialization --generate-doxygen hello.xsd)RP( + + )0 P(Now the gener)HY(ated)YH( )SM(hello.hxx)ES( file contains comments + in the Doxygen format. The next step is to process this file + with the Doxygen docu)HY(men)HY(ta)HY(tion)YH( system. If your project does + not use Doxygen then you first need to create a config)HY(u)HY(ra)HY(tion)YH( + file for your project:)EP( + + ) 1 26 PR($ doxygen -g hello.doxygen)RP( + + )0 P(You only need to perform this step once. Now we can gener)HY(ate)YH( + the docu)HY(men)HY(ta)HY(tion)YH( by execut)HY(ing)YH( the follow)HY(ing)YH( command in the + direc)HY(tory)YH( with the gener)HY(ated)YH( source code:)EP( + + ) 1 23 PR($ doxygen hello.doxygen)RP( + + )0 P(While the gener)HY(ated)YH( docu)HY(men)HY(ta)HY(tion)YH( can be useful as is, we can + go one step further and link \201using the Doxygen tags mech)HY(a)HY(nism)YH(\202 + the docu)HY(men)HY(ta)HY(tion)YH( for our object model with the docu)HY(men)HY(ta)HY(tion)YH( + for the XSD runtime library which defines C++ classes for the + built-in XML Schema types. This way we can seam)HY(lessly)YH( browse + between docu)HY(men)HY(ta)HY(tion)YH( for the )SM(hello_t)ES( class which + is gener)HY(ated)YH( by the XSD compiler and the )SM(xml_schema::string)ES( + class which is defined in the XSD runtime library. The Doxygen + config)HY(u)HY(ra)HY(tion)YH( file for the XSD runtime is provided with the XSD + distri)HY(bu)HY(tion)YH(.)EP( + + )0 P(You can view the result of the steps described in this section + on the )R9 2 A(Hello + Example Docu)HY(men)HY(ta)HY(tion)YH()EA( page.)EP( + + + + + )0 1 14 H(3)WB 50 Sn()WB 17 Sn( Overall Mapping Config)HY(u)HY(ra)HY(tion)YH()EA()EH( + + )0 P(The C++/Tree mapping has a number of config)HY(u)HY(ra)HY(tion)YH( param)HY(e)HY(ters)YH( that + deter)HY(mine)YH( the overall prop)HY(er)HY(ties)YH( and behav)HY(ior)YH( of the gener)HY(ated)YH( code. + Config)HY(u)HY(ra)HY(tion)YH( param)HY(e)HY(ters)YH( are spec)HY(i)HY(fied)YH( with the XSD command line + options. This chapter describes config)HY(u)HY(ra)HY(tion)YH( aspects that are most + commonly encoun)HY(tered)YH( by appli)HY(ca)HY(tion)YH( devel)HY(op)HY(ers)YH(. These include: the + C++ stan)HY(dard)YH(, the char)HY(ac)HY(ter)YH( type that is used by the gener)HY(ated)YH( code, + handling of vocab)HY(u)HY(lar)HY(ies)YH( that use XML Schema poly)HY(mor)HY(phism)YH(, XML Schema + to C++ names)HY(pace)YH( mapping, and thread safety. For more ways to config)HY(ure)YH( + the gener)HY(ated)YH( code refer to the + )R4 2 A(XSD + Compiler Command Line Manual)EA(. + )EP( + + )0 2 15 H(3.1)WB 51 Sn()WB 18 Sn( C++ Stan)HY(dard)YH()EA()EH( + + )0 P(The C++/Tree mapping provides support for ISO/IEC C++ 1998/2003 \201C++98\202 + and ISO/IEC C++ 2011 \201C++11\202. To select the C++ stan)HY(dard)YH( for the + gener)HY(ated)YH( code we use the )SM(--std)ES( XSD compiler command + line option. While the major)HY(ity)YH( of the exam)HY(ples)YH( in this guide use + C++98, support for the new func)HY(tion)HY(al)HY(ity)YH( and library compo)HY(nents)YH( + intro)HY(duced)YH( in C++11 are discussed through)HY(out)YH( the docu)HY(ment)YH(.)EP( + + )0 2 16 H(3.2)WB 52 Sn()WB 19 Sn( Char)HY(ac)HY(ter)YH( Type and Encod)HY(ing)YH()EA()EH( + + )0 P(The C++/Tree mapping has built-in support for two char)HY(ac)HY(ter)YH( types: + )SM(char)ES( and )SM(wchar_t)ES(. You can select the + char)HY(ac)HY(ter)YH( type with the )SM(--char-type)ES( command line + option. The default char)HY(ac)HY(ter)YH( type is )SM(char)ES(. The + char)HY(ac)HY(ter)YH( type affects all string and string-based types that + are used in the mapping. These include the string-based built-in + XML Schema types, excep)HY(tion)YH( types, stream types, etc.)EP( + + )0 P(Another aspect of the mapping that depends on the char)HY(ac)HY(ter)YH( type + is char)HY(ac)HY(ter)YH( encod)HY(ing)YH(. For the )SM(char)ES( char)HY(ac)HY(ter)YH( type + the default encod)HY(ing)YH( is UTF-8. Other supported encod)HY(ings)YH( are + ISO-8859-1, Xerces-C++ Local Code Page \201LPC\202, as well as + custom encod)HY(ings)YH(. You can select which encod)HY(ing)YH( should be used + in the object model with the )SM(--char-encod)HY(ing)YH()ES( command + line option.)EP( + + )0 P(For the )SM(wchar_t)ES( char)HY(ac)HY(ter)YH( type the encod)HY(ing)YH( is + auto)HY(mat)HY(i)HY(cally)YH( selected between UTF-16 and UTF-32/UCS-4 depend)HY(ing)YH( + on the size of the )SM(wchar_t)ES( type. On some plat)HY(forms)YH( + \201for example, Windows with Visual C++ and AIX with IBM XL C++\202 + )SM(wchar_t)ES( is 2 bytes long. For these plat)HY(forms)YH( the + encod)HY(ing)YH( is UTF-16. On other plat)HY(forms)YH( )SM(wchar_t)ES( is 4 bytes + long and UTF-32/UCS-4 is used.)EP( + + )0 P(Note also that the char)HY(ac)HY(ter)YH( encod)HY(ing)YH( that is used in the object model + is inde)HY(pen)HY(dent)YH( of the encod)HY(ings)YH( used in input and output XML. In fact, + all three \201object mode, input XML, and output XML\202 can have differ)HY(ent)YH( + encod)HY(ings)YH(.)EP( + + )0 2 17 H(3.3)WB 53 Sn()WB 20 Sn( Support for Poly)HY(mor)HY(phism)YH()EA()EH( + + )0 P(By default XSD gener)HY(ates)YH( non-poly)HY(mor)HY(phic)YH( code. If your vocab)HY(u)HY(lary)YH( + uses XML Schema poly)HY(mor)HY(phism)YH( in the form of )SM(xsi:type)ES( + and/or substi)HY(tu)HY(tion)YH( groups, then you will need to compile + your schemas with the )SM(--gener)HY(ate)YH(-poly)HY(mor)HY(phic)YH()ES( option + to produce poly)HY(mor)HY(phism)YH(-aware code. For more infor)HY(ma)HY(tion)YH( on + working with poly)HY(mor)HY(phic)YH( object models, refer to + )R10 2 A(Section 2.11, + "Mapping for )SM(xsi:type)ES( and Substi)HY(tu)HY(tion)YH( Groups")EA( in + the C++/Tree Mapping User Manual.)EP( + + )0 2 18 H(3.4)WB 54 Sn()WB 21 Sn( Names)HY(pace)YH( Mapping)EA()EH( + + )0 P(XSD maps XML names)HY(paces)YH( spec)HY(i)HY(fied)YH( in the )SM(target)HY(Names)HY(pace)YH()ES( + attribute in XML Schema to one or more nested C++ names)HY(paces)YH(. By + default, a names)HY(pace)YH( URI is mapped to a sequence of C++ names)HY(pace)YH( + names by remov)HY(ing)YH( the proto)HY(col)YH( and host parts and split)HY(ting)YH( the + rest into a sequence of names with )SM('/')ES( as the name + sepa)HY(ra)HY(tor)YH(.)EP( + + )0 P(The default mapping of names)HY(pace)YH( URIs to C++ names)HY(paces)YH( + can be altered using the )SM(--names)HY(pace)YH(-map)ES( and + )SM(--names)HY(pace)YH(-regex)ES( compiler options. For example, + to map names)HY(pace)YH( URI )SM(http://www.codesyn)HY(the)HY(sis)YH(.com/my)ES( to + C++ names)HY(pace)YH( )SM(cs::my)ES(, we can use the follow)HY(ing)YH( option:)EP( + + ) 1 54 PR(--namespace-map http://www.codesynthesis.com/my=cs::my)RP( + + )0 P(A vocab)HY(u)HY(lary)YH( without a names)HY(pace)YH( is mapped to the global scope. This + also can be altered with the above options by using an empty name + for the XML names)HY(pace)YH(:)EP( + + ) 1 19 PR(--namespace-map =cs)RP( + + )0 2 19 H(3.5)WB 55 Sn()WB 22 Sn( Thread Safety)EA()EH( + + )0 P(XSD-gener)HY(ated)YH( code is thread-safe in the sense that you can + use differ)HY(ent)YH( instan)HY(ti)HY(a)HY(tions)YH( of the object model in several + threads concur)HY(rently)YH(. This is possi)HY(ble)YH( due to the gener)HY(ated)YH( + code not relying on any writable global vari)HY(ables)YH(. If you need + to share the same object between several threads then you will + need to provide some form of synchro)HY(niza)HY(tion)YH(. One approach would + be to use the gener)HY(ated)YH( code customiza)HY(tion)YH( mech)HY(a)HY(nisms)YH( to embed + synchro)HY(niza)HY(tion)YH( prim)HY(i)HY(tives)YH( into the gener)HY(ated)YH( C++ classes. For more + infor)HY(ma)HY(tion)YH( on gener)HY(ated)YH( code customiza)HY(tion)YH( refer to the + )R2 2 A(C++/Tree + Mapping Customiza)HY(tion)YH( Guide)EA(.)EP( + + )0 P(If you also would like to call parsing and/or seri)HY(al)HY(iza)HY(tion)YH( + func)HY(tions)YH( from several threads poten)HY(tially)YH( concur)HY(rently)YH(, then + you will need to make sure the Xerces-C++ runtime is initial)HY(ized)YH( + and termi)HY(nated)YH( only once. The easiest way to do this is to + initial)HY(ize)YH(/termi)HY(nate)YH( Xerces-C++ from )SM(main\201\202)ES( when + there are no threads yet/anymore:)EP( + + ) 13 56 PR(#include + +int +main \201\202 +{ + xercesc::XMLPlatformUtils::Initialize \201\202; + + { + // Start/terminate threads and parse/serialize here. + } + + xercesc::XMLPlatformUtils::Terminate \201\202; +})RP( + + )0 P(Because you initial)HY(ize)YH( the Xerces-C++ runtime your)HY(self)YH( you should + also pass the )SM(xml_schema::flags::dont_initial)HY(ize)YH()ES( flag + to parsing and seri)HY(al)HY(iza)HY(tion)YH( func)HY(tions)YH(. See )0 30 1 A(Chapter 5, + "Parsing")30 0 TN TL()Ec /AF f D( and )0 33 1 A(Chapter 6, "Seri)HY(al)HY(iza)HY(tion)YH(")33 0 TN TL()Ec /AF f D( for + more infor)HY(ma)HY(tion)YH(.)EP( + + + + + + )0 1 20 H(4)WB 56 Sn()WB 23 Sn( Working with Object Models)EA()EH( + + )0 P(As we have seen in the previ)HY(ous)YH( chap)HY(ters)YH(, the XSD compiler gener)HY(ates)YH( + a C++ class for each type defined in XML Schema. Together these classes + consti)HY(tute)YH( an object model for an XML vocab)HY(u)HY(lary)YH(. In this chapter we + will take a closer look at differ)HY(ent)YH( elements that comprise an + object model class as well as how to create, access, and modify + object models.)EP( + + )0 P(In this and subse)HY(quent)YH( chap)HY(ters)YH( we will use the follow)HY(ing)YH( schema + that describes a collec)HY(tion)YH( of person records. We save it in + )SM(people.xsd)ES(:)EP( + + ) 30 71 PR( + + + + + + + + + + + + + + + + + + + + + + + + + + + + +)RP( + + )0 P(A sample XML instance to go along with this schema is saved + in )SM(people.xml)ES(:)EP( + + ) 20 61 PR( + + + + John + Doe + male + 32 + + + + Jane + Mary + Doe + female + 28 + + +)RP( + + )0 P(Compil)HY(ing)YH( )SM(people.xsd)ES( with the XSD compiler results + in three gener)HY(ated)YH( C++ classes: )SM(gender_t)ES(, + )SM(person_t)ES(, and )SM(people_t)ES(. + The )SM(gender_t)ES( class is modelled after the C++ + )SM(enum)ES( type. Its defi)HY(ni)HY(tion)YH( is presented below:)EP( + + ) 17 41 PR(class gender_t: public xml_schema::string +{ +public: + enum value + { + male, + female + }; + + gender_t \201value\202; + gender_t \201const xml_schema::string&\202; + + gender_t& + operator= \201value\202; + + operator value \201\202 const; +};)RP( + + )0 P(The follow)HY(ing)YH( listing shows how we can use this type:)EP( + + ) 19 41 PR(gender_t m \201gender_t::male\202; +gender_t f \201"female"\202; + +if \201m == "female" || f == gender_t::male\202 +{ + ... +} + +switch \201m\202 +{ +case gender_t::male: + { + ... + } +case gender_t::female: + { + ... + } +})RP( + + )0 P(The other two classes will be exam)HY(ined)YH( in detail in the subse)HY(quent)YH( + sections.)EP( + + )0 2 21 H(4.1)WB 57 Sn()WB 24 Sn( Attribute and Element Cardi)HY(nal)HY(i)HY(ties)YH()EA()EH( + + )0 P(As we have seen in the previ)HY(ous)YH( chap)HY(ters)YH(, XSD gener)HY(ates)YH( a differ)HY(ent)YH( + set of type defi)HY(ni)HY(tions)YH( and member func)HY(tions)YH( for elements with + differ)HY(ent)YH( cardi)HY(nal)HY(i)HY(ties)YH(. The C++/Tree mapping divides all the possi)HY(ble)YH( + element and attribute cardi)HY(nal)HY(i)HY(ties)YH( into three cardi)HY(nal)HY(ity)YH( classes: + )EM(one)ES(, )EM(optional)ES(, and )EM(sequence)ES(.)EP( + + )0 P(The )EM(one)ES( cardi)HY(nal)HY(ity)YH( class covers all elements that should + occur exactly once as well as required attributes. In our + example, the )SM(first-name)ES(, )SM(last-name)ES(, + )SM(gender)ES(, and )SM(age)ES( elements as well as + the )SM(id)ES( attribute belong to this cardi)HY(nal)HY(ity)YH( class. + The follow)HY(ing)YH( code frag)HY(ment)YH( shows type defi)HY(ni)HY(tions)YH( as well as the + acces)HY(sor)YH( and modi)HY(fier)YH( func)HY(tions)YH( that are gener)HY(ated)YH( for the + )SM(gender)ES( element in the )SM(person_t)ES( class:)EP( + + ) 15 31 PR(class person_t +{ + // gender + // + typedef gender_t gender_type; + + const gender_type& + gender \201\202 const; + + gender_type& + gender \201\202; + + void + gender \201const gender_type&\202; +};)RP( + + )0 P(The )SM(gender_type)ES( type is an alias for the element's type. + The first two acces)HY(sor)YH( func)HY(tions)YH( return read-only \201constant\202 and + read-write refer)HY(ences)YH( to the element's value, respec)HY(tively)YH(. The + modi)HY(fier)YH( func)HY(tion)YH( sets the new value for the element.)EP( + + )0 P(The )EM(optional)ES( cardi)HY(nal)HY(ity)YH( class covers all elements that + can occur zero or one time as well as optional attributes. In our + example, the )SM(middle-name)ES( element belongs to this + cardi)HY(nal)HY(ity)YH( class. The follow)HY(ing)YH( code frag)HY(ment)YH( shows the type + defi)HY(ni)HY(tions)YH( as well as the acces)HY(sor)YH( and modi)HY(fier)YH( func)HY(tions)YH( that + are gener)HY(ated)YH( for this element in the )SM(person_t)ES( class:)EP( + + ) 19 63 PR(class person_t +{ + // middle-name + // + typedef xml_schema::string middle_name_type; + typedef xsd::optional middle_name_optional; + + const middle_name_optional& + middle_name \201\202 const; + + middle_name_optional& + middle_name \201\202; + + void + middle_name \201const middle_name_type&\202; + + void + middle_name \201const middle_name_optional&\202; +};)RP( + + )0 P(As with the )SM(gender)ES( element, )SM(middle_name_type)ES( + is an alias for the element's type. The )SM(middle_name_optional)ES( + type is a container for the element's optional value. It can be queried + for the pres)HY(ence)YH( of the value using the )SM(present\201\202)ES( func)HY(tion)YH(. + The value itself can be retrieved using the )SM(get\201\202)ES( + acces)HY(sor)YH( and set using the )SM(set\201\202)ES( modi)HY(fier)YH(. The container + can be reverted to the value not present state with the call to the + )SM(reset\201\202)ES( func)HY(tion)YH(. The follow)HY(ing)YH( example shows how we + can use this container:)EP( + + ) 9 42 PR(person_t::middle_name_optional n \201"John"\202; + +if \201n.present \201\202\202 +{ + cout << n.get \201\202 << endl; +} + +n.set \201"Jane"\202; +n.reset \201\202;)RP( + + + )0 P(Unlike the )EM(one)ES( cardi)HY(nal)HY(ity)YH( class, the acces)HY(sor)YH( func)HY(tions)YH( + for the )EM(optional)ES( class return read-only \201constant\202 and + read-write refer)HY(ences)YH( to the container instead of the element's + value directly. The modi)HY(fier)YH( func)HY(tions)YH( set the new value for the + element.)EP( + + )0 P(Finally, the )EM(sequence)ES( cardi)HY(nal)HY(ity)YH( class covers all elements + that can occur more than once. In our example, the + )SM(person)ES( element in the )SM(people_t)ES( type + belongs to this cardi)HY(nal)HY(ity)YH( class. The follow)HY(ing)YH( code frag)HY(ment)YH( shows + the type defi)HY(ni)HY(tions)YH( as well as the acces)HY(sor)YH( and modi)HY(fier)YH( func)HY(tions)YH( + that are gener)HY(ated)YH( for this element in the )SM(people_t)ES( + class:)EP( + + ) 18 64 PR(class people_t +{ + // person + // + typedef person_t person_type; + typedef xsd::sequence person_sequence; + typedef person_sequence::iterator person_iterator; + typedef person_sequence::const_iterator person_const_iterator; + + const person_sequence& + person \201\202 const; + + person_sequence& + person \201\202; + + void + person \201const person_sequence&\202; +};)RP( + + )0 P(Iden)HY(ti)HY(cal)YH( to the other cardi)HY(nal)HY(ity)YH( classes, )SM(person_type)ES( + is an alias for the element's type. The )SM(person_sequence)ES( + type is a sequence container for the element's values. It is based + on and has the same inter)HY(face)YH( as )SM(std::vector)ES( and + there)HY(fore)YH( can be used in similar ways. The )SM(person_iter)HY(a)HY(tor)YH()ES( + and )SM(person_const_iter)HY(a)HY(tor)YH()ES( types are read-only + \201constant\202 and read-write iter)HY(a)HY(tors)YH( for the )SM(person_sequence)ES( + container.)EP( + + )0 P(Similar to the )EM(optional)ES( cardi)HY(nal)HY(ity)YH( class, the + acces)HY(sor)YH( func)HY(tions)YH( for the )EM(sequence)ES( class return + read-only \201constant\202 and read-write refer)HY(ences)YH( to the sequence + container. The modi)HY(fier)YH( func)HY(tions)YH( copies the entries from + the passed sequence.)EP( + + )0 P(C++/Tree is a "flat)HY(ten)HY(ing)YH(" mapping in a sense that many levels of + nested compos)HY(i)HY(tors)YH( \201)SM(choice)ES( and )SM(sequence)ES(\202, + all poten)HY(tially)YH( with their own cardi)HY(nal)HY(i)HY(ties)YH(, are in the end mapped + to a flat set of elements with one of the three cardi)HY(nal)HY(ity)YH( classes + discussed above. While this results in a simple and easy to use API + for most types, in certain cases, the order of elements in the actual + XML docu)HY(ments)YH( is not preserved once parsed into the object model. To + over)HY(come)YH( this limi)HY(ta)HY(tion)YH( we can mark certain schema types, for which + content order is not suffi)HY(ciently)YH( preserved, as ordered. For more + infor)HY(ma)HY(tion)YH( on this func)HY(tion)HY(al)HY(ity)YH( refer to + )R11 2 A(Section + 2.8.4, "Element Order")EA( in the C++/Tree Mapping User Manual.)EP( + + )0 P(For complex schemas with many levels of nested compos)HY(i)HY(tors)YH( + \201)SM(choice)ES( and )SM(sequence)ES(\202 it can also + be hard to deduce the cardi)HY(nal)HY(ity)YH( class of a partic)HY(u)HY(lar)YH( element. + The gener)HY(ated)YH( Doxygen docu)HY(men)HY(ta)HY(tion)YH( can greatly help with + this task. For each element and attribute the docu)HY(men)HY(ta)HY(tion)YH( + clearly iden)HY(ti)HY(fies)YH( its cardi)HY(nal)HY(ity)YH( class. Alter)HY(na)HY(tively)YH(, you + can study the gener)HY(ated)YH( header files to find out the cardi)HY(nal)HY(ity)YH( + class of a partic)HY(u)HY(lar)YH( attribute or element.)EP( + + )0 P(In the next sections we will examine how to access and modify + infor)HY(ma)HY(tion)YH( stored in an object model using acces)HY(sor)YH( and modi)HY(fier)YH( + func)HY(tions)YH( described in this section.)EP( + + )0 2 22 H(4.2)WB 58 Sn()WB 25 Sn( Access)HY(ing)YH( the Object Model)EA()EH( + + )0 P(In this section we will learn how to get to the infor)HY(ma)HY(tion)YH( + stored in the object model for our person records vocab)HY(u)HY(lary)YH(. + The follow)HY(ing)YH( appli)HY(ca)HY(tion)YH( accesses and prints the contents + of the )SM(people.xml)ES( file:)EP( + + ) 36 70 PR(#include +#include "people.hxx" + +using namespace std; + +int +main \201\202 +{ + auto_ptr ppl \201people \201"people.xml"\202\202; + + // Iterate over individual person records. + // + people_t::person_sequence& ps \201ppl->person \201\202\202; + + for \201people_t::person_iterator i \201ps.begin \201\202\202; i != ps.end \201\202; ++i\202 + { + person_t& p \201*i\202; + + // Print names: first-name and last-name are required elements, + // middle-name is optional. + // + cout << "name: " << p.first_name \201\202 << " "; + + if \201p.middle_name \201\202.present \201\202\202 + cout << p.middle_name \201\202.get \201\202 << " "; + + cout << p.last_name \201\202 << endl; + + // Print gender, age, and id which are all required. + // + cout << "gender: " << p.gender \201\202 << endl)WR( + << "age: " << p.age \201\202 << endl + << "id: " << p.id \201\202 << endl + << endl; + } +})RP( + + )0 P(This code shows common patterns of access)HY(ing)YH( elements and attributes + with differ)HY(ent)YH( cardi)HY(nal)HY(ity)YH( classes. For the sequence element + \201)SM(person)ES( in )SM(people_t)ES(\202 we first obtain a + refer)HY(ence)YH( to the container and then iterate over indi)HY(vid)HY(ual)YH( + records. The values of elements and attributes with the + )EM(one)ES( cardi)HY(nal)HY(ity)YH( class \201)SM(first-name)ES(, + )SM(last-name)ES(, )SM(gender)ES(, )SM(age)ES(, + and )SM(id)ES(\202 can be obtained directly by calling the + corre)HY(spond)HY(ing)YH( acces)HY(sor)YH( func)HY(tions)YH(. For the optional element + )SM(middle-name)ES( we first check if the value is present + and only then call )SM(get\201\202)ES( to retrieve it.)EP( + + )0 P(Note that when we want to reduce typing by creat)HY(ing)YH( a vari)HY(able)YH( + repre)HY(sent)HY(ing)YH( a frag)HY(ment)YH( of the object model that we are currently + working with \201)SM(ps)ES( and )SM(p)ES( above\202, we obtain + a refer)HY(ence)YH( to that frag)HY(ment)YH( instead of making a poten)HY(tially)YH( + expen)HY(sive)YH( copy. This is gener)HY(ally)YH( a good rule to follow when + creat)HY(ing)YH( high-perfor)HY(mance)YH( appli)HY(ca)HY(tions)YH(.)EP( + + )0 P(If we run the above appli)HY(ca)HY(tion)YH( on our sample + )SM(people.xml)ES(, the output looks as follows:)EP( + + ) 9 21 PR(name: John Doe +gender: male +age: 32 +id: 1 + +name: Jane Mary Doe +gender: female +age: 28 +id: 2)RP( + + + )0 2 23 H(4.3)WB 59 Sn()WB 26 Sn( Modi)HY(fy)HY(ing)YH( the Object Model)EA()EH( + + )0 P(In this section we will learn how to modify the infor)HY(ma)HY(tion)YH( + stored in the object model for our person records vocab)HY(u)HY(lary)YH(. + The follow)HY(ing)YH( appli)HY(ca)HY(tion)YH( changes the contents of the + )SM(people.xml)ES( file:)EP( + + ) 43 70 PR(#include +#include "people.hxx" + +using namespace std; + +int +main \201\202 +{ + auto_ptr ppl \201people \201"people.xml"\202\202; + + // Iterate over individual person records and increment + // the age. + // + people_t::person_sequence& ps \201ppl->person \201\202\202; + + for \201people_t::person_iterator i \201ps.begin \201\202\202; i != ps.end \201\202; ++i\202 + { + // Alternative way: i->age \201\202++; + // + i->age \201i->age \201\202 + 1\202; + } + + // Add middle-name to the first record and remove it from + // the second. + // + person_t& john \201ps[0]\202; + person_t& jane \201ps[1]\202; + + john.middle_name \201"Mary"\202; + jane.middle_name \201\202.reset \201\202; +)WR( + // Add another John record. + // + ps.push_back \201john\202; + + // Serialize the modified object model to XML. + // + xml_schema::namespace_infomap map; + map[""].name = ""; + map[""].schema = "people.xsd"; + + people \201cout, *ppl, map\202; +})RP( + + )0 P(The first modi)HY(fi)HY(ca)HY(tion)YH( the above appli)HY(ca)HY(tion)YH( performs is iter)HY(at)HY(ing)YH( + over person records and incre)HY(ment)HY(ing)YH( the age value. This code + frag)HY(ment)YH( shows how to modify the value of a required attribute + or element. The next modi)HY(fi)HY(ca)HY(tion)YH( shows how to set a new value + for the optional )SM(middle-name)ES( element as well + as clear its value. Finally the example adds a copy of the + John Doe record to the )SM(person)ES( element sequence.)EP( + + )0 P(Note that in this case using refer)HY(ences)YH( for the )SM(ps)ES(, + )SM(john)ES(, and )SM(jane)ES( vari)HY(ables)YH( is no longer + a perfor)HY(mance)YH( improve)HY(ment)YH( but a require)HY(ment)YH( for the appli)HY(ca)HY(tion)YH( + to func)HY(tion)YH( correctly. If we hadn't used refer)HY(ences)YH(, all our changes + would have been made on copies without affect)HY(ing)YH( the object model.)EP( + + )0 P(If we run the above appli)HY(ca)HY(tion)YH( on our sample )SM(people.xml)ES(, + the output looks as follows:)EP( + + ) 28 61 PR( + + + + John + Mary + Doe + male + 33 + + + + Jane + Doe + female + 29 + + + + John + Mary + Doe + male + 33 + + +)RP( + + + )0 2 24 H(4.4)WB 60 Sn()WB 27 Sn( Creat)HY(ing)YH( the Object Model from Scratch)EA()EH( + + )0 P(In this section we will learn how to create a new object model + for our person records vocab)HY(u)HY(lary)YH(. The follow)HY(ing)YH( appli)HY(ca)HY(tion)YH( + recre)HY(ates)YH( the content of the orig)HY(i)HY(nal)YH( )SM(people.xml)ES( + file:)EP( + + ) 42 48 PR(#include +#include "people.hxx" + +using namespace std; + +int +main \201\202 +{ + people_t ppl; + people_t::person_sequence& ps \201ppl.person \201\202\202; + + // Add the John Doe record. + // + ps.push_back \201 + person_t \201"John", // first-name + "Doe", // last-name + gender_t::male, // gender + 32, // age + 1\202\202; + + // Add the Jane Doe record. + // + ps.push_back \201 + person_t \201"Jane", // first-name + "Doe", // last-name + gender_t::female, // gender + 28, // age + 2\202\202; // id + + // Add middle name to the Jane Doe record. + //)WR( + person_t& jane \201ps.back \201\202\202; + jane.middle_name \201"Mary"\202; + + // Serialize the object model to XML. + // + xml_schema::namespace_infomap map; + map[""].name = ""; + map[""].schema = "people.xsd"; + + people \201cout, ppl, map\202; +})RP( + + )0 P(The only new part in the above appli)HY(ca)HY(tion)YH( is the calls + to the )SM(people_t)ES( and )SM(person_t)ES( + construc)HY(tors)YH(. As a general rule, for each C++ class + XSD gener)HY(ates)YH( a construc)HY(tor)YH( with initial)HY(iz)HY(ers)YH( + for each element and attribute belong)HY(ing)YH( to the )EM(one)ES( + cardi)HY(nal)HY(ity)YH( class. For our vocab)HY(u)HY(lary)YH(, the follow)HY(ing)YH( + construc)HY(tors)YH( are gener)HY(ated)YH(:)EP( + + ) 13 35 PR(class person_t +{ + person_t \201const first_name_type&, + const last_name_type&, + const gender_type&, + const age_type&, + const id_type&\202; +}; + +class people_t +{ + people_t \201\202; +};)RP( + + )0 P(Note also that we set the )SM(middle-name)ES( element + on the Jane Doe record by obtain)HY(ing)YH( a refer)HY(ence)YH( to that record + in the object model and setting the )SM(middle-name)ES( + value on it. This is a general rule that should be followed + in order to obtain the best perfor)HY(mance)YH(: if possi)HY(ble)YH(, + direct modi)HY(fi)HY(ca)HY(tions)YH( to the object model should be preferred + to modi)HY(fi)HY(ca)HY(tions)YH( on tempo)HY(raries)YH( with subse)HY(quent)YH( copying. The + follow)HY(ing)YH( code frag)HY(ment)YH( shows a seman)HY(ti)HY(cally)YH( equiv)HY(a)HY(lent)YH( but + slightly slower version:)EP( + + ) 11 46 PR(// Add the Jane Doe record. +// +person_t jane \201"Jane", // first-name + "Doe", // last-name + gender_t::female, // gender + 28, // age + 2\202; // id + +jane.middle_name \201"Mary"\202; + +ps.push_back \201jane\202;)RP( + + )0 P(We can also go one step further to reduce copying and improve + the perfor)HY(mance)YH( of our appli)HY(ca)HY(tion)YH( by using the non-copying + )SM(push_back\201\202)ES( func)HY(tion)YH( which assumes owner)HY(ship)YH( + of the passed objects:)EP( + + ) 19 55 PR(// Add the John Doe record. C++98 version. +// +auto_ptr john_p \201 + new person_t \201"John", // first-name + "Doe", // last-name + gender_t::male, // gender + 32, // age + 1\202\202; +ps.push_back \201john_p\202; // assumes ownership + +// Add the Jane Doe record. C++11 version +// +unique_ptr jane_p \201 + new person_t \201"Jane", // first-name + "Doe", // last-name + gender_t::female, // gender + 28, // age + 2\202\202; // id +ps.push_back \201std::move \201jane_p\202\202; // assumes ownership)RP( + + )0 P(For more infor)HY(ma)HY(tion)YH( on the non-copying modi)HY(fier)YH( func)HY(tions)YH( refer to + )R12 2 A(Section + 2.8, "Mapping for Local Elements and Attributes")EA( in the C++/Tree Mapping + User Manual. The above appli)HY(ca)HY(tion)YH( produces the follow)HY(ing)YH( output:)EP( + + ) 20 61 PR( + + + + John + Doe + male + 32 + + + + Jane + Mary + Doe + female + 28 + + +)RP( + + )0 2 25 H(4.5)WB 61 Sn()WB 28 Sn( Mapping for the Built-in XML Schema Types)EA()EH( + + )0 P(Our person record vocab)HY(u)HY(lary)YH( uses several built-in XML Schema + types: )SM(string)ES(, )SM(short)ES(, and + )SM(unsignedInt)ES(. Until now we haven't talked about + the mapping of built-in XML Schema types to C++ types and how + to work with them. This section provides an overview + of the built-in types. For more detailed infor)HY(ma)HY(tion)YH( refer + to )R13 2 A(Section + 2.5, "Mapping for Built-in Data Types")EA( in the C++/Tree Mapping + User Manual.)EP( + + )0 P(In XML Schema, built-in types are defined in the XML Schema names)HY(pace)YH(. + By default, the C++/Tree mapping maps this names)HY(pace)YH( to C++ + names)HY(pace)YH( )SM(xml_schema)ES( \201this mapping can be altered + with the )SM(--names)HY(pace)YH(-map)ES( option\202. The follow)HY(ing)YH( table + summa)HY(rizes)YH( the mapping of XML Schema built-in types to C++ types:)EP( + + + )0 PT( + + )0 P(As you can see from the table above a number of built-in + XML Schema types are mapped to funda)HY(men)HY(tal)YH( C++ types such + as )SM(int)ES( or )SM(bool)ES(. All string-based + XML Schema types are mapped to C++ types that are derived + from either )SM(std::string)ES( or + )SM(std::wstring)ES(, depend)HY(ing)YH( on the char)HY(ac)HY(ter)YH( + type selected. For access and modi)HY(fi)HY(ca)HY(tion)YH( purposes these + types can be treated as )SM(std::string)ES(. A number + of built-in types, such as )SM(qname)ES(, the binary + types, and the date/time types do not have suit)HY(able)YH( + funda)HY(men)HY(tal)YH( or stan)HY(dard)YH( C++ types to map to. As a result, + these types are imple)HY(mented)YH( from scratch in the XSD runtime. + For more infor)HY(ma)HY(tion)YH( on their inter)HY(faces)YH( refer to + )R13 2 A(Section + 2.5, "Mapping for Built-in Data Types")EA( in the C++/Tree Mapping + User Manual.)EP( + + + + + + )0 1 26 H(5)WB 62 Sn()WB 30 Sn( Parsing)EA()EH( + + )0 P(We have already seen how to parse XML to an object model in this guide + before. In this chapter we will discuss the parsing topic in more + detail.)EP( + + )0 P(By default, the C++/Tree mapping provides a total of 14 over)HY(loaded)YH( + parsing func)HY(tions)YH(. They differ in the input methods used to + read XML as well as the error report)HY(ing)YH( mech)HY(a)HY(nisms)YH(. It is also possi)HY(ble)YH( + to gener)HY(ate)YH( types for root elements instead of parsing and seri)HY(al)HY(iza)HY(tion)YH( + func)HY(tions)YH(. This may be useful if your XML vocab)HY(u)HY(lary)YH( has multi)HY(ple)YH( + root elements. For more infor)HY(ma)HY(tion)YH( on element types refer to + )R14 2 A(Section + 2.9, "Mapping for Global Elements")EA( in the C++/Tree Mapping User + Manual.)EP( + + + )0 P(In this section we will discuss the most commonly used versions of + the parsing func)HY(tions)YH(. For a compre)HY(hen)HY(sive)YH( descrip)HY(tion)YH( of parsing + refer to )R15 2 A(Chapter + 3, "Parsing")EA( in the C++/Tree Mapping User Manual. For the )SM(people)ES( + global element from our person record vocab)HY(u)HY(lary)YH(, we will concen)HY(trate)YH( + on the follow)HY(ing)YH( three parsing func)HY(tions)YH(:)EP( + + ) 15 71 PR(std::[auto|unique]_ptr +people \201const std::string& uri, + xml_schema::flags f = 0, + const xml_schema::properties& p = xml_schema::properties \201\202\202; + +std::[auto|unique]_ptr +people \201std::istream& is, + xml_schema::flags f = 0, + const xml_schema::properties& p = xml_schema::properties \201\202\202; + +std::[auto|unique]_ptr +people \201std::istream& is, + const std::string& resource_id, + xml_schema::flags f = 0, + const xml_schema::properties& p = ::xml_schema::properties \201\202\202;)RP( + + )0 P(The first func)HY(tion)YH( parses a local file or a URI. We have already + used this parsing func)HY(tion)YH( in the previ)HY(ous)YH( chap)HY(ters)YH(. The second + and third func)HY(tions)YH( read XML from a stan)HY(dard)YH( input stream. The + last func)HY(tion)YH( also requires a resource id. This id is used to + iden)HY(tify)YH( the XML docu)HY(ment)YH( being parser in diag)HY(nos)HY(tics)YH( messages + as well as to resolve rela)HY(tive)YH( paths to other docu)HY(ments)YH( \201for example, + schemas\202 that might be refer)HY(enced)YH( from the XML docu)HY(ment)YH(.)EP( + + )0 P(The last two argu)HY(ments)YH( to all three parsing func)HY(tions)YH( are parsing + flags and prop)HY(er)HY(ties)YH(. The flags argu)HY(ment)YH( provides a number of ways + to fine-tune the parsing process. The prop)HY(er)HY(ties)YH( argu)HY(ment)YH( allows + to pass addi)HY(tional)YH( infor)HY(ma)HY(tion)YH( to the parsing func)HY(tions)YH(. We will + use these two argu)HY(ments)YH( in )0 31 1 A(Section 5.1, "XML Schema + Vali)HY(da)HY(tion)YH( and Search)HY(ing)YH(")31 0 TN TL()Ec /AF f D( below. All three func)HY(tions)YH( return + the object model as either )SM(std::auto_ptr)ES( \201C++98\202 or + )SM(std::unique_ptr)ES( \201C++11\202, depend)HY(ing)YH( on the C++ stan)HY(dard)YH( + selected \201)SM(--std)ES( XSD compiler option\202. The follow)HY(ing)YH( + example shows how we can use the above parsing func)HY(tions)YH(:)EP( + + ) 17 65 PR(using std::auto_ptr; + +// Parse a local file or URI. +// +auto_ptr p1 \201people \201"people.xml"\202\202; +auto_ptr p2 \201people \201"http://example.com/people.xml"\202\202; + +// Parse a local file via ifstream. +// +std::ifstream ifs \201"people.xml"\202; +auto_ptr p3 \201people \201ifs, "people.xml"\202\202; + +// Parse an XML string. +// +std::string str \201"..."\202; // XML in a string. +std::istringstream iss \201str\202; +auto_ptr p4 \201people \201iss\202\202;)RP( + + + )0 2 27 H(5.1)WB 63 Sn()WB 31 Sn( XML Schema Vali)HY(da)HY(tion)YH( and Search)HY(ing)YH()EA()EH( + + )0 P(The C++/Tree mapping relies on the under)HY(ly)HY(ing)YH( Xerces-C++ XML + parser for full XML docu)HY(ment)YH( vali)HY(da)HY(tion)YH(. The XML Schema + vali)HY(da)HY(tion)YH( is enabled by default and can be disabled by + passing the )SM(xml_schema::flags::dont_vali)HY(date)YH()ES( + flag to the parsing func)HY(tions)YH(, for example:)EP( + + ) 2 59 PR(auto_ptr p \201 + people \201"people.xml", xml_schema::flags::dont_validate\202\202;)RP( + + )0 P(Even when XML Schema vali)HY(da)HY(tion)YH( is disabled, the gener)HY(ated)YH( + code still performs a number of checks to prevent + construc)HY(tion)YH( of an incon)HY(sis)HY(tent)YH( object model \201for example, an + object model with missing required attributes or elements\202.)EP( + + )0 P(When XML Schema vali)HY(da)HY(tion)YH( is enabled, the XML parser needs + to locate a schema to vali)HY(date)YH( against. There are several + methods to provide the schema loca)HY(tion)YH( infor)HY(ma)HY(tion)YH( to the + parser. The easiest and most commonly used method is to + specify schema loca)HY(tions)YH( in the XML docu)HY(ment)YH( itself + with the )SM(schemaLo)HY(ca)HY(tion)YH()ES( or + )SM(noNames)HY(paceSchemaLo)HY(ca)HY(tion)YH()ES( attributes, for example:)EP( + + ) 4 74 PR( +)RP( + + )0 P(As you might have noticed, we used this method in all the sample XML + docu)HY(ments)YH( presented in this guide up until now. Note that the + schema loca)HY(tions)YH( spec)HY(i)HY(fied)YH( with these two attributes are rela)HY(tive)YH( + to the docu)HY(ment)YH('s path unless they are abso)HY(lute)YH( URIs \201that is + start with )SM(http://)ES(, )SM(file://)ES(, etc.\202. + In partic)HY(u)HY(lar)YH(, if you specify just file names as your schema + loca)HY(tions)YH(, as we did above, then the schemas should reside in + the same direc)HY(tory)YH( as the XML docu)HY(ment)YH( itself.)EP( + + )0 P(Another method of provid)HY(ing)YH( the schema loca)HY(tion)YH( infor)HY(ma)HY(tion)YH( + is via the )SM(xml_schema::prop)HY(er)HY(ties)YH()ES( argu)HY(ment)YH(, as + shown in the follow)HY(ing)YH( example:)EP( + + ) 5 74 PR(xml_schema::properties props; +props.no_namespace_schema_location \201"people.xsd"\202; +props.schema_location \201"http://www.w3.org/XML/1998/namespace", "xml.xsd"\202; + +auto_ptr p \201people \201"people.xml", 0, props\202\202;)RP( + + )0 P(The schema loca)HY(tions)YH( provided with this method over)HY(rides)YH( + those spec)HY(i)HY(fied)YH( in the XML docu)HY(ment)YH(. As with the previ)HY(ous)YH( + method, the schema loca)HY(tions)YH( spec)HY(i)HY(fied)YH( this way are + rela)HY(tive)YH( to the docu)HY(ment)YH('s path unless they are abso)HY(lute)YH( URIs. + In partic)HY(u)HY(lar)YH(, if you want to use local schemas that are + not related to the docu)HY(ment)YH( being parsed, then you will + need to use the )SM(file://)ES( URI. The follow)HY(ing)YH( + example shows how to use schemas that reside in the current + working direc)HY(tory)YH(:)EP( + + ) 19 55 PR(#include // getcwd +#include // PATH_MAX + +char cwd[PATH_MAX]; +if \201getcwd \201cwd, PATH_MAX\202 == 0\202 +{ + // Buffer too small? +} + +xml_schema::properties props; + +props.no_namespace_schema_location \201 + "file:///" + std::string \201cwd\202 + "/people.xsd"\202; + +props.schema_location \201 + "http://www.w3.org/XML/1998/namespace", + "file:///" + std::string \201cwd\202 + "/xml.xsd"\202; + +auto_ptr p \201people \201"people.xml", 0, props\202\202;)RP( + + )0 P(A third method is the most useful if you are plan)HY(ning)YH( to parse + several XML docu)HY(ments)YH( of the same vocab)HY(u)HY(lary)YH(. In that case + it may be bene)HY(fi)HY(cial)YH( to pre-parse and cache the schemas in + the XML parser which can then be used to parse all docu)HY(ments)YH( + without re-parsing the schemas. For more infor)HY(ma)HY(tion)YH( on + this method refer to the )SM(caching)ES( example in the + )SM(exam)HY(ples)YH(/cxx/tree/)ES( direc)HY(tory)YH( of the XSD + distri)HY(bu)HY(tion)YH(. It is also possi)HY(ble)YH( to convert the schemas into + a pre-compiled binary repre)HY(sen)HY(ta)HY(tion)YH( and embed this repre)HY(sen)HY(ta)HY(tion)YH( + directly into the appli)HY(ca)HY(tion)YH( executable. With this approach your + appli)HY(ca)HY(tion)YH( can perform XML Schema vali)HY(da)HY(tion)YH( without depend)HY(ing)YH( on + any exter)HY(nal)YH( schema files. For more infor)HY(ma)HY(tion)YH( on how to achieve + this refer to the )SM(embed)HY(ded)YH()ES( example in the + )SM(exam)HY(ples)YH(/cxx/tree/)ES( direc)HY(tory)YH( of the XSD distri)HY(bu)HY(tion)YH(.)EP( + + )0 P(When the XML parser cannot locate a schema for the + XML docu)HY(ment)YH(, the vali)HY(da)HY(tion)YH( fails and XML docu)HY(ment)YH( + elements and attributes for which schema defi)HY(ni)HY(tions)YH( could + not be located are reported in the diag)HY(nos)HY(tics)YH(. For + example, if we remove the )SM(noNames)HY(paceSchemaLo)HY(ca)HY(tion)YH()ES( + attribute in )SM(people.xml)ES( from the previ)HY(ous)YH( chapter, + then we will get the follow)HY(ing)YH( diag)HY(nos)HY(tics)YH( if we try to parse + this file with vali)HY(da)HY(tion)YH( enabled:)EP( + + ) 8 74 PR(people.xml:2:63 error: no declaration found for element 'people' +people.xml:4:18 error: no declaration found for element 'person' +people.xml:4:18 error: attribute 'id' is not declared for element 'person' +people.xml:5:17 error: no declaration found for element 'first-name' +people.xml:6:18 error: no declaration found for element 'middle-name' +people.xml:7:16 error: no declaration found for element 'last-name' +people.xml:8:13 error: no declaration found for element 'gender' +people.xml:9:10 error: no declaration found for element 'age')RP( + + )0 2 28 H(5.2)WB 64 Sn()WB 32 Sn( Error Handling)EA()EH( + + )0 P(The parsing func)HY(tions)YH( offer a number of ways to handle error condi)HY(tions)YH( + with the C++ excep)HY(tions)YH( being the most commonly used mech)HY(a)HY(nism)YH(. All + C++/Tree excep)HY(tions)YH( derive from common base )SM(xml_schema::excep)HY(tion)YH()ES( + which in turn derives from )SM(std::excep)HY(tion)YH()ES(. The easiest + way to uniformly handle all possi)HY(ble)YH( C++/Tree excep)HY(tions)YH( and print + detailed infor)HY(ma)HY(tion)YH( about the error is to catch and print + )SM(xml_schema::excep)HY(tion)YH()ES(, as shown in the follow)HY(ing)YH( + example:)EP( + + ) 8 47 PR(try +{ + auto_ptr p \201people \201"people.xml"\202\202; +} +catch \201const xml_schema::exception& e\202 +{ + cerr << e << endl; +})RP( + + )0 P(Each indi)HY(vid)HY(ual)YH( C++/Tree excep)HY(tion)YH( also allows you to obtain + error details program)HY(mat)HY(i)HY(cally)YH(. For example, the + )SM(xml_schema::parsing)ES( excep)HY(tion)YH( is thrown when + the XML parsing and vali)HY(da)HY(tion)YH( in the under)HY(ly)HY(ing)YH( XML parser + fails. It encap)HY(su)HY(lates)YH( various diag)HY(nos)HY(tics)YH( infor)HY(ma)HY(tion)YH( + such as the file name, line and column numbers, as well as the + error or warning message for each entry. For more infor)HY(ma)HY(tion)YH( + about this and other excep)HY(tions)YH( that can be thrown during + parsing, refer to + )R16 2 A(Section + 3.3, "Error Handling")EA( in the C++/Tree Mapping + User Manual.)EP( + + )0 P(Note that if you are parsing )SM(std::istream)ES( on which + excep)HY(tions)YH( are not enabled, then you will need to check the + stream state after the call to the parsing func)HY(tion)YH( in order + to detect any possi)HY(ble)YH( stream fail)HY(ures)YH(, for example:)EP( + + ) 15 50 PR(std::ifstream ifs \201"people.xml"\202; + +if \201ifs.fail \201\202\202 +{ + cerr << "people.xml: unable to open" << endl; + return 1; +} + +auto_ptr p \201people \201ifs, "people.xml"\202\202; + +if \201ifs.fail \201\202\202 +{ + cerr << "people.xml: read error" << endl; + return 1; +})RP( + + )0 P(The above example can be rewrit)HY(ten)YH( to use excep)HY(tions)YH( as + shown below:)EP( + + ) 13 66 PR(try +{ + std::ifstream ifs; + ifs.exceptions \201std::ifstream::badbit | std::ifstream::failbit\202; + ifs.open \201"people.xml"\202; + + auto_ptr p \201people \201ifs, "people.xml"\202\202; +} +catch \201const std::ifstream::failure&\202 +{ + cerr << "people.xml: unable to open or read error" << endl; + return 1; +})RP( + + + + + + )0 1 29 H(6)WB 65 Sn()WB 33 Sn( Seri)HY(al)HY(iza)HY(tion)YH()EA()EH( + + )0 P(We have already seen how to seri)HY(al)HY(ize)YH( an object model back to XML + in this guide before. In this chapter we will discuss the + seri)HY(al)HY(iza)HY(tion)YH( topic in more detail.)EP( + + )0 P(By default, the C++/Tree mapping provides a total of 8 over)HY(loaded)YH( + seri)HY(al)HY(iza)HY(tion)YH( func)HY(tions)YH(. They differ in the output methods used to write + XML as well as the error report)HY(ing)YH( mech)HY(a)HY(nisms)YH(. It is also possi)HY(ble)YH( to + gener)HY(ate)YH( types for root elements instead of parsing and seri)HY(al)HY(iza)HY(tion)YH( + func)HY(tions)YH(. This may be useful if your XML vocab)HY(u)HY(lary)YH( has multi)HY(ple)YH( + root elements. For more infor)HY(ma)HY(tion)YH( on element types refer to + )R14 2 A(Section + 2.9, "Mapping for Global Elements")EA( in the C++/Tree Mapping User + Manual.)EP( + + + )0 P(In this section we will discuss the most commonly + used version of seri)HY(al)HY(iza)HY(tion)YH( func)HY(tions)YH(. For a compre)HY(hen)HY(sive)YH( descrip)HY(tion)YH( + of seri)HY(al)HY(iza)HY(tion)YH( refer to + )R17 2 A(Chapter + 4, "Seri)HY(al)HY(iza)HY(tion)YH(")EA( in the C++/Tree Mapping User Manual. For the + )SM(people)ES( global element from our person record vocab)HY(u)HY(lary)YH(, + we will concen)HY(trate)YH( on the follow)HY(ing)YH( seri)HY(al)HY(iza)HY(tion)YH( func)HY(tion)YH(:)EP( + + ) 7 50 PR(void +people \201std::ostream& os, + const people_t& x, + const xml_schema::namespace_infomap& map = + xml_schema::namespace_infomap \201\202, + const std::string& encoding = "UTF-8", + xml_schema::flags f = 0\202;)RP( + + )0 P(This func)HY(tion)YH( seri)HY(al)HY(izes)YH( the object model passed as the second + argu)HY(ment)YH( to the stan)HY(dard)YH( output stream passed as the first + argu)HY(ment)YH(. The third argu)HY(ment)YH( is a names)HY(pace)YH( infor)HY(ma)HY(tion)YH( map + which we will discuss in more detail in the next section. + The fourth argu)HY(ment)YH( is a char)HY(ac)HY(ter)YH( encod)HY(ing)YH( that the result)HY(ing)YH( + XML docu)HY(ment)YH( should be in. Possi)HY(ble)YH( valid values for this + argu)HY(ment)YH( are "US-ASCII", "ISO8859-1", "UTF-8", "UTF-16BE", + "UTF-16LE", "UCS-4BE", and "UCS-4LE". Finally, the flags + argu)HY(ment)YH( allows fine-tuning of the seri)HY(al)HY(iza)HY(tion)YH( process. + The follow)HY(ing)YH( example shows how we can use the above seri)HY(al)HY(iza)HY(tion)YH( + func)HY(tion)YH(:)EP( + + ) 19 34 PR(people_t& p = ... + +xml_schema::namespace_infomap map; +map[""].schema = "people.xsd"; + +// Serialize to stdout. +// +people \201std::cout, p, map\202; + +// Serialize to a file. +// +std::ofstream ofs \201"people.xml"\202; +people \201ofs, p, map\202; + +// Serialize to a string. +// +std::ostringstream oss; +people \201oss, p, map\202; +std::string xml \201oss.str \201\202\202;)RP( + + + )0 2 30 H(6.1)WB 66 Sn()WB 34 Sn( Names)HY(pace)YH( and Schema Infor)HY(ma)HY(tion)YH()EA()EH( + + )0 P(While XML seri)HY(al)HY(iza)HY(tion)YH( can be done just from the object + model alone, it is often desir)HY(able)YH( to assign mean)HY(ing)HY(ful)YH( + prefixes to XML names)HY(paces)YH( used in the vocab)HY(u)HY(lary)YH( as + well as to provide the schema loca)HY(tion)YH( infor)HY(ma)HY(tion)YH(. + This is accom)HY(plished)YH( by passing the names)HY(pace)YH( infor)HY(ma)HY(tion)YH( + map to the seri)HY(al)HY(iza)HY(tion)YH( func)HY(tion)YH(. The key in this map is + a names)HY(pace)YH( prefix that should be assigned to an XML names)HY(pace)YH( + spec)HY(i)HY(fied)YH( in the )SM(name)ES( vari)HY(able)YH( of the + map value. You can also assign an optional schema loca)HY(tion)YH( for + this names)HY(pace)YH( in the )SM(schema)ES( vari)HY(able)YH(. Based + on each key-value entry in this map, the seri)HY(al)HY(iza)HY(tion)YH( + func)HY(tion)YH( adds two attributes to the result)HY(ing)YH( XML docu)HY(ment)YH(: + the names)HY(pace)YH(-prefix mapping attribute and schema loca)HY(tion)YH( + attribute. The empty prefix indi)HY(cates)YH( that the names)HY(pace)YH( + should be mapped without a prefix. For example, the follow)HY(ing)YH( + map:)EP( + + ) 7 55 PR(xml_schema::namespace_infomap map; + +map[""].name = "http://www.example.com/example"; +map[""].schema = "example.xsd"; + +map["x"].name = "http://www.w3.org/XML/1998/namespace"; +map["x"].schema = "xml.xsd";)RP( + + )0 P(Results in the follow)HY(ing)YH( XML docu)HY(ment)YH(:)EP( + + ) 7 68 PR( +)RP( + + )0 P(The empty names)HY(pace)YH( indi)HY(cates)YH( that the vocab)HY(u)HY(lary)YH( has no target + names)HY(pace)YH(. For example, the follow)HY(ing)YH( map results in only the + )SM(noNames)HY(paceSchemaLo)HY(ca)HY(tion)YH()ES( attribute being added:)EP( + + ) 4 34 PR(xml_schema::namespace_infomap map; + +map[""].name = ""; +map[""].schema = "example.xsd";)RP( + + )0 2 31 H(6.2)WB 67 Sn()WB 35 Sn( Error Handling)EA()EH( + + )0 P(Similar to the parsing func)HY(tions)YH(, the seri)HY(al)HY(iza)HY(tion)YH( func)HY(tions)YH( offer a + number of ways to handle error condi)HY(tions)YH( with the C++ excep)HY(tions)YH( being + the most commonly used mech)HY(a)HY(nisms)YH(. As with parsing, the easiest way to + uniformly handle all possi)HY(ble)YH( seri)HY(al)HY(iza)HY(tion)YH( excep)HY(tions)YH( and print + detailed infor)HY(ma)HY(tion)YH( about the error is to catch and print + )SM(xml_schema::excep)HY(tion)YH()ES(:)EP( + + ) 13 38 PR(try +{ + people_t& p = ... + + xml_schema::namespace_infomap map; + map[""].schema = "people.xsd"; + + people \201std::cout, p, map\202\202; +} +catch \201const xml_schema::exception& e\202 +{ + cerr << e << endl; +})RP( + + )0 P(The most commonly encoun)HY(tered)YH( seri)HY(al)HY(iza)HY(tion)YH( excep)HY(tion)YH( is + )SM(xml_schema::seri)HY(al)HY(iza)HY(tion)YH()ES(. It is thrown + when the XML seri)HY(al)HY(iza)HY(tion)YH( in the under)HY(ly)HY(ing)YH( XML writer + fails. It encap)HY(su)HY(lates)YH( various diag)HY(nos)HY(tics)YH( infor)HY(ma)HY(tion)YH( + such as the file name, line and column numbers, as well as the + error or warning message for each entry. For more infor)HY(ma)HY(tion)YH( + about this and other excep)HY(tions)YH( that can be thrown during + seri)HY(al)HY(iza)HY(tion)YH(, refer to + )R18 2 A(Section + 4.4, "Error Handling")EA( in the C++/Tree Mapping + User Manual.)EP( + + )0 P(Note that if you are seri)HY(al)HY(iz)HY(ing)YH( to )SM(std::ostream)ES( on + which excep)HY(tions)YH( are not enabled, then you will need to check the + stream state after the call to the seri)HY(al)HY(iza)HY(tion)YH( func)HY(tion)YH( in order + to detect any possi)HY(ble)YH( stream fail)HY(ures)YH(, for example:)EP( + + ) 15 47 PR(std::ofstream ofs \201"people.xml"\202; + +if \201ofs.fail \201\202\202 +{ + cerr << "people.xml: unable to open" << endl; + return 1; +} + +people \201ofs, p, map\202\202; + +if \201ofs.fail \201\202\202 +{ + cerr << "people.xml: write error" << endl; + return 1; +})RP( + + )0 P(The above example can be rewrit)HY(ten)YH( to use excep)HY(tions)YH( as + shown below:)EP( + + ) 13 66 PR(try +{ + std::ofstream ofs; + ofs.exceptions \201std::ofstream::badbit | std::ofstream::failbit\202; + ofs.open \201"people.xml"\202; + + people \201ofs, p, map\202\202; +} +catch \201const std::ofstream::failure&\202 +{ + cerr << "people.xml: unable to open or write error" << endl; + return 1; +})RP( + + )BR( +)BR( + +)WB NL +/TE t D NP /OU t D TU PM 1 eq and{/Pn () D showpage}if end restore diff --git a/xsd/doc/cxx/tree/guide/guide.html2ps b/xsd/doc/cxx/tree/guide/guide.html2ps new file mode 100644 index 0000000..fbdaaf5 --- /dev/null +++ b/xsd/doc/cxx/tree/guide/guide.html2ps @@ -0,0 +1,65 @@ +@html2ps { + option { + toc: hb; + colour: 1; + hyphenate: 1; + titlepage: 1; + } + + datefmt: "%B %Y"; + + titlepage { + content: " +
+

C++/Tree Mapping

+

Getting Started Guide

+

 

+

 

+

 

+

 

+

 

+

 

+
+

Copyright © 2005-2014 CODE SYNTHESIS TOOLS CC

+ +

Permission is granted to copy, distribute and/or modify this + document under the terms of the + GNU Free + Documentation License, version 1.2; with no Invariant Sections, + no Front-Cover Texts and no Back-Cover Texts. +

+ +

This document is available in the following formats: + XHTML, + PDF, and + PostScript.

"; + } + + toc { + indent: 2em; + } + + header { + odd-right: $H; + even-left: $H; + } + + footer { + odd-left: $D; + odd-center: $T; + odd-right: $N; + + even-left: $N; + even-center: $T; + even-right: $D; + } +} + +body { + font-size: 12pt; + text-align: justify; +} + +pre { + font-size: 10pt; +} diff --git a/xsd/doc/cxx/tree/guide/index.xhtml b/xsd/doc/cxx/tree/guide/index.xhtml new file mode 100644 index 0000000..49ad3a6 --- /dev/null +++ b/xsd/doc/cxx/tree/guide/index.xhtml @@ -0,0 +1,2732 @@ + + + + + + C++/Tree Mapping Getting Started Guide + + + + + + + + + + + + + +
+
+ +
+ +
+
C++/Tree Mapping
+
Getting Started Guide
+ +

Copyright © 2005-2014 CODE SYNTHESIS TOOLS CC

+ +

Permission is granted to copy, distribute and/or modify this + document under the terms of the + GNU Free + Documentation License, version 1.2; with no Invariant Sections, + no Front-Cover Texts and no Back-Cover Texts. +

+ +

This document is available in the following formats: + XHTML, + PDF, and + PostScript.

+ +
+ +

Table of Contents

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Preface + + + +
About This Document
More Information
+
1Introduction + + + +
1.1Mapping Overview
1.2Benefits
+
2Hello World Example + + + + + + + + +
2.1Writing XML Document and Schema
2.2Translating Schema to C++
2.3Implementing Application Logic
2.4Compiling and Running
2.5Adding Serialization
2.6Selecting Naming Convention
2.7Generating Documentation
+
3Overall Mapping Configuration + + + + + + +
3.1C++ Standard
3.2Character Type and Encoding
3.3Support for Polymorphism
3.4Namespace Mapping
3.5Thread Safety
+
4Working with Object Models + + + + + + +
4.1Attribute and Element Cardinalities
4.2Accessing the Object Model
4.3Modifying the Object Model
4.4Creating the Object Model from Scratch
4.5Mapping for the Built-in XML Schema Types
+
5Parsing + + + +
5.1XML Schema Validation and Searching
5.2Error Handling
+
6Serialization + + + +
6.1Namespace and Schema Information
6.2Error Handling
+
+
+ +

Preface

+ +

About This Document

+ +

The goal of this document is to provide you with an understanding of + the C++/Tree programming model and allow you to efficiently evaluate + XSD against your project's technical requirements. As such, this + document is intended for C++ developers and software architects + who are looking for an XML processing solution. For a more in-depth + description of the C++/Tree mapping refer to the + C++/Tree + Mapping User Manual.

+ +

Prior experience with XML and C++ is required to understand this + document. Basic understanding of XML Schema is advantageous but + not expected or required. +

+ + +

More Information

+ +

Beyond this guide, you may also find the following sources of + information useful:

+ + + + + +

1 Introduction

+ +

Welcome to CodeSynthesis XSD and the C++/Tree mapping. XSD is a + cross-platform W3C XML Schema to C++ data binding compiler. C++/Tree + is a W3C XML Schema to C++ mapping that represents the data stored + in XML as a statically-typed, vocabulary-specific object model. +

+ +

1.1 Mapping Overview

+ +

Based on a formal description of an XML vocabulary (schema), the + C++/Tree mapping produces a tree-like data structure suitable for + in-memory processing. The core of the mapping consists of C++ + classes that constitute the object model and are derived from + types defined in XML Schema as well as XML parsing and + serialization code.

+ +

Besides the core features, C++/Tree provide a number of additional + mapping elements that can be useful in some applications. These + include serialization and extraction to/from formats others than + XML, such as unstructured text (useful for debugging) and binary + representations such as XDR and CDR for high-speed data processing + as well as automatic documentation generation. The C++/Tree mapping + also provides a wide range of mechanisms for controlling and + customizing the generated code.

+ +

A typical application that uses C++/Tree for XML processing usually + performs the following three steps: it first reads (parses) an XML + document to an in-memory object model, it then performs some useful + computations on that object model which may involve modification + of the model, and finally it may write (serialize) the modified + object model back to XML.

+ +

The next chapter presents a simple application that performs these + three steps. The following chapters show how to use the C++/Tree + mapping in more detail.

+ +

1.2 Benefits

+ +

Traditional XML access APIs such as Document Object Model (DOM) + or Simple API for XML (SAX) have a number of drawbacks that + make them less suitable for creating robust and maintainable + XML processing applications. These drawbacks include: +

+ +
    +
  • Generic representation of XML in terms of elements, attributes, + and text forces an application developer to write a substantial + amount of bridging code that identifies and transforms pieces + of information encoded in XML to a representation more suitable + for consumption by the application logic.
  • + +
  • String-based flow control defers error detection to runtime. + It also reduces code readability and maintainability.
  • + +
  • Lack of type safety because the data is represented as text.
  • + +
  • Resulting applications are hard to debug, change, and + maintain.
  • +
+ +

In contrast, statically-typed, vocabulary-specific object model + produced by the C++/Tree mapping allows you to operate in your + domain terms instead of the generic elements, attributes, and + text. Static typing helps catch errors at compile-time rather + than at run-time. Automatic code generation frees you for more + interesting tasks (such as doing something useful with the + information stored in the XML documents) and minimizes the + effort needed to adapt your applications to changes in the + document structure. To summarize, the C++/Tree object model has + the following key advantages over generic XML access APIs:

+ +
    +
  • Ease of use. The generated code hides all the complexity + associated with parsing and serializing XML. This includes navigating + the structure and converting between the text representation and + data types suitable for manipulation by the application + logic.
  • + +
  • Natural representation. The object representation allows + you to access the XML data using your domain vocabulary instead + of generic elements, attributes, and text.
  • + +
  • Concise code. With the object representation the + application implementation is simpler and thus easier + to read and understand.
  • + +
  • Safety. The generated object model is statically + typed and uses functions instead of strings to access the + information. This helps catch programming errors at compile-time + rather than at runtime.
  • + +
  • Maintainability. Automatic code generation minimizes the + effort needed to adapt the application to changes in the + document structure. With static typing, the C++ compiler + can pin-point the places in the client code that need to be + changed.
  • + +
  • Compatibility. Sequences of elements are represented in + the object model as containers conforming to the standard C++ + sequence requirements. This makes it possible to use standard + C++ algorithms on the object representation and frees you from + learning yet another container interface, as is the case with + DOM.
  • + +
  • Efficiency. If the application makes repetitive use + of the data extracted from XML, then the C++/Tree object model + is more efficient because the navigation is performed using + function calls rather than string comparisons and the XML + data is extracted only once. Furthermore, the runtime memory + usage is reduced due to more efficient data storage + (for instance, storing numeric data as integers instead of + strings) as well as the static knowledge of cardinality + constraints.
  • +
+ + + + + +

2 Hello World Example

+ +

In this chapter we will examine how to parse, access, modify, and + serialize a very simple XML document using the XSD-generated + C++/Tree object model. The code presented in this chapter is + based on the hello example which can be found in + the examples/cxx/tree/ directory of the XSD + distribution.

+ +

2.1 Writing XML Document and Schema

+ +

First, we need to get an idea about the structure + of the XML documents we are going to process. Our + hello.xml, for example, could look like this:

+ +
+<?xml version="1.0"?>
+<hello>
+
+  <greeting>Hello</greeting>
+
+  <name>sun</name>
+  <name>moon</name>
+  <name>world</name>
+
+</hello>
+  
+ +

Then we can write a description of the above XML in the + XML Schema language and save it into hello.xsd:

+ +
+<?xml version="1.0"?>
+<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
+
+  <xs:complexType name="hello_t">
+    <xs:sequence>
+      <xs:element name="greeting" type="xs:string"/>
+      <xs:element name="name" type="xs:string" maxOccurs="unbounded"/>
+    </xs:sequence>
+  </xs:complexType>
+
+  <xs:element name="hello" type="hello_t"/>
+
+</xs:schema>
+  
+ +

Even if you are not familiar with XML Schema, it + should be easy to connect declarations in hello.xsd + to elements in hello.xml. The hello_t type + is defined as a sequence of the nested greeting and + name elements. Note that the term sequence in XML + Schema means that elements should appear in a particular order + as opposed to appearing multiple times. The name + element has its maxOccurs property set to + unbounded which means it can appear multiple times + in an XML document. Finally, the globally-defined hello + element prescribes the root element for our vocabulary. For an + easily-approachable introduction to XML Schema refer to + XML Schema Part 0: + Primer.

+ +

The above schema is a specification of our XML vocabulary; it tells + everybody what valid documents of our XML-based language should look + like. We can also update our hello.xml to include the + information about the schema so that XML parsers can validate + our document:

+ +
+<?xml version="1.0"?>
+<hello xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+       xsi:noNamespaceSchemaLocation="hello.xsd">
+
+  <greeting>Hello</greeting>
+
+  <name>sun</name>
+  <name>moon</name>
+  <name>world</name>
+
+</hello>
+      
+ + +

The next step is to compile the schema to generate the object + model and parsing functions.

+ +

2.2 Translating Schema to C++

+ +

Now we are ready to translate our hello.xsd to C++. + To do this we invoke the XSD compiler from a terminal (UNIX) or + a command prompt (Windows): +

+ +
+$ xsd cxx-tree hello.xsd
+  
+ +

The XSD compiler produces two C++ files: hello.hxx and + hello.cxx. The following code fragment is taken from + hello.hxx; it should give you an idea about what gets + generated: +

+ +
+class hello_t
+{
+public:
+  // greeting
+  //
+  typedef xml_schema::string greeting_type;
+
+  const greeting_type&
+  greeting () const;
+
+  greeting_type&
+  greeting ();
+
+  void
+  greeting (const greeting_type& x);
+
+  // name
+  //
+  typedef xml_schema::string name_type;
+  typedef xsd::sequence<name_type> name_sequence;
+  typedef name_sequence::iterator name_iterator;
+  typedef name_sequence::const_iterator name_const_iterator;
+
+  const name_sequence&
+  name () const;
+
+  name_sequence&
+  name ();
+
+  void
+  name (const name_sequence& s);
+
+  // Constructor.
+  //
+  hello_t (const greeting_type&);
+
+  ...
+
+};
+
+std::auto_ptr<hello_t>
+hello (const std::string& uri);
+
+std::auto_ptr<hello_t>
+hello (std::istream&);
+  
+ +

The hello_t C++ class corresponds to the + hello_t XML Schema type. For each element + in this type a set of C++ type definitions as well as + accessor and modifier functions are generated inside the + hello_t class. Note that the type definitions + and member functions for the greeting and + name elements are different because of the + cardinality differences between these two elements + (greeting is a required single element and + name is a sequence of elements).

+ +

The xml_schema::string type used in the type + definitions is a C++ class provided by the XSD runtime + that corresponds to built-in XML Schema type + string. The xml_schema::string + is based on std::string and can be used as + such. Similarly, the sequence class template + that is used in the name_sequence type + definition is based on and has the same interface as + std::vector. The mapping between the built-in + XML Schema types and C++ types is described in more detail in + Section 4.5, "Mapping for the Built-in XML Schema + Types". The hello_t class also includes a + constructor with an initializer for the required + greeting element as its argument.

+ +

The hello overloaded global functions correspond + to the hello global element in XML Schema. A + global element in XML Schema is a valid document root. + By default XSD generated a set of parsing functions for each + global element defined in XML Schema (this can be overridden + with the --root-element-* options). Parsing + functions return a dynamically allocated object model as an + automatic pointer. The actual pointer used depends on the + C++ standard selected. For C++98 it is std::auto_ptr + as shown above. For C++11 it is std::unique_ptr. + For example, if we modify our XSD compiler invocation to + select C++11:

+ +
+$ xsd cxx-tree --std c++11 hello.xsd
+  
+ +

Then the parsing function signatures will become:

+ +
+std::unique_ptr<hello_t>
+hello (const std::string& uri);
+
+std::unique_ptr<hello_t>
+hello (std::istream&);
+  
+ +

For more information on parsing functions see Chapter 5, + "Parsing".

+ +

2.3 Implementing Application Logic

+ +

At this point we have all the parts we need to do something useful + with the information stored in our XML document: +

+ +
+#include <iostream>
+#include "hello.hxx"
+
+using namespace std;
+
+int
+main (int argc, char* argv[])
+{
+  try
+  {
+    auto_ptr<hello_t> h (hello (argv[1]));
+
+    for (hello_t::name_const_iterator i (h->name ().begin ());
+         i != h->name ().end ();
+         ++i)
+    {
+      cerr << h->greeting () << ", " << *i << "!" << endl;
+    }
+  }
+  catch (const xml_schema::exception& e)
+  {
+    cerr << e << endl;
+    return 1;
+  }
+}
+  
+ +

The first part of our application calls one of the parsing + functions to parser an XML file specified in the command line. + We then use the returned object model to iterate over names + and print a greeting line for each of them. Finally, we + catch and print the xml_schema::exception + exception in case something goes wrong. This exception + is the root of the exception hierarchy used by the + XSD-generated code. +

+ + +

2.4 Compiling and Running

+ +

After saving our application from the previous section in + driver.cxx, we are ready to compile our first + program and run it on the test XML document. On a UNIX + system this can be done with the following commands: +

+ +
+$ c++ -I.../libxsd -c driver.cxx hello.cxx
+$ c++ -o driver driver.o hello.o -lxerces-c
+$ ./driver hello.xml
+Hello, sun!
+Hello, moon!
+Hello, world!
+  
+ +

Here .../libxsd represents the path to the + libxsd directory in the XSD distribution. + Note also that we are required to link our application + with the Xerces-C++ library because the generated code + uses it as the underlying XML parser.

+ +

2.5 Adding Serialization

+ +

While parsing and accessing the XML data may be everything + you need, there are applications that require creating new + or modifying existing XML documents. By default XSD does + not produce serialization code. We will need to request + it with the --generate-serialization options:

+ +
+$ xsd cxx-tree --generate-serialization hello.xsd
+  
+ +

If we now examine the generated hello.hxx file, + we will find a set of overloaded serialization functions, + including the following version:

+ +
+void
+hello (std::ostream&,
+       const hello_t&,
+       const xml_schema::namespace_infomap& =
+         xml_schema::namespace_infomap ());
+
+  
+ +

Just like with parsing functions, XSD generates serialization + functions for each global element unless instructed otherwise + with one of the --root-element-* options. For more + information on serialization functions see Chapter 6, + "Serialization".

+ +

We first examine an application that modifies an existing + object model and serializes it back to XML:

+ +
+#include <iostream>
+#include "hello.hxx"
+
+using namespace std;
+
+int
+main (int argc, char* argv[])
+{
+  try
+  {
+    auto_ptr<hello_t> h (hello (argv[1]));
+
+    // Change the greeting phrase.
+    //
+    h->greeting ("Hi");
+
+    // Add another entry to the name sequence.
+    //
+    h->name ().push_back ("mars");
+
+    // Serialize the modified object model to XML.
+    //
+    xml_schema::namespace_infomap map;
+    map[""].name = "";
+    map[""].schema = "hello.xsd";
+
+    hello (cout, *h, map);
+  }
+  catch (const xml_schema::exception& e)
+  {
+    cerr << e << endl;
+    return 1;
+  }
+}
+  
+ +

First, our application parses an XML document and obtains its + object model as in the previous example. Then it changes the + greeting string and adds another entry to the list of names. + Finally, it serializes the object model back to XML by calling + the serialization function.

+ +

The first argument we pass to the serialization function is + cout which results in the XML being written to + the standard output for us to inspect. We could have also + written the result to a file or memory buffer by creating an + instance of std::ofstream or std::ostringstream + and passing it instead of cout. The second argument is the + object model we want to serialize. The final argument is an optional + namespace information map for our vocabulary. It captures information + such as namespaces, namespace prefixes to which they should be mapped, + and schemas associated with these namespaces. If we don't provide + this argument then generic namespace prefixes (p1, + p2, etc.) will be automatically assigned to XML namespaces + and no schema information will be added to the resulting document + (see Chapter 6, "Serialization" for details). + In our case, the prefix (map key) and namespace name are empty + because our vocabulary does not use XML namespaces.

+ +

If we now compile and run this application we will see the + output as shown in the following listing:

+ +
+<?xml version="1.0"?>
+<hello xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+       xsi:noNamespaceSchemaLocation="hello.xsd">
+
+  <greeting>Hi</greeting>
+
+  <name>sun</name>
+  <name>moon</name>
+  <name>world</name>
+  <name>mars</name>
+
+</hello>
+  
+ +

We can also create and serialize an object model from scratch + as shown in the following example:

+ +
+#include <iostream>
+#include <fstream>
+#include "hello.hxx"
+
+using namespace std;
+
+int
+main (int argc, char* argv[])
+{
+  try
+  {
+    hello_t h ("Hi");
+
+    hello_t::name_sequence& ns (h.name ());
+
+    ns.push_back ("Jane");
+    ns.push_back ("John");
+
+    // Serialize the object model to XML.
+    //
+    xml_schema::namespace_infomap map;
+    map[""].name = "";
+    map[""].schema = "hello.xsd";
+
+    std::ofstream ofs (argv[1]);
+    hello (ofs, h, map);
+  }
+  catch (const xml_schema::exception& e)
+  {
+    cerr << e << endl;
+    return 1;
+  }
+}
+  
+ +

In this example we used the generated constructor to create + an instance of type hello_t. To reduce typing, + we obtained a reference to the name sequence which we then + used to add a few names. The serialization part is identical + to the previous example except this time we are writing to + a file. If we compile and run this program, it produces the + following XML file:

+ +
+<?xml version="1.0"?>
+<hello xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+       xsi:noNamespaceSchemaLocation="hello.xsd">
+
+  <greeting>Hi</greeting>
+
+  <name>Jane</name>
+  <name>John</name>
+
+</hello>
+  
+ +

2.6 Selecting Naming Convention

+ +

By default XSD uses the so-called K&R (Kernighan and Ritchie) + identifier naming convention in the generated code. In this + convention both type and function names are in lower case and + words are separated by underscores. If your application code or + schemas use a different notation, you may want to change the + naming convention used in the generated code for consistency. + XSD supports a set of widely-used naming conventions + that you can select with the --type-naming and + --function-naming options. You can also further + refine one of the predefined conventions or create a completely + custom naming scheme by using the --*-regex options.

+ +

As an example, let's assume that our "Hello World" application + uses the so-called upper-camel-case naming convention for types + (that is, each word in a type name is capitalized) and the K&R + convention for function names. Since K&R is the default + convention for both type and function names, we only need to + change the type naming scheme:

+ +
+$ xsd cxx-tree --type-naming ucc hello.xsd
+  
+ +

The ucc argument to the --type-naming + options stands for upper-camel-case. If we now examine the + generated hello.hxx, we will see the following + changes compared to the declarations shown in the previous + sections:

+ +
+class Hello_t
+{
+public:
+  // greeting
+  //
+  typedef xml_schema::String GreetingType;
+
+  const GreetingType&
+  greeting () const;
+
+  GreetingType&
+  greeting ();
+
+  void
+  greeting (const GreetingType& x);
+
+  // name
+  //
+  typedef xml_schema::String NameType;
+  typedef xsd::sequence<NameType> NameSequence;
+  typedef NameSequence::iterator NameIterator;
+  typedef NameSequence::const_iterator NameConstIterator;
+
+  const NameSequence&
+  name () const;
+
+  NameSequence&
+  name ();
+
+  void
+  name (const NameSequence& s);
+
+  // Constructor.
+  //
+  Hello_t (const GreetingType&);
+
+  ...
+
+};
+
+std::auto_ptr<Hello_t>
+hello (const std::string& uri);
+
+std::auto_ptr<Hello_t>
+hello (std::istream&);
+  
+ +

Notice that the type names in the xml_schema namespace, + for example xml_schema::String, now also use the + upper-camel-case naming convention. The only thing that we may + be unhappy about in the above code is the _t + suffix in Hello_t. If we are not in a position + to change the schema, we can touch-up the ucc + convention with a custom translation rule using the + --type-regex option:

+ +
+$ xsd cxx-tree --type-naming ucc --type-regex '/ (.+)_t/\u$1/' hello.xsd
+  
+ +

This results in the following changes to the generated code:

+ +
+class Hello
+{
+public:
+  // greeting
+  //
+  typedef xml_schema::String GreetingType;
+
+  const GreetingType&
+  greeting () const;
+
+  GreetingType&
+  greeting ();
+
+  void
+  greeting (const GreetingType& x);
+
+  // name
+  //
+  typedef xml_schema::String NameType;
+  typedef xsd::sequence<NameType> NameSequence;
+  typedef NameSequence::iterator NameIterator;
+  typedef NameSequence::const_iterator NameConstIterator;
+
+  const NameSequence&
+  name () const;
+
+  NameSequence&
+  name ();
+
+  void
+  name (const NameSequence& s);
+
+  // Constructor.
+  //
+  Hello (const GreetingType&);
+
+  ...
+
+};
+
+std::auto_ptr<Hello>
+hello (const std::string& uri);
+
+std::auto_ptr<Hello>
+hello (std::istream&);
+  
+ +

For more detailed information on the --type-naming, + --function-naming, --type-regex, and + other --*-regex options refer to the NAMING + CONVENTION section in the XSD + Compiler Command Line Manual.

+ +

2.7 Generating Documentation

+ +

While our object model is quite simple, real-world vocabularies + can be quite complex with hundreds of types, elements, and + attributes. For such vocabularies figuring out which types + provide which member functions by studying the generated + source code or schemas can be a daunting task. To provide + application developers with a more accessible way of + understanding the generated object models, the XSD compiler + can be instructed to produce source code with documentation + comments in the Doxygen format. Then the source code can be + processed with the Doxygen + documentation system to extract this information and produce + documentation in various formats. +

+ +

In this section we will see how to generate documentation + for our "Hello World" vocabulary. To showcase the full power + of the XSD documentation facilities, we will first document + our schema. The XSD compiler will then transfer + this information from the schema to the generated code and + then to the object model documentation. Note that the + documentation in the schema is not required for XSD to + generate useful documentation. Below you will find + our hello.xsd with added documentation:

+ +
+<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
+
+  <xs:complexType name="hello_t">
+
+    <xs:annotation>
+      <xs:documentation>
+        The hello_t type consists of a greeting phrase and a
+        collection of names to which this greeting applies.
+      </xs:documentation>
+    </xs:annotation>
+
+    <xs:sequence>
+
+      <xs:element name="greeting" type="xs:string">
+        <xs:annotation>
+          <xs:documentation>
+            The greeting element contains the greeting phrase
+            for this hello object.
+          </xs:documentation>
+        </xs:annotation>
+      </xs:element>
+
+      <xs:element name="name" type="xs:string" maxOccurs="unbounded">
+        <xs:annotation>
+          <xs:documentation>
+            The name elements contains names to be greeted.
+          </xs:documentation>
+        </xs:annotation>
+      </xs:element>
+
+    </xs:sequence>
+  </xs:complexType>
+
+  <xs:element name="hello" type="hello_t">
+    <xs:annotation>
+      <xs:documentation>
+        The hello element is a root of the Hello XML vocabulary.
+        Every conforming document should start with this element.
+      </xs:documentation>
+    </xs:annotation>
+  </xs:element>
+
+</xs:schema>
+  
+ +

The first step in obtaining the documentation is to recompile + our schema with the --generate-doxygen option:

+ +
+$ xsd cxx-tree --generate-serialization --generate-doxygen hello.xsd
+  
+ +

Now the generated hello.hxx file contains comments + in the Doxygen format. The next step is to process this file + with the Doxygen documentation system. If your project does + not use Doxygen then you first need to create a configuration + file for your project:

+ +
+$ doxygen -g hello.doxygen
+  
+ +

You only need to perform this step once. Now we can generate + the documentation by executing the following command in the + directory with the generated source code:

+ +
+$ doxygen hello.doxygen
+  
+ +

While the generated documentation can be useful as is, we can + go one step further and link (using the Doxygen tags mechanism) + the documentation for our object model with the documentation + for the XSD runtime library which defines C++ classes for the + built-in XML Schema types. This way we can seamlessly browse + between documentation for the hello_t class which + is generated by the XSD compiler and the xml_schema::string + class which is defined in the XSD runtime library. The Doxygen + configuration file for the XSD runtime is provided with the XSD + distribution.

+ +

You can view the result of the steps described in this section + on the Hello + Example Documentation page.

+ + + + +

3 Overall Mapping Configuration

+ +

The C++/Tree mapping has a number of configuration parameters that + determine the overall properties and behavior of the generated code. + Configuration parameters are specified with the XSD command line + options. This chapter describes configuration aspects that are most + commonly encountered by application developers. These include: the + C++ standard, the character type that is used by the generated code, + handling of vocabularies that use XML Schema polymorphism, XML Schema + to C++ namespace mapping, and thread safety. For more ways to configure + the generated code refer to the + XSD + Compiler Command Line Manual. +

+ +

3.1 C++ Standard

+ +

The C++/Tree mapping provides support for ISO/IEC C++ 1998/2003 (C++98) + and ISO/IEC C++ 2011 (C++11). To select the C++ standard for the + generated code we use the --std XSD compiler command + line option. While the majority of the examples in this guide use + C++98, support for the new functionality and library components + introduced in C++11 are discussed throughout the document.

+ +

3.2 Character Type and Encoding

+ +

The C++/Tree mapping has built-in support for two character types: + char and wchar_t. You can select the + character type with the --char-type command line + option. The default character type is char. The + character type affects all string and string-based types that + are used in the mapping. These include the string-based built-in + XML Schema types, exception types, stream types, etc.

+ +

Another aspect of the mapping that depends on the character type + is character encoding. For the char character type + the default encoding is UTF-8. Other supported encodings are + ISO-8859-1, Xerces-C++ Local Code Page (LPC), as well as + custom encodings. You can select which encoding should be used + in the object model with the --char-encoding command + line option.

+ +

For the wchar_t character type the encoding is + automatically selected between UTF-16 and UTF-32/UCS-4 depending + on the size of the wchar_t type. On some platforms + (for example, Windows with Visual C++ and AIX with IBM XL C++) + wchar_t is 2 bytes long. For these platforms the + encoding is UTF-16. On other platforms wchar_t is 4 bytes + long and UTF-32/UCS-4 is used.

+ +

Note also that the character encoding that is used in the object model + is independent of the encodings used in input and output XML. In fact, + all three (object mode, input XML, and output XML) can have different + encodings.

+ +

3.3 Support for Polymorphism

+ +

By default XSD generates non-polymorphic code. If your vocabulary + uses XML Schema polymorphism in the form of xsi:type + and/or substitution groups, then you will need to compile + your schemas with the --generate-polymorphic option + to produce polymorphism-aware code. For more information on + working with polymorphic object models, refer to + Section 2.11, + "Mapping for xsi:type and Substitution Groups" in + the C++/Tree Mapping User Manual.

+ +

3.4 Namespace Mapping

+ +

XSD maps XML namespaces specified in the targetNamespace + attribute in XML Schema to one or more nested C++ namespaces. By + default, a namespace URI is mapped to a sequence of C++ namespace + names by removing the protocol and host parts and splitting the + rest into a sequence of names with '/' as the name + separator.

+ +

The default mapping of namespace URIs to C++ namespaces + can be altered using the --namespace-map and + --namespace-regex compiler options. For example, + to map namespace URI http://www.codesynthesis.com/my to + C++ namespace cs::my, we can use the following option:

+ +
+--namespace-map http://www.codesynthesis.com/my=cs::my
+  
+ +

A vocabulary without a namespace is mapped to the global scope. This + also can be altered with the above options by using an empty name + for the XML namespace:

+ +
+--namespace-map =cs
+  
+ +

3.5 Thread Safety

+ +

XSD-generated code is thread-safe in the sense that you can + use different instantiations of the object model in several + threads concurrently. This is possible due to the generated + code not relying on any writable global variables. If you need + to share the same object between several threads then you will + need to provide some form of synchronization. One approach would + be to use the generated code customization mechanisms to embed + synchronization primitives into the generated C++ classes. For more + information on generated code customization refer to the + C++/Tree + Mapping Customization Guide.

+ +

If you also would like to call parsing and/or serialization + functions from several threads potentially concurrently, then + you will need to make sure the Xerces-C++ runtime is initialized + and terminated only once. The easiest way to do this is to + initialize/terminate Xerces-C++ from main() when + there are no threads yet/anymore:

+ +
+#include <xercesc/util/PlatformUtils.hpp>
+
+int
+main ()
+{
+  xercesc::XMLPlatformUtils::Initialize ();
+
+  {
+    // Start/terminate threads and parse/serialize here.
+  }
+
+  xercesc::XMLPlatformUtils::Terminate ();
+}
+  
+ +

Because you initialize the Xerces-C++ runtime yourself you should + also pass the xml_schema::flags::dont_initialize flag + to parsing and serialization functions. See Chapter 5, + "Parsing" and Chapter 6, "Serialization" for + more information.

+ + + + + +

4 Working with Object Models

+ +

As we have seen in the previous chapters, the XSD compiler generates + a C++ class for each type defined in XML Schema. Together these classes + constitute an object model for an XML vocabulary. In this chapter we + will take a closer look at different elements that comprise an + object model class as well as how to create, access, and modify + object models.

+ +

In this and subsequent chapters we will use the following schema + that describes a collection of person records. We save it in + people.xsd:

+ +
+<?xml version="1.0"?>
+<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
+
+  <xs:simpleType name="gender_t">
+    <xs:restriction base="xs:string">
+      <xs:enumeration value="male"/>
+      <xs:enumeration value="female"/>
+    </xs:restriction>
+  </xs:simpleType>
+
+  <xs:complexType name="person_t">
+    <xs:sequence>
+      <xs:element name="first-name" type="xs:string"/>
+      <xs:element name="middle-name" type="xs:string" minOccurs="0"/>
+      <xs:element name="last-name" type="xs:string"/>
+      <xs:element name="gender" type="gender_t"/>
+      <xs:element name="age" type="xs:short"/>
+    </xs:sequence>
+    <xs:attribute name="id" type="xs:unsignedInt" use="required"/>
+  </xs:complexType>
+
+  <xs:complexType name="people_t">
+    <xs:sequence>
+      <xs:element name="person" type="person_t" maxOccurs="unbounded"/>
+    </xs:sequence>
+  </xs:complexType>
+
+  <xs:element name="people" type="people_t"/>
+
+</xs:schema>
+  
+ +

A sample XML instance to go along with this schema is saved + in people.xml:

+ +
+<?xml version="1.0"?>
+<people xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+        xsi:noNamespaceSchemaLocation="people.xsd">
+
+  <person id="1">
+    <first-name>John</first-name>
+    <last-name>Doe</last-name>
+    <gender>male</gender>
+    <age>32</age>
+  </person>
+
+  <person id="2">
+    <first-name>Jane</first-name>
+    <middle-name>Mary</middle-name>
+    <last-name>Doe</last-name>
+    <gender>female</gender>
+    <age>28</age>
+  </person>
+
+</people>
+  
+ +

Compiling people.xsd with the XSD compiler results + in three generated C++ classes: gender_t, + person_t, and people_t. + The gender_t class is modelled after the C++ + enum type. Its definition is presented below:

+ +
+class gender_t: public xml_schema::string
+{
+public:
+  enum value
+  {
+    male,
+    female
+  };
+
+  gender_t (value);
+  gender_t (const xml_schema::string&);
+
+  gender_t&
+  operator= (value);
+
+  operator value () const;
+};
+  
+ +

The following listing shows how we can use this type:

+ +
+gender_t m (gender_t::male);
+gender_t f ("female");
+
+if (m == "female" || f == gender_t::male)
+{
+  ...
+}
+
+switch (m)
+{
+case gender_t::male:
+  {
+    ...
+  }
+case gender_t::female:
+  {
+    ...
+  }
+}
+  
+ +

The other two classes will be examined in detail in the subsequent + sections.

+ +

4.1 Attribute and Element Cardinalities

+ +

As we have seen in the previous chapters, XSD generates a different + set of type definitions and member functions for elements with + different cardinalities. The C++/Tree mapping divides all the possible + element and attribute cardinalities into three cardinality classes: + one, optional, and sequence.

+ +

The one cardinality class covers all elements that should + occur exactly once as well as required attributes. In our + example, the first-name, last-name, + gender, and age elements as well as + the id attribute belong to this cardinality class. + The following code fragment shows type definitions as well as the + accessor and modifier functions that are generated for the + gender element in the person_t class:

+ +
+class person_t
+{
+  // gender
+  //
+  typedef gender_t gender_type;
+
+  const gender_type&
+  gender () const;
+
+  gender_type&
+  gender ();
+
+  void
+  gender (const gender_type&);
+};
+  
+ +

The gender_type type is an alias for the element's type. + The first two accessor functions return read-only (constant) and + read-write references to the element's value, respectively. The + modifier function sets the new value for the element.

+ +

The optional cardinality class covers all elements that + can occur zero or one time as well as optional attributes. In our + example, the middle-name element belongs to this + cardinality class. The following code fragment shows the type + definitions as well as the accessor and modifier functions that + are generated for this element in the person_t class:

+ +
+class person_t
+{
+  // middle-name
+  //
+  typedef xml_schema::string middle_name_type;
+  typedef xsd::optional<middle_name_type> middle_name_optional;
+
+  const middle_name_optional&
+  middle_name () const;
+
+  middle_name_optional&
+  middle_name ();
+
+  void
+  middle_name (const middle_name_type&);
+
+  void
+  middle_name (const middle_name_optional&);
+};
+  
+ +

As with the gender element, middle_name_type + is an alias for the element's type. The middle_name_optional + type is a container for the element's optional value. It can be queried + for the presence of the value using the present() function. + The value itself can be retrieved using the get() + accessor and set using the set() modifier. The container + can be reverted to the value not present state with the call to the + reset() function. The following example shows how we + can use this container:

+ +
+person_t::middle_name_optional n ("John");
+
+if (n.present ())
+{
+  cout << n.get () << endl;
+}
+
+n.set ("Jane");
+n.reset ();
+  
+ + +

Unlike the one cardinality class, the accessor functions + for the optional class return read-only (constant) and + read-write references to the container instead of the element's + value directly. The modifier functions set the new value for the + element.

+ +

Finally, the sequence cardinality class covers all elements + that can occur more than once. In our example, the + person element in the people_t type + belongs to this cardinality class. The following code fragment shows + the type definitions as well as the accessor and modifier functions + that are generated for this element in the people_t + class:

+ +
+class people_t
+{
+  // person
+  //
+  typedef person_t person_type;
+  typedef xsd::sequence<person_type> person_sequence;
+  typedef person_sequence::iterator person_iterator;
+  typedef person_sequence::const_iterator person_const_iterator;
+
+  const person_sequence&
+  person () const;
+
+  person_sequence&
+  person ();
+
+  void
+  person (const person_sequence&);
+};
+  
+ +

Identical to the other cardinality classes, person_type + is an alias for the element's type. The person_sequence + type is a sequence container for the element's values. It is based + on and has the same interface as std::vector and + therefore can be used in similar ways. The person_iterator + and person_const_iterator types are read-only + (constant) and read-write iterators for the person_sequence + container.

+ +

Similar to the optional cardinality class, the + accessor functions for the sequence class return + read-only (constant) and read-write references to the sequence + container. The modifier functions copies the entries from + the passed sequence.

+ +

C++/Tree is a "flattening" mapping in a sense that many levels of + nested compositors (choice and sequence), + all potentially with their own cardinalities, are in the end mapped + to a flat set of elements with one of the three cardinality classes + discussed above. While this results in a simple and easy to use API + for most types, in certain cases, the order of elements in the actual + XML documents is not preserved once parsed into the object model. To + overcome this limitation we can mark certain schema types, for which + content order is not sufficiently preserved, as ordered. For more + information on this functionality refer to + Section + 2.8.4, "Element Order" in the C++/Tree Mapping User Manual.

+ +

For complex schemas with many levels of nested compositors + (choice and sequence) it can also + be hard to deduce the cardinality class of a particular element. + The generated Doxygen documentation can greatly help with + this task. For each element and attribute the documentation + clearly identifies its cardinality class. Alternatively, you + can study the generated header files to find out the cardinality + class of a particular attribute or element.

+ +

In the next sections we will examine how to access and modify + information stored in an object model using accessor and modifier + functions described in this section.

+ +

4.2 Accessing the Object Model

+ +

In this section we will learn how to get to the information + stored in the object model for our person records vocabulary. + The following application accesses and prints the contents + of the people.xml file:

+ +
+#include <iostream>
+#include "people.hxx"
+
+using namespace std;
+
+int
+main ()
+{
+  auto_ptr<people_t> ppl (people ("people.xml"));
+
+  // Iterate over individual person records.
+  //
+  people_t::person_sequence& ps (ppl->person ());
+
+  for (people_t::person_iterator i (ps.begin ()); i != ps.end (); ++i)
+  {
+    person_t& p (*i);
+
+    // Print names: first-name and last-name are required elements,
+    // middle-name is optional.
+    //
+    cout << "name:   " << p.first_name () << " ";
+
+    if (p.middle_name ().present ())
+      cout << p.middle_name ().get () << " ";
+
+    cout << p.last_name () << endl;
+
+    // Print gender, age, and id which are all required.
+    //
+    cout << "gender: " << p.gender () << endl
+         << "age:    " << p.age () << endl
+         << "id:     " << p.id () << endl
+         << endl;
+  }
+}
+  
+ +

This code shows common patterns of accessing elements and attributes + with different cardinality classes. For the sequence element + (person in people_t) we first obtain a + reference to the container and then iterate over individual + records. The values of elements and attributes with the + one cardinality class (first-name, + last-name, gender, age, + and id) can be obtained directly by calling the + corresponding accessor functions. For the optional element + middle-name we first check if the value is present + and only then call get() to retrieve it.

+ +

Note that when we want to reduce typing by creating a variable + representing a fragment of the object model that we are currently + working with (ps and p above), we obtain + a reference to that fragment instead of making a potentially + expensive copy. This is generally a good rule to follow when + creating high-performance applications.

+ +

If we run the above application on our sample + people.xml, the output looks as follows:

+ +
+name:   John Doe
+gender: male
+age:    32
+id:     1
+
+name:   Jane Mary Doe
+gender: female
+age:    28
+id:     2
+  
+ + +

4.3 Modifying the Object Model

+ +

In this section we will learn how to modify the information + stored in the object model for our person records vocabulary. + The following application changes the contents of the + people.xml file:

+ +
+#include <iostream>
+#include "people.hxx"
+
+using namespace std;
+
+int
+main ()
+{
+  auto_ptr<people_t> ppl (people ("people.xml"));
+
+  // Iterate over individual person records and increment
+  // the age.
+  //
+  people_t::person_sequence& ps (ppl->person ());
+
+  for (people_t::person_iterator i (ps.begin ()); i != ps.end (); ++i)
+  {
+    // Alternative way: i->age ()++;
+    //
+    i->age (i->age () + 1);
+  }
+
+  // Add middle-name to the first record and remove it from
+  // the second.
+  //
+  person_t& john (ps[0]);
+  person_t& jane (ps[1]);
+
+  john.middle_name ("Mary");
+  jane.middle_name ().reset ();
+
+  // Add another John record.
+  //
+  ps.push_back (john);
+
+  // Serialize the modified object model to XML.
+  //
+  xml_schema::namespace_infomap map;
+  map[""].name = "";
+  map[""].schema = "people.xsd";
+
+  people (cout, *ppl, map);
+}
+  
+ +

The first modification the above application performs is iterating + over person records and incrementing the age value. This code + fragment shows how to modify the value of a required attribute + or element. The next modification shows how to set a new value + for the optional middle-name element as well + as clear its value. Finally the example adds a copy of the + John Doe record to the person element sequence.

+ +

Note that in this case using references for the ps, + john, and jane variables is no longer + a performance improvement but a requirement for the application + to function correctly. If we hadn't used references, all our changes + would have been made on copies without affecting the object model.

+ +

If we run the above application on our sample people.xml, + the output looks as follows:

+ +
+<?xml version="1.0"?>
+<people xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+        xsi:noNamespaceSchemaLocation="people.xsd">
+
+  <person id="1">
+    <first-name>John</first-name>
+    <middle-name>Mary</middle-name>
+    <last-name>Doe</last-name>
+    <gender>male</gender>
+    <age>33</age>
+  </person>
+
+  <person id="2">
+    <first-name>Jane</first-name>
+    <last-name>Doe</last-name>
+    <gender>female</gender>
+    <age>29</age>
+  </person>
+
+  <person id="1">
+    <first-name>John</first-name>
+    <middle-name>Mary</middle-name>
+    <last-name>Doe</last-name>
+    <gender>male</gender>
+    <age>33</age>
+  </person>
+
+</people>
+  
+ + +

4.4 Creating the Object Model from Scratch

+ +

In this section we will learn how to create a new object model + for our person records vocabulary. The following application + recreates the content of the original people.xml + file:

+ +
+#include <iostream>
+#include "people.hxx"
+
+using namespace std;
+
+int
+main ()
+{
+  people_t ppl;
+  people_t::person_sequence& ps (ppl.person ());
+
+  // Add the John Doe record.
+  //
+  ps.push_back (
+    person_t ("John",         // first-name
+              "Doe",          // last-name
+              gender_t::male, // gender
+              32,             // age
+              1));
+
+  // Add the Jane Doe record.
+  //
+  ps.push_back (
+    person_t ("Jane",           // first-name
+              "Doe",            // last-name
+              gender_t::female, // gender
+              28,               // age
+              2));              // id
+
+  // Add middle name to the Jane Doe record.
+  //
+  person_t& jane (ps.back ());
+  jane.middle_name ("Mary");
+
+  // Serialize the object model to XML.
+  //
+  xml_schema::namespace_infomap map;
+  map[""].name = "";
+  map[""].schema = "people.xsd";
+
+  people (cout, ppl, map);
+}
+  
+ +

The only new part in the above application is the calls + to the people_t and person_t + constructors. As a general rule, for each C++ class + XSD generates a constructor with initializers + for each element and attribute belonging to the one + cardinality class. For our vocabulary, the following + constructors are generated:

+ +
+class person_t
+{
+  person_t (const first_name_type&,
+            const last_name_type&,
+            const gender_type&,
+            const age_type&,
+            const id_type&);
+};
+
+class people_t
+{
+  people_t ();
+};
+  
+ +

Note also that we set the middle-name element + on the Jane Doe record by obtaining a reference to that record + in the object model and setting the middle-name + value on it. This is a general rule that should be followed + in order to obtain the best performance: if possible, + direct modifications to the object model should be preferred + to modifications on temporaries with subsequent copying. The + following code fragment shows a semantically equivalent but + slightly slower version:

+ +
+// Add the Jane Doe record.
+//
+person_t jane ("Jane",           // first-name
+               "Doe",            // last-name
+               gender_t::female, // gender
+               28,               // age
+               2);               // id
+
+jane.middle_name ("Mary");
+
+ps.push_back (jane);
+  
+ +

We can also go one step further to reduce copying and improve + the performance of our application by using the non-copying + push_back() function which assumes ownership + of the passed objects:

+ +
+// Add the John Doe record. C++98 version.
+//
+auto_ptr<person_t> john_p (
+  new person_t ("John",           // first-name
+                "Doe",            // last-name
+                gender_t::male,   // gender
+                32,               // age
+                1));
+ps.push_back (john_p); // assumes ownership
+
+// Add the Jane Doe record. C++11 version
+//
+unique_ptr<person_t> jane_p (
+  new person_t ("Jane",           // first-name
+                "Doe",            // last-name
+                gender_t::female, // gender
+                28,               // age
+                2));              // id
+ps.push_back (std::move (jane_p)); // assumes ownership
+  
+ +

For more information on the non-copying modifier functions refer to + Section + 2.8, "Mapping for Local Elements and Attributes" in the C++/Tree Mapping + User Manual. The above application produces the following output:

+ +
+<?xml version="1.0" ?>
+<people xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+        xsi:noNamespaceSchemaLocation="people.xsd">
+
+  <person id="1">
+    <first-name>John</first-name>
+    <last-name>Doe</last-name>
+    <gender>male</gender>
+    <age>32</age>
+  </person>
+
+  <person id="2">
+    <first-name>Jane</first-name>
+    <middle-name>Mary</middle-name>
+    <last-name>Doe</last-name>
+    <gender>female</gender>
+    <age>28</age>
+  </person>
+
+</people>
+  
+ +

4.5 Mapping for the Built-in XML Schema Types

+ +

Our person record vocabulary uses several built-in XML Schema + types: string, short, and + unsignedInt. Until now we haven't talked about + the mapping of built-in XML Schema types to C++ types and how + to work with them. This section provides an overview + of the built-in types. For more detailed information refer + to Section + 2.5, "Mapping for Built-in Data Types" in the C++/Tree Mapping + User Manual.

+ +

In XML Schema, built-in types are defined in the XML Schema namespace. + By default, the C++/Tree mapping maps this namespace to C++ + namespace xml_schema (this mapping can be altered + with the --namespace-map option). The following table + summarizes the mapping of XML Schema built-in types to C++ types:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
XML Schema typeAlias in the xml_schema namespaceC++ type
fixed-length integral types
bytebytesigned char
unsignedByteunsigned_byteunsigned char
shortshort_short
unsignedShortunsigned_shortunsigned short
intint_int
unsignedIntunsigned_intunsigned int
longlong_long long
unsignedLongunsigned_longunsigned long long
arbitrary-length integral types
integerintegerlong long
nonPositiveIntegernon_positive_integerlong long
nonNegativeIntegernon_negative_integerunsigned long long
positiveIntegerpositive_integerunsigned long long
negativeIntegernegative_integerlong long
boolean types
booleanbooleanbool
fixed-precision floating-point types
floatfloat_float
doubledouble_double
arbitrary-precision floating-point types
decimaldecimaldouble
string types
stringstringtype derived from std::basic_string
normalizedStringnormalized_stringtype derived from string
tokentokentype derived from normalized_string
Namenametype derived from token
NMTOKENnmtokentype derived from token
NMTOKENSnmtokenstype derived from sequence<nmtoken>
NCNamencnametype derived from name
languagelanguagetype derived from token
qualified name
QNameqnamexml_schema::qname
ID/IDREF types
IDidtype derived from ncname
IDREFidreftype derived from ncname
IDREFSidrefstype derived from sequence<idref>
URI types
anyURIuritype derived from std::basic_string
binary types
base64Binarybase64_binaryxml_schema::base64_binary
hexBinaryhex_binaryxml_schema::hex_binary
date/time types
datedatexml_schema::date
dateTimedate_timexml_schema::date_time
durationdurationxml_schema::duration
gDaygdayxml_schema::gday
gMonthgmonthxml_schema::gmonth
gMonthDaygmonth_dayxml_schema::gmonth_day
gYeargyearxml_schema::gyear
gYearMonthgyear_monthxml_schema::gyear_month
timetimexml_schema::time
entity types
ENTITYentitytype derived from name
ENTITIESentitiestype derived from sequence<entity>
+ +

As you can see from the table above a number of built-in + XML Schema types are mapped to fundamental C++ types such + as int or bool. All string-based + XML Schema types are mapped to C++ types that are derived + from either std::string or + std::wstring, depending on the character + type selected. For access and modification purposes these + types can be treated as std::string. A number + of built-in types, such as qname, the binary + types, and the date/time types do not have suitable + fundamental or standard C++ types to map to. As a result, + these types are implemented from scratch in the XSD runtime. + For more information on their interfaces refer to + Section + 2.5, "Mapping for Built-in Data Types" in the C++/Tree Mapping + User Manual.

+ + + + + +

5 Parsing

+ +

We have already seen how to parse XML to an object model in this guide + before. In this chapter we will discuss the parsing topic in more + detail.

+ +

By default, the C++/Tree mapping provides a total of 14 overloaded + parsing functions. They differ in the input methods used to + read XML as well as the error reporting mechanisms. It is also possible + to generate types for root elements instead of parsing and serialization + functions. This may be useful if your XML vocabulary has multiple + root elements. For more information on element types refer to + Section + 2.9, "Mapping for Global Elements" in the C++/Tree Mapping User + Manual.

+ + +

In this section we will discuss the most commonly used versions of + the parsing functions. For a comprehensive description of parsing + refer to Chapter + 3, "Parsing" in the C++/Tree Mapping User Manual. For the people + global element from our person record vocabulary, we will concentrate + on the following three parsing functions:

+ +
+std::[auto|unique]_ptr<people_t>
+people (const std::string& uri,
+	xml_schema::flags f = 0,
+	const xml_schema::properties& p = xml_schema::properties ());
+
+std::[auto|unique]_ptr<people_t>
+people (std::istream& is,
+        xml_schema::flags f = 0,
+        const xml_schema::properties& p = xml_schema::properties ());
+
+std::[auto|unique]_ptr<people_t>
+people (std::istream& is,
+        const std::string& resource_id,
+        xml_schema::flags f = 0,
+        const xml_schema::properties& p = ::xml_schema::properties ());
+  
+ +

The first function parses a local file or a URI. We have already + used this parsing function in the previous chapters. The second + and third functions read XML from a standard input stream. The + last function also requires a resource id. This id is used to + identify the XML document being parser in diagnostics messages + as well as to resolve relative paths to other documents (for example, + schemas) that might be referenced from the XML document.

+ +

The last two arguments to all three parsing functions are parsing + flags and properties. The flags argument provides a number of ways + to fine-tune the parsing process. The properties argument allows + to pass additional information to the parsing functions. We will + use these two arguments in Section 5.1, "XML Schema + Validation and Searching" below. All three functions return + the object model as either std::auto_ptr (C++98) or + std::unique_ptr (C++11), depending on the C++ standard + selected (--std XSD compiler option). The following + example shows how we can use the above parsing functions:

+ +
+using std::auto_ptr;
+
+// Parse a local file or URI.
+//
+auto_ptr<people_t> p1 (people ("people.xml"));
+auto_ptr<people_t> p2 (people ("http://example.com/people.xml"));
+
+// Parse a local file via ifstream.
+//
+std::ifstream ifs ("people.xml");
+auto_ptr<people_t> p3 (people (ifs, "people.xml"));
+
+// Parse an XML string.
+//
+std::string str ("..."); // XML in a string.
+std::istringstream iss (str);
+auto_ptr<people_t> p4 (people (iss));
+  
+ + +

5.1 XML Schema Validation and Searching

+ +

The C++/Tree mapping relies on the underlying Xerces-C++ XML + parser for full XML document validation. The XML Schema + validation is enabled by default and can be disabled by + passing the xml_schema::flags::dont_validate + flag to the parsing functions, for example:

+ +
+auto_ptr<people_t> p (
+  people ("people.xml", xml_schema::flags::dont_validate));
+  
+ +

Even when XML Schema validation is disabled, the generated + code still performs a number of checks to prevent + construction of an inconsistent object model (for example, an + object model with missing required attributes or elements).

+ +

When XML Schema validation is enabled, the XML parser needs + to locate a schema to validate against. There are several + methods to provide the schema location information to the + parser. The easiest and most commonly used method is to + specify schema locations in the XML document itself + with the schemaLocation or + noNamespaceSchemaLocation attributes, for example:

+ +
+<?xml version="1.0" ?>
+<people xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+        xsi:noNamespaceSchemaLocation="people.xsd"
+        xsi:schemaLocation="http://www.w3.org/XML/1998/namespace xml.xsd">
+  
+ +

As you might have noticed, we used this method in all the sample XML + documents presented in this guide up until now. Note that the + schema locations specified with these two attributes are relative + to the document's path unless they are absolute URIs (that is + start with http://, file://, etc.). + In particular, if you specify just file names as your schema + locations, as we did above, then the schemas should reside in + the same directory as the XML document itself.

+ +

Another method of providing the schema location information + is via the xml_schema::properties argument, as + shown in the following example:

+ +
+xml_schema::properties props;
+props.no_namespace_schema_location ("people.xsd");
+props.schema_location ("http://www.w3.org/XML/1998/namespace", "xml.xsd");
+
+auto_ptr<people_t> p (people ("people.xml", 0, props));
+  
+ +

The schema locations provided with this method overrides + those specified in the XML document. As with the previous + method, the schema locations specified this way are + relative to the document's path unless they are absolute URIs. + In particular, if you want to use local schemas that are + not related to the document being parsed, then you will + need to use the file:// URI. The following + example shows how to use schemas that reside in the current + working directory:

+ +
+#include <unistd.h> // getcwd
+#include <limits.h> // PATH_MAX
+
+char cwd[PATH_MAX];
+if (getcwd (cwd, PATH_MAX) == 0)
+{
+  // Buffer too small?
+}
+
+xml_schema::properties props;
+
+props.no_namespace_schema_location (
+  "file:///" + std::string (cwd) + "/people.xsd");
+
+props.schema_location (
+  "http://www.w3.org/XML/1998/namespace",
+  "file:///" + std::string (cwd) + "/xml.xsd");
+
+auto_ptr<people_t> p (people ("people.xml", 0, props));
+  
+ +

A third method is the most useful if you are planning to parse + several XML documents of the same vocabulary. In that case + it may be beneficial to pre-parse and cache the schemas in + the XML parser which can then be used to parse all documents + without re-parsing the schemas. For more information on + this method refer to the caching example in the + examples/cxx/tree/ directory of the XSD + distribution. It is also possible to convert the schemas into + a pre-compiled binary representation and embed this representation + directly into the application executable. With this approach your + application can perform XML Schema validation without depending on + any external schema files. For more information on how to achieve + this refer to the embedded example in the + examples/cxx/tree/ directory of the XSD distribution.

+ +

When the XML parser cannot locate a schema for the + XML document, the validation fails and XML document + elements and attributes for which schema definitions could + not be located are reported in the diagnostics. For + example, if we remove the noNamespaceSchemaLocation + attribute in people.xml from the previous chapter, + then we will get the following diagnostics if we try to parse + this file with validation enabled:

+ +
+people.xml:2:63 error: no declaration found for element 'people'
+people.xml:4:18 error: no declaration found for element 'person'
+people.xml:4:18 error: attribute 'id' is not declared for element 'person'
+people.xml:5:17 error: no declaration found for element 'first-name'
+people.xml:6:18 error: no declaration found for element 'middle-name'
+people.xml:7:16 error: no declaration found for element 'last-name'
+people.xml:8:13 error: no declaration found for element 'gender'
+people.xml:9:10 error: no declaration found for element 'age'
+  
+ +

5.2 Error Handling

+ +

The parsing functions offer a number of ways to handle error conditions + with the C++ exceptions being the most commonly used mechanism. All + C++/Tree exceptions derive from common base xml_schema::exception + which in turn derives from std::exception. The easiest + way to uniformly handle all possible C++/Tree exceptions and print + detailed information about the error is to catch and print + xml_schema::exception, as shown in the following + example:

+ +
+try
+{
+  auto_ptr<people_t> p (people ("people.xml"));
+}
+catch (const xml_schema::exception& e)
+{
+  cerr << e << endl;
+}
+  
+ +

Each individual C++/Tree exception also allows you to obtain + error details programmatically. For example, the + xml_schema::parsing exception is thrown when + the XML parsing and validation in the underlying XML parser + fails. It encapsulates various diagnostics information + such as the file name, line and column numbers, as well as the + error or warning message for each entry. For more information + about this and other exceptions that can be thrown during + parsing, refer to + Section + 3.3, "Error Handling" in the C++/Tree Mapping + User Manual.

+ +

Note that if you are parsing std::istream on which + exceptions are not enabled, then you will need to check the + stream state after the call to the parsing function in order + to detect any possible stream failures, for example:

+ +
+std::ifstream ifs ("people.xml");
+
+if (ifs.fail ())
+{
+  cerr << "people.xml: unable to open" << endl;
+  return 1;
+}
+
+auto_ptr<people_t> p (people (ifs, "people.xml"));
+
+if (ifs.fail ())
+{
+  cerr << "people.xml: read error" << endl;
+  return 1;
+}
+  
+ +

The above example can be rewritten to use exceptions as + shown below:

+ +
+try
+{
+  std::ifstream ifs;
+  ifs.exceptions (std::ifstream::badbit | std::ifstream::failbit);
+  ifs.open ("people.xml");
+
+  auto_ptr<people_t> p (people (ifs, "people.xml"));
+}
+catch (const std::ifstream::failure&)
+{
+  cerr << "people.xml: unable to open or read error" << endl;
+  return 1;
+}
+  
+ + + + + +

6 Serialization

+ +

We have already seen how to serialize an object model back to XML + in this guide before. In this chapter we will discuss the + serialization topic in more detail.

+ +

By default, the C++/Tree mapping provides a total of 8 overloaded + serialization functions. They differ in the output methods used to write + XML as well as the error reporting mechanisms. It is also possible to + generate types for root elements instead of parsing and serialization + functions. This may be useful if your XML vocabulary has multiple + root elements. For more information on element types refer to + Section + 2.9, "Mapping for Global Elements" in the C++/Tree Mapping User + Manual.

+ + +

In this section we will discuss the most commonly + used version of serialization functions. For a comprehensive description + of serialization refer to + Chapter + 4, "Serialization" in the C++/Tree Mapping User Manual. For the + people global element from our person record vocabulary, + we will concentrate on the following serialization function:

+ +
+void
+people (std::ostream& os,
+        const people_t& x,
+        const xml_schema::namespace_infomap& map =
+          xml_schema::namespace_infomap (),
+        const std::string& encoding = "UTF-8",
+        xml_schema::flags f = 0);
+  
+ +

This function serializes the object model passed as the second + argument to the standard output stream passed as the first + argument. The third argument is a namespace information map + which we will discuss in more detail in the next section. + The fourth argument is a character encoding that the resulting + XML document should be in. Possible valid values for this + argument are "US-ASCII", "ISO8859-1", "UTF-8", "UTF-16BE", + "UTF-16LE", "UCS-4BE", and "UCS-4LE". Finally, the flags + argument allows fine-tuning of the serialization process. + The following example shows how we can use the above serialization + function:

+ +
+people_t& p = ...
+
+xml_schema::namespace_infomap map;
+map[""].schema = "people.xsd";
+
+// Serialize to stdout.
+//
+people (std::cout, p, map);
+
+// Serialize to a file.
+//
+std::ofstream ofs ("people.xml");
+people (ofs, p, map);
+
+// Serialize to a string.
+//
+std::ostringstream oss;
+people (oss, p, map);
+std::string xml (oss.str ());
+  
+ + +

6.1 Namespace and Schema Information

+ +

While XML serialization can be done just from the object + model alone, it is often desirable to assign meaningful + prefixes to XML namespaces used in the vocabulary as + well as to provide the schema location information. + This is accomplished by passing the namespace information + map to the serialization function. The key in this map is + a namespace prefix that should be assigned to an XML namespace + specified in the name variable of the + map value. You can also assign an optional schema location for + this namespace in the schema variable. Based + on each key-value entry in this map, the serialization + function adds two attributes to the resulting XML document: + the namespace-prefix mapping attribute and schema location + attribute. The empty prefix indicates that the namespace + should be mapped without a prefix. For example, the following + map:

+ +
+xml_schema::namespace_infomap map;
+
+map[""].name = "http://www.example.com/example";
+map[""].schema = "example.xsd";
+
+map["x"].name = "http://www.w3.org/XML/1998/namespace";
+map["x"].schema = "xml.xsd";
+  
+ +

Results in the following XML document:

+ +
+<?xml version="1.0" ?>
+<example
+  xmlns="http://www.example.com/example"
+  xmlns:x="http://www.w3.org/XML/1998/namespace"
+  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+  xsi:schemaLocation="http://www.example.com/example example.xsd
+                      http://www.w3.org/XML/1998/namespace xml.xsd">
+  
+ +

The empty namespace indicates that the vocabulary has no target + namespace. For example, the following map results in only the + noNamespaceSchemaLocation attribute being added:

+ +
+xml_schema::namespace_infomap map;
+
+map[""].name = "";
+map[""].schema = "example.xsd";
+  
+ +

6.2 Error Handling

+ +

Similar to the parsing functions, the serialization functions offer a + number of ways to handle error conditions with the C++ exceptions being + the most commonly used mechanisms. As with parsing, the easiest way to + uniformly handle all possible serialization exceptions and print + detailed information about the error is to catch and print + xml_schema::exception:

+ +
+try
+{
+  people_t& p = ...
+
+  xml_schema::namespace_infomap map;
+  map[""].schema = "people.xsd";
+
+  people (std::cout, p, map));
+}
+catch (const xml_schema::exception& e)
+{
+  cerr << e << endl;
+}
+  
+ +

The most commonly encountered serialization exception is + xml_schema::serialization. It is thrown + when the XML serialization in the underlying XML writer + fails. It encapsulates various diagnostics information + such as the file name, line and column numbers, as well as the + error or warning message for each entry. For more information + about this and other exceptions that can be thrown during + serialization, refer to + Section + 4.4, "Error Handling" in the C++/Tree Mapping + User Manual.

+ +

Note that if you are serializing to std::ostream on + which exceptions are not enabled, then you will need to check the + stream state after the call to the serialization function in order + to detect any possible stream failures, for example:

+ +
+std::ofstream ofs ("people.xml");
+
+if (ofs.fail ())
+{
+  cerr << "people.xml: unable to open" << endl;
+  return 1;
+}
+
+people (ofs, p, map));
+
+if (ofs.fail ())
+{
+  cerr << "people.xml: write error" << endl;
+  return 1;
+}
+  
+ +

The above example can be rewritten to use exceptions as + shown below:

+ +
+try
+{
+  std::ofstream ofs;
+  ofs.exceptions (std::ofstream::badbit | std::ofstream::failbit);
+  ofs.open ("people.xml");
+
+  people (ofs, p, map));
+}
+catch (const std::ofstream::failure&)
+{
+  cerr << "people.xml: unable to open or write error" << endl;
+  return 1;
+}
+  
+ +
+
+ + + diff --git a/xsd/doc/cxx/tree/guide/makefile b/xsd/doc/cxx/tree/guide/makefile new file mode 100644 index 0000000..3e6fba2 --- /dev/null +++ b/xsd/doc/cxx/tree/guide/makefile @@ -0,0 +1,54 @@ +# file : doc/cxx/tree/guide/makefile +# copyright : Copyright (c) 2006-2014 Code Synthesis Tools CC +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +include $(dir $(lastword $(MAKEFILE_LIST)))../../../../build/bootstrap.make + +default := $(out_base)/ +install := $(out_base)/.install +dist := $(out_base)/.dist +dist-win := $(out_base)/.dist-win +clean := $(out_base)/.clean + +# Build. +# +$(default): $(out_base)/cxx-tree-guide.ps $(out_base)/cxx-tree-guide.pdf + + +$(out_base)/cxx-tree-guide.ps: $(src_base)/index.xhtml \ + $(src_base)/guide.html2ps \ + | $(out_base)/. + $(call message,html2ps $<,html2ps -f $(src_base)/guide.html2ps -o $@ $<) + +$(out_base)/cxx-tree-guide.pdf: $(out_base)/cxx-tree-guide.ps | $(out_base)/. + $(call message,ps2pdf $<,ps2pdf14 $< $@) + +# Install & Dist. +# +$(install): path := $(subst $(src_root)/doc/,,$(src_base)) +$(dist): path := $(subst $(src_root)/,,$(src_base)) + +$(install): $(out_base)/cxx-tree-guide.ps $(out_base)/cxx-tree-guide.pdf + $(call install-data,$(src_base)/index.xhtml,$(install_doc_dir)/xsd/$(path)/index.xhtml) + $(call install-data,$(out_base)/cxx-tree-guide.ps,$(install_doc_dir)/xsd/$(path)/cxx-tree-guide.ps) + $(call install-data,$(out_base)/cxx-tree-guide.pdf,$(install_doc_dir)/xsd/$(path)/cxx-tree-guide.pdf) + +$(dist): $(out_base)/cxx-tree-guide.ps $(out_base)/cxx-tree-guide.pdf + $(call install-data,$(src_base)/index.xhtml,$(dist_prefix)/$(path)/index.xhtml) + $(call install-data,$(out_base)/cxx-tree-guide.ps,$(dist_prefix)/$(path)/cxx-tree-guide.ps) + $(call install-data,$(out_base)/cxx-tree-guide.pdf,$(dist_prefix)/$(path)/cxx-tree-guide.pdf) + +$(dist-win): $(dist) + + +# Clean +# +$(clean): +ifneq ($(xsd_clean_gen),n) + $(call message,rm $$1,rm -f $$1,$(out_base)/cxx-tree-guide.ps) + $(call message,rm $$1,rm -f $$1,$(out_base)/cxx-tree-guide.pdf) +endif + +# How to. +# +$(call include,$(bld_root)/install.make) diff --git a/xsd/doc/cxx/tree/makefile b/xsd/doc/cxx/tree/makefile new file mode 100644 index 0000000..4163730 --- /dev/null +++ b/xsd/doc/cxx/tree/makefile @@ -0,0 +1,41 @@ +# file : doc/cxx/tree/makefile +# copyright : Copyright (c) 2006-2014 Code Synthesis Tools CC +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +include $(dir $(lastword $(MAKEFILE_LIST)))../../../build/bootstrap.make + +docs := guide manual + +default := $(out_base)/ +install := $(out_base)/.install +dist := $(out_base)/.dist +dist-win := $(out_base)/.dist-win +clean := $(out_base)/.clean + +# Build. +# +$(default): $(addprefix $(out_base)/,$(addsuffix /,$(docs))) + +# Install & Dist. +# +dist-common := $(out_base)/.dist-common + +$(install): path := $(subst $(src_root)/doc/,,$(src_base)) +$(dist-common): path := $(subst $(src_root)/,,$(src_base)) + +$(install): $(addprefix $(out_base)/,$(addsuffix /.install,$(docs))) + $(call install-dir,$(src_base)/reference,$(install_doc_dir)/xsd/$(path)/reference) + +$(dist-common): + $(call install-dir,$(src_base)/reference,$(dist_prefix)/$(path)/reference) + +$(dist): $(dist-common) $(addprefix $(out_base)/,$(addsuffix /.dist,$(docs))) +$(dist-win): $(dist-common) $(addprefix $(out_base)/,$(addsuffix /.dist-win,$(docs))) + +# Clean. +# +$(clean): $(addprefix $(out_base)/,$(addsuffix /.clean,$(docs))) + +$(call include,$(bld_root)/install.make) + +$(foreach m,$(docs),$(call import,$(src_base)/$m/makefile)) diff --git a/xsd/doc/cxx/tree/manual/cxx-tree-manual.pdf b/xsd/doc/cxx/tree/manual/cxx-tree-manual.pdf new file mode 100644 index 0000000..73131a3 Binary files /dev/null and b/xsd/doc/cxx/tree/manual/cxx-tree-manual.pdf differ diff --git a/xsd/doc/cxx/tree/manual/cxx-tree-manual.ps b/xsd/doc/cxx/tree/manual/cxx-tree-manual.ps new file mode 100644 index 0000000..38335e9 --- /dev/null +++ b/xsd/doc/cxx/tree/manual/cxx-tree-manual.ps @@ -0,0 +1,7382 @@ +%!PS +%%Title: C++/Tree Mapping User Manual +%%Creator: html2ps version 1.0 beta7 +%%EndComments +save +2000 dict begin +/d {bind def} bind def +/D {def} d +/t true D +/f false D +/FL [/Times-Roman +/Times-Italic +/Times-Bold +/Times-BoldItalic +/Courier +/Courier-Oblique +/Courier-Bold +/Courier-BoldOblique +/Helvetica +/Helvetica-Oblique +/Helvetica-Bold +/Helvetica-BoldOblique] D +/WF t D +/WI 0 D +/F 1 D +/IW 471 F div D +/IL 621 F div D +/PS 791 D +/EF [0 1 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 2 2] D +/EZ [12 10 19 17 15 13 12 11 12 12 12 12 12 12 12 12 12 12 12 12 12 12 8 8] D +/Ey [0 0 2 2 2 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0] D +/EG [-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1] D +/Tm [1 1 0.8 0.8 0.8 0.8 0.8 0.8 0 0 0 0 0 0 0.5 1 1 1 1 0 0 1.3 0 0] D +/Bm [1 1 0.5 0.5 0.5 0.5 0.5 0.5 0 0 0 0 0 0 0.5 1 1 1 1 0 0 1 0 0] D +/Lm [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 2 2 0 0 2 0 0 0] D +/Rm [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0] D +/EU [-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 0 0] D +/NO f D +/YY [[{()}{ h }][{ h }{()}][{()}{()}]] D +/ZZ [[{ (July 2014) }{ Pn }][{ Pn }{ (July 2014) }][{ Ti(, v)join ME 0 get join }{ Ti(, v)join ME 0 get join }]] D +/Ts EZ 0 get D +/TU f D +/Xp t D +/AU f D +/SN 0 D +/Cf t D +/Tp t D +/Fe f D +/TI 2 Ts mul D +/Fm 14 D +/xL 71 D +/xR 71 D +/yL 706 D +/yR 706 D +/Wl 471 F div D +/Wr 471 F div D +/hL 621 F div D +/hR 621 F div D +/FE {newpath Fm neg Fm M CP BB IW Fm add Fm L IW Fm add IL Fm add neg L CP BB + Fm neg IL Fm add neg L closepath} D +/LA {PM 0 eq{/IW Wl D /IL hL D}{/IW Wr D /IL hR D}ie /W IW D /LL W D /LS W D + TU PM 0 eq and{IW 56 F div add SA{Sf div}if 0 translate} + {PM 0 eq{xL yL}{xR yR}ie translate F SA{Sf mul}if dup scale + CS CF FS Cf{CA CL get VC}if /Bb f D}ie 0 0 M + TF not Tc or {Cf{gsave SA{1 Sf div dup scale}if Cb VC FE fill grestore}if}if}D +/Pi 0 Ts mul D +/SG [0.8 1 1] D +/Ab 15 D +/J 0 D +/Tc t D +/NH 6 D +/Nf f D +/Pa f D +/LH 1.2 D +/XR f D +/Xr {/pN E D ( [p ) WB pN WB (] )WB} D +/Db [16#FF 16#FF 16#FF] D +/Dt [16#00 16#00 16#00] D +/eA f D +/Fi f D +/bT f D +/Lc t D +/Dl [16#00 16#00 16#00] D +/LX f D +/Br 0.25 D +/IA ([IMAGE]) D +/DS {/PF f D()WB NL NP()pop RC ZF} D +/Gb f D +/Mb t D +/Hc [16#00 16#00 16#00] D +/Bl 3 D +/MI -15.6 D +/DX (DRAFT) D +/Di 0 D +/Tt 113.385826771654 D +/Th { ( +) 2 Al()BR ( + ) 0 1 -1 H()4 FZ (C++/Tree Mapping User Manual) ES()EH ( + ) 0 1 -1 H ( ) EH ( + ) 0 1 -1 H ( ) EH ( + ) 0 1 -1 H ( ) EH ( + ) 0 1 -1 H ( ) EH ( + ) 0 1 -1 H ( ) EH ( + ) 0 1 -1 H ( ) EH ( + ) 0 1 -1 H ( ) EH ( +) Ea()BR ( + ) 0 P (Revision ) ME 0 get join(     July 2014)join EP ( + ) 0 P (Copyright © 2005-2014 CODE SYNTHESIS TOOLS CC) EP ( + + ) 0 P (Permission is granted to copy, distribute and/or modify this + document under the terms of the + ) R0 2 A (GNU Free + Documentation License, version 1.2) EA (; with no Invariant Sections, + no Front-Cover Texts and no Back-Cover Texts. + ) EP ( + + ) 0 P (This document is available in the following formats: + ) R1 2 A (XHTML) EA (, + ) R2 2 A (PDF) EA (, and + ) R3 2 A (PostScript) EA (.) EP()} D +/tH {()0 1 -1 H (Table of Contents) EH()} D +/FD 2 D +/Dy 2 D +/cD [16#F0 16#F0 16#F0] D +/FW 0.6 D +/FU [16#00 16#00 16#00] D +/ET {/RM f D /A0 3 D /PN SN D /OU t D /Ou t D /W IW D /LL W D D1 + Ms not TP and{Ip}if /TF f D} D + +%-- End of variable part -- +/MySymbol 10 dict dup begin + /FontType 3 D /FontMatrix [.001 0 0 .001 0 0 ] D /FontBBox [25 -10 600 600] D + /Encoding 256 array D 0 1 255{Encoding exch /.notdef put}for + Encoding (e) 0 get /euro put + /Metrics 2 dict D Metrics begin + /.notdef 0 D + /euro 651 D + end + /BBox 2 dict D BBox begin + /.notdef [0 0 0 0] D + /euro [25 -10 600 600] D + end + /CharacterDefs 2 dict D CharacterDefs begin + /.notdef {} D + /euro{newpath 114 600 moveto 631 600 lineto 464 200 lineto 573 200 lineto + 573 0 lineto -94 0 lineto 31 300 lineto -10 300 lineto closepath clip + 50 setlinewidth newpath 656 300 moveto 381 300 275 0 360 arc stroke + -19 350 moveto 600 0 rlineto -19 250 moveto 600 0 rlineto stroke}d + end + /BuildChar{0 begin + /char E D /fontdict E D /charname fontdict /Encoding get char get D + fontdict begin + Metrics charname get 0 BBox charname get aload pop setcachedevice + CharacterDefs charname get exec + end + end}D + /BuildChar load 0 3 dict put /UniqueID 1 D +end +definefont pop + +/Cd {aload length 2 idiv dup dict begin {D} repeat currentdict end} D +/EX {EC cvx exec} D +/DU {} d +/BB {pop pop}d +/ie {ifelse} d +/E {exch} d +/M {moveto} d +/R {rmoveto} d +/L {lineto} d +/RL {rlineto} d +/CP {currentpoint} d +/SW {stringwidth} d +/GI {getinterval} d +/PI {putinterval} d +/Sg {setgray} d +/LW {setlinewidth} d +/S {dup () ne OU and{0 Co R AT 3 eq LB and HF not and A1 0 ne A2 0 ne or and + {A2 0 32 A1 0 6 -1 roll awidthshow}{show}ie 0 Co neg R}{pop}ie + OU PH 3 eq or{/Ms t D}if} D +/U {OU{gsave CP currentfont /FontInfo get /UnderlinePosition get + 0 E currentfont /FontMatrix get dtransform E pop add newpath M dup SW pop + CJ 0 RL stroke grestore}if} D +/B {OU Br 0 gt and{CP Ts neg Ts .33 mul R gsave 0 Sg + CP newpath Ts Br mul 0 360 arc closepath UI 2 mod 0 eq{stroke}{fill}ie + grestore M CP E Ts Br 1 add mul sub E BB /Ms t D}if}D +/NP {Ms TP not or PA and OU and{TP{OR}if f1{mF k2 /mF E D /YC 0 D}if + TP TU not PM 0 eq or and{showpage}if DU Ip TE not{LA}if 0.6 LW + /CI 0 D /TP t D /Hs f D /hl 6 D /Hv 6 D /HI hi D /Ms f D}if Bs XO BO M} D +/Np {LE sub CP E pop gt PL 0 eq and{NP}if}D +/Ip {/PN PN 1 add D /Pn RM{1}{4}ie PN Ns D /PM PN SN sub 2 mod D} D +/GP {E dup 3 -1 roll get PN 1 add 2 mod get dup type /integertype eq + {get 0 get}{E pop}ie}d +/Fc {dup 2 GP exec SW pop /S1 E D dup 1 GP exec SW pop /S2 E D 0 GP exec SW + pop /S3 E D S1 0 gt{S2 2 mul S1 add S3 2 mul S1 add 2 copy lt{E}if pop}{0}ie + S2 S3 add 2 copy lt{E}if pop IW .9 mul div dup 1 gt{1 E div}{pop 1}ie}D +/OR {Df{Sd}if tp not{gsave SA{1 Sf div dup scale}if Fe{Cf{FU VC}if FW LW + 1 setlinejoin FE stroke}if /YO {60 F div dup 40 gt{pop 40}if}D /cs CS D + /cf CF D /CF 0 D /pf PF D /PF f D /Fn FN D /At AT D /AT 0 D /FN EF Hf 1 add + get D Fz Fs FS ZZ Fc Fz mul Fs FS EU Hf 1 add get dup type /arraytype eq + Cf and{VC}{pop 0 Sg}ie IW IL neg YO sub M ZZ 1 GP exec dup SW pop neg 0 R Sh + 0 IL neg YO sub M ZZ 0 GP exec Sh ZZ 2 GP exec dup SW pop IW E sub 2 div + IL neg YO sub M Sh Fz Fs FS NO{/AW IW Pn SW pop sub D AW 2 div IL neg YO sub + S1 0 gt S2 AW .45 mul gt or S3 AW .45 mul gt or{Fz 2 mul sub}if M Pn Sh}if + EU Hf get dup type /arraytype eq Cf and{VC}{pop 0 Sg}ie YY Fc /FN EF Hf get D + Hz mul HS FS IW YO M YY 1 GP exec dup SW pop neg 0 R Sh 0 YO M YY 0 GP exec Sh + YY 2 GP exec dup SW pop IW E sub 2 div YO M Sh /FN Fn D /AT At D t Pb XO SZ + SL get neg R /PF pf D grestore /CF 0 D cs cf FS}if}D +/Sh {dup () ne{CP Hz 4 div sub BB show CP CS add BB}{pop}ie}D +/Pb {/OU E D /Ou OU D /PB t D 0 0 M Ba{/Sa save D /BP t D /Fl t D RC /PL 0 D + /PH 0 D /W IW D /LE IL .7 mul D /EO 0 D SI ZF /YA 0 D /BO 0 D /C1 () D + BA 0 Ts neg R Bb{Xl Yl Xh Yh}if Bb CP Sa restore M + {/Yh E D /Xh E D /Yl E D /Xl E D}if /Fl t D}if + BL /OU t D /HM f D /Ou t D /PB f D} D +/Bs {/BP Ba not D}D +/reencodeISO { + dup dup findfont dup length dict begin{1 index /FID ne{D}{pop pop}ie}forall + /Encoding ISOLatin1Encoding D currentdict end definefont} D +/ISOLatin1Encoding [ +/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef +/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef +/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef +/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef +/space/exclam/quotedbl/numbersign/dollar/percent/ampersand/quoteright +/parenleft/parenright/asterisk/plus/comma/hyphen/period/slash +/zero/one/two/three/four/five/six/seven/eight/nine/colon/semicolon +/less/equal/greater/question/at/A/B/C/D/E/F/G/H/I/J/K/L/M/N +/O/P/Q/R/S/T/U/V/W/X/Y/Z/bracketleft/backslash/bracketright +/asciicircum/underscore/quoteleft/a/b/c/d/e/f/g/h/i/j/k/l/m +/n/o/p/q/r/s/t/u/v/w/x/y/z/braceleft/bar/braceright/asciitilde +/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef +/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef +/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef +/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef +/.notdef/space/exclamdown/cent/sterling/currency/yen/brokenbar +/section/dieresis/copyright/ordfeminine/guillemotleft/logicalnot +/hyphen/registered/macron/degree/plusminus/twosuperior/threesuperior +/acute/mu/paragraph/periodcentered/cedilla/onesuperior/ordmasculine +/guillemotright/onequarter/onehalf/threequarters/questiondown +/Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE/Ccedilla +/Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex +/Idieresis/Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis +/multiply/Oslash/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute +/Thorn/germandbls/agrave/aacute/acircumflex/atilde/adieresis +/aring/ae/ccedilla/egrave/eacute/ecircumflex/edieresis/igrave +/iacute/icircumflex/idieresis/eth/ntilde/ograve/oacute/ocircumflex +/otilde/odieresis/divide/oslash/ugrave/uacute/ucircumflex/udieresis +/yacute/thorn/ydieresis +] D +[128/backslash 129/parenleft 130/parenright 141/circumflex 142/tilde +143/perthousand 144/dagger 145/daggerdbl 146/Ydieresis 147/scaron 148/Scaron +149/oe 150/OE 151/guilsinglleft 152/guilsinglright 153/quotesinglbase +154/quotedblbase 155/quotedblleft 156/quotedblright 157/endash 158/emdash +159/trademark] +aload length 2 idiv 1 1 3 -1 roll{pop ISOLatin1Encoding 3 1 roll put}for +/colorimage where{pop}{ + /colorimage { + pop pop /Pr E D {/Cv Pr D /Gr Cv length 3 idiv string D 0 1 Gr length 1 sub + {Gr E dup /i E 3 mul D Cv i get 0.299 mul Cv i 1 add get 0.587 mul add + Cv i 2 add get 0.114 mul add cvi put}for Gr} image} D +}ie +/pdfmark where{pop}{userdict /pdfmark /cleartomark load put}ie +WF{FL{reencodeISO D}forall}{4 1 FL length 1 sub{FL E get reencodeISO D}for}ie +/Symbol dup dup findfont dup length dict begin + {1 index /FID ne{D}{pop pop}ie}forall /Encoding [Encoding aload pop] + dup 128 /therefore put D currentdict end definefont D + +/SF {/CS E D SZ SL CS put FO SL FN put /YI CS LH neg mul D dup ST cvs ( ) join + CS ST cvs join C1 E join ( NF ) join /C1 E D CS NF /Wf WF FN 0 gt or D + /BW Wf{( ) SW pop}{0}ie D}D +/NF {/cS E D /cF E D cF 0 ge{FL cF get}{cF -1 eq{/Symbol}{/MySymbol}ie}ie + findfont cS scalefont setfont} D +/FS {CF or /CF E D FR SL CF put CF CF 0 ge{FN 4 mul add}if E SF} D +/PC {SH /BP f D fin not GL not and{NL}if /HM t D /LL LS D} D +/BS {/TX E D Wf{/fin f D /CW 0 D /LK 0 D /SC 0 D + /RT TX D {RT ( ) search{/NW E D pop /RT E D /WH NW SW pop D CW WH add LL gt + {TX SC LK SC sub 1 sub NN GI GL{SH cF cS OC + 2 copy cS ne E cF ne or{NF}{pop pop}ie}{PC /CW WH BW add D}ie + /SC LK D} + {GL{JC}if + /CW CW WH add BW add D /HM t D}ie /GL f D /Ph f D + /LK LK NW length 1 add add D}{pop exit}ie}loop + /fin t D TX SC LK SC sub GI SH RT () ne{GL not{CC}if}if + /LC TX length D /WH RT SW pop D CW WH add Hy{HC SW pop add}if LL gt + {RT GL{SH cF cS OC 2 copy cS ne E cF ne or{NF}{pop pop}ie + Hy{/Ph t D}if /LL LS D}{NL /LL LS D SH}ie} + {RT PC Hy{CC}if /Ph Ph Hy or D}ie RT () ne{/GL t D /HM t D}if} + {TX SW pop LL le{TX SH}{/NW () D 0 2 TX length 1 sub + {/CW E D TX 0 CW GI dup SW pop LL gt{pop NW SH /HM t D NL/LL W XO sub MR sub D + /CW CW 2 sub NN D /TX TX CW TX length CW sub GI D TX BS exit} + {/NW E D}ie}for}ie}ie /HM t D}D +/CC {C0 length 0 gt{JC}if /C0 [C1 L1 YA YB Mf NS NB TB AF Bw] D + /C1 () D /L0 L1 D /YA 0 D /YB 0 D /Mf 0 D /NS 0 D /NB 0 D}D +/JC {C0 aload length 0 gt{pop pop pop NB add /NB E D NS add /NS E D + dup Mf gt{/Mf E D}{pop}ie dup YB gt{/YB E D}{pop}ie + dup YA gt{/YA E D}{pop}ie pop C1 join /C1 E D /C0 [] D}if}D +/OC {C0 length 0 gt{C1 L1 L0 sub YA YB Mf NS NB TB AF Bw GL C0 aload pop + /Bw E D /AF E D /TB E D /NB E D /NS E D /Mf E D /YB E D /YA E D /C0 [] D + /L1 E D /C1 E D Ph{HC SH}if NL /GL E D /Bw E D /AF E D /TB E D /NB E D /NS E D + /Mf E D /YB E D /YA E D /L1 E D /LL W L1 sub XO sub MR sub WH sub D /CW 0 D + C1 E join /C1 E D}if}D +/BT {/LB t D dup length string copy RS dup dup () ne E ( ) ne and + {/CI 0 D /LS LL D /LL W L1 sub XO sub MR sub D BS} + {dup ( ) eq{/GL f D}if dup () eq L1 0 eq or{pop}{SH /BP f D /Ph f D}ie}ie + /LB f D} D +/BL {CP E pop XO E M} D +/NL {JC /GL f D /SK W XO sub MR sub L1 sub TB{Bw add}if D + /YA LF{Mf HM Fl not and PF or{LH mul}if}{0 /LF t D}ie YA 2 copy lt{E}if pop D + C1 () ne{/FB YB Mf SA{Sf mul}if 4 div 2 copy lt{E}if pop D}if Fl{/Ya YA D}if + CP E pop YA sub YB sub LE neg lt Fl not and PB not and{NP}if NT TL BL + OU PF not and PB or{/RE L1 TB{Bw sub}if + W XO sub MR sub div YA YB add LE BO add div 2 copy lt{E}if pop D + RE 1 gt{BL 1 RE div dup scale}if}if + AT 2 le{SK AT mul 2 div YA neg R}if + AT 3 eq{0 YA neg R TB{/NB NB 1 sub D /NS NS 1 sub D}if /NB NB 1 sub NN D + /A3 NS 6 mul NB add D NS NB add 0 eq + {/A1 0 D /A2 0 D} + {NS 0 eq{/A1 SK NB div dup J gt{pop 0}if D /A2 0 D}{J A3 mul SK lt + {/A1 J D /A2 SK J NB mul sub NS div dup Ab gt{/A1 0 D pop 0}if D} + {/A1 SK A3 div D /A2 A1 6 mul D}ie}ie}ie /A1 A1 NN D /A2 A2 NN D}if + AT 4 eq{0 YA neg R PH 2 le{PD 0 lt{/PD L1 D}if PD M1 gt{/M1 PD D}if + L1 PD sub M2 gt{/M2 L1 PD sub D}if}{DV ID 1 sub get 0 ge{Lo 0 R}if}ie}if + F0 cF ne Cs cS ne or{F0 Cs NF}if + /ms Ms D /Ms f D CP FB sub + C1 cvx exec XO EO sub L1 add TB{BW sub}if dup LM gt{/LM E D}{pop}ie + PH 0 eq PH 4 eq or Ms and{HF not{/PO t D /AH t D}if + BB CP YA add E AT 3 eq LB and{A1 sub}if TB{BW sub}if E BB} + {pop pop}ie Ms HM PH 3 eq and or{/BP f D /Fl f D}if + /Lo 0 D /L1 0 D /F0 cF D /Cs cS D BP not{0 YB NN neg R}if + OU f1 and mF not and{k2 /f1 f D}if + OU PF not and PB or{RE 1 gt{RE dup scale}if}if /Ms ms Ms or D + /C1 AF{(Cp )}{()}ie D /YA 0 D /YB 0 D BL + AT 4 eq LB not and PH 3 ge and + {ID DV length lt{DV ID get dup 0 ge{DO E sub /Lo E D /L1 Lo D}{pop}ie + /ID ID 1 add D}if}if /T t D CD{/LN LN 1 add D PD}if + /PD -1 D /NS 0 D /NB 0 D /TB f D /Ph f D /Mf 0 D /HM f D} D +/RS {/TM E D /CN 0 D TM{10 eq{TM CN ( ) PI}if /CN CN 1 add D}forall + /CN 0 D /BK HM EN and{0}{1}ie D TM + {dup 32 ne{TM CN 3 2 roll put /CN CN 1 add D /BK 0 D} + {pop BK 0 eq{TM CN 32 put /CN CN 1 add D}if /BK 1 D}ie}forall + TM 0 CN GI dup dup () ne E ( ) ne and + {dup CN 1 sub get 32 eq{/EN f D}{/EN t D}ie}if} D +/join {2 copy length E length add string dup 4 2 roll 2 index 0 3 index + PI E length E PI}d +/WR {(\n) search{dup () ne BP not or + {Li 4 le CP E pop YI Li mul add LE add 0 lt and PL 0 eq and{NP}if + SH NL pop /Li Li 1 sub D WR}{pop pop WR}ie}{SH}ie /CI 0 D /BP f D} D +/SH {dup dup () ne E ( ) ne and PF or CS Mf gt and{/Mf CS D}if + T not Wf and{( ) E join /T t D}if dup BP{/MF CS D}if + AT 3 eq{2 copy length dup 0 gt{/NB E NB add D + {( ) search{/NS NS 1 add D pop pop}{pop exit}ie}loop}{pop pop}ie}if + CD PD 0 lt and{dup DC search{SW pop /PD E L1 add D pop pop}{pop}ie}if + 0 Np dup SW pop L1 add /L1 E D dup () ne + {C1 (\() join E join (\)) join AU AF and UF or Wf and{( U ) join}if + sF{( s ) join}if ( S ) join + /C1 E D dup length 1 sub get 32 eq /TB E D /Bw BW D}{pop pop}ie} D +/BG {AI LG BC add add 0 eq} D +/ON {OU{Ty AR AI NN get dup 1 add Ln Ns Ty 2 mod 0 eq{(. )}{(\) )}ie join + dup SW pop neg 0 R CP E 0 lt{0 E M}{pop}ie CP BB show /Ms t D}if} D +/Ln {AR AI 3 -1 roll put}D +/SP {dup CI lt BP not and{dup CI sub 0 E R /CI E D}{pop}ie} D +/BN {PF{WR /HM f D}{BT NL}ie} D +/NN {dup 0 lt{pop 0}if} D +/h {(h) HI ST cvs join cvx exec dup 1 get E Nf{0 get E join}{pop}ie} D +/H {/fn FN D /Hi E 1 add D 1 sub /HL E D /H2 HL 2 add D /GS EZ H2 get D + E Tm H2 get GS mul BE dup 0 gt{1 sub}{pop EG H2 get dup 0 lt{pop AT}if}ie NA + WW Np /SL SL 1 add D /FN EF H2 get D GS Ey H2 get FS + EU H2 get Sc Hs not HL Hl lt and Hs HL hl lt and or Hi 0 eq or + {/HI Hi D /Hs t D /hl HL D /Hv HL D}if HL Hl lt{/hi Hi D}if + Nf HI 0 gt and{(h) Hi ST cvs join cvx exec 0 get WB}if + /HF t D /AH f D /PO f D} D +/EH {Bm H2 get GS mul BE OA /SL SL 1 sub NN D /CF 0 D /FN fn D + SZ SL get FR SL get FS /HF f D /GS Ts D ()Ec} D +/P {E PF{WR}{PO{EP}{BN}ie Ts 4 mul Np AE not{Tm 0 get Ts mul neg SP}if + dup 0 ge AH and{Pi Pd}if}ie 1 sub dup 0 lt{pop AV AL get}if /AT E D /PO t D} D +/EP {PF{WR}{BN Ts 4 mul Np}ie AE not{Bm 0 get Ts mul neg SP}if + /AT AV AL get D /PO f D} D +/BE {E PO{EP}{BN}ie Ts 4 mul Np neg SP} D +/HR {/Aw W EO sub D /RW E dup 0 gt{Aw mul}{neg}ie dup Aw gt{pop Aw}if D /RZ E D + E BN Ts neg SP 1 sub 2 div Aw RW sub mul EO add CP E pop M PF{0 Ps neg R}if + 0 Np OU{gsave RZ LW Cf{Hc VC}{0 Sg}ie CP BB RW 0 RL CP BB stroke grestore}if + /CI 0 D /BP f D PF not{Ts neg SP}if /Ms t D} D +/AD {I NL EG 14 get dup 0 lt{pop AT}if NA /AE t D Tm 14 get Ts mul neg SP + Cf{EU 14 get dup -1 eq{pop CA CL get}if Sc}if} D +/DA {BN ()ES OA /AE f D ()Ec Bm 14 get Ts mul neg SP} D +/PR {/MW E D /Li E D Tm 1 get Ps mul BE 0 NA /FN Fp D /PF t D SI /SL SL 1 add D + /CF 0 D Ps CS mul Ts div MW WC mul CS mul Ts div dup LL gt PL 0 eq and + {LL div div}{pop}ie Ey 1 get FS CP E pop LE add YI neg div cvi dup Li lt + AH and{4 lt YI Li mul 5 mul LE add 0 gt or PL 0 eq and{NP}if}{pop}ie + EU 1 get Sc /GS Ps D}D +/RP {WR NL () /PF f D SI /FN 0 D ES Bm 1 get Ps mul neg SP OA /GS Ts D} D +/SI {/XO Lm 15 get BC NN mul Lm 16 get AI UI sub NN mul add + Lm 17 get UI NN mul add Lm 20 get LG NN mul add Ts mul + PF{Lm 1 get Ps mul add}if EO add D + /MR Rm 15 get BC NN mul Rm 16 get AI UI sub NN mul add + Rm 17 get UI NN mul add Rm 20 get LG NN mul add Ts mul + PF{Rm 1 get Ps mul add}if D /LL W XO sub MR sub D} D +/DT {/cC E D BN /LG LG 1 sub D SI /LG LG 1 add D WW 2 div Np BL} D +/DD {WB Cc 0 eq cC 0 eq and L1 0 eq or Lm 20 get Ts mul L1 sub TB{BW add}if + Ts 2 div lt or NL /LF E D SI BL /cC 0 D} D +/DL {Dc LG Cc put /Cc E D BG{Tm 18 get Ts mul BE}{BN}ie /LG LG 1 add D BL} D +/LD {BN LG 0 gt{/LG LG 1 sub D}if /Cc Dc LG get D SI + BG{()Bm 18 get Ts mul BE}if BL} D +/UL {BG{Tm 17 get Ts mul BE}{BN}ie NR AI NN 0 put /UI UI 1 add D + /AI AI 1 add D SI BL} D +/LU {BN /UI UI 1 sub D /AI AI 1 sub D SI BG{()Bm 17 get Ts mul BE}if BL} D +/OL {E BG{Tm 16 get Ts mul BE}{BN}ie TR AI NN Ty put /Ty E D NR AI NN 1 put + /AI AI 1 add D SI BL 1 Ln} D +/LO {BN /AI AI 1 sub D /Ty TR AI get D SI BG{()Bm 16 get Ts mul BE}if BL} D +/LI {E BN -1 SP /BP f D /CI 0 D 0 Np NR AI 1 sub NN get 1 eq + {dup dup 0 gt E 4 le and{/Ty E D}{pop}ie + /L1 L1 Ty AR AI NN get Ns SW pop XO sub dup 0 lt{pop 0}if add D ( ON )} + {pop ( B )}ie C1 E join /C1 E D CS Mf gt{/Mf CS D}if BL} D +/BQ {Tm 15 get Ts mul BE /BC BC 1 add D SI BL} D +/QB {Bm 15 get Ts mul BE /BC BC 1 sub D SI BL} D +/Al {E EP 1 sub dup 0 lt{pop AV AL get}if NA} D +/Ea {EP OA} D +/WB {PF{WR}{BT}ie} D +/F1 {WB /FN 0 D CS 0 FS} D +/F2 {WB /FN WI D CS 0 FS} D +/HY {/Hy t D WB /Hy f D} D +/YH {WB} D +/A {/LT E D LT 1 eq{/RN E D}if /Lh E D WB /C1 C1 ( Cp ) join D + Lc AF not and{Cl Sc}if /AF t D} D +/EA {Lc AF and{Ec}{WB}ie TL Pa AF and Lh 0 ne and + {( \() Lh join (\)) join /AF f D WB}if /AF f D} D +/TL {C1 ( Tl ) apa /C1 E D} d +/apa {AF OU and Lh 0 ne LT 1 eq or and{LT 1 eq{RN ( /) E ST cvs join} + {(\() Lh join (\)) join}ie E join join}{pop}ie} d +/Cp {/Xc CP /Yc E D D} D +/SS {Cf{dup 0 ge{EU E get dup -1 eq{pop CA CL get}if}{pop CA CL get}ie Sc} + {pop}ie SZ SL get /SL SL 1 add D} D +/I {WB 8 SS 1 FS} D +/EM {WB 8 SS /CF CF 1 xor D 0 FS} D +/BD {WB 9 SS 2 FS} D +/TT {WB 10 SS /FN Fp D 0 FS} D +/KB {WB 11 SS /FN Fp D 2 FS} D +/CT {WB 12 SS 1 FS} D +/SM {WB 13 SS /FN Fp D 0 FS} D +/Q {/QL QL 1 add D QO QL 2 mod get La get join WB} D +/EQ {QC QL 2 mod get La get join WB /QL QL 1 sub D} D +/RO {WB -1 SS /CF 0 D 0 FS} D +/SY {WB -1 SS -1 FS} D +/MY {WB -1 SS -2 FS} D +/ES {WB /SL SL 1 sub NN D /CF 0 D /FN FO SL get D SZ SL get FR SL get FS ()Ec}D +/FZ {3 sub 1.2 E exp GS mul E WB TL /C1 C1 ( Cp ) join D /SL SL 1 add D 0 FS} D +/Ef {WB TL ()ES /C1 C1 ( Cp ) join D} D +/BZ {dup /Bf E D FZ}D +/Sc {dup -1 ne Cf and{/CL CL 1 add D dup 0 eq{pop [0 0 0]}if + dup CA E CL E put VS ( VC ) join C1 E join /C1 E D}{pop}ie} D +/Ec {WB Cf{/CL CL 1 sub NN D CA CL get VS ( VC ) join C1 E join /C1 E D}if} D +/VS {dup type /arraytype eq{([) E {ST cvs join ( ) join}forall (]) join}if} D +/VC {{255 div}forall setrgbcolor} D +/Sl {dup type /integertype ne{Ds}if /La E D WB}d +/UN {WB /UF t D} D +/NU {WB /UF f D} D +/SE {WB /sF t D} D +/XE {WB /sF f D} D +/sM {/C1 C1 ( k1 ) join D}d +/eM {/C1 C1 ( k2 ) join D}d +/k1 {/YC CP E pop Ts add D /mF t D /f1 t D}d +/k2 {gsave 3 LW -9 CP E pop Ts 0.2 mul sub M -9 YC L stroke grestore /mF f D}d +/Ac {/AC E D WB}d +/Ca {eA{( \()join AC join(\) )join}if WB}d +/s {OU{gsave 0 CS .25 mul R dup SW pop CJ 0 RL stroke grestore}if}D +/CJ {AT 3 eq LB and{E dup dup length 1 sub A1 mul E + {( ) search{pop pop E A2 add E}{pop exit}ie}loop 3 -1 roll add + W CP pop sub 2 copy gt{E}if pop}if}D +/So {/Co E D} D +/SO {C1 Yo ST cvs join ( So ) join /C1 E D (j) SW pop 2 div Pd} D +/Se {E WB CS E div Pd}D +/Pd {dup type /stringtype eq{SW pop}if dup /L1 E L1 add D + ST cvs ( 0 R ) join C1 E join /C1 E D} D +/Sp {0.35 CO} D +/Sb {-0.2 CO} D +/CO {OV Io Yo put /Yo E CS mul Yo add D /Io Io 1 add D -1.5 Io mul 3 add FZ SO + CS Yo add dup YA gt{/YA E D}{pop}ie + Yo neg dup YB gt{/YB E D}{pop}ie} D +/Es {ES /Io Io 1 sub NN D /Yo OV Io get D SO} D +/SB {/N2 0 D 0 1 NI{/N E D{IX N2 get 0 lt{/N2 N2 1 add D}{exit}ie}loop + /K WS N get FC N get mul D /NY AY N2 get D /BV NY array D + 0 1 NY 1 sub{/TM K string D currentfile TM readhexstring pop pop BV E TM put} + for BM N BV put /N2 N2 1 add D}for} D +/IC [{/MA E D /MB 0 D}{2 div /MA E D /MB MA D}{/MB E CS sub D /MA CS D} + {pop /MA YS AB mul D /MB 1 AB sub YS mul D}{pop /MA 0 D /MB 0 D}] D +/IP {BV N get /N N 1 add D} D +/II {/K E D IX K get 0 lt{/EC E D}if /TY E D + TY 4 eq{/Y E D /X E D}if TY 3 eq{/AB E D}if + /XW AX K get D /YW AY K get D /IS SG IT K get get D /XS XW IS mul D + /YS YW IS mul D YS IC TY get exec /MA MA Fl not{3 add}if D} D +/IM {II /ty TY D /xs XS D /ys YS D /ya YA D /yb YB D /ma MA D /mb MB D /k K D + /ec EC D /BP f D /CI 0 D WB TL L1 xs add dup XO add MR add W gt + {pop /ma ma Fl{3 add}if D NL /YA ma D /YB mb D /YS ys D /L1 xs D} + {/L1 E D ma YA gt{/YA ma D}if mb YB gt{/YB mb D}if}ie /TB f D + OU{CP E pop YS sub LE neg lt Fl not and PB not and{NP /YA ma D /YB mb D}if + /BP f D ty ST cvs ( ) join IX k get 0 lt{(\() join ec join (\) ) join}if + k ST cvs join ty 3 eq{AB ST cvs ( ) join E join}if + ty 4 eq{X ST cvs ( ) join Y ST cvs join ( ) join E join}if C1 E join + ( DI ) join FP 2 eq FP 1 eq AF and or{( FM ) join}if + ( Il Cp ) apa /C1 E D /EN f D}if /HM t D /T f D} D +/DI {II /Xc CP /Yc E D D /YN YW neg D /HM t D /CI 0 D /K2 IX K get D gsave + TY 4 eq{OX X IS mul add OY FY add YS sub Y IS mul sub} + {/FY YS D CP MB sub 2 copy /OY E D /OX E D}ie + translate K2 0 ge{/DP AZ K2 get D /BV BM K2 get D XS YS scale /N 0 D XW YW DP + [XW 0 0 YN 0 YW] {IP} FC K2 get 1 eq{image}{f 3 colorimage}ie} + {EX}ie grestore XS 0 R /Ms t D} D +/FM {gsave 0 Sg CP MB sub translate XS neg 0 M 0 YS RL XS 0 RL 0 YS neg RL + XS neg 0 RL stroke grestore} D +/NA {/AT E D /AL AL 1 add D AV AL AT put} D +/OA {AL 0 gt{/AL AL 1 sub D /AT AV AL get D}if} D +/D1 {/BR {CP E pop E BN Mb{CP E pop eq{0 YI R}if}{pop}ie} D + /Sn {OU{C1 E ST cvs join ( Ld ) join /C1 E D}{pop}ie} D} D +/D1 {/BR {BN} D /Sn {OU {C1 E ST cvs join ( Ld ) join /C1 E D} {pop} ie} D} D +/TC {/TF t D /ML 0 D HN{SW pop dup ML gt{/ML E D}{pop}ie}forall NP /RM RM not D + RC /OU Tc D Ep /PN 0 D Ms not TP and{Ip}if /W IW ML sub Ts sub D + /A0 0 D TH{/BR {( ) join BT} D /Sn {pop} D /Au () D}if} D +/TN {0 eq{E EA PF HF or not XR and{HN E get Xr}{pop}ie} + {OU{Tn 0 ge{() BN}if /Tn E D}{pop}ie WB}ie} D +/NT {OU LB not and Tn 0 ge and{PL 0 eq{Ms not{CS CF FS}if CP dup + /y E YA sub D W 9 sub CS -1.8 mul XO L1 add 2 add{y M (.) show}for + HN Tn get dup SW pop IW E sub y M show CP BB M}if /Tn -1 D}if} D +/Ld {/DN E D HN DN Pn put [/View [/XYZ -4 Fl{PS}{CP YA add US E pop}ie null] + /Dest DN ST cvs cvn /DEST pdfmark} D +/C {ND 1 eq{1 sub}if TI mul /XO E D NL Nf not{pop()}if 0 3 -1 roll 1 A} D +/OP {BP not{NP}if PN 2 mod 0 eq{/Ms t D NP}if}D +/Ep {Xp PN 2 mod 0 eq and OU and{/Pn (-) D showpage /PM 1 D LA}if}D +/Dg [73 86 88 76 67 68 77] D +/Rd [0 [1 1 0][2 1 0][3 1 0][2 1 1][1 1 1][2 2 1][3 3 1][4 4 1][2 1 2]] D +/Ns {/m E D /c E 32 mul D /j m 1000 idiv D /p j 12 add string D + c 96 le m 0 gt and{c 32 le {/i 0 D /d 77 D /l 100 D /m m j 1000 mul sub D + j -1 1 {pop p i d c add put /i i 1 add D}for + 4 -2 0 {/j E D /n m l idiv D /m m n l mul sub D /d Dg j get D + n 0 gt {/x Rd n get D x 0 get -1 1 {pop p i d c add put /i i 1 add D}for + p i x 1 get sub Dg x 2 get j add get c add put}if /l l 10 idiv D + }for p 0 i GI} + {/i ST length 1 sub D m {1 sub dup 0 ge{dup 26 mod c add 1 add + ST i 3 -1 roll put 26 idiv dup 0 eq{pop exit}if}if /i i 1 sub D}loop + ST i ST length i sub GI}ie} + {m p cvs}ie} D +/US {matrix currentmatrix matrix defaultmatrix matrix invertmatrix + matrix concatmatrix transform} D +/GB {Gb{US}if}D +/Tl {/Rn E D Xc CP pop ne{ + [/Rect [Xc 1 sub Yc cS 0.25 mul sub GB CP E 1 add E cS 0.85 mul add GB] + /Subtype /Link /Border [0 0 Cf Lc and LX and AU or{0}{1}ie] Rn type + /nametype eq {/Dest Rn}{/Action [/Subtype /URI /URI Rn] Cd}ie + /ANN pdfmark}if} D +/Il {/Rn E D [/Rect [Xc Yc GB Xc XS add Yc YS add GB] /Subtype /Link + /Border [0 0 0] Rn type /nametype eq{/Dest Rn} + {/Action [/Subtype /URI /URI Rn] Cd}ie /ANN pdfmark} D +/XP {[{/Z Bz 2 div D Z 0 R Z Z RL Z neg Z RL Z neg Z neg RL Z Z neg RL + Fi cH 1 eq and{fill}if} {Bz 0 RL 0 Bz RL Bz neg 0 RL 0 Bz neg RL + Fi cH 1 eq and{fill}if} {0 -5 R Bz 0 RL 0 21 RL Bz neg 0 RL 0 -21 RL}]} D +/MS {/Sm E D WB}D +/O {BN()0 Sm BX} D +/BX {/Bt E D Bt 2 lt{/Ch E D CS 0.8 mul}{11 mul}ie W XO sub MR sub + 2 copy gt{E}if pop /HZ E D Bt 2 eq{Fi not{pop()}if ( )E join /Ft E D TT + /PF t D /MW 1 D /Li 1 D /Fw Ft SW pop D Fw HZ gt{/HZ Fw 8 add D}if + HZ ST cvs( )join}{WB Ch ST cvs( )join}ie L1 HZ add XO add MR add W gt{NL}if + Bt 2 eq{Ft ES Fw neg HM{CS sub}if Pd}if Bt ST cvs join( Bx )join + Bt 2 eq HM and{CS Pd}if C1 E join /C1 E D /L1 L1 HZ add D /T f D + ( ) Pd /PF f D Bt 2 lt{YA CS .8 mul lt{/YA CS .8 mul D}if} + {YB 5 lt{/YB 5 D}if YA 21 lt{/YA 21 D}if}ie /CI 0 D} D +/Bx {dup 2 eq{E /Bz E D}{E /cH E D /Bz CS .8 mul D}ie + OU {gsave 0 Sg XP E get exec stroke grestore}{pop}ie Bz 0 R /Ms t D}D +/SD {FD 4 mul Dy add DZ NF newpath 0 0 M DX t charpath pathbbox + 3 -1 roll sub /DY E D E dup /X1 E D sub WM mul WX DY mul add WM DG mul E div + /DF E D /DR WX DF mul DY mul WM div 2 div D} d +/Sd {gsave 0 IL Di mul neg translate IL IW atan Di 0 eq{neg}if rotate + FD 4 mul Dy add DZ NF DR X1 sub DY 2 div neg M cD VC DX show grestore} d +/Pt {/tp t D Tp{NP /Pn (TP) D 0 Tt neg R Th BN NP Ep ET RC ZF}if /tp f D} D +/RC {/AI 0 D /LG 0 D /BC 0 D /UI 0 D /PF f D /Cc 0 D /cC 0 D /Dc 10 array D + /NR [0 1 9{pop 0}for] D /La Ds D /AR 10 array D /TR 10 array D /AV 30 array D + SI /AL -1 D /AT A0 D AT NA /OV 9 array D /Yo 0 D /Co 0 D /Io 0 D /Hy f D + /Ph f D /CL -1 D Ct Sc}D +/ZF {/FR [0 1 30{pop 0}for] D /SZ [0 1 30{pop 0}for] D /FO [0 1 30{pop 0}for] D + /SL 0 D /CF 0 D /FN 0 D 0 Ts SF}D +/QO [[(\234)(\233)(\253\240)(\232)(\273)(\253)][(')(`)(\253\240)(\231)(\273)(\253)]] D +/QC [[(\234)(\234)(\240\273)(\233)(\253)(\273)][(')(')(\240\273)(`)(\253)(\273)]] D +/Hf EF length 2 sub D +/Hz EZ Hf get D +/HS Ey Hf get D +/Fz EZ Hf 1 add get D +/Fs Ey Hf 1 add get D +/LE IL D +/Ps EZ 1 get D +/Fp EF 1 get D +/XO 0 D +/YI 0 D +/CI 0 D +/FP 0 D +/WW Ts 7 mul D +/Mf 0 D +/YA 0 D +/YB 0 D +/Cs Ts D +/GS Ts D +/F0 0 D +/NS 0 D +/NB 0 D +/N 0 D +/C0 [] D +/C1 () D +/Lo 0 D +/L1 0 D +/LM 0 D +/PH 0 D +/EC 0 D +/Lh 0 D +/LT 0 D +/CH 1 string D +/ST 16 string D +/CA 9 array D +/HC (\255) D +/HM f D +/PF f D +/EN f D +/TB f D +/UF f D +/sF f D +/AE f D +/AF f D +/BP t D +/CD f D +/PA t D +/GL f D +/T t D +/HF f D +/AH f D +/SA f D +/PB f D +/f1 f D +/mF f D +/OX 0 D +/OY 0 D +/FY 0 D +/EO 0 D +/FB 0 D +/PL 0 D +/Bw 0 D +/PD -1 D +/TP f D +/tp f D +/TH t D +/Ty 4 D +/Tn -1 D +/Fl t D +/LB t D +/PM 1 D +/Ms f D +/Ba f D +/Bb f D +/Hl 3 D +/hl 6 D +/Hv 6 D +/Hs f D +/HI 0 D +/hi 0 D +/PO t D +/TE f D +/LF t D +/BO 0 D +/Sm 1 D +/Bf 3 D +/A1 0 D +/A2 0 D +/Ds 1 D +/QL -1 D +/Cb Db D +/Ct Dt D +/Cl Dl D +[/Creator (html2ps version 1.0 beta7) /Author () /Keywords (xsd, xml, schema, c++, mapping, data, binding, tree, serialization, guide, manual, examples) /Subject () + /Title (C++/Tree Mapping User Manual) /DOCINFO pdfmark +/ND 1 D +/HN [(1) (1) (1) (1) (1) (1) (1) (2) (2) (2) (2) (3) (3) (4) (4) (5) (5) (5) +(6) (6) (7) (7) (??) (10) (11) (12) (13) (14) (16) (19) (20) (21) (22) (24) +(24) (25) (26) (27) (28) (29) (29) (30) (31) (32) (33) (37) (37) (37) (39) +(41) (45) (48) (55) (55) (58) (59) (60) (62) (64) (65) (68) (74) (75) (80) +(82) (85) (85) (86) (88) (89) (89) (90) (91) (91) (91) (92) (92) (93) (93) +(94) (94) (94) (96) (97) (99) (99) (100) (100) (100) (101) (101) (102) (103) +(103) (106) (107) (??) (1) (1) (1) (1) (2) (2) (2) (2) (3) (3) (4) (4) (5) +(5) (5) (6) (6) (7) (7) (10) (11) (12) (13) (14) (16) (19) (20) (21) (22) +(24) (24) (25) (26) (27) (28) (29) (29) (30) (31) (32) (33) (37) (37) (37) +(39) (41) (45) (48) (55) (55) (58) (59) (60) (62) (64) (65) (68) (74) (75) +(80) (82) (85) (85) (86) (88) (89) (89) (90) (91) (91) (91) (92) (92) (93) +(93) (94) (94) (94) (96) (97) (99) (99) (100) (100) (100) (101) (101) (102) +(103) (103) (106) (107)] D +/h0 [()(Table of Contents)] D +/h1 [(1\240\240)(Preface)] D +/h2 [(1.1\240\240)(About This Document)] D +/h3 [(1.2\240\240)(More Information)] D +/h4 [(2\240\240)(1 Introduction)] D +/h5 [(3\240\240)(2 C++/Tree Mapping)] D +/h6 [(3.1\240\240)(2.1 Preliminary Information)] D +/h7 [(3.1.1\240\240)(2.1.1 C++ Standard)] D +/h8 [(3.1.2\240\240)(2.1.2 Identifiers)] D +/h9 [(3.1.3\240\240)(2.1.3 Character Type and Encoding)] D +/h10 [(3.1.4\240\240)(2.1.4 XML Schema Namespace)] D +/h11 [(3.1.5\240\240)(2.1.5 Anonymous Types)] D +/h12 [(3.2\240\240)(2.2 Error Handling)] D +/h13 [(3.2.1\240\240)(2.2.1 xml_schema::duplicate_id)] D +/h14 [(3.3\240\240)(2.3 Mapping for import and include)] D +/h15 [(3.3.1\240\240)(2.3.1 Import)] D +/h16 [(3.3.2\240\240)(2.3.2 Inclusion with Target Namespace)] D +/h17 [(3.3.3\240\240)(2.3.3 Inclusion without Target Namespace)] D +/h18 [(3.4\240\240)(2.4 Mapping for Namespaces)] D +/h19 [(3.5\240\240)(2.5 Mapping for Built-in Data Types)] D +/h20 [(3.5.1\240\240)(2.5.1 Inheritance from Built-in Data Types)] D +/h21 [(3.5.2\240\240)(2.5.2 Mapping for anyType)] D +/h22 [(3.5.3\240\240)(2.5.3 Mapping for anySimpleType)] D +/h23 [(3.5.4\240\240)(2.5.4 Mapping for QName)] D +/h24 [(3.5.5\240\240)(2.5.5 Mapping for IDREF)] D +/h25 [(3.5.6\240\240)(2.5.6 Mapping for base64Binary and hexBinary)] D +/h26 [(3.6\240\240)(2.5.7 Time Zone Representation)] D +/h27 [(3.7\240\240)(2.5.8 Mapping for date)] D +/h28 [(3.8\240\240)(2.5.9 Mapping for dateTime)] D +/h29 [(3.9\240\240)(2.5.10 Mapping for duration)] D +/h30 [(3.10\240\240)(2.5.11 Mapping for gDay)] D +/h31 [(3.11\240\240)(2.5.12 Mapping for gMonth)] D +/h32 [(3.12\240\240)(2.5.13 Mapping for gMonthDay)] D +/h33 [(3.13\240\240)(2.5.14 Mapping for gYear)] D +/h34 [(3.14\240\240)(2.5.15 Mapping for gYearMonth)] D +/h35 [(3.15\240\240)(2.5.16 Mapping for time)] D +/h36 [(3.16\240\240)(2.6 Mapping for Simple Types)] D +/h37 [(3.16.1\240\240)(2.6.1 Mapping for Derivation by Restriction)] D +/h38 [(3.16.2\240\240)(2.6.2 Mapping for Enumerations)] D +/h39 [(3.16.3\240\240)(2.6.3 Mapping for Derivation by List)] D +/h40 [(3.16.4\240\240)(2.6.4 Mapping for Derivation by Union)] D +/h41 [(3.17\240\240)(2.7 Mapping for Complex Types)] D +/h42 [(3.17.1\240\240)(2.7.1 Mapping for Derivation by Extension)] D +/h43 [(3.17.2\240\240)(2.7.2 Mapping for Derivation by Restriction)] D +/h44 [(3.18\240\240)(2.8 Mapping for Local Elements and Attributes)] D +/h45 [(3.18.1\240\240)(2.8.1 Mapping for Members with the One Cardinality Class)] D +/h46 [(3.18.2\240\240)(2.8.2 Mapping for Members with the Optional Cardinality Class)] D +/h47 [(3.18.3\240\240)(2.8.3 Mapping for Members with the Sequence Cardinality Class)] D +/h48 [(3.18.4\240\240)(2.8.4 Element Order)] D +/h49 [(3.19\240\240)(2.9 Mapping for Global Elements)] D +/h50 [(3.19.1\240\240)(2.9.1 Element Types)] D +/h51 [(3.19.2\240\240)(2.9.2 Element Map)] D +/h52 [(3.20\240\240)(2.10 Mapping for Global Attributes)] D +/h53 [(3.21\240\240)(2.11 Mapping for xsi:type and Substitution Groups)] D +/h54 [(3.22\240\240)(2.12 Mapping for any and anyAttribute)] D +/h55 [(3.22.1\240\240)(2.12.1 Mapping for any with the One Cardinality Class)] D +/h56 [(3.22.2\240\240)(2.12.2 Mapping for any with the Optional Cardinality Class)] D +/h57 [(3.22.3\240\240)(2.12.3 Mapping for any with the Sequence Cardinality Class)] D +/h58 [(3.22.4\240\240)(2.12.4 Element Wildcard Order)] D +/h59 [(3.22.5\240\240)(2.12.5 Mapping for anyAttribute)] D +/h60 [(3.23\240\240)(2.13 Mapping for Mixed Content Models)] D +/h61 [(4\240\240)(3 Parsing)] D +/h62 [(4.1\240\240)(3.1 Initializing the Xerces-C++ Runtime)] D +/h63 [(4.2\240\240)(3.2 Flags and Properties)] D +/h64 [(4.3\240\240)(3.3 Error Handling)] D +/h65 [(4.3.1\240\240)(3.3.1 xml_schema::parsing)] D +/h66 [(4.3.2\240\240)(3.3.2 xml_schema::expected_element)] D +/h67 [(4.3.3\240\240)(3.3.3 xml_schema::unexpected_element)] D +/h68 [(4.3.4\240\240)(3.3.4 xml_schema::expected_attribute)] D +/h69 [(4.3.5\240\240)(3.3.5 xml_schema::unexpected_enumerator)] D +/h70 [(4.3.6\240\240)(3.3.6 xml_schema::expected_text_content)] D +/h71 [(4.3.7\240\240)(3.3.7 xml_schema::no_type_info)] D +/h72 [(4.3.8\240\240)(3.3.8 xml_schema::not_derived)] D +/h73 [(4.3.9\240\240)(3.3.9 xml_schema::no_prefix_mapping)] D +/h74 [(4.4\240\240)(3.4 Reading from a Local File or URI)] D +/h75 [(4.5\240\240)(3.5 Reading from std::istream)] D +/h76 [(4.6\240\240)(3.6 Reading from xercesc::InputSource)] D +/h77 [(4.7\240\240)(3.7 Reading from DOM)] D +/h78 [(5\240\240)(4 Serialization)] D +/h79 [(5.1\240\240)(4.1 Initializing the Xerces-C++ Runtime)] D +/h80 [(5.2\240\240)(4.2 Namespace Infomap and Character Encoding)] D +/h81 [(5.3\240\240)(4.3 Flags)] D +/h82 [(5.4\240\240)(4.4 Error Handling)] D +/h83 [(5.4.1\240\240)(4.4.1 xml_schema::serialization)] D +/h84 [(5.4.2\240\240)(4.4.2 xml_schema::unexpected_element)] D +/h85 [(5.4.3\240\240)(4.4.3 xml_schema::no_type_info)] D +/h86 [(5.5\240\240)(4.5 Serializing to std::ostream)] D +/h87 [(5.6\240\240)(4.6 Serializing to xercesc::XMLFormatTarget)] D +/h88 [(5.7\240\240)(4.7 Serializing to DOM)] D +/h89 [(6\240\240)(5 Additional Functionality)] D +/h90 [(6.1\240\240)(5.1 DOM Association)] D +/h91 [(6.2\240\240)(5.2 Binary Serialization)] D +/h92 [(7\240\240)(Appendix A \236 Default and Fixed Values)] D +/Hr [97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 +115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 +133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 +151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 +169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 +187 188]D +/HV [1 2 2 1 1 2 3 3 3 3 3 2 3 2 3 3 3 2 2 3 3 3 3 3 3 2 2 2 2 2 2 2 2 +2 2 2 3 3 3 3 2 3 3 2 3 3 3 3 2 3 3 2 2 2 3 3 3 3 3 2 1 2 2 2 3 3 3 3 3 +3 3 3 3 2 2 2 2 1 2 2 2 2 3 3 3 2 2 2 1 2 2 1]D +/Cn [2 0 0 0 23 5 0 0 0 0 0 1 0 3 0 0 0 0 6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 4 0 0 0 0 2 0 0 4 0 0 0 0 2 0 0 0 0 5 0 0 0 0 0 0 7 0 0 9 0 0 0 0 0 +0 0 0 0 0 0 0 0 7 0 0 0 3 0 0 0 0 0 0 2 0 0 0]D +Hr length 0 gt{[/PageMode /UseOutlines /DOCVIEW pdfmark}if +/Hn 1 D +0 1 Hr length 1 sub{ + /Bn E D [Cn Bn get dup 0 gt{/Count E HV Bn get Bl ge{neg}if}{pop}ie + /Dest Hr Bn get dup abs ST cvs cvn E 0 ge{(h)Hn ST cvs join cvx exec + dup 1 get E Nf{0 get E join}{pop}ie /Hn Hn 1 add D}{()}ie + /Title E dup length 255 gt{0 255 getinterval}if /OUT pdfmark}for +ZF /FN Fp D Ps 0 FS /WC Wf{( )}{}ie SW pop D +ET RC ZF +/Df f D +/R0 (http://www.codesynthesis.com/licenses/fdl-1.2.txt) D +/R1 (http://www.codesynthesis.com/projects/xsd/documentation/cxx/tree/manual/index.xhtml) D +/R2 (http://www.codesynthesis.com/projects/xsd/documentation/cxx/tree/manual/cxx-tree-manual.pdf) D +/R3 (http://www.codesynthesis.com/projects/xsd/documentation/cxx/tree/manual/cxx-tree-manual.ps) D +/R1 (http://www.codesynthesis.com/products/xsd) D +/R2 (http://codesynthesis.com/projects/xsd/documentation/cxx/tree/manual/index.xhtml) D +/R3 (http://codesynthesis.com/projects/xsd/documentation/cxx/tree/manual/cxx-tree-manual.pdf) D +/R4 (http://codesynthesis.com/projects/xsd/documentation/cxx/tree/manual/cxx-tree-manual.ps) D +/R5 (http://www.codesynthesis.com/projects/xsd/documentation/cxx/tree/guide/) D +/R6 (http://wiki.codesynthesis.com/Tree/Customization_guide) D +/R7 (http://wiki.codesynthesis.com/Tree/FAQ) D +/R8 (http://www.codesynthesis.com/projects/xsd/documentation/xsd.xhtml) D +/R9 (http://www.codesynthesis.com/mailman/listinfo/xsd-users) D +/R10 (http://www.codesynthesis.com/pipermail/xsd-users/) D +/R11 (http://en.wikipedia.org/wiki/Character_code) D +/TS { + tables E get /table E D + table aload pop /rdesc E D /cdesc E D /tdesc E D + tdesc aload pop /capalg E D /caption E D /rules E D /frame E D /nfoot E D + /nhead E D /ncol E D /nrow E D /border E D /twid E D /units E D /talign E D + /flow E D /clear E D /tclass E D pop pop + /w W D /eps 0.1 D /OU f D /PL 1 D + /FN EF 21 get D EZ 21 get Ey 21 get FS + 0 1 1{ + /pass E D + 0 1 nrow{ + /irow E D + /cells rdesc irow get 6 get D + 0 1 ncol{ + /icol E D + /cell cells icol get D + cell 0 ne{ + cell aload pop /ang E D /CB E D pop pop pop + /DV E D /bot E D /top E D /right E D /left E D /nowrap E D /valign E D + /dp E D /align E D /rspan E D /cspan E D /cclass E D /ctype E D /cmax E D + /cmin E D /proc E D + rspan 0 eq{/rspan nrow irow sub 1 add D}if + cspan 0 eq{/cspan ncol icol sub 1 add D}if + pass 0 eq cspan 1 eq and pass 1 eq cspan 1 gt and or{ + /W 1e5 D /LL W D /PH 1 D + ctype 1 eq{() BD}if + RC align NA + AT 4 eq{/CD t D /DC dp D /LN 0 D /M1 0 D /M2 0 D}{/CD f D}ie + 0 0 M /LM 0 D proc exec BN + AT 4 eq{ + LN array astore cell 15 3 -1 roll put + cdesc icol get dup dup 5 get M1 lt{5 M1 put}{5 get /M1 E D}ie + dup 6 get M2 lt{6 M2 put}{6 get /M2 E D}ie + /LM M1 M2 add D + }if + /CD f D + ang 0 ne{/LM CP E pop neg D}if + /thiswid LM left add right add eps add D + /oldmin 0 D /oldmax 0 D + 0 1 cspan 1 sub{ + icol add cdesc E get dup 2 get /oldmax E oldmax add D + 1 get /oldmin E oldmin add D + }for + thiswid oldmax ge{ + 0 1 cspan 1 sub{ + icol add cdesc E get dup 2 E 2 get oldmax 0 eq + {pop thiswid cspan div}{thiswid mul oldmax div}ie + put + }for + }if + nowrap 1 eq{ + thiswid oldmin ge{ + 0 1 cspan 1 sub{ + icol add cdesc E get dup 1 E 1 get oldmin 0 eq + {pop thiswid cspan div}{thiswid mul oldmin div}ie + put + }for + }if + }{ + /W 0 D /LL W D /PH 2 D + ctype 1 eq{() ES () BD}if + 0 0 M /LM 0 D RC proc exec BN + /thiswid LM left add right add eps add D + thiswid oldmin ge{ + 0 1 cspan 1 sub{ + icol add cdesc E get dup 1 E 1 get oldmin 0 eq + {pop thiswid cspan div}{thiswid mul oldmin div}ie + put + }for + }if + }ie + ctype 1 eq{() ES}if + }if + }if + }for + }for + }for + /tmin 0 D /tmax 0 D + 0 1 ncol{ + cdesc E get dup 1 get E 2 get 2 copy gt{pop dup}if + tmax add /tmax E D tmin add /tmin E D + }for + twid 0 lt{twid neg IW gt{IW neg}{twid}ie /twid E D}if + tdesc 0 twid neg tmin 2 copy lt{E}if pop put + tdesc 1 twid neg tmax 2 copy lt{E}if pop put + /W w D /LL W D /OU t D /PH 0 D /PL 0 D +} D +/PT { + /PL PL 1 add D + tables E get /table E D Tm 21 get Ts mul BE + PL 2 ge{save}if + /SL SL 1 add D /FN EF 21 get D EZ 21 get Ey 21 get FS + table aload pop /rdesc E D /cdesc E D /tdesc E D + tdesc aload pop /capalg E D /caption E D /rules E D /frame E D /nfoot E D + /nhead E D /ncol E D /nrow E D /border E D /twid E D /units E D /talign E D + /flow E D /clear E D /tclass E D /tmax E D /tmin E D + /w W D /xo XO D /mr MR D /ll LL D /lg LG D /ai AI D /bc BC D /nr NR D /ar AR D + /tr TR D /ui UI D /ph PH D /a0 A0 D /pf PF D /at AT D /av AV D /al AL D + /Le LE D /la La D + talign 0 lt{/talign AL 0 gt{AV AL get}{A0 2 le{A0}{0}ie}ie D}if + ph 1 eq ph 2 eq or{ + NL ph 1 eq{tmax}{tmin}ie dup XO add LM gt{/LM E XO add D}{pop}ie LM E + }{ + /PH 3 D /LE 1e5 D RC %ZF + border 0 gt{/border 1 D}if + /twidth 0 D /avail W xo sub D + twid 0 eq{0 1 ncol{cdesc E get dup 2 get E 3 get dup 0 gt{div neg dup twid lt + {/twid E D}{pop}ie}{pop pop}ie}for}if + /twid twid dup 0 lt{neg avail 2 copy gt{E}if pop}{avail mul}ie D + /OK t D 0 1 ncol{cdesc E get dup 1 get E 3 get twid mul gt{/OK f D}if}for + 0 1 ncol{ + cdesc E get dup 1 get /colmin E D dup 3 get /cwid E twid mul D dup + tmax avail le{2 get}if + tmin avail le tmax avail gt and{ + dup 2 get E 1 get dup 3 1 roll sub avail tmin sub mul tmax tmin sub div add + }if + tmin avail gt{1 get}if + 0 E colmin cwid lt OK and{pop cwid}if dup /twidth E twidth add D put + }for + /OU f D CP + tmin twid le{ + 0 1 ncol{cdesc E get dup 0 get twidth div twid mul 0 E put}for + /twidth twid D + }if + CP printcap CP E pop sub /caphig E D pop + 0 1 1{ + /pass E D + 0 1 nrow{ + /irow E D + /cells rdesc irow get 6 get D + 0 1 ncol{ + /icol E D + /cell cells icol get D + cell 0 ne{ + cell aload pop /ang E D /CB E D pop pop pop + /DV E D /bot E D /top E D /right E D /left E D /nowrap E D /valign E D + /dp E D /align E D /rspan E D /cspan E D /cclass E D /ctype E D /cmax E D + /cmin E D /proc E D + rspan 0 eq{/rspan nrow irow sub 1 add D}if + cspan 0 eq{/cspan ncol icol sub 1 add D}if + /W 0 D + 0 1 cspan 1 sub{icol add cdesc E get 0 get /W E W add D}for + pass 0 eq rspan 1 eq and pass 1 eq rspan 1 gt and or{ + ctype 1 eq{() BD}if + /W W left sub right sub D /XO 0 D /EO 0 D SI + /A0 align D RC align NA + AT 4 eq{ + /DC dp D /DO 0 D /ID 1 D + 0 1 DV length 1 sub{DV E get dup DO gt{/DO E D}{pop}ie}for + /Lo DO DV 0 get sub D /L1 Lo D + }if + 0 0 M /BP t D /Fl t D /MF 0 D /FB 0 D + proc exec T not{/CI 0 D}if BN 0 FB neg R MF 0 eq{/MF CS D}if + CP /thishig E neg bot add top add CI add D pop + ang 0 ne{/thishig LM bot add top add D}if + cell 16 MF put cell 17 Ya put cell 18 thishig put + valign 4 eq{ + /below thishig Ya sub D + rdesc irow get dup dup 4 get Ya lt + {4 Ya put}{4 get /Ya E D}ie + dup 5 get below lt{5 below put}{5 get /below E D}ie + /thishig Ya below add D + }if + ctype 1 eq{()ES}if + /oldhig 0 D + 0 1 rspan 1 sub{ + irow add rdesc E get 0 get /oldhig E oldhig add D + }for + thishig oldhig ge{ + 0 1 rspan 1 sub{ + irow add rdesc E get dup 0 E 0 get oldhig 0 eq + {pop thishig rspan div}{thishig mul oldhig div}ie + put + }for + }if + }if + }if + }for + }for + }for M RC %ZF + /thight 0 D /racc 0 D /maxh 0 D /brk 0 D /rbeg nhead nfoot add D + 0 1 nrow{ + rdesc E get dup 0 get dup /thight E thight add D + brk 0 eq{/racc E D}{/racc E racc add D}ie + racc maxh gt{/maxh racc D}if 2 get /brk E D + }for + ph 3 ge{thight caphig add E}if + ph 0 eq ph 4 eq or{ + /PH 4 D /LE Le D /OU Ou D /yoff 0 D /headsz 0 D + 0 1 nhead 1 sub{rdesc E get 0 get headsz add /headsz E D}for + /footsz 0 D + 0 1 nfoot 1 sub{rdesc E nhead add get 0 get footsz add /footsz E D}for + /ahig LE BO add MI add D /maxh maxh headsz add footsz add D + /thight thight headsz add footsz add D + tmin avail gt maxh ahig gt or + {/Sf avail tmin div dup ahig maxh div gt{pop ahig maxh div}if D /SA t D} + {/Sf 1 D}ie + tclass 1 eq thight LE 15 sub gt and + {/SA t D LE 15 sub thight div dup Sf lt{/Sf E D}{pop}ie}if + SA{Sf Sf scale /ll ll Sf div D /xo xo Sf div D /LE LE Sf div D + /mr mr Sf div D /BO BO Sf div D /ahig ahig Sf div D}if + nhead nfoot add getwid + LE CP E pop add capalg 0 eq{caphig sub}if + bT{f}{dup thight lt thight ahig lt and}ie + E headsz sub footsz sub rwid lt or{NP}if + capalg 0 eq{printcap -8 SP}if + CP /ycur E D pop + printhead + rbeg 1 nrow{/row E D row + getwid + ycur yoff add rwid sub footsz sub LE add 0 lt + {nfoot 0 gt{printfoot}if Tf NP /rbeg irow1 D + Ba{MI /MI MI SA{Sf div}if D MI SP /MI E D}if + CP /ycur E D pop /yoff 0 D printhead}if + irow1 printrow + }for + printfoot /row row 1 add D Tf + 0 ycur yoff add M + capalg 1 eq{/EO 0 D SI -3 SP printcap}if + Sf 1 lt{1 Sf div dup scale /ll ll Sf mul D /xo xo Sf mul D /LE LE Sf mul D + /mr mr Sf mul D /BO BO Sf mul D /SA f D}if + /EO 0 D + }if + }ie + /W w D /XO xo D /MR mr D /LL ll D /LG lg D /AI ai D /BC bc D /NR nr D /AR ar D + /TR tr D /UI ui D /PH ph D /A0 a0 D /PF pf D /AT at D /AV av D /AL al D + /La la D + /SL SL 1 sub NN D /CF 0 D /FN 0 D SZ SL get FR SL get FS Wf not{()F2}if + PL 2 ge{Ms E restore Ms or /Ms E D PH 1 eq PH 2 eq or + {/LM E D}if PH 3 ge{/CI 0 D NL 0 E neg R}if + }if + /PL PL 1 sub D /CI 0 D /BP f D /PO f D () Bm 21 get Ts mul BE BL %CF CS SF +} D +/printcap{ + capalg 0 ge{ + SA{/W w Sf div D} + {talign 1 eq{/XO xo ll twidth sub 2 div add D}if + talign 2 eq{/XO xo ll twidth sub add D}if + /W XO twidth add D + }ie /XO xo D /LL W XO sub MR sub D + /PA f D /Fl capalg 0 eq D + 1 NA BL caption exec BN OA /PA t D + }if +} D +/getwid{ + /irow1 E D + /irow2 irow1 D + /rwid 0 D + {rdesc irow2 get dup 0 get rwid add /rwid E D 2 get 0 eq + {exit}{/irow2 irow2 1 add D}ie + }loop +} D +/printrow{ + /xoff ll twidth PL 2 ge{Sf div}if sub talign mul 2 div D + /xleft xoff xo add D + /irow E D + /cells rdesc irow get 6 get D + 0 1 ncol{ + /icol E D + /cell cells icol get D + cell 0 ne{ + cell aload pop /ang E D /CB E D /cvsize E D /above E D /fontsz E D + /DV E D /bot E D /top E D /right E D /left E D /nowrap E D /valign E D + /dp E D /align E D /rspan E D /cspan E D /cclass E D /ctype E D /cmax E D + /cmin E D /proc E D + rspan 0 eq{/rspan nrow irow sub 1 add D}if + cspan 0 eq{/cspan ncol icol sub 1 add D}if + /width 0 D + 0 1 cspan 1 sub{icol add cdesc E get 0 get /width E width add D}for + /rhight rdesc irow get 0 get D + /hight rhight D + 1 1 rspan 1 sub{irow add rdesc E get 0 get /hight E hight add D}for + /W xo xoff add width add right sub D + ang 0 ne{/W xo xoff add hight add right sub D}if + /EO xo xoff add left add D SI + Cf{ + gsave CB VC xo xoff add ycur yoff add M + 0 hight neg RL width 0 RL 0 hight RL width neg 0 RL fill + grestore + }if + ctype 1 eq{() BD}if + /A0 align D RC + AT 4 eq{ + /DC dp D /ID 1 D /DO cdesc icol get 5 get D /Lo DO DV 0 get sub D /L1 Lo D + }if + ang 0 ne{ + gsave ang 90 eq + {xoff ycur add hight cvsize sub 2 div sub ycur hight sub xoff sub} + {xoff ycur sub width add hight cvsize sub 2 div add ycur xoff add}ie + translate ang rotate + }if + valign 3 le{0 ycur yoff add top sub + hight cvsize sub valign 1 sub mul 2 div sub M} + {0 ycur yoff add top sub above add rdesc irow get 4 get sub M}ie + /PA f D /BP t D /Fl t D + BL proc exec BN + ang 0 ne{grestore}if + /PA t D + ctype 1 eq{() ES}if + }if + /xoff xoff cdesc icol get 0 get add D + }for + /yoff yoff rhight sub D +} D +/printhead {0 1 nhead 1 sub{printrow}for} D +/printfoot {nhead 1 nhead nfoot add 1 sub{printrow}for} D +/Tf { + OU{rules 2 ge{/yoff 0 D + gsave 0 Sg + [0 1 nhead 1 sub{}for rbeg 1 row 1 sub{}for nhead 1 nhead nfoot add 1 sub{}for]{ + /irow E D + /xoff ll twidth PL 2 ge{Sf div}if sub talign mul 2 div D + /cells rdesc irow get 6 get D + 0 1 ncol{ + /icol E D + /cell cells icol get D + cell 0 ne{ + /rspan cell 6 get D + /cspan cell 5 get D + rspan 0 eq{/rspan nrow irow sub 1 add D}if + cspan 0 eq{/cspan ncol icol sub 1 add D}if + /width 0 D + 0 1 cspan 1 sub{icol add cdesc E get 0 get /width E width add D}for + /rhight rdesc irow get 0 get D + /hight rhight D + 1 1 rspan 1 sub{irow add rdesc E get 0 get /hight E hight add D}for + xo xoff add width add ycur yoff add M + 0 hight neg icol cspan add 1 sub ncol lt + {cdesc icol 1 add get 4 get dup rules 3 le{1 eq}{pop t}ie + {1 eq{0.8}{0.3}ie + LW RL CP stroke M}{pop R}ie}{R}ie + irow nhead nfoot add 1 sub ne nfoot 0 eq or + {irow rspan add 1 sub nrow lt + {rdesc irow rspan add get 3 get}{nfoot 0 eq{0}{1}ie}ie + dup rules 2 mod 0 eq{1 eq}{pop t}ie + {1 eq irow rspan add nhead eq or irow rspan add row eq nfoot 0 gt and or + {0.8}{0.3}ie LW width neg 0 RL CP stroke M}{pop}ie}if + }if + /xoff xoff cdesc icol get 0 get add D + }for + /yoff yoff rhight sub D + }forall + grestore + /Ms t D + }if + frame 1 gt{ + gsave + 1 LW 0 Sg + xleft ycur M CP BB + 0 yoff frame 5 eq frame 7 ge or{RL}{R}ie + twidth 0 frame 3 eq frame 4 eq or frame 8 ge or{RL}{R}ie CP BB + 0 yoff neg frame 6 ge{RL}{R}ie + twidth neg 0 frame 2 eq frame 4 eq or frame 8 ge or{RL}{R}ie + closepath stroke + grestore + /Ms t D + }if + }if +} D +/tables [[[0 0 0 0 0 -1 0 0 1 58 2 0 0 9 5 {()} -1] + [[0 0 0 0 0 0 0][0 0 0 0 0 0 0][0 0 0 0 0 0 0]] + [[0 0 0 0 0 0 [[{()1 Sl()WB(XML Schema type)} 0 0 1 0 1 1 1 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB(Alias in the )SM(xml_schema)ES( names)HY(pace)YH()} 0 0 1 0 1 1 1 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB(C++ type + )} 0 0 1 0 1 1 1 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB(anyType and anySim)HY(ple)HY(Type)YH( types + )} 0 0 1 0 3 1 1 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +0 +0 +]] +[0 0 0 0 0 0 [[{()1 Sl()WB()SM(anyType)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(type)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()0 24 1 A(Section 2.5.2, "Mapping for )SM(anyType)ES(")24 0 TN TL()Ec /AF f D( + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB()SM(anySim)HY(ple)HY(Type)YH()ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(simple_type)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()0 25 1 A(Section 2.5.3, "Mapping for )SM(anySim)HY(ple)HY(Type)YH()ES(")25 0 TN TL()Ec /AF f D( + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB(fixed-length inte)HY(gral)YH( types + )} 0 0 1 0 3 1 1 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +0 +0 +]] +[0 0 0 0 0 0 [[{()1 Sl()WB()SM(byte)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(byte)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(signed\240char)ES( + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB()SM(unsigned)HY(Byte)YH()ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(unsigned_byte)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(unsigned\240char)ES( + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB()SM(short)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(short_)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(short)ES( + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB()SM(unsigned)HY(Short)YH()ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(unsigned_short)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(unsigned\240short)ES( + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB()SM(int)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(int_)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(int)ES( + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB()SM(unsignedInt)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(unsigned_int)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(unsigned\240int)ES( + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB()SM(long)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(long_)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(long\240long)ES( + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB()SM(unsigned)HY(Long)YH()ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(unsigned_long)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(unsigned\240long\240long)ES( + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB(arbi)HY(trary)YH(-length inte)HY(gral)YH( types + )} 0 0 1 0 3 1 1 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +0 +0 +]] +[0 0 0 0 0 0 [[{()1 Sl()WB()SM(integer)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(integer)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(long\240long)ES( + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB()SM(nonPos)HY(i)HY(tiveIn)HY(te)HY(ger)YH()ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(non_posi)HY(tive)YH(_integer)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(long\240long)ES( + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB()SM(nonNeg)HY(a)HY(tiveIn)HY(te)HY(ger)YH()ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(non_nega)HY(tive)YH(_integer)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(unsigned long\240long)ES( + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB()SM(posi)HY(tiveIn)HY(te)HY(ger)YH()ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(posi)HY(tive)YH(_integer)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(unsigned long\240long)ES( + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB()SM(nega)HY(tiveIn)HY(te)HY(ger)YH()ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(nega)HY(tive)YH(_integer)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(long\240long)ES( + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB(boolean types + )} 0 0 1 0 3 1 1 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +0 +0 +]] +[0 0 0 0 0 0 [[{()1 Sl()WB()SM(boolean)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(boolean)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(bool)ES( + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB(fixed-preci)HY(sion)YH( float)HY(ing)YH(-point types + )} 0 0 1 0 3 1 1 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +0 +0 +]] +[0 0 0 0 0 0 [[{()1 Sl()WB()SM(float)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(float_)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(float)ES( + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB()SM(double)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(double_)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(double)ES( + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB(arbi)HY(trary)YH(-preci)HY(sion)YH( float)HY(ing)YH(-point types + )} 0 0 1 0 3 1 1 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +0 +0 +]] +[0 0 0 0 0 0 [[{()1 Sl()WB()SM(decimal)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(decimal)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(double)ES( + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB(string types + )} 0 0 1 0 3 1 1 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +0 +0 +]] +[0 0 0 0 0 0 [[{()1 Sl()WB()SM(string)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(string)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB(type derived from )SM(std::basic_string)ES( + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB()SM(normal)HY(ized)HY(String)YH()ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(normal)HY(ized)YH(_string)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB(type derived from )SM(string)ES( + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB()SM(token)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(token)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB(type\240derived\240from\240)SM(normal)HY(ized)YH(_string)ES( + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB()SM(Name)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(name)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB(type derived from )SM(token)ES( + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB()SM(NMTOKEN)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(nmtoken)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB(type derived from )SM(token)ES( + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB()SM(NMTO)HY(KENS)YH()ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(nmto)HY(kens)YH()ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB(type derived from )SM(sequence)ES( + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB()SM(NCName)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(ncname)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB(type derived from )SM(name)ES( + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB()SM(language)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(language)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB(type derived from )SM(token)ES( + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB(qual)HY(i)HY(fied)YH( name + )} 0 0 1 0 3 1 1 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +0 +0 +]] +[0 0 0 0 0 0 [[{()1 Sl()WB()SM(QName)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(qname)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()0 26 1 A(Section 2.5.4, "Mapping for )SM(QName)ES(")26 0 TN TL()Ec /AF f D( + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB(ID/IDREF types + )} 0 0 1 0 3 1 1 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +0 +0 +]] +[0 0 0 0 0 0 [[{()1 Sl()WB()SM(ID)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(id)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB(type derived from )SM(ncname)ES( + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB()SM(IDREF)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(idref)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()0 27 1 A(Section 2.5.5, "Mapping for )SM(IDREF)ES(")27 0 TN TL()Ec /AF f D( + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB()SM(IDREFS)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(idrefs)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB(type derived from )SM(sequence)ES( + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB(URI types + )} 0 0 1 0 3 1 1 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +0 +0 +]] +[0 0 0 0 0 0 [[{()1 Sl()WB()SM(anyURI)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(uri)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB(type derived from )SM(std::basic_string)ES( + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB(binary types + )} 0 0 1 0 3 1 1 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +0 +0 +]] +[0 0 1 0 0 0 [[{()1 Sl()WB()SM(base64Binary)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(base64_binary)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()0 28 1 A(Section 2.5.6, "Mapping for + )SM(base64Binary)ES( and )SM(hexBi)HY(nary)YH()ES(")28 0 TN TL()Ec /AF f D( + )} 0 0 0 0 1 2 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB()SM(hexBi)HY(nary)YH()ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(hex_binary)ES( + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +0 +]] +[0 0 0 0 0 0 [[{()1 Sl()WB(date/time types + )} 0 0 1 0 3 1 1 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +0 +0 +]] +[0 0 0 0 0 0 [[{()1 Sl()WB()SM(date)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(date)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()0 30 1 A(Section 2.5.8, "Mapping for + )SM(date)ES(")30 0 TN TL()Ec /AF f D( + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB()SM(date)HY(Time)YH()ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(date_time)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()0 31 1 A(Section 2.5.9, "Mapping for + )SM(date)HY(Time)YH()ES(")31 0 TN TL()Ec /AF f D( + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB()SM(dura)HY(tion)YH()ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(dura)HY(tion)YH()ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()0 32 1 A(Section 2.5.10, "Mapping for + )SM(dura)HY(tion)YH()ES(")32 0 TN TL()Ec /AF f D( + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB()SM(gDay)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(gday)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()0 33 1 A(Section 2.5.11, "Mapping for + )SM(gDay)ES(")33 0 TN TL()Ec /AF f D( + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB()SM(gMonth)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(gmonth)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()0 34 1 A(Section 2.5.12, "Mapping for + )SM(gMonth)ES(")34 0 TN TL()Ec /AF f D( + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB()SM(gMon)HY(th)HY(Day)YH()ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(gmonth_day)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()0 35 1 A(Section 2.5.13, "Mapping for + )SM(gMon)HY(th)HY(Day)YH()ES(")35 0 TN TL()Ec /AF f D( + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB()SM(gYear)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(gyear)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()0 36 1 A(Section 2.5.14, "Mapping for + )SM(gYear)ES(")36 0 TN TL()Ec /AF f D( + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB()SM(gYear)HY(Month)YH()ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(gyear_month)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()0 37 1 A(Section 2.5.15, "Mapping for + )SM(gYear)HY(Month)YH()ES(")37 0 TN TL()Ec /AF f D( + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB()SM(time)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(time)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()0 38 1 A(Section 2.5.16, "Mapping for + )SM(time)ES(")38 0 TN TL()Ec /AF f D( + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB(entity types + )} 0 0 1 0 3 1 1 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +0 +0 +]] +[0 0 0 0 0 0 [[{()1 Sl()WB()SM(ENTITY)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(entity)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB(type derived from )SM(name)ES( + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB()SM(ENTI)HY(TIES)YH()ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(enti)HY(ties)YH()ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB(type derived from )SM(sequence)ES( + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +]] +[[0 0 0 0 0 -1 0 0 1 8 5 0 0 9 5 {()} -1] + [[0 0 0 0 0 0 0][0 0 0 0 0 0 0][0 0 0 0 0 0 0][0 0 0 0 0 0 0][0 0 0 0 0 0 0][0 0 0 0 0 0 0]] + [[0 0 0 0 0 0 [[{()1 Sl()WB()} 0 0 1 0 1 1 1 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()} 0 0 1 0 1 1 1 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB(default)} 0 0 1 0 2 1 1 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +0 +[{()1 Sl()WB(fixed + )} 0 0 1 0 2 1 1 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +0 +]] +[0 0 1 0 0 0 [[{()1 Sl()WB(element)} 0 0 1 0 1 4 1 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB(not present)} 0 0 1 0 1 2 1 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB(optional)} 0 0 1 0 1 1 1 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB(required)} 0 0 1 0 1 1 1 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB(optional)} 0 0 1 0 1 1 1 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB(required + )} 0 0 1 0 1 1 1 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 1 0 0 0 [0 +0 +[{()1 Sl()WB(not present)} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB(invalid instance)} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB(not present)} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB(invalid instance + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 1 0 0 0 [0 +[{()1 Sl()WB(empty)} 0 0 1 0 1 1 1 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB(default value is used)} 0 0 0 0 2 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +0 +[{()1 Sl()WB(fixed value is used + )} 0 0 0 0 2 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +0 +]] +[0 0 0 0 0 0 [0 +[{()1 Sl()WB(value)} 0 0 1 0 1 1 1 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB(value is used)} 0 0 0 0 2 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +0 +[{()1 Sl()WB(value is used provided it's the same as fixed + )} 0 0 0 0 2 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +0 +]] +[0 0 1 0 0 0 [[{()1 Sl()WB(attribute)} 0 0 1 0 1 4 1 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB(not present)} 0 0 1 0 1 2 1 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB(optional)} 0 0 1 0 1 1 1 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB(required)} 0 0 1 0 1 1 1 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB(optional)} 0 0 1 0 1 1 1 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB(required + )} 0 0 1 0 1 1 1 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 1 0 0 0 [0 +0 +[{()1 Sl()WB(default value is used)} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB(invalid schema)} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB(fixed value is used)} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB(invalid instance + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 1 0 0 0 [0 +[{()1 Sl()WB(empty)} 0 0 1 0 1 1 1 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB(empty value is used)} 0 0 0 0 2 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +0 +[{()1 Sl()WB(empty value is used provided it's the same as fixed + )} 0 0 0 0 2 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +0 +]] +[0 0 0 0 0 0 [0 +[{()1 Sl()WB(value)} 0 0 1 0 1 1 1 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB(value is used)} 0 0 0 0 2 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +0 +[{()1 Sl()WB(value is used provided it's the same as fixed + )} 0 0 0 0 2 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +0 +]] +]] +] D +0 1 1{TS}for RC ZF +/Ba f D /BO 0 D Bs +/UR (/home/boris/work/xsd/xsd/doc/cxx/tree/manual/index.xhtml) D +/Ti (C++/Tree Mapping User Manual) D +/Au () D +/Df f D +/ME [(4.0.0)] D +Pt +/BO 0 D TC /Ba f D Bs /AU f D /UR () D RC ZF + tH WB +ND 1 gt{Ts 3 mul Np 0()0 C()BD(C++/Tree Mapping User Manual)ES()0 1 TN()EA()BN}if +1 NH le{97(1\240\240)1 C(Preface)WB 3 Sn()97 1 TN()EA()BN}if +2 NH le{98(1.1\240\240)2 C(About)WB 4 Sn( This Docu)HY(ment)YH()98 1 TN()EA()BN}if +2 NH le{99(1.2\240\240)2 C(More)WB 5 Sn( Infor)HY(ma)HY(tion)YH()99 1 TN()EA()BN}if +1 NH le{100(2\240\240)1 C(1)WB 6 Sn( Intro)HY(duc)HY(tion)YH()100 1 TN()EA()BN}if +1 NH le{101(3\240\240)1 C(2)WB 7 Sn( C++/Tree Mapping)101 1 TN()EA()BN}if +2 NH le{102(3.1\240\240)2 C(2.1)WB 8 Sn( Prelim)HY(i)HY(nary)YH( Infor)HY(ma)HY(tion)YH()102 1 TN()EA()BN}if +3 NH le{103(3.1.1\240\240)3 C(2.1.1)WB 9 Sn( C++ Stan)HY(dard)YH()103 1 TN()EA()BN}if +3 NH le{104(3.1.2\240\240)3 C(2.1.2)WB 10 Sn( Iden)HY(ti)HY(fiers)YH()104 1 TN()EA()BN}if +3 NH le{105(3.1.3\240\240)3 C(2.1.3)WB 11 Sn( Char)HY(ac)HY(ter)YH( Type and Encod)HY(ing)YH()105 1 TN()EA()BN}if +3 NH le{106(3.1.4\240\240)3 C(2.1.4)WB 12 Sn( XML Schema Names)HY(pace)YH()106 1 TN()EA()BN}if +3 NH le{107(3.1.5\240\240)3 C(2.1.5)WB 13 Sn( Anony)HY(mous)YH( Types)107 1 TN()EA()BN}if +2 NH le{108(3.2\240\240)2 C(2.2)WB 14 Sn( Error Handling)108 1 TN()EA()BN}if +3 NH le{109(3.2.1\240\240)3 C(2.2.1)WB 15 Sn( )SM(xml_schema::dupli)HY(cate)YH(_id)ES()109 1 TN()EA()BN}if +2 NH le{110(3.3\240\240)2 C(2.3)WB 16 Sn( Mapping for )SM(import)ES( and )SM(include)ES()110 1 TN()EA()BN}if +3 NH le{111(3.3.1\240\240)3 C(2.3.1)WB 17 Sn( Import)111 1 TN()EA()BN}if +3 NH le{112(3.3.2\240\240)3 C(2.3.2)WB 18 Sn( Inclu)HY(sion)YH( with Target Names)HY(pace)YH()112 1 TN()EA()BN}if +3 NH le{113(3.3.3\240\240)3 C(2.3.3)WB 19 Sn( Inclu)HY(sion)YH( without Target Names)HY(pace)YH()113 1 TN()EA()BN}if +2 NH le{114(3.4\240\240)2 C(2.4)WB 20 Sn( Mapping for Names)HY(paces)YH()114 1 TN()EA()BN}if +2 NH le{115(3.5\240\240)2 C(2.5)WB 21 Sn( Mapping for Built-in Data Types)115 1 TN()EA()BN}if +3 NH le{116(3.5.1\240\240)3 C(2.5.1)WB 23 Sn( Inher)HY(i)HY(tance)YH( from Built-in Data Types)116 1 TN()EA()BN}if +3 NH le{117(3.5.2\240\240)3 C(2.5.2)WB 24 Sn( Mapping for )SM(anyType)ES()117 1 TN()EA()BN}if +3 NH le{118(3.5.3\240\240)3 C(2.5.3)WB 25 Sn( Mapping for )SM(anySim)HY(ple)HY(Type)YH()ES()118 1 TN()EA()BN}if +3 NH le{119(3.5.4\240\240)3 C(2.5.4)WB 26 Sn( Mapping for )SM(QName)ES()119 1 TN()EA()BN}if +3 NH le{120(3.5.5\240\240)3 C(2.5.5)WB 27 Sn( Mapping for )SM(IDREF)ES()120 1 TN()EA()BN}if +3 NH le{121(3.5.6\240\240)3 C(2.5.6)WB 28 Sn( Mapping for )SM(base64Binary)ES( and + )SM(hexBi)HY(nary)YH()ES()121 1 TN()EA()BN}if +2 NH le{122(3.6\240\240)2 C(2.5.7)WB 29 Sn( Time Zone Repre)HY(sen)HY(ta)HY(tion)YH()122 1 TN()EA()BN}if +2 NH le{123(3.7\240\240)2 C(2.5.8)WB 30 Sn( Mapping for )SM(date)ES()123 1 TN()EA()BN}if +2 NH le{124(3.8\240\240)2 C(2.5.9)WB 31 Sn( Mapping for )SM(date)HY(Time)YH()ES()124 1 TN()EA()BN}if +2 NH le{125(3.9\240\240)2 C(2.5.10)WB 32 Sn( Mapping for )SM(dura)HY(tion)YH()ES()125 1 TN()EA()BN}if +2 NH le{126(3.10\240\240)2 C(2.5.11)WB 33 Sn( Mapping for )SM(gDay)ES()126 1 TN()EA()BN}if +2 NH le{127(3.11\240\240)2 C(2.5.12)WB 34 Sn( Mapping for )SM(gMonth)ES()127 1 TN()EA()BN}if +2 NH le{128(3.12\240\240)2 C(2.5.13)WB 35 Sn( Mapping for )SM(gMon)HY(th)HY(Day)YH()ES()128 1 TN()EA()BN}if +2 NH le{129(3.13\240\240)2 C(2.5.14)WB 36 Sn( Mapping for )SM(gYear)ES()129 1 TN()EA()BN}if +2 NH le{130(3.14\240\240)2 C(2.5.15)WB 37 Sn( Mapping for )SM(gYear)HY(Month)YH()ES()130 1 TN()EA()BN}if +2 NH le{131(3.15\240\240)2 C(2.5.16)WB 38 Sn( Mapping for )SM(time)ES()131 1 TN()EA()BN}if +2 NH le{132(3.16\240\240)2 C(2.6)WB 39 Sn( Mapping for Simple Types)132 1 TN()EA()BN}if +3 NH le{133(3.16.1\240\240)3 C(2.6.1)WB 40 Sn( Mapping for Deriva)HY(tion)YH( by Restric)HY(tion)YH()133 1 TN()EA()BN}if +3 NH le{134(3.16.2\240\240)3 C(2.6.2)WB 41 Sn( Mapping for Enumer)HY(a)HY(tions)YH()134 1 TN()EA()BN}if +3 NH le{135(3.16.3\240\240)3 C(2.6.3)WB 42 Sn( Mapping for Deriva)HY(tion)YH( by List)135 1 TN()EA()BN}if +3 NH le{136(3.16.4\240\240)3 C(2.6.4)WB 43 Sn( Mapping for Deriva)HY(tion)YH( by Union)136 1 TN()EA()BN}if +2 NH le{137(3.17\240\240)2 C(2.7)WB 44 Sn( Mapping for Complex Types)137 1 TN()EA()BN}if +3 NH le{138(3.17.1\240\240)3 C(2.7.1)WB 45 Sn( Mapping for Deriva)HY(tion)YH( by Exten)HY(sion)YH()138 1 TN()EA()BN}if +3 NH le{139(3.17.2\240\240)3 C(2.7.2)WB 46 Sn( Mapping for Deriva)HY(tion)YH( by Restric)HY(tion)YH()139 1 TN()EA()BN}if +2 NH le{140(3.18\240\240)2 C(2.8)WB 47 Sn( Mapping for Local Elements and Attributes)140 1 TN()EA()BN}if +3 NH le{141(3.18.1\240\240)3 C(2.8.1)WB 48 Sn( Mapping for Members with the One Cardi)HY(nal)HY(ity)YH( Class)141 1 TN()EA()BN}if +3 NH le{142(3.18.2\240\240)3 C(2.8.2)WB 49 Sn( Mapping for Members with the Optional Cardi)HY(nal)HY(ity)YH( Class)142 1 TN()EA()BN}if +3 NH le{143(3.18.3\240\240)3 C(2.8.3)WB 50 Sn( Mapping for Members with the Sequence Cardi)HY(nal)HY(ity)YH( Class)143 1 TN()EA()BN}if +3 NH le{144(3.18.4\240\240)3 C(2.8.4)WB 51 Sn( Element Order)144 1 TN()EA()BN}if +2 NH le{145(3.19\240\240)2 C(2.9)WB 52 Sn( Mapping for Global Elements)145 1 TN()EA()BN}if +3 NH le{146(3.19.1\240\240)3 C(2.9.1)WB 53 Sn( Element Types)146 1 TN()EA()BN}if +3 NH le{147(3.19.2\240\240)3 C(2.9.2)WB 54 Sn( Element Map)147 1 TN()EA()BN}if +2 NH le{148(3.20\240\240)2 C(2.10)WB 55 Sn( Mapping for Global Attributes)148 1 TN()EA()BN}if +2 NH le{149(3.21\240\240)2 C(2.11)WB 56 Sn( Mapping for )SM(xsi:type)ES( and Substi)HY(tu)HY(tion)YH( + Groups)149 1 TN()EA()BN}if +2 NH le{150(3.22\240\240)2 C(2.12)WB 57 Sn( Mapping for )SM(any)ES( and )SM(anyAt)HY(tribute)YH()ES()150 1 TN()EA()BN}if +3 NH le{151(3.22.1\240\240)3 C(2.12.1)WB 58 Sn( Mapping for )SM(any)ES( with the One Cardi)HY(nal)HY(ity)YH( Class)151 1 TN()EA()BN}if +3 NH le{152(3.22.2\240\240)3 C(2.12.2)WB 59 Sn( Mapping for )SM(any)ES( with the Optional Cardi)HY(nal)HY(ity)YH( Class)152 1 TN()EA()BN}if +3 NH le{153(3.22.3\240\240)3 C(2.12.3)WB 60 Sn( Mapping for )SM(any)ES( with the Sequence Cardi)HY(nal)HY(ity)YH( Class)153 1 TN()EA()BN}if +3 NH le{154(3.22.4\240\240)3 C(2.12.4)WB 61 Sn( Element Wild)HY(card)YH( Order)154 1 TN()EA()BN}if +3 NH le{155(3.22.5\240\240)3 C(2.12.5)WB 62 Sn( Mapping for )SM(anyAt)HY(tribute)YH()ES()155 1 TN()EA()BN}if +2 NH le{156(3.23\240\240)2 C(2.13)WB 63 Sn( Mapping for Mixed Content Models)156 1 TN()EA()BN}if +1 NH le{157(4\240\240)1 C(3)WB 64 Sn( Parsing)157 1 TN()EA()BN}if +2 NH le{158(4.1\240\240)2 C(3.1)WB 65 Sn( Initial)HY(iz)HY(ing)YH( the Xerces-C++ Runtime)158 1 TN()EA()BN}if +2 NH le{159(4.2\240\240)2 C(3.2)WB 66 Sn( Flags and Prop)HY(er)HY(ties)YH()159 1 TN()EA()BN}if +2 NH le{160(4.3\240\240)2 C(3.3)WB 67 Sn( Error Handling)160 1 TN()EA()BN}if +3 NH le{161(4.3.1\240\240)3 C(3.3.1)WB 68 Sn( )SM(xml_schema::parsing)ES()161 1 TN()EA()BN}if +3 NH le{162(4.3.2\240\240)3 C(3.3.2)WB 69 Sn( )SM(xml_schema::expected_element)ES()162 1 TN()EA()BN}if +3 NH le{163(4.3.3\240\240)3 C(3.3.3)WB 70 Sn( )SM(xml_schema::unex)HY(pected)YH(_element)ES()163 1 TN()EA()BN}if +3 NH le{164(4.3.4\240\240)3 C(3.3.4)WB 71 Sn( )SM(xml_schema::expected_attribute)ES()164 1 TN()EA()BN}if +3 NH le{165(4.3.5\240\240)3 C(3.3.5)WB 72 Sn( )SM(xml_schema::unex)HY(pected)YH(_enumer)HY(a)HY(tor)YH()ES()165 1 TN()EA()BN}if +3 NH le{166(4.3.6\240\240)3 C(3.3.6)WB 73 Sn( )SM(xml_schema::expected_text_content)ES()166 1 TN()EA()BN}if +3 NH le{167(4.3.7\240\240)3 C(3.3.7)WB 74 Sn( )SM(xml_schema::no_type_info)ES()167 1 TN()EA()BN}if +3 NH le{168(4.3.8\240\240)3 C(3.3.8)WB 75 Sn( )SM(xml_schema::not_derived)ES()168 1 TN()EA()BN}if +3 NH le{169(4.3.9\240\240)3 C(3.3.9)WB 76 Sn( )SM(xml_schema::no_prefix_mapping)ES()169 1 TN()EA()BN}if +2 NH le{170(4.4\240\240)2 C(3.4)WB 77 Sn( Reading from a Local File or URI)170 1 TN()EA()BN}if +2 NH le{171(4.5\240\240)2 C(3.5)WB 78 Sn( Reading from )SM(std::istream)ES()171 1 TN()EA()BN}if +2 NH le{172(4.6\240\240)2 C(3.6)WB 79 Sn( Reading from )SM(xercesc::Input)HY(Source)YH()ES()172 1 TN()EA()BN}if +2 NH le{173(4.7\240\240)2 C(3.7)WB 80 Sn( Reading from DOM)173 1 TN()EA()BN}if +1 NH le{174(5\240\240)1 C(4)WB 81 Sn( Seri)HY(al)HY(iza)HY(tion)YH()174 1 TN()EA()BN}if +2 NH le{175(5.1\240\240)2 C(4.1)WB 82 Sn( Initial)HY(iz)HY(ing)YH( the Xerces-C++ Runtime)175 1 TN()EA()BN}if +2 NH le{176(5.2\240\240)2 C(4.2)WB 83 Sn( Names)HY(pace)YH( Infomap and Char)HY(ac)HY(ter)YH( Encod)HY(ing)YH()176 1 TN()EA()BN}if +2 NH le{177(5.3\240\240)2 C(4.3)WB 84 Sn( Flags)177 1 TN()EA()BN}if +2 NH le{178(5.4\240\240)2 C(4.4)WB 85 Sn( Error Handling)178 1 TN()EA()BN}if +3 NH le{179(5.4.1\240\240)3 C(4.4.1)WB 86 Sn( )SM(xml_schema::seri)HY(al)HY(iza)HY(tion)YH()ES()179 1 TN()EA()BN}if +3 NH le{180(5.4.2\240\240)3 C(4.4.2)WB 87 Sn( )SM(xml_schema::unex)HY(pected)YH(_element)ES()180 1 TN()EA()BN}if +3 NH le{181(5.4.3\240\240)3 C(4.4.3)WB 88 Sn( )SM(xml_schema::no_type_info)ES()181 1 TN()EA()BN}if +2 NH le{182(5.5\240\240)2 C(4.5)WB 89 Sn( Seri)HY(al)HY(iz)HY(ing)YH( to )SM(std::ostream)ES()182 1 TN()EA()BN}if +2 NH le{183(5.6\240\240)2 C(4.6)WB 90 Sn( Seri)HY(al)HY(iz)HY(ing)YH( to )SM(xercesc::XMLFor)HY(mat)HY(Tar)HY(get)YH()ES()183 1 TN()EA()BN}if +2 NH le{184(5.7\240\240)2 C(4.7)WB 91 Sn( Seri)HY(al)HY(iz)HY(ing)YH( to DOM)184 1 TN()EA()BN}if +1 NH le{185(6\240\240)1 C(5)WB 92 Sn( Addi)HY(tional)YH( Func)HY(tion)HY(al)HY(ity)YH()185 1 TN()EA()BN}if +2 NH le{186(6.1\240\240)2 C(5.1)WB 93 Sn( DOM Asso)HY(ci)HY(a)HY(tion)YH()186 1 TN()EA()BN}if +2 NH le{187(6.2\240\240)2 C(5.2)WB 94 Sn( Binary Seri)HY(al)HY(iza)HY(tion)YH()187 1 TN()EA()BN}if +1 NH le{188(7\240\240)1 C(Appendix)WB 95 Sn( A \236 Default and Fixed Values)188 1 TN()EA()BN}if +/OU t D /Cb Db D NP Ep ET +/Cb Db D /Ct [16#00 16#00 16#00] D /Cl [16#00 16#00 16#00] D /CL -1 D Ct Sc + +/Ba f D /BO 0 D Bs +/UR (/home/boris/work/xsd/xsd/doc/cxx/tree/manual/index.xhtml) D +/Ti (C++/Tree Mapping User Manual) D +/Au () D +/Df f D +/ME [(4.0.0)] D + +NP RC ZF +()1 Sl()WB 0 Sn( + +)BR()WB 1 Sn( )BR()WB 2 Sn( + + + )0 1 0 H(Preface)WB 97 Sn()WB 3 Sn()EA()EH( + + )0 2 1 H(About)WB 98 Sn()WB 4 Sn( This Docu)HY(ment)YH()EA()EH( + + )0 P(This docu)HY(ment)YH( describes the mapping of W3C XML Schema + to the C++ program)HY(ming)YH( language as imple)HY(mented)YH( by + )R1 2 A(CodeSyn)HY(the)HY(sis)YH( + XSD)EA( - an XML Schema to C++ data binding compiler. The mapping + repre)HY(sents)YH( infor)HY(ma)HY(tion)YH( stored in XML instance docu)HY(ments)YH( as a + stat)HY(i)HY(cally)YH(-typed, tree-like in-memory data struc)HY(ture)YH( and is + called C++/Tree. + )EP( + + )0 P(Revi)HY(sion)YH( 4.0.0)BR( + This revi)HY(sion)YH( of the manual describes the C++/Tree + mapping as imple)HY(mented)YH( by CodeSyn)HY(the)HY(sis)YH( XSD version 4.0.0. + )EP( + + )0 P(This docu)HY(ment)YH( is avail)HY(able)YH( in the follow)HY(ing)YH( formats: + )R2 2 A(XHTML)EA(, + )R3 2 A(PDF)EA(, and + )R4 2 A(PostScript)EA(.)EP( + + )0 2 2 H(More)WB 99 Sn()WB 5 Sn( Infor)HY(ma)HY(tion)YH()EA()EH( + + )0 P(Beyond this manual, you may also find the follow)HY(ing)YH( sources of + infor)HY(ma)HY(tion)YH( useful:)EP( + + )UL( )-1 LI()R5 2 A(C++/Tree + Mapping Getting Started Guide)EA( + + )-1 LI()R6 2 A(C++/Tree + Mapping Customiza)HY(tion)YH( Guide)EA( + + )-1 LI()R7 2 A(C++/Tree + Mapping Frequently Asked Ques)HY(tions)YH( \201FAQ\202)EA( + + )-1 LI()R8 2 A(XSD + Compiler Command Line Manual)EA( + + )-1 LI(The )SM(exam)HY(ples)YH(/cxx/tree/)ES( direc)HY(tory)YH( in the XSD + distri)HY(bu)HY(tion)YH( contains a collec)HY(tion)YH( of exam)HY(ples)YH( and a README + file with an overview of each example. + + )-1 LI(The )SM(README)ES( file in the XSD distri)HY(bu)HY(tion)YH( explains + how to compile the exam)HY(ples)YH( on various plat)HY(forms)YH(. + + )-1 LI(The )R9 2 A(xsd-users)EA( + mailing list is a place to ask ques)HY(tions)YH(. Further)HY(more)YH( the + )R10 2 A(archives)EA( + may already have answers to some of your ques)HY(tions)YH(. + )LU( + + + )0 1 3 H(1)WB 100 Sn()WB 6 Sn( Intro)HY(duc)HY(tion)YH()EA()EH( + + )0 P(C++/Tree is a W3C XML Schema to C++ mapping that repre)HY(sents)YH( the + data stored in XML as a stat)HY(i)HY(cally)YH(-typed, vocab)HY(u)HY(lary)YH(-specific + object model. Based on a formal descrip)HY(tion)YH( of an XML vocab)HY(u)HY(lary)YH( + \201schema\202, the C++/Tree mapping produces a tree-like data struc)HY(ture)YH( + suit)HY(able)YH( for in-memory process)HY(ing)YH( as well as XML parsing and + seri)HY(al)HY(iza)HY(tion)YH( code.)EP( + + )0 P(A typical appli)HY(ca)HY(tion)YH( that processes XML docu)HY(ments)YH( usually + performs the follow)HY(ing)YH( three steps: it first reads \201parses\202 an XML + instance docu)HY(ment)YH( to an object model, it then performs + some useful compu)HY(ta)HY(tions)YH( on that model which may involve + modi)HY(fi)HY(ca)HY(tion)YH( of the model, and finally it may write \201seri)HY(al)HY(ize)YH(\202 + the modi)HY(fied)YH( object model back to XML. + )EP( + + )0 P(The C++/Tree mapping consists of C++ types that repre)HY(sent)YH( the + given vocab)HY(u)HY(lary)YH( \201)0 7 1 A(Chapter 2, "C++/Tree Mapping")7 0 TN TL()Ec /AF f D(\202, + a set of parsing func)HY(tions)YH( that convert XML docu)HY(ments)YH( to + a tree-like in-memory data struc)HY(ture)YH( \201)0 64 1 A(Chapter 3, + "Parsing")64 0 TN TL()Ec /AF f D(\202, and a set of seri)HY(al)HY(iza)HY(tion)YH( func)HY(tions)YH( that convert + the object model back to XML \201)0 81 1 A(Chapter 4, + "Seri)HY(al)HY(iza)HY(tion)YH(")81 0 TN TL()Ec /AF f D(\202. Further)HY(more)YH(, the mapping provides a number + of addi)HY(tional)YH( features, such as DOM asso)HY(ci)HY(a)HY(tion)YH( and binary + seri)HY(al)HY(iza)HY(tion)YH(, that can be useful in some appli)HY(ca)HY(tions)YH( + \201)0 92 1 A(Chapter 5, "Addi)HY(tional)YH( Func)HY(tion)HY(al)HY(ity)YH(")92 0 TN TL()Ec /AF f D(\202. + )EP( + + + + + + )0 1 4 H(2)WB 101 Sn()WB 7 Sn( C++/Tree Mapping)EA()EH( + + )0 2 5 H(2.1)WB 102 Sn()WB 8 Sn( Prelim)HY(i)HY(nary)YH( Infor)HY(ma)HY(tion)YH()EA()EH( + + )0 3 6 H(2.1.1)WB 103 Sn()WB 9 Sn( C++ Stan)HY(dard)YH()EA()EH( + + )0 P(The C++/Tree mapping provides support for ISO/IEC C++ 1998/2003 \201C++98\202 + and ISO/IEC C++ 2011 \201C++11\202. To select the C++ stan)HY(dard)YH( for the + gener)HY(ated)YH( code we use the )SM(--std)ES( XSD compiler command + line option. While the major)HY(ity)YH( of the exam)HY(ples)YH( in this manual use + C++98, support for the new func)HY(tion)HY(al)HY(ity)YH( and library compo)HY(nents)YH( + intro)HY(duced)YH( in C++11 are discussed through)HY(out)YH( the docu)HY(ment)YH(.)EP( + + )0 3 7 H(2.1.2)WB 104 Sn()WB 10 Sn( Iden)HY(ti)HY(fiers)YH()EA()EH( + + )0 P(XML Schema names may happen to be reserved C++ keywords or contain + char)HY(ac)HY(ters)YH( that are illegal in C++ iden)HY(ti)HY(fiers)YH(. To avoid C++ compi)HY(la)HY(tion)YH( + prob)HY(lems)YH(, such names are changed \201escaped\202 when mapped to C++. If an + XML Schema name is a C++ keyword, the "_" suffix is added to it. All + char)HY(ac)HY(ter)YH( of an XML Schema name that are not allowed in C++ iden)HY(ti)HY(fiers)YH( + are replaced with "_". + )EP( + + )0 P(For example, XML Schema name )SM(try)ES( will be mapped to + C++ iden)HY(ti)HY(fier)YH( )SM(try_)ES(. Simi)HY(larly)YH(, XML Schema name + )SM(strange.na-me)ES( will be mapped to C++ iden)HY(ti)HY(fier)YH( + )SM(strange_na_me)ES(. + )EP( + + )0 P(Further)HY(more)YH(, conflicts between type names and func)HY(tion)YH( names in the + same scope are resolved using name escap)HY(ing)YH(. Such conflicts include + both a global element \201which is mapped to a set of parsing and/or + seri)HY(al)HY(iza)HY(tion)YH( func)HY(tions)YH( or element types, see )0 52 1 A(Section + 2.9, "Mapping for Global Elements")52 0 TN TL()Ec /AF f D(\202 and a global type sharing the + same name as well as a local element or attribute inside a type having + the same name as the type itself.)EP( + + )0 P(For example, if we had a global type )SM(catalog)ES( + and a global element with the same name then the type would be + mapped to a C++ class with name )SM(catalog)ES( while the + parsing func)HY(tions)YH( corre)HY(spond)HY(ing)YH( to the global element would have + their names escaped as )SM(catalog_)ES(. + )EP( + + )0 P(By default the mapping uses the so-called K&R \201Kernighan and + Ritchie\202 iden)HY(ti)HY(fier)YH( naming conven)HY(tion)YH( which is also used through)HY(out)YH( + this manual. In this conven)HY(tion)YH( both type and func)HY(tion)YH( names are in + lower case and words are sepa)HY(rated)YH( by under)HY(scores)YH(. If your appli)HY(ca)HY(tion)YH( + code or schemas use a differ)HY(ent)YH( nota)HY(tion)YH(, you may want to change the + naming conven)HY(tion)YH( used by the mapping for consis)HY(tency)YH(. + The compiler supports a set of widely-used naming conven)HY(tions)YH( + that you can select with the )SM(--type-naming)ES( and + )SM(--func)HY(tion)YH(-naming)ES( options. You can also further + refine one of the prede)HY(fined)YH( conven)HY(tions)YH( or create a completely + custom naming scheme by using the )SM(--*-regex)ES( options. + For more detailed infor)HY(ma)HY(tion)YH( on these options refer to the NAMING + CONVEN)HY(TION)YH( section in the )R8 2 A(XSD + Compiler Command Line Manual)EA(.)EP( + + )0 3 8 H(2.1.3)WB 105 Sn()WB 11 Sn( Char)HY(ac)HY(ter)YH( Type and Encod)HY(ing)YH()EA()EH( + + )0 P(The code that imple)HY(ments)YH( the mapping, depend)HY(ing)YH( on the + )SM(--char-type)ES( option, is gener)HY(ated)YH( using either + )SM(char)ES( or )SM(wchar_t)ES( as the char)HY(ac)HY(ter)YH( + type. In this docu)HY(ment)YH( code samples use symbol )SM(C)ES( + to refer to the char)HY(ac)HY(ter)YH( type you have selected when trans)HY(lat)HY(ing)YH( + your schemas, for example )SM(std::basic_string)ES(. + )EP( + + )0 P(Another aspect of the mapping that depends on the char)HY(ac)HY(ter)YH( type + is char)HY(ac)HY(ter)YH( encod)HY(ing)YH(. For the )SM(char)ES( char)HY(ac)HY(ter)YH( type + the default encod)HY(ing)YH( is UTF-8. Other supported encod)HY(ings)YH( are + ISO-8859-1, Xerces-C++ Local Code Page \201LPC\202, as well as + custom encod)HY(ings)YH( and can be selected with the + )SM(--char-encod)HY(ing)YH()ES( command line option.)EP( + + )0 P(For the )SM(wchar_t)ES( char)HY(ac)HY(ter)YH( type the encod)HY(ing)YH( is + auto)HY(mat)HY(i)HY(cally)YH( selected between UTF-16 and UTF-32/UCS-4 depend)HY(ing)YH( + on the size of the )SM(wchar_t)ES( type. On some plat)HY(forms)YH( + \201for example, Windows with Visual C++ and AIX with IBM XL C++\202 + )SM(wchar_t)ES( is 2 bytes long. For these plat)HY(forms)YH( the + encod)HY(ing)YH( is UTF-16. On other plat)HY(forms)YH( )SM(wchar_t)ES( is 4 bytes + long and UTF-32/UCS-4 is used.)EP( + + )0 3 9 H(2.1.4)WB 106 Sn()WB 12 Sn( XML Schema Names)HY(pace)YH()EA()EH( + + )0 P(The mapping relies on some prede)HY(fined)YH( types, classes, and func)HY(tions)YH( + that are logi)HY(cally)YH( defined in the XML Schema names)HY(pace)YH( reserved for + the XML Schema language \201)SM(http://www.w3.org/2001/XMLSchema)ES(\202. + By default, this names)HY(pace)YH( is mapped to C++ names)HY(pace)YH( + )SM(xml_schema)ES(. It is auto)HY(mat)HY(i)HY(cally)YH( acces)HY(si)HY(ble)YH( + from a C++ compi)HY(la)HY(tion)YH( unit that includes a header file gener)HY(ated)YH( + from an XML Schema defi)HY(ni)HY(tion)YH(. + )EP( + + )0 P(Note that, if desired, the default mapping of this names)HY(pace)YH( can be + changed as described in )0 20 1 A(Section 2.4, "Mapping for + Names)HY(paces)YH(")20 0 TN TL()Ec /AF f D(. + )EP( + + + )0 3 10 H(2.1.5)WB 107 Sn()WB 13 Sn( Anony)HY(mous)YH( Types)EA()EH( + + )0 P(For the purpose of code gener)HY(a)HY(tion)YH(, anony)HY(mous)YH( types defined in + XML Schema are auto)HY(mat)HY(i)HY(cally)YH( assigned names that are derived + from enclos)HY(ing)YH( attributes and elements. Other)HY(wise)YH(, such types + follows stan)HY(dard)YH( mapping rules for simple and complex type + defi)HY(ni)HY(tions)YH( \201see )0 39 1 A(Section 2.6, "Mapping for Simple Types")39 0 TN TL()Ec /AF f D( + and )0 44 1 A(Section 2.7, "Mapping for Complex Types")44 0 TN TL()Ec /AF f D(\202. + For example, in the follow)HY(ing)YH( schema frag)HY(ment)YH(: + )EP( + + ) 5 23 PR( + + ... + +)RP( + + )0 P(The anony)HY(mous)YH( type defined inside element )SM(object)ES( will + be given name )SM(object)ES(. The compiler has a number of + options that control the process of anony)HY(mous)YH( type naming. For more + infor)HY(ma)HY(tion)YH( refer to the )R8 2 A(XSD + Compiler Command Line Manual)EA(.)EP( + + + )0 2 11 H(2.2)WB 108 Sn()WB 14 Sn( Error Handling)EA()EH( + + )0 P(The mapping uses the C++ excep)HY(tion)YH( handling mech)HY(a)HY(nism)YH( as a primary way + of report)HY(ing)YH( error condi)HY(tions)YH(. All excep)HY(tions)YH( that are spec)HY(i)HY(fied)YH( in + this mapping derive from )SM(xml_schema::excep)HY(tion)YH()ES( which + itself is derived from )SM(std::excep)HY(tion)YH()ES(: + )EP( + + ) 14 60 PR(struct exception: virtual std::exception +{ + friend + std::basic_ostream& + operator<< \201std::basic_ostream& os, const exception& e\202 + { + e.print \201os\202; + return os; + } + +protected: + virtual void + print \201std::basic_ostream&\202 const = 0; +};)RP( + + )0 P(The excep)HY(tion)YH( hier)HY(ar)HY(chy)YH( supports "virtual" )SM(oper)HY(a)HY(tor)YH(<<)ES( + which allows you to obtain diag)HY(nos)HY(tics)YH( corre)HY(spond)HY(ing)YH( to the thrown + excep)HY(tion)YH( using the base excep)HY(tion)YH( inter)HY(face)YH(. For example:)EP( + + ) 8 38 PR(try +{ + ... +} +catch \201const xml_schema::exception& e\202 +{ + cerr << e << endl; +})RP( + + )0 P(The follow)HY(ing)YH( sub-sections describe excep)HY(tions)YH( thrown by the + types that consti)HY(tute)YH( the object model. + )0 67 1 A(Section 3.3, "Error Handling")67 0 TN TL()Ec /AF f D( of + )0 64 1 A(Chapter 3, "Parsing")64 0 TN TL()Ec /AF f D( describes excep)HY(tions)YH( + and error handling mech)HY(a)HY(nisms)YH( specific to the parsing func)HY(tions)YH(. + )0 85 1 A(Section 4.4, "Error Handling")85 0 TN TL()Ec /AF f D( of + )0 81 1 A(Chapter 4, "Seri)HY(al)HY(iza)HY(tion)YH(")81 0 TN TL()Ec /AF f D( describes excep)HY(tions)YH( + and error handling mech)HY(a)HY(nisms)YH( specific to the seri)HY(al)HY(iza)HY(tion)YH( func)HY(tions)YH(. + )EP( + + + )0 3 12 H(2.2.1)WB 109 Sn()WB 15 Sn( )SM(xml_schema::dupli)HY(cate)YH(_id)ES()EA()EH( + + ) 10 48 PR(struct duplicate_id: virtual exception +{ + duplicate_id \201const std::basic_string& id\202; + + const std::basic_string& + id \201\202 const; + + virtual const char* + what \201\202 const throw \201\202; +};)RP( + + )0 P(The )SM(xml_schema::dupli)HY(cate)YH(_id)ES( is thrown when + a conflict)HY(ing)YH( instance of )SM(xml_schema::id)ES( \201see + )0 21 1 A(Section 2.5, "Mapping for Built-in Data Types")21 0 TN TL()Ec /AF f D(\202 + is added to a tree. The offend)HY(ing)YH( ID value can be obtained using + the )SM(id)ES( func)HY(tion)YH(. + )EP( + + )0 2 13 H(2.3)WB 110 Sn()WB 16 Sn( Mapping for )SM(import)ES( and )SM(include)ES()EA()EH( + + )0 3 14 H(2.3.1)WB 111 Sn()WB 17 Sn( Import)EA()EH( + + )0 P(The XML Schema )SM(import)ES( element is mapped to the C++ + Prepro)HY(ces)HY(sor)YH( )SM(#include)ES( direc)HY(tive)YH(. The value of + the )SM(schemaLo)HY(ca)HY(tion)YH()ES( attribute is used to derive + the name of the header file that appears in the )SM(#include)ES( + direc)HY(tive)YH(. For instance: + )EP( + + ) 2 53 PR()RP( + + )0 P(is mapped to:)EP( + + ) 1 19 PR(#include "test.hxx")RP( + + )0 P(Note that you will need to compile imported schemas sepa)HY(rately)YH( + in order to produce corre)HY(spond)HY(ing)YH( header files.)EP( + + )0 3 15 H(2.3.2)WB 112 Sn()WB 18 Sn( Inclu)HY(sion)YH( with Target Names)HY(pace)YH()EA()EH( + + )0 P(The XML Schema )SM(include)ES( element which refers to a schema + with a target names)HY(pace)YH( or appears in a schema without a target names)HY(pace)YH( + follows the same mapping rules as the )SM(import)ES( element, + see )0 17 1 A(Section 2.3.1, "Import")17 0 TN TL()Ec /AF f D(. + )EP( + + )0 3 16 H(2.3.3)WB 113 Sn()WB 19 Sn( Inclu)HY(sion)YH( without Target Names)HY(pace)YH()EA()EH( + + )0 P(For the XML Schema )SM(include)ES( element which refers to a schema + without a target names)HY(pace)YH( and appears in a schema with a target + names)HY(pace)YH( \201such inclu)HY(sion)YH( some)HY(times)YH( called "chameleon inclu)HY(sion)YH("\202, + decla)HY(ra)HY(tions)YH( and defi)HY(ni)HY(tions)YH( from the included schema are gener)HY(ated)YH( + in-line in the names)HY(pace)YH( of the includ)HY(ing)YH( schema as if they were + declared and defined there verba)HY(tim)YH(. For example, consider the + follow)HY(ing)YH( two schemas: + )EP( + + ) 11 60 PR(<-- common.xsd --> + + + ... + + + +<-- test.xsd --> + + +)RP( + + )0 P(The frag)HY(ment)YH( of inter)HY(est)YH( from the gener)HY(ated)YH( header file for + )SM(text.xsd)ES( would look like this:)EP( + + ) 8 14 PR(// test.hxx +namespace test +{ + class type + { + ... + }; +})RP( + + )0 2 17 H(2.4)WB 114 Sn()WB 20 Sn( Mapping for Names)HY(paces)YH()EA()EH( + + )0 P(An XML Schema names)HY(pace)YH( is mapped to one or more nested C++ + names)HY(paces)YH(. XML Schema names)HY(paces)YH( are iden)HY(ti)HY(fied)YH( by URIs. + By default, a names)HY(pace)YH( URI is mapped to a sequence of + C++ names)HY(pace)YH( names by remov)HY(ing)YH( the proto)HY(col)YH( and host parts + and split)HY(ting)YH( the rest into a sequence of names with ')SM(/)ES(' + as the name sepa)HY(ra)HY(tor)YH(. For instance: + )EP( + + ) 3 67 PR( + ... +)RP( + + )0 P(is mapped to:)EP( + + ) 7 16 PR(namespace system +{ + namespace test + { + ... + } +})RP( + + )0 P(The default mapping of names)HY(pace)YH( URIs to C++ names)HY(pace)YH( names can be + altered using the )SM(--names)HY(pace)YH(-map)ES( and + )SM(--names)HY(pace)YH(-regex)ES( options. See the + )R8 2 A(XSD + Compiler Command Line Manual)EA( for more infor)HY(ma)HY(tion)YH(. + )EP( + + )0 2 18 H(2.5)WB 115 Sn()WB 21 Sn( Mapping for Built-in Data Types)EA()EH( + + )0 P(The mapping of XML Schema built-in data types to C++ types is + summa)HY(rized)YH( in the table below.)EP( + + + )0 PT( + + )0 P(All XML Schema built-in types are mapped to C++ classes that are + derived from the )SM(xml_schema::simple_type)ES( class except + where the mapping is to a funda)HY(men)HY(tal)YH( C++ type.)EP( + + )0 P(The )SM(sequence)ES( class template is defined in an + imple)HY(men)HY(ta)HY(tion)YH(-specific names)HY(pace)YH(. It conforms to the + sequence inter)HY(face)YH( as defined by the ISO/ANSI Stan)HY(dard)YH( for + C++ \201ISO/IEC 14882:1998, Section 23.1.1, "Sequences"\202. + Prac)HY(ti)HY(cally)YH(, this means that you can treat such a sequence + as if it was )SM(std::vector)ES(. One notable exten)HY(sion)YH( + to the stan)HY(dard)YH( inter)HY(face)YH( that is avail)HY(able)YH( only for + sequences of non-funda)HY(men)HY(tal)YH( C++ types is the addi)HY(tion)YH( of + the over)HY(loaded)YH( )SM(push_back)ES( and )SM(insert)ES( + member func)HY(tions)YH( which instead of the constant refer)HY(ence)YH( + to the element type accept auto)HY(matic)YH( pointer \201)SM(std::auto_ptr)ES( + or )SM(std::unique_ptr)ES(, depend)HY(ing)YH( on the C++ stan)HY(dard)YH( + selected\202 to the element type. These func)HY(tions)YH( assume owner)HY(ship)YH( + of the pointed to object and reset the passed auto)HY(matic)YH( pointer. + )EP( + + )0 3 19 H(2.5.1)WB 116 Sn()WB 23 Sn( Inher)HY(i)HY(tance)YH( from Built-in Data Types)EA()EH( + + )0 P(In cases where the mapping calls for an inher)HY(i)HY(tance)YH( from a built-in + type which is mapped to a funda)HY(men)HY(tal)YH( C++ type, a proxy type is + used instead of the funda)HY(men)HY(tal)YH( C++ type \201C++ does not allow + inher)HY(i)HY(tance)YH( from funda)HY(men)HY(tal)YH( types\202. For instance:)EP( + + ) 3 27 PR( + +)RP( + + )0 P(is mapped to:)EP( + + ) 4 42 PR(class my_int: public fundamental_base +{ + ... +};)RP( + + )0 P(The )SM(funda)HY(men)HY(tal)YH(_base)ES( class template provides a close + emula)HY(tion)YH( \201though not exact\202 of a funda)HY(men)HY(tal)YH( C++ type. + It is defined in an imple)HY(men)HY(ta)HY(tion)YH(-specific names)HY(pace)YH( and has the + follow)HY(ing)YH( inter)HY(face)YH(:)EP( + + ) 22 44 PR(template +class fundamental_base: public simple_type +{ +public: + fundamental_base \201\202; + fundamental_base \201X\202 + fundamental_base \201const fundamental_base&\202 + +public: + fundamental_base& + operator= \201const X&\202; + +public: + operator const X & \201\202 const; + operator X& \201\202; + + template + operator Y \201\202 const; + + template + operator Y \201\202; +};)RP( + + )0 3 20 H(2.5.2)WB 117 Sn()WB 24 Sn( Mapping for )SM(anyType)ES()EA()EH( + + )0 P(The XML Schema )SM(anyType)ES( built-in data type is mapped to the + )SM(xml_schema::type)ES( C++ class:)EP( + + ) 53 48 PR(class type +{ +public: + virtual + ~type \201\202; + + type \201\202; + type \201const type&\202; + + type& + operator= \201const type&\202; + + virtual type* + _clone \201\202 const; + + // anyType DOM content. + // +public: + typedef element_optional dom_content_optional; + + const dom_content_optional& + dom_content \201\202 const; + + dom_content_optional& + dom_content \201\202; + + void + dom_content \201const xercesc::DOMElement&\202; + + void + dom_content \201xercesc::DOMElement*\202;)WR( + + void + dom_content \201const dom_content_optional&\202; + + const xercesc::DOMDocument& + dom_content_document \201\202 const; + + xercesc::DOMDocument& + dom_content_document \201\202; + + bool + null_content \201\202 const; + + // DOM association. + // +public: + const xercesc::DOMNode* + _node \201\202 const; + + xercesc::DOMNode* + _node \201\202; +};)RP( + + )0 P(When )SM(xml_schema::type)ES( is used to create an instance + \201as opposed to being a base of a derived type\202, it repre)HY(sents)YH( + the XML Schema )SM(anyType)ES( type. )SM(anyType)ES( + allows any attributes and any content in any order. In the + C++/Tree mapping this content can be repre)HY(sented)YH( as a DOM + frag)HY(ment)YH(, similar to XML Schema wild)HY(cards)YH( \201)0 57 1 A(Section + 2.12, "Mapping for )SM(any)ES( and + )SM(anyAt)HY(tribute)YH()ES(")57 0 TN TL()Ec /AF f D(\202.)EP( + + )0 P(To enable auto)HY(matic)YH( extrac)HY(tion)YH( of )SM(anyType)ES( content + during parsing, the )SM(--gener)HY(ate)YH(-any-type)ES( option must be + spec)HY(i)HY(fied)YH(. Because the DOM API is used to access such content, the + Xerces-C++ runtime should be initial)HY(ized)YH( by the appli)HY(ca)HY(tion)YH( prior to + parsing and should remain initial)HY(ized)YH( for the life)HY(time)YH( of objects + with the DOM content. For more infor)HY(ma)HY(tion)YH( on the Xerces-C++ runtime + initial)HY(iza)HY(tion)YH( see )0 65 1 A(Section 3.1, "Initial)HY(iz)HY(ing)YH( the + Xerces-C++ Runtime")65 0 TN TL()Ec /AF f D(.)EP( + + )0 P(The DOM content is stored as the optional DOM element container + and the DOM content acces)HY(sors)YH( and modi)HY(fiers)YH( presented above are + iden)HY(ti)HY(cal)YH( to those gener)HY(ated)YH( for an optional element wild)HY(card)YH(. + Refer to )0 59 1 A(Section 2.12.2, "Mapping for )SM(any)ES( + with the Optional Cardi)HY(nal)HY(ity)YH( Class")59 0 TN TL()Ec /AF f D( for details on their + seman)HY(tics)YH(.)EP( + + )0 P(The )SM(dom_content_docu)HY(ment)YH(\201\202)ES( func)HY(tion)YH( returns the + DOM docu)HY(ment)YH( used to store the raw XML content corre)HY(spond)HY(ing)YH( + to the )SM(anyType)ES( instance. It is equiv)HY(a)HY(lent)YH( to the + )SM(dom_docu)HY(ment)YH(\201\202)ES( func)HY(tion)YH( gener)HY(ated)YH( for types + with wild)HY(cards)YH(.)EP( + + )0 P(The )SM(null_content\201\202)ES( acces)HY(sor)YH( is an opti)HY(miza)HY(tion)YH( func)HY(tion)YH( + that allows us to check for the lack of content without actu)HY(ally)YH( + creat)HY(ing)YH( its empty repre)HY(sen)HY(ta)HY(tion)YH(, that is, empty DOM docu)HY(ment)YH( for + )SM(anyType)ES( or empty string for )SM(anySim)HY(ple)HY(Type)YH()ES( + \201see the follow)HY(ing)YH( section for details on )SM(anySim)HY(ple)HY(Type)YH()ES(\202.)EP( + + )0 P(For more infor)HY(ma)HY(tion)YH( on DOM asso)HY(ci)HY(a)HY(tion)YH( refer to + )0 93 1 A(Section 5.1, "DOM Asso)HY(ci)HY(a)HY(tion)YH(")93 0 TN TL()Ec /AF f D(.)EP( + + )0 3 21 H(2.5.3)WB 118 Sn()WB 25 Sn( Mapping for )SM(anySim)HY(ple)HY(Type)YH()ES()EA()EH( + + )0 P(The XML Schema )SM(anySim)HY(ple)HY(Type)YH()ES( built-in data type is mapped + to the )SM(xml_schema::simple_type)ES( C++ class:)EP( + + ) 27 45 PR(class simple_type: public type +{ +public: + simple_type \201\202; + simple_type \201const C*\202; + simple_type \201const std::basic_string&\202; + + simple_type \201const simple_type&\202; + + simple_type& + operator= \201const simple_type&\202; + + virtual simple_type* + _clone \201\202 const; + + // anySimpleType text content. + // +public: + const std::basic_string& + text_content \201\202 const; + + std::basic_string& + text_content \201\202; + + void + text_content \201const std::basic_string&\202; +};)RP( + + )0 P(When )SM(xml_schema::simple_type)ES( is used to create an instance + \201as opposed to being a base of a derived type\202, it repre)HY(sents)YH( + the XML Schema )SM(anySim)HY(ple)HY(Type)YH()ES( type. )SM(anySim)HY(ple)HY(Type)YH()ES( + allows any simple content. In the C++/Tree mapping this content can + be repre)HY(sented)YH( as a string and accessed or modi)HY(fied)YH( with the + )SM(text_content\201\202)ES( func)HY(tions)YH( shown above.)EP( + + )0 3 22 H(2.5.4)WB 119 Sn()WB 26 Sn( Mapping for )SM(QName)ES()EA()EH( + + )0 P(The XML Schema )SM(QName)ES( built-in data type is mapped to the + )SM(xml_schema::qname)ES( C++ class:)EP( + + ) 25 36 PR(class qname: public simple_type +{ +public: + qname \201const ncname&\202; + qname \201const uri&, const ncname&\202; + qname \201const qname&\202; + +public: + qname& + operator= \201const qname&\202; + +public: + virtual qname* + _clone \201\202 const; + +public: + bool + qualified \201\202 const; + + const uri& + namespace_ \201\202 const; + + const ncname& + name \201\202 const; +};)RP( + + )0 P(The )SM(qual)HY(i)HY(fied)YH()ES( acces)HY(sor)YH( func)HY(tion)YH( can be used to deter)HY(mine)YH( + if the name is qual)HY(i)HY(fied)YH(.)EP( + + )0 3 23 H(2.5.5)WB 120 Sn()WB 27 Sn( Mapping for )SM(IDREF)ES()EA()EH( + + )0 P(The XML Schema )SM(IDREF)ES( built-in data type is mapped to the + )SM(xml_schema::idref)ES( C++ class. This class imple)HY(ments)YH( the + smart pointer C++ idiom:)EP( + + ) 56 44 PR(class idref: public ncname +{ +public: + idref \201const C* s\202; + idref \201const C* s, std::size_t n\202; + idref \201std::size_t n, C c\202; + idref \201const std::basic_string&\202; + idref \201const std::basic_string&, + std::size_t pos, + std::size_t n = npos\202; + +public: + idref \201const idref&\202; + +public: + virtual idref* + _clone \201\202 const; + +public: + idref& + operator= \201C c\202; + + idref& + operator= \201const C* s\202; + + idref& + operator= \201const std::basic_string&\202 + + idref& + operator= \201const idref&\202; +)WR( +public: + const type* + operator-> \201\202 const; + + type* + operator-> \201\202; + + const type& + operator* \201\202 const; + + type& + operator* \201\202; + + const type* + get \201\202 const; + + type* + get \201\202; + + // Conversion to bool. + // +public: + typedef void \201idref::*bool_convertible\202\201\202; + operator bool_convertible \201\202 const; +};)RP( + + )0 P(The object, )SM(idref)ES( instance refers to, is the imme)HY(di)HY(ate)YH( + container of the match)HY(ing)YH( )SM(id)ES( instance. For example, + with the follow)HY(ing)YH( instance docu)HY(ment)YH( and schema: + )EP( + + + ) 22 49 PR( + + + obj-1 + + + + + + + + + + + + + + + + + +)RP( + + )0 P(The )SM(ref)ES( instance in the code below will refer to + an object of type )SM(object_type)ES(:)EP( + + ) 4 53 PR(root_type& root = ...; +xml_schema::idref& ref \201root.reference \201\202\202; +object_type& obj \201dynamic_cast \201*ref\202\202; +cout << obj.text \201\202 << endl;)RP( + + )0 P(The smart pointer inter)HY(face)YH( of the )SM(idref)ES( class always + returns a pointer or refer)HY(ence)YH( to )SM(xml_schema::type)ES(. + This means that you will need to manu)HY(ally)YH( cast such pointer or + refer)HY(ence)YH( to its real \201dynamic\202 type before you can use it \201unless + all you need is the base inter)HY(face)YH( provided by + )SM(xml_schema::type)ES(\202. As a special exten)HY(sion)YH( to the XML + Schema language, the mapping supports static typing of )SM(idref)ES( + refer)HY(ences)YH( by employ)HY(ing)YH( the )SM(refType)ES( exten)HY(sion)YH( attribute. + The follow)HY(ing)YH( example illus)HY(trates)YH( this mech)HY(a)HY(nism)YH(: + )EP( + + ) 11 72 PR( + + + ... + + + + ... + +)RP( + + )0 P(With this modi)HY(fi)HY(ca)HY(tion)YH( we do not need to do manual casting anymore: + )EP( + + ) 4 51 PR(root_type& root = ...; +root_type::reference_type& ref \201root.reference \201\202\202; +object_type& obj \201*ref\202; +cout << ref->text \201\202 << endl;)RP( + + + )0 3 24 H(2.5.6)WB 121 Sn()WB 28 Sn( Mapping for )SM(base64Binary)ES( and + )SM(hexBi)HY(nary)YH()ES()EA()EH( + + )0 P(The XML Schema )SM(base64Binary)ES( and )SM(hexBi)HY(nary)YH()ES( + built-in data types are mapped to the + )SM(xml_schema::base64_binary)ES( and + )SM(xml_schema::hex_binary)ES( C++ classes, respec)HY(tively)YH(. The + )SM(base64_binary)ES( and )SM(hex_binary)ES( classes + support a simple buffer abstrac)HY(tion)YH( by inher)HY(it)HY(ing)YH( from the + )SM(xml_schema::buffer)ES( class: + )EP( + + ) 64 58 PR(class bounds: public virtual exception +{ +public: + virtual const char* + what \201\202 const throw \201\202; +}; + +class buffer +{ +public: + typedef std::size_t size_t; + +public: + buffer \201size_t size = 0\202; + buffer \201size_t size, size_t capacity\202; + buffer \201const void* data, size_t size\202; + buffer \201const void* data, size_t size, size_t capacity\202; + buffer \201void* data, + size_t size, + size_t capacity, + bool assume_ownership\202; + +public: + buffer \201const buffer&\202; + + buffer& + operator= \201const buffer&\202; + + void + swap \201buffer&\202; +)WR( +public: + size_t + capacity \201\202 const; + + bool + capacity \201size_t\202; + +public: + size_t + size \201\202 const; + + bool + size \201size_t\202; + +public: + const char* + data \201\202 const; + + char* + data \201\202; + + const char* + begin \201\202 const; + + char* + begin \201\202; + + const char* + end \201\202 const; +)WR( + char* + end \201\202; +};)RP( + + )0 P(The last over)HY(loaded)YH( construc)HY(tor)YH( reuses an exist)HY(ing)YH( data buffer instead + of making a copy. If the )SM(assume_owner)HY(ship)YH()ES( argu)HY(ment)YH( is + )SM(true)ES(, the instance assumes owner)HY(ship)YH( of the + memory block pointed to by the )SM(data)ES( argu)HY(ment)YH( and will + even)HY(tu)HY(ally)YH( release it by calling )SM(oper)HY(a)HY(tor)YH( delete)ES(. The + )SM(capac)HY(ity)YH()ES( and )SM(size)ES( modi)HY(fier)YH( func)HY(tions)YH( return + )SM(true)ES( if the under)HY(ly)HY(ing)YH( buffer has moved. + )EP( + + )0 P(The )SM(bounds)ES( excep)HY(tion)YH( is thrown if the construc)HY(tor)YH( + argu)HY(ments)YH( violate the )SM(\201size\240<=\240capac)HY(ity)YH(\202)ES( + constraint.)EP( + + )0 P(The )SM(base64_binary)ES( and )SM(hex_binary)ES( classes + support the )SM(buffer)ES( inter)HY(face)YH( and perform auto)HY(matic)YH( + decod)HY(ing)YH(/encod)HY(ing)YH( from/to the Base64 and Hex formats, respec)HY(tively)YH(: + )EP( + + ) 25 65 PR(class base64_binary: public simple_type, public buffer +{ +public: + base64_binary \201size_t size = 0\202; + base64_binary \201size_t size, size_t capacity\202; + base64_binary \201const void* data, size_t size\202; + base64_binary \201const void* data, size_t size, size_t capacity\202; + base64_binary \201void* data, + size_t size, + size_t capacity, + bool assume_ownership\202; + +public: + base64_binary \201const base64_binary&\202; + + base64_binary& + operator= \201const base64_binary&\202; + + virtual base64_binary* + _clone \201\202 const; + +public: + std::basic_string + encode \201\202 const; +};)RP( + + ) 25 62 PR(class hex_binary: public simple_type, public buffer +{ +public: + hex_binary \201size_t size = 0\202; + hex_binary \201size_t size, size_t capacity\202; + hex_binary \201const void* data, size_t size\202; + hex_binary \201const void* data, size_t size, size_t capacity\202; + hex_binary \201void* data, + size_t size, + size_t capacity, + bool assume_ownership\202; + +public: + hex_binary \201const hex_binary&\202; + + hex_binary& + operator= \201const hex_binary&\202; + + virtual hex_binary* + _clone \201\202 const; + +public: + std::basic_string + encode \201\202 const; +};)RP( + + + )0 2 25 H(2.5.7)WB 122 Sn()WB 29 Sn( Time Zone Repre)HY(sen)HY(ta)HY(tion)YH()EA()EH( + + )0 P(The )SM(date)ES(, )SM(date)HY(Time)YH()ES(, )SM(gDay)ES(, + )SM(gMonth)ES(, )SM(gMon)HY(th)HY(Day)YH()ES(, )SM(gYear)ES(, + )SM(gYear)HY(Month)YH()ES(, and )SM(time)ES( XML Schema built-in + types all include an optional time zone compo)HY(nent)YH(. The follow)HY(ing)YH( + )SM(xml_schema::time_zone)ES( base class is used to repre)HY(sent)YH( + this infor)HY(ma)HY(tion)YH(:)EP( + + ) 30 48 PR(class time_zone +{ +public: + time_zone \201\202; + time_zone \201short hours, short minutes\202; + + bool + zone_present \201\202 const; + + void + zone_reset \201\202; + + short + zone_hours \201\202 const; + + void + zone_hours \201short\202; + + short + zone_minutes \201\202 const; + + void + zone_minutes \201short\202; +}; + +bool +operator== \201const time_zone&, const time_zone&\202; + +bool +operator!= \201const time_zone&, const time_zone&\202;)RP( + + )0 P(The )SM(zone_present\201\202)ES( acces)HY(sor)YH( func)HY(tion)YH( returns )SM(true)ES( + if the time zone is spec)HY(i)HY(fied)YH(. The )SM(zone_reset\201\202)ES( modi)HY(fier)YH( + func)HY(tion)YH( resets the time zone object to the )EM(not spec)HY(i)HY(fied)YH()ES( + state. If the time zone offset is nega)HY(tive)YH( then both hours and + minutes compo)HY(nents)YH( are repre)HY(sented)YH( as nega)HY(tive)YH( inte)HY(gers)YH(.)EP( + + + )0 2 26 H(2.5.8)WB 123 Sn()WB 30 Sn( Mapping for )SM(date)ES()EA()EH( + + )0 P(The XML Schema )SM(date)ES( built-in data type is mapped to the + )SM(xml_schema::date)ES( C++ class which repre)HY(sents)YH( a year, a day, + and a month with an optional time zone. Its inter)HY(face)YH( is presented + below. For more infor)HY(ma)HY(tion)YH( on the base )SM(xml_schema::time_zone)ES( + class refer to )0 29 1 A(Section 2.5.7, "Time Zone + Repre)HY(sen)HY(ta)HY(tion)YH(")29 0 TN TL()Ec /AF f D(.)EP( + + ) 41 60 PR(class date: public simple_type, public time_zone +{ +public: + date \201int year, unsigned short month, unsigned short day\202; + date \201int year, unsigned short month, unsigned short day, + short zone_hours, short zone_minutes\202; + +public: + date \201const date&\202; + + date& + operator= \201const date&\202; + + virtual date* + _clone \201\202 const; + +public: + int + year \201\202 const; + + void + year \201int\202; + + unsigned short + month \201\202 const; + + void + month \201unsigned short\202; + + unsigned short + day \201\202 const;)WR( + + void + day \201unsigned short\202; +}; + +bool +operator== \201const date&, const date&\202; + +bool +operator!= \201const date&, const date&\202;)RP( + + )0 2 27 H(2.5.9)WB 124 Sn()WB 31 Sn( Mapping for )SM(date)HY(Time)YH()ES()EA()EH( + + )0 P(The XML Schema )SM(date)HY(Time)YH()ES( built-in data type is mapped to the + )SM(xml_schema::date_time)ES( C++ class which repre)HY(sents)YH( a year, a month, + a day, hours, minutes, and seconds with an optional time zone. Its inter)HY(face)YH( + is presented below. For more infor)HY(ma)HY(tion)YH( on the base + )SM(xml_schema::time_zone)ES( class refer to )0 29 1 A(Section + 2.5.7, "Time Zone Repre)HY(sen)HY(ta)HY(tion)YH(")29 0 TN TL()Ec /AF f D(.)EP( + + ) 62 67 PR(class date_time: public simple_type, public time_zone +{ +public: + date_time \201int year, unsigned short month, unsigned short day, + unsigned short hours, unsigned short minutes, + double seconds\202; + + date_time \201int year, unsigned short month, unsigned short day, + unsigned short hours, unsigned short minutes, + double seconds, short zone_hours, short zone_minutes\202; +public: + date_time \201const date_time&\202; + + date_time& + operator= \201const date_time&\202; + + virtual date_time* + _clone \201\202 const; + +public: + int + year \201\202 const; + + void + year \201int\202; + + unsigned short + month \201\202 const; + + void + month \201unsigned short\202;)WR( + + unsigned short + day \201\202 const; + + void + day \201unsigned short\202; + + unsigned short + hours \201\202 const; + + void + hours \201unsigned short\202; + + unsigned short + minutes \201\202 const; + + void + minutes \201unsigned short\202; + + double + seconds \201\202 const; + + void + seconds \201double\202; +}; + +bool +operator== \201const date_time&, const date_time&\202; + +bool)WR( +operator!= \201const date_time&, const date_time&\202;)RP( + + + )0 2 28 H(2.5.10)WB 125 Sn()WB 32 Sn( Mapping for )SM(dura)HY(tion)YH()ES()EA()EH( + + )0 P(The XML Schema )SM(dura)HY(tion)YH()ES( built-in data type is mapped to the + )SM(xml_schema::dura)HY(tion)YH()ES( C++ class which repre)HY(sents)YH( a poten)HY(tially)YH( + nega)HY(tive)YH( dura)HY(tion)YH( in the form of years, months, days, hours, minutes, + and seconds. Its inter)HY(face)YH( is presented below.)EP( + + ) 64 71 PR(class duration: public simple_type +{ +public: + duration \201bool negative, + unsigned int years, unsigned int months, unsigned int days, + unsigned int hours, unsigned int minutes, double seconds\202; +public: + duration \201const duration&\202; + + duration& + operator= \201const duration&\202; + + virtual duration* + _clone \201\202 const; + +public: + bool + negative \201\202 const; + + void + negative \201bool\202; + + unsigned int + years \201\202 const; + + void + years \201unsigned int\202; + + unsigned int + months \201\202 const; +)WR( + void + months \201unsigned int\202; + + unsigned int + days \201\202 const; + + void + days \201unsigned int\202; + + unsigned int + hours \201\202 const; + + void + hours \201unsigned int\202; + + unsigned int + minutes \201\202 const; + + void + minutes \201unsigned int\202; + + double + seconds \201\202 const; + + void + seconds \201double\202; +}; + +bool +operator== \201const duration&, const duration&\202;)WR( + +bool +operator!= \201const duration&, const duration&\202;)RP( + + + )0 2 29 H(2.5.11)WB 126 Sn()WB 33 Sn( Mapping for )SM(gDay)ES()EA()EH( + + )0 P(The XML Schema )SM(gDay)ES( built-in data type is mapped to the + )SM(xml_schema::gday)ES( C++ class which repre)HY(sents)YH( a day of the + month with an optional time zone. Its inter)HY(face)YH( is presented below. + For more infor)HY(ma)HY(tion)YH( on the base )SM(xml_schema::time_zone)ES( + class refer to )0 29 1 A(Section 2.5.7, "Time Zone + Repre)HY(sen)HY(ta)HY(tion)YH(")29 0 TN TL()Ec /AF f D(.)EP( + + ) 29 66 PR(class gday: public simple_type, public time_zone +{ +public: + explicit + gday \201unsigned short day\202; + gday \201unsigned short day, short zone_hours, short zone_minutes\202; + +public: + gday \201const gday&\202; + + gday& + operator= \201const gday&\202; + + virtual gday* + _clone \201\202 const; + +public: + unsigned short + day \201\202 const; + + void + day \201unsigned short\202; +}; + +bool +operator== \201const gday&, const gday&\202; + +bool +operator!= \201const gday&, const gday&\202;)RP( + + + )0 2 30 H(2.5.12)WB 127 Sn()WB 34 Sn( Mapping for )SM(gMonth)ES()EA()EH( + + )0 P(The XML Schema )SM(gMonth)ES( built-in data type is mapped to the + )SM(xml_schema::gmonth)ES( C++ class which repre)HY(sents)YH( a month of the + year with an optional time zone. Its inter)HY(face)YH( is presented below. + For more infor)HY(ma)HY(tion)YH( on the base )SM(xml_schema::time_zone)ES( + class refer to )0 29 1 A(Section 2.5.7, "Time Zone + Repre)HY(sen)HY(ta)HY(tion)YH(")29 0 TN TL()Ec /AF f D(.)EP( + + ) 30 50 PR(class gmonth: public simple_type, public time_zone +{ +public: + explicit + gmonth \201unsigned short month\202; + gmonth \201unsigned short month, + short zone_hours, short zone_minutes\202; + +public: + gmonth \201const gmonth&\202; + + gmonth& + operator= \201const gmonth&\202; + + virtual gmonth* + _clone \201\202 const; + +public: + unsigned short + month \201\202 const; + + void + month \201unsigned short\202; +}; + +bool +operator== \201const gmonth&, const gmonth&\202; + +bool +operator!= \201const gmonth&, const gmonth&\202;)RP( + + + )0 2 31 H(2.5.13)WB 128 Sn()WB 35 Sn( Mapping for )SM(gMon)HY(th)HY(Day)YH()ES()EA()EH( + + )0 P(The XML Schema )SM(gMon)HY(th)HY(Day)YH()ES( built-in data type is mapped to the + )SM(xml_schema::gmonth_day)ES( C++ class which repre)HY(sents)YH( a day and + a month of the year with an optional time zone. Its inter)HY(face)YH( is presented + below. For more infor)HY(ma)HY(tion)YH( on the base )SM(xml_schema::time_zone)ES( + class refer to )0 29 1 A(Section 2.5.7, "Time Zone + Repre)HY(sen)HY(ta)HY(tion)YH(")29 0 TN TL()Ec /AF f D(.)EP( + + ) 35 56 PR(class gmonth_day: public simple_type, public time_zone +{ +public: + gmonth_day \201unsigned short month, unsigned short day\202; + gmonth_day \201unsigned short month, unsigned short day, + short zone_hours, short zone_minutes\202; + +public: + gmonth_day \201const gmonth_day&\202; + + gmonth_day& + operator= \201const gmonth_day&\202; + + virtual gmonth_day* + _clone \201\202 const; + +public: + unsigned short + month \201\202 const; + + void + month \201unsigned short\202; + + unsigned short + day \201\202 const; + + void + day \201unsigned short\202; +}; + +bool)WR( +operator== \201const gmonth_day&, const gmonth_day&\202; + +bool +operator!= \201const gmonth_day&, const gmonth_day&\202;)RP( + + + )0 2 32 H(2.5.14)WB 129 Sn()WB 36 Sn( Mapping for )SM(gYear)ES()EA()EH( + + )0 P(The XML Schema )SM(gYear)ES( built-in data type is mapped to the + )SM(xml_schema::gyear)ES( C++ class which repre)HY(sents)YH( a year with + an optional time zone. Its inter)HY(face)YH( is presented below. For more + infor)HY(ma)HY(tion)YH( on the base )SM(xml_schema::time_zone)ES( class refer + to )0 29 1 A(Section 2.5.7, "Time Zone Repre)HY(sen)HY(ta)HY(tion)YH(")29 0 TN TL()Ec /AF f D(.)EP( + + ) 29 57 PR(class gyear: public simple_type, public time_zone +{ +public: + explicit + gyear \201int year\202; + gyear \201int year, short zone_hours, short zone_minutes\202; + +public: + gyear \201const gyear&\202; + + gyear& + operator= \201const gyear&\202; + + virtual gyear* + _clone \201\202 const; + +public: + int + year \201\202 const; + + void + year \201int\202; +}; + +bool +operator== \201const gyear&, const gyear&\202; + +bool +operator!= \201const gyear&, const gyear&\202;)RP( + + + )0 2 33 H(2.5.15)WB 130 Sn()WB 37 Sn( Mapping for )SM(gYear)HY(Month)YH()ES()EA()EH( + + )0 P(The XML Schema )SM(gYear)HY(Month)YH()ES( built-in data type is mapped to + the )SM(xml_schema::gyear_month)ES( C++ class which repre)HY(sents)YH( + a year and a month with an optional time zone. Its inter)HY(face)YH( is presented + below. For more infor)HY(ma)HY(tion)YH( on the base )SM(xml_schema::time_zone)ES( + class refer to )0 29 1 A(Section 2.5.7, "Time Zone + Repre)HY(sen)HY(ta)HY(tion)YH(")29 0 TN TL()Ec /AF f D(.)EP( + + ) 34 55 PR(class gyear_month: public simple_type, public time_zone +{ +public: + gyear_month \201int year, unsigned short month\202; + gyear_month \201int year, unsigned short month, + short zone_hours, short zone_minutes\202; +public: + gyear_month \201const gyear_month&\202; + + gyear_month& + operator= \201const gyear_month&\202; + + virtual gyear_month* + _clone \201\202 const; + +public: + int + year \201\202 const; + + void + year \201int\202; + + unsigned short + month \201\202 const; + + void + month \201unsigned short\202; +}; + +bool +operator== \201const gyear_month&, const gyear_month&\202;)WR( + +bool +operator!= \201const gyear_month&, const gyear_month&\202;)RP( + + + )0 2 34 H(2.5.16)WB 131 Sn()WB 38 Sn( Mapping for )SM(time)ES()EA()EH( + + )0 P(The XML Schema )SM(time)ES( built-in data type is mapped to + the )SM(xml_schema::time)ES( C++ class which repre)HY(sents)YH( hours, + minutes, and seconds with an optional time zone. Its inter)HY(face)YH( is + presented below. For more infor)HY(ma)HY(tion)YH( on the base + )SM(xml_schema::time_zone)ES( class refer to + )0 29 1 A(Section 2.5.7, "Time Zone Repre)HY(sen)HY(ta)HY(tion)YH(")29 0 TN TL()Ec /AF f D(.)EP( + + ) 41 70 PR(class time: public simple_type, public time_zone +{ +public: + time \201unsigned short hours, unsigned short minutes, double seconds\202; + time \201unsigned short hours, unsigned short minutes, double seconds, + short zone_hours, short zone_minutes\202; + +public: + time \201const time&\202; + + time& + operator= \201const time&\202; + + virtual time* + _clone \201\202 const; + +public: + unsigned short + hours \201\202 const; + + void + hours \201unsigned short\202; + + unsigned short + minutes \201\202 const; + + void + minutes \201unsigned short\202; + + double + seconds \201\202 const;)WR( + + void + seconds \201double\202; +}; + +bool +operator== \201const time&, const time&\202; + +bool +operator!= \201const time&, const time&\202;)RP( + + + + + )0 2 35 H(2.6)WB 132 Sn()WB 39 Sn( Mapping for Simple Types)EA()EH( + + )0 P(An XML Schema simple type is mapped to a C++ class with the same + name as the simple type. The class defines a public copy construc)HY(tor)YH(, + a public copy assign)HY(ment)YH( oper)HY(a)HY(tor)YH(, and a public virtual + )SM(_clone)ES( func)HY(tion)YH(. The )SM(_clone)ES( func)HY(tion)YH( is + declared )SM(const)ES(, does not take any argu)HY(ments)YH(, and returns + a pointer to a complete copy of the instance allo)HY(cated)YH( in the free + store. The )SM(_clone)ES( func)HY(tion)YH( shall be used to make copies + when static type and dynamic type of the instance may differ \201see + )0 56 1 A(Section 2.11, "Mapping for )SM(xsi:type)ES( + and Substi)HY(tu)HY(tion)YH( Groups")56 0 TN TL()Ec /AF f D(\202. For instance:)EP( + + ) 3 26 PR( + ... +)RP( + + )0 P(is mapped to:)EP( + + ) 16 28 PR(class object: ... +{ +public: + object \201const object&\202; + +public: + object& + operator= \201const object&\202; + +public: + virtual object* + _clone \201\202 const; + + ... + +};)RP( + + )0 P(The base class spec)HY(i)HY(fi)HY(ca)HY(tion)YH( and the rest of the class defi)HY(ni)HY(tion)YH( + depend on the type of deriva)HY(tion)YH( used to define the simple type. )EP( + + + )0 3 36 H(2.6.1)WB 133 Sn()WB 40 Sn( Mapping for Deriva)HY(tion)YH( by Restric)HY(tion)YH()EA()EH( + + )0 P(XML Schema deriva)HY(tion)YH( by restric)HY(tion)YH( is mapped to C++ public + inher)HY(i)HY(tance)YH(. The base type of the restric)HY(tion)YH( becomes the base + type for the result)HY(ing)YH( C++ class. In addi)HY(tion)YH( to the members described + in )0 39 1 A(Section 2.6, "Mapping for Simple Types")39 0 TN TL()Ec /AF f D(, the + result)HY(ing)YH( C++ class defines a public construc)HY(tor)YH( with the base type + as its single argu)HY(ment)YH(. For instance:)EP( + + ) 5 27 PR( + + ... + +)RP( + + )0 P(is mapped to:)EP( + + ) 14 28 PR(class object: public base +{ +public: + object \201const base&\202; + object \201const object&\202; + +public: + object& + operator= \201const object&\202; + +public: + virtual object* + _clone \201\202 const; +};)RP( + + + )0 3 37 H(2.6.2)WB 134 Sn()WB 41 Sn( Mapping for Enumer)HY(a)HY(tions)YH()EA()EH( + +)0 P(XML Schema restric)HY(tion)YH( by enumer)HY(a)HY(tion)YH( is mapped to a C++ class + with seman)HY(tics)YH( similar to C++ )SM(enum)ES(. Each XML Schema + enumer)HY(a)HY(tion)YH( element is mapped to a C++ enumer)HY(a)HY(tor)YH( with the + name derived from the )SM(value)ES( attribute and defined + in the class scope. In addi)HY(tion)YH( to the members + described in )0 39 1 A(Section 2.6, "Mapping for Simple Types")39 0 TN TL()Ec /AF f D(, + the result)HY(ing)YH( C++ class defines a public construc)HY(tor)YH( that can be called + with one of the enumer)HY(a)HY(tors)YH( as its single argu)HY(ment)YH(, a public construc)HY(tor)YH( + that can be called with enumer)HY(a)HY(tion)YH('s base value as its single + argu)HY(ment)YH(, a public assign)HY(ment)YH( oper)HY(a)HY(tor)YH( that can be used to assign the + value of one of the enumer)HY(a)HY(tors)YH(, and a public implicit conver)HY(sion)YH( + oper)HY(a)HY(tor)YH( to the under)HY(ly)HY(ing)YH( C++ enum type.)EP( + +)0 P(Further)HY(more)YH(, for string-based enumer)HY(a)HY(tion)YH( types, the result)HY(ing)YH( C++ + class defines a public construc)HY(tor)YH( with a single argu)HY(ment)YH( of type + )SM(const C*)ES( and a public construc)HY(tor)YH( with a single + argu)HY(ment)YH( of type )SM(const std::basic_string&)ES(. + For instance:)EP( + + ) 7 32 PR( + + + + + +)RP( + + )0 P(is mapped to:)EP( + + ) 31 38 PR(class color: public xml_schema::string +{ +public: + enum value + { + red, + green, + blue + }; + +public: + color \201value\202; + color \201const C*\202; + color \201const std::basic_string&\202; + color \201const xml_schema::string&\202; + color \201const color&\202; + +public: + color& + operator= \201value\202; + + color& + operator= \201const color&\202; + +public: + virtual color* + _clone \201\202 const; + +public: + operator value \201\202 const; +};)WR()RP( + + )0 3 38 H(2.6.3)WB 135 Sn()WB 42 Sn( Mapping for Deriva)HY(tion)YH( by List)EA()EH( + + )0 P(XML Schema deriva)HY(tion)YH( by list is mapped to C++ public + inher)HY(i)HY(tance)YH( from )SM(xml_schema::simple_type)ES( + \201)0 25 1 A(Section 2.5.3, "Mapping for + )SM(anySim)HY(ple)HY(Type)YH()ES(")25 0 TN TL()Ec /AF f D(\202 and a suit)HY(able)YH( sequence type. + The list item type becomes the element type of the sequence. + In addi)HY(tion)YH( to the members described in )0 39 1 A(Section 2.6, + "Mapping for Simple Types")39 0 TN TL()Ec /AF f D(, the result)HY(ing)YH( C++ class defines + a public default construc)HY(tor)YH(, a public construc)HY(tor)YH( + with the first argu)HY(ment)YH( of type )SM(size_type)ES( and + the second argu)HY(ment)YH( of list item type that creates + a list object with the spec)HY(i)HY(fied)YH( number of copies of the spec)HY(i)HY(fied)YH( + element value, and a public construc)HY(tor)YH( with the two argu)HY(ments)YH( + of an input iter)HY(a)HY(tor)YH( type that creates a list object from an + iter)HY(a)HY(tor)YH( range. For instance: + )EP( + + ) 3 28 PR( + +)RP( + + )0 P(is mapped to:)EP( + + ) 19 42 PR(class int_list: public simple_type, + public sequence +{ +public: + int_list \201\202; + int_list \201size_type n, int x\202; + + template + int_list \201const I& begin, const I& end\202; + int_list \201const int_list&\202; + +public: + int_list& + operator= \201const int_list&\202; + +public: + virtual int_list* + _clone \201\202 const; +};)RP( + + )0 P(The )SM(sequence)ES( class template is defined in an + imple)HY(men)HY(ta)HY(tion)YH(-specific names)HY(pace)YH(. It conforms to the + sequence inter)HY(face)YH( as defined by the ISO/ANSI Stan)HY(dard)YH( for + C++ \201ISO/IEC 14882:1998, Section 23.1.1, "Sequences"\202. + Prac)HY(ti)HY(cally)YH(, this means that you can treat such a sequence + as if it was )SM(std::vector)ES(. One notable exten)HY(sion)YH( + to the stan)HY(dard)YH( inter)HY(face)YH( that is avail)HY(able)YH( only for + sequences of non-funda)HY(men)HY(tal)YH( C++ types is the addi)HY(tion)YH( of + the over)HY(loaded)YH( )SM(push_back)ES( and )SM(insert)ES( + member func)HY(tions)YH( which instead of the constant refer)HY(ence)YH( + to the element type accept auto)HY(matic)YH( pointer \201)SM(std::auto_ptr)ES( + or )SM(std::unique_ptr)ES(, depend)HY(ing)YH( on the C++ stan)HY(dard)YH( + selected\202 to the element type. These func)HY(tions)YH( assume owner)HY(ship)YH( + of the pointed to object and reset the passed auto)HY(matic)YH( pointer. + )EP( + + )0 3 39 H(2.6.4)WB 136 Sn()WB 43 Sn( Mapping for Deriva)HY(tion)YH( by Union)EA()EH( + + )0 P(XML Schema deriva)HY(tion)YH( by union is mapped to C++ public + inher)HY(i)HY(tance)YH( from )SM(xml_schema::simple_type)ES( + \201)0 25 1 A(Section 2.5.3, "Mapping for + )SM(anySim)HY(ple)HY(Type)YH()ES(")25 0 TN TL()Ec /AF f D(\202 and )SM(std::basic_string)ES(. + In addi)HY(tion)YH( to the members described in )0 39 1 A(Section 2.6, + "Mapping for Simple Types")39 0 TN TL()Ec /AF f D(, the result)HY(ing)YH( C++ class defines a + public construc)HY(tor)YH( with a single argu)HY(ment)YH( of type )SM(const C*)ES( + and a public construc)HY(tor)YH( with a single argu)HY(ment)YH( of type + )SM(const std::basic_string&)ES(. For instance: + )EP( + + ) 3 47 PR( + +)RP( + + )0 P(is mapped to:)EP( + + ) 16 51 PR(class int_string_union: public simple_type, + public std::basic_string +{ +public: + int_string_union \201const C*\202; + int_string_union \201const std::basic_string&\202; + int_string_union \201const int_string_union&\202; + +public: + int_string_union& + operator= \201const int_string_union&\202; + +public: + virtual int_string_union* + _clone \201\202 const; +};)RP( + + )0 2 40 H(2.7)WB 137 Sn()WB 44 Sn( Mapping for Complex Types)EA()EH( + + )0 P(An XML Schema complex type is mapped to a C++ class with the same + name as the complex type. The class defines a public copy construc)HY(tor)YH(, + a public copy assign)HY(ment)YH( oper)HY(a)HY(tor)YH(, and a public virtual + )SM(_clone)ES( func)HY(tion)YH(. The )SM(_clone)ES( func)HY(tion)YH( is + declared )SM(const)ES(, does not take any argu)HY(ments)YH(, and returns + a pointer to a complete copy of the instance allo)HY(cated)YH( in the free + store. The )SM(_clone)ES( func)HY(tion)YH( shall be used to make copies + when static type and dynamic type of the instance may differ \201see + )0 56 1 A(Section 2.11, "Mapping for )SM(xsi:type)ES( + and Substi)HY(tu)HY(tion)YH( Groups")56 0 TN TL()Ec /AF f D(\202.)EP( + + )0 P(Addi)HY(tion)HY(ally)YH(, the result)HY(ing)YH( C++ class + defines two public construc)HY(tors)YH( that take an initial)HY(izer)YH( for each + member of the complex type and all its base types that belongs to + the One cardi)HY(nal)HY(ity)YH( class \201see )0 47 1 A(Section 2.8, "Mapping + for Local Elements and Attributes")47 0 TN TL()Ec /AF f D(\202. In the first construc)HY(tor)YH(, + the argu)HY(ments)YH( are passed as constant refer)HY(ences)YH( and the newly created + instance is initial)HY(ized)YH( with copies of the passed objects. In the + second construc)HY(tor)YH(, argu)HY(ments)YH( that are complex types \201that is, + they them)HY(selves)YH( contain elements or attributes\202 are passed as + either )SM(std::auto_ptr)ES( \201C++98\202 or )SM(std::unique_ptr)ES( + \201C++11\202, depend)HY(ing)YH( on the C++ stan)HY(dard)YH( selected. In this case the newly + created instance is directly initial)HY(ized)YH( with and assumes owner)HY(ship)YH( + of the pointed to objects and the )SM(std::[auto|unique]_ptr)ES( + argu)HY(ments)YH( are reset to )SM(0)ES(. For instance:)EP( + + ) 15 66 PR( + + + + + + + + + + + + + +)RP( + + )0 P(is mapped to:)EP( + + ) 36 68 PR(class complex: public xml_schema::type +{ +public: + object \201const int& a, const xml_schema::string& b\202; + object \201const complex&\202; + +public: + object& + operator= \201const complex&\202; + +public: + virtual complex* + _clone \201\202 const; + + ... + +}; + +class object: public xml_schema::type +{ +public: + object \201const bool& s_one, const complex& c_one\202; + object \201const bool& s_one, std::[auto|unique]_ptr c_one\202; + object \201const object&\202; + +public: + object& + operator= \201const object&\202; + +public: + virtual object*)WR( + _clone \201\202 const; + + ... + +};)RP( + + )0 P(Notice that the gener)HY(ated)YH( )SM(complex)ES( class does not + have the second \201)SM(std::[auto|unique]_ptr)ES(\202 version of the + construc)HY(tor)YH( since all its required members are of simple types.)EP( + + )0 P(If an XML Schema complex type has an ulti)HY(mate)YH( base which is an XML + Schema simple type then the result)HY(ing)YH( C++ class also defines a public + construc)HY(tor)YH( that takes an initial)HY(izer)YH( for the base type as well as + for each member of the complex type and all its base types that + belongs to the One cardi)HY(nal)HY(ity)YH( class. For instance:)EP( + + ) 7 61 PR( + + + + + +)RP( + + )0 P(is mapped to:)EP( + + ) 11 44 PR(class object: public xml_schema::string +{ +public: + object \201const xml_schema::language& lang\202; + + object \201const xml_schema::date& base, + const xml_schema::language& lang\202; + + ... + +};)RP( + + )0 P(Further)HY(more)YH(, for string-based XML Schema complex types, the result)HY(ing)YH( C++ + class also defines two public construc)HY(tors)YH( with the first argu)HY(ments)YH( + of type )SM(const C*)ES( and )SM(std::basic_string&)ES(, + respec)HY(tively)YH(, followed by argu)HY(ments)YH( for each member of the complex + type and all its base types that belongs to the One cardi)HY(nal)HY(ity)YH( + class. For enumer)HY(a)HY(tion)YH(-based complex types the result)HY(ing)YH( C++ + class also defines a public construc)HY(tor)YH( with the first argu)HY(ments)YH( + of the under)HY(ly)HY(ing)YH( enum type followed by argu)HY(ments)YH( for each member + of the complex type and all its base types that belongs to the One + cardi)HY(nal)HY(ity)YH( class. For instance:)EP( + + ) 15 61 PR( + + + + + + + + + + + + + +)RP( + + )0 P(is mapped to:)EP( + + ) 37 44 PR(class color: public xml_schema::string +{ +public: + enum value + { + red, + green, + blue + }; + +public: + color \201value\202; + color \201const C*\202; + color \201const std::basic_string&\202; + + ... + +}; + +class object: color +{ +public: + object \201const color& base, + const xml_schema::language& lang\202; + + object \201const color::value& base, + const xml_schema::language& lang\202; + + object \201const C* base, + const xml_schema::language& lang\202; +)WR( + object \201const std::basic_string& base, + const xml_schema::language& lang\202; + + ... + +};)RP( + + )0 P(Addi)HY(tional)YH( construc)HY(tors)YH( can be requested with the + )SM(--gener)HY(ate)YH(-default-ctor)ES( and + )SM(--gener)HY(ate)YH(-from-base-ctor)ES( options. See the + )R8 2 A(XSD + Compiler Command Line Manual)EA( for details.)EP( + + )0 P(If an XML Schema complex type is not explic)HY(itly)YH( derived from any type, + the result)HY(ing)YH( C++ class is derived from )SM(xml_schema::type)ES(. + In cases where an XML Schema complex type is defined using deriva)HY(tion)YH( + by exten)HY(sion)YH( or restric)HY(tion)YH(, the result)HY(ing)YH( C++ base class spec)HY(i)HY(fi)HY(ca)HY(tion)YH( + depends on the type of deriva)HY(tion)YH( and is described in the subse)HY(quent)YH( + sections. + )EP( + + )0 P(The mapping for elements and attributes that are defined in a complex + type is described in )0 47 1 A(Section 2.8, "Mapping for Local + Elements and Attributes")47 0 TN TL()Ec /AF f D(. + )EP( + + )0 3 41 H(2.7.1)WB 138 Sn()WB 45 Sn( Mapping for Deriva)HY(tion)YH( by Exten)HY(sion)YH()EA()EH( + + )0 P(XML Schema deriva)HY(tion)YH( by exten)HY(sion)YH( is mapped to C++ public + inher)HY(i)HY(tance)YH(. The base type of the exten)HY(sion)YH( becomes the base + type for the result)HY(ing)YH( C++ class. + )EP( + + )0 3 42 H(2.7.2)WB 139 Sn()WB 46 Sn( Mapping for Deriva)HY(tion)YH( by Restric)HY(tion)YH()EA()EH( + + )0 P(XML Schema deriva)HY(tion)YH( by restric)HY(tion)YH( is mapped to C++ public + inher)HY(i)HY(tance)YH(. The base type of the restric)HY(tion)YH( becomes the base + type for the result)HY(ing)YH( C++ class. XML Schema elements and + attributes defined within restric)HY(tion)YH( do not result in any + defi)HY(ni)HY(tions)YH( in the result)HY(ing)YH( C++ class. Instead, corre)HY(spond)HY(ing)YH( + \201unre)HY(stricted)YH(\202 defi)HY(ni)HY(tions)YH( are inher)HY(ited)YH( from the base class. + In the future versions of this mapping, such elements and + attributes may result in redef)HY(i)HY(ni)HY(tions)YH( of acces)HY(sors)YH( and + modi)HY(fiers)YH( to reflect their restricted seman)HY(tics)YH(. + )EP( + + + + )0 2 43 H(2.8)WB 140 Sn()WB 47 Sn( Mapping for Local Elements and Attributes)EA()EH( + + )0 P(XML Schema element and attribute defi)HY(ni)HY(tions)YH( are called local + if they appear within a complex type defi)HY(ni)HY(tion)YH(, an element group + defi)HY(ni)HY(tion)YH(, or an attribute group defi)HY(ni)HY(tions)YH(. + )EP( + + )0 P(Local XML Schema element and attribute defi)HY(ni)HY(tions)YH( have the same + C++ mapping. There)HY(fore)YH(, in this section, local elements and + attributes are collec)HY(tively)YH( called members. + )EP( + + )0 P(While there are many differ)HY(ent)YH( member cardi)HY(nal)HY(ity)YH( combi)HY(na)HY(tions)YH( + \201deter)HY(mined)YH( by the )SM(use)ES( attribute for attributes and + the )SM(minOc)HY(curs)YH()ES( and )SM(maxOc)HY(curs)YH()ES( attributes + for elements\202, the mapping divides all possi)HY(ble)YH( cardi)HY(nal)HY(ity)YH( + combi)HY(na)HY(tions)YH( into three cardi)HY(nal)HY(ity)YH( classes: + )EP( + + )0 DL( )0 DT()I(one)ES( + )DD(attributes: )SM(use == "required")ES( + )DD(attributes: )SM(use == "optional")ES( and has default or fixed value + )DD(elements: )SM(minOc)HY(curs)YH( == "1")ES( and )SM(maxOc)HY(curs)YH( == "1")ES( + + )0 DT()I(optional)ES( + )DD(attributes: )SM(use == "optional")ES( and doesn't have default or fixed value + )DD(elements: )SM(minOc)HY(curs)YH( == "0")ES( and )SM(maxOc)HY(curs)YH( == "1")ES( + + )0 DT()I(sequence)ES( + )DD(elements: )SM(maxOc)HY(curs)YH( > "1")ES( + )LD( + + )0 P(An optional attribute with a default or fixed value acquires this value + if the attribute hasn't been spec)HY(i)HY(fied)YH( in an instance docu)HY(ment)YH( \201see + )0 95 1 A(Appendix A, "Default and Fixed Values")95 0 TN TL()Ec /AF f D(\202. This + mapping places such optional attributes to the One cardi)HY(nal)HY(ity)YH( + class.)EP( + + )0 P(A member is mapped to a set of public type defi)HY(ni)HY(tions)YH( + \201)SM(typedef)ES(s\202 and a set of public acces)HY(sor)YH( and modi)HY(fier)YH( + func)HY(tions)YH(. Type defi)HY(ni)HY(tions)YH( have names derived from the member's + name. The acces)HY(sor)YH( and modi)HY(fier)YH( func)HY(tions)YH( have the same name as the + member. For example: + )EP( + + ) 5 42 PR( + + + +)RP( + + )0 P(is mapped to:)EP( + + ) 11 41 PR(class object: public xml_schema::type +{ +public: + typedef xml_schema::string member_type; + + const member_type& + member \201\202 const; + + ... + +};)RP( + + )0 P(In addi)HY(tion)YH(, if a member has a default or fixed value, a static + acces)HY(sor)YH( func)HY(tion)YH( is gener)HY(ated)YH( that returns this value. For + example:)EP( + +) 3 55 PR( + +)RP( + + )0 P(is mapped to:)EP( + + ) 14 39 PR(class object: public xml_schema::type +{ +public: + typedef xml_schema::string data_type; + + const data_type& + data \201\202 const; + + static const data_type& + data_default_value \201\202; + + ... + +};)RP( + + )0 P(Names and seman)HY(tics)YH( of type defi)HY(ni)HY(tions)YH( for the member as well + as signa)HY(tures)YH( of the acces)HY(sor)YH( and modi)HY(fier)YH( func)HY(tions)YH( depend on + the member's cardi)HY(nal)HY(ity)YH( class and are described in the follow)HY(ing)YH( + sub-sections. + )EP( + + + )0 3 44 H(2.8.1)WB 141 Sn()WB 48 Sn( Mapping for Members with the One Cardi)HY(nal)HY(ity)YH( Class)EA()EH( + + )0 P(For the One cardi)HY(nal)HY(ity)YH( class, the type defi)HY(ni)HY(tions)YH( consist of + an alias for the member's type with the name created by append)HY(ing)YH( + the )SM(_type)ES( suffix to the member's name. + )EP( + + )0 P(The acces)HY(sor)YH( func)HY(tions)YH( come in constant and non-constant versions. + The constant acces)HY(sor)YH( func)HY(tion)YH( returns a constant refer)HY(ence)YH( to the + member and can be used for read-only access. The non-constant + version returns an unre)HY(stricted)YH( refer)HY(ence)YH( to the member and can + be used for read-write access. + )EP( + + )0 P(The first modi)HY(fier)YH( func)HY(tion)YH( expects an argu)HY(ment)YH( of type refer)HY(ence)YH( to + constant of the member's type. It makes a deep copy of its argu)HY(ment)YH(. + Except for member's types that are mapped to funda)HY(men)HY(tal)YH( C++ types, + the second modi)HY(fier)YH( func)HY(tion)YH( is provided that expects an argu)HY(ment)YH( + of type auto)HY(matic)YH( pointer \201)SM(std::auto_ptr)ES( or + )SM(std::unique_ptr)ES(, depend)HY(ing)YH( on the C++ stan)HY(dard)YH( selected\202 + to the member's type. It assumes owner)HY(ship)YH( of the pointed to object + and resets the passed auto)HY(matic)YH( pointer. For instance:)EP( + + ) 5 42 PR( + + + +)RP( + + )0 P(is mapped to:)EP( + + ) 25 47 PR(class object: public xml_schema::type +{ +public: + // Type definitions. + // + typedef xml_schema::string member_type; + + // Accessors. + // + const member_type& + member \201\202 const; + + member_type& + member \201\202; + + // Modifiers. + // + void + member \201const member_type&\202; + + void + member \201std::[auto|unique]_ptr\202; + ... + +};)RP( + + )0 P(In addi)HY(tion)YH(, if requested by spec)HY(i)HY(fy)HY(ing)YH( the )SM(--gener)HY(ate)YH(-detach)ES( + option and only for members of non-funda)HY(men)HY(tal)YH( C++ types, the mapping + provides a detach func)HY(tion)YH( that returns an auto)HY(matic)YH( pointer to the + member's type, for example:)EP( + + ) 10 37 PR(class object: public xml_schema::type +{ +public: + ... + + std::[auto|unique]_ptr + detach_member \201\202; + ... + +};)RP( + + )0 P(This func)HY(tion)YH( detaches the value from the tree leaving the member + value unini)HY(tial)HY(ized)YH(. Access)HY(ing)YH( such an unini)HY(tial)HY(ized)YH( value prior to + re-initial)HY(iz)HY(ing)YH( it results in unde)HY(fined)YH( behav)HY(ior)YH(.)EP( + + )0 P(The follow)HY(ing)YH( code shows how one could use this mapping:)EP( + + ) 25 66 PR(void +f \201object& o\202 +{ + using xml_schema::string; + + string s \201o.member \201\202\202; // get + object::member_type& sr \201o.member \201\202\202; // get + + o.member \201"hello"\202; // set, deep copy + o.member \201\202 = "hello"; // set, deep copy + + // C++98 version. + // + std::auto_ptr p \201new string \201"hello"\202\202; + o.member \201p\202; // set, assumes ownership + p = o.detach_member \201\202; // detach, member is uninitialized + o.member \201p\202; // re-attach + + // C++11 version. + // + std::unique_ptr p \201new string \201"hello"\202\202; + o.member \201std::move \201p\202\202; // set, assumes ownership + p = o.detach_member \201\202; // detach, member is uninitialized + o.member \201std::move \201p\202\202; // re-attach +})RP( + + +)0 3 45 H(2.8.2)WB 142 Sn()WB 49 Sn( Mapping for Members with the Optional Cardi)HY(nal)HY(ity)YH( Class)EA()EH( + + )0 P(For the Optional cardi)HY(nal)HY(ity)YH( class, the type defi)HY(ni)HY(tions)YH( consist of + an alias for the member's type with the name created by append)HY(ing)YH( + the )SM(_type)ES( suffix to the member's name and an alias for + the container type with the name created by append)HY(ing)YH( the + )SM(_optional)ES( suffix to the member's name. + )EP( + + )0 P(Unlike acces)HY(sor)YH( func)HY(tions)YH( for the One cardi)HY(nal)HY(ity)YH( class, acces)HY(sor)YH( + func)HY(tions)YH( for the Optional cardi)HY(nal)HY(ity)YH( class return refer)HY(ences)YH( to + corre)HY(spond)HY(ing)YH( contain)HY(ers)YH( rather than directly to members. The + acces)HY(sor)YH( func)HY(tions)YH( come in constant and non-constant versions. + The constant acces)HY(sor)YH( func)HY(tion)YH( returns a constant refer)HY(ence)YH( to + the container and can be used for read-only access. The non-constant + version returns an unre)HY(stricted)YH( refer)HY(ence)YH( to the container + and can be used for read-write access. + )EP( + + )0 P(The modi)HY(fier)YH( func)HY(tions)YH( are over)HY(loaded)YH( for the member's + type and the container type. The first modi)HY(fier)YH( func)HY(tion)YH( + expects an argu)HY(ment)YH( of type refer)HY(ence)YH( to constant of the + member's type. It makes a deep copy of its argu)HY(ment)YH(. + Except for member's types that are mapped to funda)HY(men)HY(tal)YH( C++ types, + the second modi)HY(fier)YH( func)HY(tion)YH( is provided that expects an argu)HY(ment)YH( + of type auto)HY(matic)YH( pointer \201)SM(std::auto_ptr)ES( or + )SM(std::unique_ptr)ES(, depend)HY(ing)YH( on the C++ stan)HY(dard)YH( selected\202 + to the member's type. It assumes owner)HY(ship)YH( of the pointed to object + and resets the passed auto)HY(matic)YH( pointer. The last modi)HY(fier)YH( func)HY(tion)YH( + expects an argu)HY(ment)YH( of type refer)HY(ence)YH( to constant of the container + type. It makes a deep copy of its argu)HY(ment)YH(. For instance: + )EP( + + ) 5 56 PR( + + + +)RP( + + )0 P(is mapped to:)EP( + + ) 30 48 PR(class object: public xml_schema::type +{ +public: + // Type definitions. + // + typedef xml_schema::string member_type; + typedef optional member_optional; + + // Accessors. + // + const member_optional& + member \201\202 const; + + member_optional& + member \201\202; + + // Modifiers. + // + void + member \201const member_type&\202; + + void + member \201std::[auto|unique]_ptr\202; + + void + member \201const member_optional&\202; + + ... + +};)RP( + + + )0 P(The )SM(optional)ES( class template is defined in an + imple)HY(men)HY(ta)HY(tion)YH(-specific names)HY(pace)YH( and has the follow)HY(ing)YH( + inter)HY(face)YH(. The )SM([auto|unique]_ptr)ES(-based construc)HY(tor)YH( + and modi)HY(fier)YH( func)HY(tion)YH( are only avail)HY(able)YH( if the template + argu)HY(ment)YH( is not a funda)HY(men)HY(tal)YH( C++ type. + )EP( + + ) 97 52 PR(template +class optional +{ +public: + optional \201\202; + + // Makes a deep copy. + // + explicit + optional \201const X&\202; + + // Assumes ownership. + // + explicit + optional \201std::[auto|unique]_ptr\202; + + optional \201const optional&\202; + +public: + optional& + operator= \201const X&\202; + + optional& + operator= \201const optional&\202; + + // Pointer-like interface. + // +public: + const X* + operator-> \201\202 const; +)WR( + X* + operator-> \201\202; + + const X& + operator* \201\202 const; + + X& + operator* \201\202; + + typedef void \201optional::*bool_convertible\202 \201\202; + operator bool_convertible \201\202 const; + + // Get/set interface. + // +public: + bool + present \201\202 const; + + const X& + get \201\202 const; + + X& + get \201\202; + + // Makes a deep copy. + // + void + set \201const X&\202; + + // Assumes ownership.)WR( + // + void + set \201std::[auto|unique]_ptr\202; + + // Detach and return the contained value. + // + std::[auto|unique]_ptr + detach \201\202; + + void + reset \201\202; +}; + +template +bool +operator== \201const optional&, const optional&\202; + +template +bool +operator!= \201const optional&, const optional&\202; + +template +bool +operator< \201const optional&, const optional&\202; + +template +bool +operator> \201const optional&, const optional&\202; + +template )WR( +bool +operator<= \201const optional&, const optional&\202; + +template +bool +operator>= \201const optional&, const optional&\202;)RP( + + + )0 P(The follow)HY(ing)YH( code shows how one could use this mapping:)EP( + + ) 45 62 PR(void +f \201object& o\202 +{ + using xml_schema::string; + + if \201o.member \201\202.present \201\202\202 // test + { + string& s \201o.member \201\202.get \201\202\202; // get + o.member \201"hello"\202; // set, deep copy + o.member \201\202.set \201"hello"\202; // set, deep copy + o.member \201\202.reset \201\202; // reset + } + + // Same as above but using pointer notation: + // + if \201o.member \201\202\202 // test + { + string& s \201*o.member \201\202\202; // get + o.member \201"hello"\202; // set, deep copy + *o.member \201\202 = "hello"; // set, deep copy + o.member \201\202.reset \201\202; // reset + } + + // C++98 version. + // + std::auto_ptr p \201new string \201"hello"\202\202; + o.member \201p\202; // set, assumes ownership + + p = new string \201"hello"\202; + o.member \201\202.set \201p\202; // set, assumes ownership +)WR( + p = o.member \201\202.detach \201\202; // detach, member is reset + o.member \201\202.set \201p\202; // re-attach + + // C++11 version. + // + std::unique_ptr p \201new string \201"hello"\202\202; + o.member \201std::move \201p\202\202; // set, assumes ownership + + p.reset \201new string \201"hello"\202\202; + o.member \201\202.set \201std::move \201p\202\202; // set, assumes ownership + + p = o.member \201\202.detach \201\202; // detach, member is reset + o.member \201\202.set \201std::move \201p\202\202; // re-attach +})RP( + + + )0 3 46 H(2.8.3)WB 143 Sn()WB 50 Sn( Mapping for Members with the Sequence Cardi)HY(nal)HY(ity)YH( Class)EA()EH( + + )0 P(For the Sequence cardi)HY(nal)HY(ity)YH( class, the type defi)HY(ni)HY(tions)YH( consist of an + alias for the member's type with the name created by append)HY(ing)YH( + the )SM(_type)ES( suffix to the member's name, an alias of + the container type with the name created by append)HY(ing)YH( the + )SM(_sequence)ES( suffix to the member's name, an alias of + the iter)HY(a)HY(tor)YH( type with the name created by append)HY(ing)YH( the + )SM(_iter)HY(a)HY(tor)YH()ES( suffix to the member's name, and an alias + of the constant iter)HY(a)HY(tor)YH( type with the name created by append)HY(ing)YH( the + )SM(_const_iter)HY(a)HY(tor)YH()ES( suffix to the member's name. + )EP( + + )0 P(The acces)HY(sor)YH( func)HY(tions)YH( come in constant and non-constant versions. + The constant acces)HY(sor)YH( func)HY(tion)YH( returns a constant refer)HY(ence)YH( to the + container and can be used for read-only access. The non-constant + version returns an unre)HY(stricted)YH( refer)HY(ence)YH( to the container and can + be used for read-write access. + )EP( + + )0 P(The modi)HY(fier)YH( func)HY(tion)YH( expects an argu)HY(ment)YH( of type refer)HY(ence)YH( to + constant of the container type. The modi)HY(fier)YH( func)HY(tion)YH( + makes a deep copy of its argu)HY(ment)YH(. For instance: + )EP( + + + ) 5 64 PR( + + + +)RP( + + )0 P(is mapped to:)EP( + + ) 26 64 PR(class object: public xml_schema::type +{ +public: + // Type definitions. + // + typedef xml_schema::string member_type; + typedef sequence member_sequence; + typedef member_sequence::iterator member_iterator; + typedef member_sequence::const_iterator member_const_iterator; + + // Accessors. + // + const member_sequence& + member \201\202 const; + + member_sequence& + member \201\202; + + // Modifier. + // + void + member \201const member_sequence&\202; + + ... + +};)RP( + + )0 P(The )SM(sequence)ES( class template is defined in an + imple)HY(men)HY(ta)HY(tion)YH(-specific names)HY(pace)YH(. It conforms to the + sequence inter)HY(face)YH( as defined by the ISO/ANSI Stan)HY(dard)YH( for + C++ \201ISO/IEC 14882:1998, Section 23.1.1, "Sequences"\202. + Prac)HY(ti)HY(cally)YH(, this means that you can treat such a sequence + as if it was )SM(std::vector)ES(. Two notable exten)HY(sions)YH( + to the stan)HY(dard)YH( inter)HY(face)YH( that are avail)HY(able)YH( only for + sequences of non-funda)HY(men)HY(tal)YH( C++ types are the addi)HY(tion)YH( of + the over)HY(loaded)YH( )SM(push_back)ES( and )SM(insert)ES( + as well as the )SM(detach_back)ES( and )SM(detach)ES( + member func)HY(tions)YH(. The addi)HY(tional)YH( )SM(push_back)ES( and + )SM(insert)ES( func)HY(tions)YH( accept an auto)HY(matic)YH( pointer + \201)SM(std::auto_ptr)ES( or )SM(std::unique_ptr)ES(, + depend)HY(ing)YH( on the C++ stan)HY(dard)YH( selected\202 to the + element type instead of the constant refer)HY(ence)YH(. They assume + owner)HY(ship)YH( of the pointed to object and reset the passed + auto)HY(matic)YH( pointer. The )SM(detach_back)ES( and + )SM(detach)ES( func)HY(tions)YH( detach the element + value from the sequence container and, by default, remove + the element from the sequence. These addi)HY(tional)YH( func)HY(tions)YH( + have the follow)HY(ing)YH( signa)HY(tures)YH(:)EP( + + ) 22 55 PR(template +class sequence +{ +public: + ... + + void + push_back \201std::[auto|unique]_ptr\202 + + iterator + insert \201iterator position, std::[auto|unique]_ptr\202 + + std::[auto|unique]_ptr + detach_back \201bool pop = true\202; + + iterator + detach \201iterator position, + std::[auto|unique]_ptr& result, + bool erase = true\202 + + ... +})RP( + + )0 P(The follow)HY(ing)YH( code shows how one could use this mapping:)EP( + + ) 39 66 PR(void +f \201object& o\202 +{ + using xml_schema::string; + + object::member_sequence& s \201o.member \201\202\202; + + // Iteration. + // + for \201object::member_iterator i \201s.begin \201\202\202; i != s.end \201\202; ++i\202 + { + string& value \201*i\202; + } + + // Modification. + // + s.push_back \201"hello"\202; // deep copy + + // C++98 version. + // + std::auto_ptr p \201new string \201"hello"\202\202; + s.push_back \201p\202; // assumes ownership + p = s.detach_back \201\202; // detach and pop + s.push_back \201p\202; // re-append + + // C++11 version. + // + std::unique_ptr p \201new string \201"hello"\202\202; + s.push_back \201std::move \201p\202\202; // assumes ownership + p = s.detach_back \201\202; // detach and pop + s.push_back \201std::move \201p\202\202; // re-append)WR( + + // Setting a new container. + // + object::member_sequence n; + n.push_back \201"one"\202; + n.push_back \201"two"\202; + o.member \201n\202; // deep copy +})RP( + + )0 3 47 H(2.8.4)WB 144 Sn()WB 51 Sn( Element Order)EA()EH( + + )0 P(C++/Tree is a "flat)HY(ten)HY(ing)YH(" mapping in a sense that many levels of + nested compos)HY(i)HY(tors)YH( \201)SM(choice)ES( and )SM(sequence)ES(\202, + all poten)HY(tially)YH( with their own cardi)HY(nal)HY(i)HY(ties)YH(, are in the end mapped + to a flat set of elements with one of the three cardi)HY(nal)HY(ity)YH( classes + discussed in the previ)HY(ous)YH( sections. While this results in a simple + and easy to use API for most types, in certain cases, the order of + elements in the actual XML docu)HY(ments)YH( is not preserved once parsed + into the object model. And some)HY(times)YH( such order has + appli)HY(ca)HY(tion)YH(-specific signif)HY(i)HY(cance)YH(. As an example, consider a schema + that defines a batch of bank trans)HY(ac)HY(tions)YH(:)EP( + + ) 20 48 PR( + + + + + + + + + + + + + + + + + + +)RP( + + )0 P(The batch can contain any number of trans)HY(ac)HY(tions)YH( in any order + but the order of trans)HY(ac)HY(tions)YH( in each actual batch is signif)HY(i)HY(cant)YH(. + For instance, consider what could happen if we reorder the + trans)HY(ac)HY(tions)YH( and apply all the with)HY(drawals)YH( before deposits.)EP( + + )0 P(For the )SM(batch)ES( schema type defined above the default + C++/Tree mapping will produce a C++ class that contains a pair of + sequence contain)HY(ers)YH(, one for each of the two elements. While this + will capture the content \201trans)HY(ac)HY(tions)YH(\202, the order of this content + as it appears in XML will be lost. Also, if we try to seri)HY(al)HY(ize)YH( the + batch we just loaded back to XML, all the with)HY(drawal)YH( trans)HY(ac)HY(tions)YH( + will appear before deposits.)EP( + + )0 P(To over)HY(come)YH( this limi)HY(ta)HY(tion)YH( of a flat)HY(ten)HY(ing)YH( mapping, C++/Tree + allows us to mark certain XML Schema types, for which content + order is impor)HY(tant)YH(, as ordered.)EP( + + )0 P(There are several command line options that control which + schema types are treated as ordered. To make an indi)HY(vid)HY(ual)YH( + type ordered, we use the )SM(--ordered-type)ES( option, + for example:)EP( + + ) 1 20 PR(--ordered-type batch)RP( + + )0 P(To auto)HY(mat)HY(i)HY(cally)YH( treat all the types that are derived from an ordered + type also ordered, we use the )SM(--ordered-type-derived)ES( + option. This is primar)HY(ily)YH( useful if you would like to iterate + over the complete hier)HY(ar)HY(chy)YH('s content using the content order + sequence \201discussed below\202.)EP( + + )0 P(Ordered types are also useful for handling mixed content. To + auto)HY(mat)HY(i)HY(cally)YH( mark all the types with mixed content as ordered + we use the )SM(--ordered-type-mixed)ES( option. For more + infor)HY(ma)HY(tion)YH( on handling mixed content see )0 63 1 A(Section + 2.13, "Mapping for Mixed Content Models")63 0 TN TL()Ec /AF f D(.)EP( + + )0 P(Finally, we can mark all the types in the schema we are + compil)HY(ing)YH( with the )SM(--ordered-type-all)ES( option. + You should only resort to this option if all the types in + your schema truly suffer from the loss of content + order since, as we will discuss shortly, ordered types + require extra effort to access and, espe)HY(cially)YH(, modify. + See the + )R8 2 A(XSD + Compiler Command Line Manual)EA( for more infor)HY(ma)HY(tion)YH( on + these options.)EP( + + )0 P(Once a type is marked ordered, C++/Tree alters its mapping + in several ways. Firstly, for each local element, element + wild)HY(card)YH( \201)0 61 1 A(Section 2.12.4, "Element Wild)HY(card)YH( + Order")61 0 TN TL()Ec /AF f D(\202, and mixed content text \201)0 63 1 A(Section + 2.13, "Mapping for Mixed Content Models")63 0 TN TL()Ec /AF f D(\202 in this type, a + content id constant is gener)HY(ated)YH(. Secondly, an addi)HY(tion)YH( sequence + is added to the class that captures the content order. Here + is how the mapping of our )SM(batch)ES( class changes + once we make it ordered:)EP( + + ) 57 78 PR(class batch: public xml_schema::type +{ +public: + // withdraw + // + typedef withdraw withdraw_type; + typedef sequence withdraw_sequence; + typedef withdraw_sequence::iterator withdraw_iterator; + typedef withdraw_sequence::const_iterator withdraw_const_iterator; + + static const std::size_t withdraw_id = 1; + + const withdraw_sequence& + withdraw \201\202 const; + + withdraw_sequence& + withdraw \201\202; + + void + withdraw \201const withdraw_sequence&\202; + + // deposit + // + typedef deposit deposit_type; + typedef sequence deposit_sequence; + typedef deposit_sequence::iterator deposit_iterator; + typedef deposit_sequence::const_iterator deposit_const_iterator; + + static const std::size_t deposit_id = 2; + + const deposit_sequence&)WR( + deposit \201\202 const; + + deposit_sequence& + deposit \201\202; + + void + deposit \201const deposit_sequence&\202; + + // content_order + // + typedef xml_schema::content_order content_order_type; + typedef std::vector content_order_sequence; + typedef content_order_sequence::iterator content_order_iterator; + typedef content_order_sequence::const_iterator content_order_const_iterator; + + const content_order_sequence& + content_order \201\202 const; + + content_order_sequence& + content_order \201\202; + + void + content_order \201const content_order_sequence&\202; + + ... +};)RP( + + )0 P(Notice the )SM(with)HY(draw)YH(_id)ES( and )SM(deposit_id)ES( + content ids as well as the extra )SM(content_order)ES( + sequence that does not corre)HY(spond)YH( to any element in the + schema defi)HY(ni)HY(tion)YH(. The other changes to the mapping for ordered + types has to do with XML parsing and seri)HY(al)HY(iza)HY(tion)YH( code. During + parsing the content order is captured in the )SM(content_order)ES( + sequence while during seri)HY(al)HY(iza)HY(tion)YH( this sequence is used to + deter)HY(mine)YH( the order in which content is seri)HY(al)HY(ized)YH(. The + )SM(content_order)ES( sequence is also copied during + copy construc)HY(tion)YH( and assigned during copy assign)HY(ment)YH(. It is also + taken into account during compar)HY(i)HY(son)YH(.)EP( + + )0 P(The entry type of the )SM(content_order)ES( sequence is the + )SM(xml_schema::content_order)ES( type that has the follow)HY(ing)YH( + inter)HY(face)YH(:)EP( + + ) 19 58 PR(namespace xml_schema +{ + struct content_order + { + content_order \201std::size_t id, std::size_t index = 0\202; + + std::size_t id; + std::size_t index; + }; + + bool + operator== \201const content_order&, const content_order&\202; + + bool + operator!= \201const content_order&, const content_order&\202; + + bool + operator< \201const content_order&, const content_order&\202; +})RP( + + )0 P(The )SM(content_order)ES( sequence describes the order of + content \201elements, includ)HY(ing)YH( wild)HY(cards)YH(, as well as mixed content + text\202. Each entry in this sequence consists of the content id + \201for example, )SM(with)HY(draw)YH(_id)ES( or )SM(deposit_id)ES( + in our case\202 as well as, for elements of the sequence cardi)HY(nal)HY(ity)YH( + class, an index into the corre)HY(spond)HY(ing)YH( sequence container \201the + index is unused for the one and optional cardi)HY(nal)HY(ity)YH( classes\202. + For example, in our case, if the content id is )SM(with)HY(draw)YH(_id)ES(, + then the index will point into the )SM(with)HY(draw)YH()ES( element + sequence.)EP( + + )0 P(With all this infor)HY(ma)HY(tion)YH( we can now examine how to iterate over + trans)HY(ac)HY(tion)YH( in the batch in content order:)EP( + + ) 26 73 PR(batch& b = ... + +for \201batch::content_order_const_iterator i \201b.content_order \201\202.begin \201\202\202; + i != b.content_order \201\202.end \201\202; + ++i\202 +{ + switch \201i->id\202 + { + case batch::withdraw_id: + { + const withdraw& t \201b.withdraw \201\202[i->index]\202; + cerr << t.account \201\202 << " withdraw " << t.amount \201\202 << endl; + break; + } + case batch::deposit_id: + { + const deposit& t \201b.deposit \201\202[i->index]\202; + cerr << t.account \201\202 << " deposit " << t.amount \201\202 << endl; + break; + } + default: + { + assert \201false\202; // Unknown content id. + } + } +})RP( + + )0 P(If we seri)HY(al)HY(ized)YH( our batch back to XML, we would also see that the + order of trans)HY(ac)HY(tions)YH( in the output is exactly the same as in the + input rather than all the with)HY(drawals)YH( first followed by all the + deposits.)EP( + + )0 P(The most complex aspect of working with ordered types is + modi)HY(fi)HY(ca)HY(tions)YH(. Now we not only need to change the content, + but also remem)HY(ber)YH( to update the order infor)HY(ma)HY(tion)YH( corre)HY(spond)HY(ing)YH( + to this change. As a first example, we add a deposit trans)HY(ac)HY(tion)YH( + to the batch:)EP( + + ) 8 64 PR(using xml_schema::content_order; + +batch::deposit_sequence& d \201b.deposit \201\202\202; +batch::withdraw_sequence& w \201b.withdraw \201\202\202; +batch::content_order_sequence& co \201b.content_order \201\202\202; + +d.push_back \201deposit \201123456789, 100000\202\202; +co.push_back \201content_order \201batch::deposit_id, d.size \201\202 - 1\202\202;)RP( + + )0 P(In the above example we first added the content \201deposit + trans)HY(ac)HY(tion)YH(\202 and then updated the content order infor)HY(ma)HY(tion)YH( + by adding an entry with )SM(deposit_id)ES( content + id and the index of the just added deposit trans)HY(ac)HY(tion)YH(.)EP( + + )0 P(Remov)HY(ing)YH( the last trans)HY(ac)HY(tion)YH( can be easy if we know which + trans)HY(ac)HY(tion)YH( \201deposit or with)HY(drawal)YH(\202 is last:)EP( + + ) 2 15 PR(d.pop_back \201\202; +co.pop_back \201\202;)RP( + + )0 P(If, however, we do not know which trans)HY(ac)HY(tion)YH( is last, then + things get a bit more compli)HY(cated)YH(:)EP( + + ) 15 24 PR(switch \201co.back \201\202.id\202 +{ +case batch::withdraw_id: + { + d.pop_back \201\202; + break; + } +case batch::deposit_id: + { + w.pop_back \201\202; + break; + } +} + +co.pop_back \201\202;)RP( + + )0 P(The follow)HY(ing)YH( example shows how to add a trans)HY(ac)HY(tion)YH( at the + begin)HY(ning)YH( of the batch:)EP( + + ) 3 62 PR(w.push_back \201withdraw \201123456789, 100000\202\202; +co.insert \201co.begin \201\202, + content_order \201batch::withdraw_id, w.size \201\202 - 1\202\202;)RP( + + )0 P(Note also that when we merely modify the content of one + of the elements in place, we do not need to update its + order since it doesn't change. For example, here is how + we can change the amount in the first with)HY(drawal)YH(:)EP( + + ) 1 20 PR(w[0].amount \20110000\202;)RP( + + )0 P(For the complete working code shown in this section refer to the + )SM(order/element)ES( example in the + )SM(exam)HY(ples)YH(/cxx/tree/)ES( direc)HY(tory)YH( in the XSD distri)HY(bu)HY(tion)YH(.)EP( + + )0 P(If both the base and derived types are ordered, then the + content order sequence is only added to the base and the content + ids are unique within the whole hier)HY(ar)HY(chy)YH(. In this case + the content order sequence for the derived type contains + order)HY(ing)YH( infor)HY(ma)HY(tion)YH( for both base and derived content.)EP( + + )0 P(In some appli)HY(ca)HY(tions)YH( we may need to perform more complex + content process)HY(ing)YH(. For example, in our case, we may need + to remove all the with)HY(drawal)YH( trans)HY(ac)HY(tions)YH(. The default + container, )SM(std::vector)ES(, is not partic)HY(u)HY(larly)YH( + suit)HY(able)YH( for such oper)HY(a)HY(tions)YH(. What may be required by + some appli)HY(ca)HY(tions)YH( is a multi-index container that not + only allows us to iterate in content order similar to + )SM(std::vector)ES( but also search by the content + id as well as the content id and index pair.)EP( + + )0 P(While C++/Tree does not provide this func)HY(tion)HY(al)HY(ity)YH( by + default, it allows us to specify a custom container + type for content order with the )SM(--order-container)ES( + command line option. The only require)HY(ment)YH( from the + gener)HY(ated)YH( code side for such a container is to provide + the )SM(vector)ES(-like )SM(push_back\201\202)ES(, + )SM(size\201\202)ES(, and const iter)HY(a)HY(tion)YH( inter)HY(faces)YH(.)EP( + + )0 P(As an example, here is how we can use the Boost Multi-Index + container for content order. First we create the + )SM(content-order-container.hxx)ES( header with the + follow)HY(ing)YH( defi)HY(ni)HY(tion)YH( \201in C++11, use the alias template + instead\202:)EP( + + ) 33 58 PR(#ifndef CONTENT_ORDER_CONTAINER +#define CONTENT_ORDER_CONTAINER + +#include // std::size_t + +#include +#include +#include +#include +#include + +struct by_id {}; +struct by_id_index {}; + +template +struct content_order_container: + boost::multi_index::multi_index_container< + T, + boost::multi_index::indexed_by< + boost::multi_index::random_access<>, + boost::multi_index::ordered_unique< + boost::multi_index::tag, + boost::multi_index::identity + >, + boost::multi_index::ordered_non_unique< + boost::multi_index::tag, + boost::multi_index::member + > + > + > +{};)WR( + +#endif)RP( + + )0 P(Next we add the follow)HY(ing)YH( two XSD compiler options to include + this header into every gener)HY(ated)YH( header file and to use the + custom container type \201see the XSD compiler command line manual + for more infor)HY(ma)HY(tion)YH( on shell quoting for the first option\202:)EP( + + ) 2 55 PR(--hxx-prologue '#include "content-order-container.hxx"' +--order-container content_order_container)RP( + + )0 P(With these changes we can now use the multi-index func)HY(tion)HY(al)HY(ity)YH(, + for example, to search for a specific content id:)EP( + + ) 13 65 PR(typedef batch::content_order_sequence::index::type id_set; +typedef id_set::iterator id_iterator; + +const id_set& ids \201b.content_order \201\202.get \201\202\202; + +std::pair r \201 + ids.equal_range \201std::size_t \201batch::deposit_id\202\202; + +for \201id_iterator i \201r.first\202; i != r.second; ++i\202 +{ + const deposit& t \201b.deposit \201\202[i->index]\202; + cerr << t.account \201\202 << " deposit " << t.amount \201\202 << endl; +})RP( + + )0 2 48 H(2.9)WB 145 Sn()WB 52 Sn( Mapping for Global Elements)EA()EH( + + )0 P(An XML Schema element defi)HY(ni)HY(tion)YH( is called global if it appears + directly under the )SM(schema)ES( element. + A global element is a valid root of an instance docu)HY(ment)YH(. By + default, a global element is mapped to a set of over)HY(loaded)YH( + parsing and, option)HY(ally)YH(, seri)HY(al)HY(iza)HY(tion)YH( func)HY(tions)YH( with the + same name as the element. It is also possi)HY(ble)YH( to gener)HY(ate)YH( types + for root elements instead of parsing and seri)HY(al)HY(iza)HY(tion)YH( func)HY(tions)YH(. + This is primar)HY(ily)YH( useful to distin)HY(guish)YH( object models with the + same root type but with differ)HY(ent)YH( root elements. See + )0 53 1 A(Section 2.9.1, "Element Types")53 0 TN TL()Ec /AF f D( for details. + It is also possi)HY(ble)YH( to request the gener)HY(a)HY(tion)YH( of an element map + which allows uniform parsing and seri)HY(al)HY(iza)HY(tion)YH( of multi)HY(ple)YH( root + elements. See )0 54 1 A(Section 2.9.2, "Element Map")54 0 TN TL()Ec /AF f D( + for details. + )EP( + + )0 P(The parsing func)HY(tions)YH( read XML instance docu)HY(ments)YH( and return + corre)HY(spond)HY(ing)YH( object models as an auto)HY(matic)YH( pointer + \201)SM(std::auto_ptr)ES( or )SM(std::unique_ptr)ES(, + depend)HY(ing)YH( on the C++ stan)HY(dard)YH( selected\202. Their signa)HY(tures)YH( + have the follow)HY(ing)YH( pattern \201)SM(type)ES( denotes + element's type and )SM(name)ES( denotes element's + name\202: + )EP( + + ) 2 28 PR(std::[auto|unique]_ptr +name \201....\202;)RP( + + )0 P(The process of parsing, includ)HY(ing)YH( the exact signa)HY(tures)YH( of the parsing + func)HY(tions)YH(, is the subject of )0 64 1 A(Chapter 3, "Parsing")64 0 TN TL()Ec /AF f D(. + )EP( + + )0 P(The seri)HY(al)HY(iza)HY(tion)YH( func)HY(tions)YH( write object models back to XML instance + docu)HY(ments)YH(. Their signa)HY(tures)YH( have the follow)HY(ing)YH( pattern: + )EP( + + ) 2 41 PR(void +name \201&, const type&, ....\202;)RP( + + )0 P(The process of seri)HY(al)HY(iza)HY(tion)YH(, includ)HY(ing)YH( the exact signa)HY(tures)YH( of the + seri)HY(al)HY(iza)HY(tion)YH( func)HY(tions)YH(, is the subject of )0 81 1 A(Chapter 4, + "Seri)HY(al)HY(iza)HY(tion)YH(")81 0 TN TL()Ec /AF f D(. + )EP( + + + )0 3 49 H(2.9.1)WB 146 Sn()WB 53 Sn( Element Types)EA()EH( + + )0 P(The gener)HY(a)HY(tion)YH( of element types is requested with the + )SM(--gener)HY(ate)YH(-element-map)ES( option. With this option + each global element is mapped to a C++ class with the + same name as the element. Such a class is derived from + )SM(xml_schema::element_type)ES( and contains the same set + of type defi)HY(ni)HY(tions)YH(, construc)HY(tors)YH(, and member func)HY(tion)YH( as would a + type contain)HY(ing)YH( a single element with the One cardi)HY(nal)HY(ity)YH( class + named )SM("value")ES(. In addi)HY(tion)YH(, the element type also + contains a set of member func)HY(tions)YH( for access)HY(ing)YH( the element + name and names)HY(pace)YH( as well as its value in a uniform manner. + For example:)EP( + + ) 7 34 PR( + + ... + + + +)RP( + +)0 P(is mapped to:)EP( + + ) 62 59 PR(class type +{ + ... +}; + +class root: public xml_schema::element_type +{ +public: + // Element value. + // + typedef type value_type; + + const value_type& + value \201\202 const; + + value_type& + value \201\202; + + void + value \201const value_type&\202; + + void + value \201std::[auto|unique]_ptr\202; + + // Constructors. + // + root \201const value_type&\202; + + root \201std::[auto|unique]_ptr\202; + + root \201const xercesc::DOMElement&, xml_schema::flags = 0\202;)WR( + + root \201const root&, xml_schema::flags = 0\202; + + virtual root* + _clone \201xml_schema::flags = 0\202 const; + + // Element name and namespace. + // + static const std::string& + name \201\202; + + static const std::string& + namespace_ \201\202; + + virtual const std::string& + _name \201\202 const; + + virtual const std::string& + _namespace \201\202 const; + + // Element value as xml_schema::type. + // + virtual const xml_schema::type* + _value \201\202 const; + + virtual xml_schema::type* + _value \201\202; +}; + +void)WR( +operator<< \201xercesc::DOMElement&, const root&\202;)RP( + + )0 P(The )SM(xml_schema::element_type)ES( class is a common + base type for all element types and is defined as follows:)EP( + + ) 24 39 PR(namespace xml_schema +{ + class element_type + { + public: + virtual + ~element_type \201\202; + + virtual element_type* + _clone \201flags f = 0\202 const = 0; + + virtual const std::basic_string& + _name \201\202 const = 0; + + virtual const std::basic_string& + _namespace \201\202 const = 0; + + virtual xml_schema::type* + _value \201\202 = 0; + + virtual const xml_schema::type* + _value \201\202 const = 0; + }; +})RP( + + )0 P(The )SM(_value\201\202)ES( member func)HY(tion)YH( returns a pointer to + the element value or 0 if the element is of a funda)HY(men)HY(tal)YH( C++ + type and there)HY(fore)YH( is not derived from )SM(xml_schema::type)ES(. + )EP( + + )0 P(Unlike parsing and seri)HY(al)HY(iza)HY(tion)YH( func)HY(tions)YH(, element types + are only capable of parsing and seri)HY(al)HY(iz)HY(ing)YH( from/to a + )SM(DOMEle)HY(ment)YH()ES( object. This means that the appli)HY(ca)HY(tion)YH( + will need to perform its own XML-to-DOM parsing and DOM-to-XML + seri)HY(al)HY(iza)HY(tion)YH(. The follow)HY(ing)YH( section describes a mech)HY(a)HY(nism)YH( + provided by the mapping to uniformly parse and seri)HY(al)HY(ize)YH( + multi)HY(ple)YH( root elements.)EP( + + + )0 3 50 H(2.9.2)WB 147 Sn()WB 54 Sn( Element Map)EA()EH( + + )0 P(When element types are gener)HY(ated)YH( for root elements it is also + possi)HY(ble)YH( to request the gener)HY(a)HY(tion)YH( of an element map with the + )SM(--gener)HY(ate)YH(-element-map)ES( option. The element map + allows uniform parsing and seri)HY(al)HY(iza)HY(tion)YH( of multi)HY(ple)YH( root + elements via the common )SM(xml_schema::element_type)ES( + base type. The )SM(xml_schema::element_map)ES( class is + defined as follows:)EP( + + ) 12 59 PR(namespace xml_schema +{ + class element_map + { + public: + static std::[auto|unique]_ptr + parse \201const xercesc::DOMElement&, flags = 0\202; + + static void + serialize \201xercesc::DOMElement&, const element_type&\202; + }; +})RP( + + )0 P(The )SM(parse\201\202)ES( func)HY(tion)YH( creates the corre)HY(spond)HY(ing)YH( + element type object based on the element name and names)HY(pace)YH( + and returns it as an auto)HY(matic)YH( pointer \201)SM(std::auto_ptr)ES( + or )SM(std::unique_ptr)ES(, depend)HY(ing)YH( on the C++ stan)HY(dard)YH( + selected\202 to )SM(xml_schema::element_type)ES(. + The )SM(seri)HY(al)HY(ize)YH(\201\202)ES( func)HY(tion)YH( seri)HY(al)HY(izes)YH( the passed element + object to )SM(DOMEle)HY(ment)YH()ES(. Note that in case of + )SM(seri)HY(al)HY(ize)YH(\201\202)ES(, the )SM(DOMEle)HY(ment)YH()ES( object + should have the correct name and names)HY(pace)YH(. If no element type is + avail)HY(able)YH( for an element, both func)HY(tions)YH( throw the + )SM(xml_schema::no_element_info)ES( excep)HY(tion)YH(:)EP( + + ) 14 66 PR(struct no_element_info: virtual exception +{ + no_element_info \201const std::basic_string& element_name, + const std::basic_string& element_namespace\202; + + const std::basic_string& + element_name \201\202 const; + + const std::basic_string& + element_namespace \201\202 const; + + virtual const char* + what \201\202 const throw \201\202; +};)RP( + + )0 P(The appli)HY(ca)HY(tion)YH( can discover the actual type of the element + object returned by )SM(parse\201\202)ES( either using + )SM(dynamic_cast)ES( or by compar)HY(ing)YH( element names and + names)HY(paces)YH(. The follow)HY(ing)YH( code frag)HY(ments)YH( illus)HY(trate)YH( how the + element map can be used:)EP( + + ) 18 50 PR(// Parsing. +// +DOMElement& e = ... // Parse XML to DOM. + +auto_ptr r \201 + xml_schema::element_map::parse \201e\202\202; + +if \201root1 r1 = dynamic_cast \201r.get \201\202\202\202 +{ + ... +} +else if \201r->_name == root2::name \201\202 && + r->_namespace \201\202 == root2::namespace_ \201\202\202 +{ + root2& r2 \201static_cast \201*r\202\202; + + ... +})RP( + + ) 13 68 PR(// Serialization. +// +xml_schema::element_type& r = ... + +string name \201r._name \201\202\202; +string ns \201r._namespace \201\202\202; + +DOMDocument& doc = ... // Create a new DOMDocument with name and ns. +DOMElement& e \201*doc->getDocumentElement \201\202\202; + +xml_schema::element_map::serialize \201e, r\202; + +// Serialize DOMDocument to XML.)RP( + + + + )0 2 51 H(2.10)WB 148 Sn()WB 55 Sn( Mapping for Global Attributes)EA()EH( + + )0 P(An XML Schema attribute defi)HY(ni)HY(tion)YH( is called global if it appears + directly under the )SM(schema)ES( element. A global + attribute does not have any mapping. + )EP( + + + + )0 2 52 H(2.11)WB 149 Sn()WB 56 Sn( Mapping for )SM(xsi:type)ES( and Substi)HY(tu)HY(tion)YH( + Groups)EA()EH( + + )0 P(The mapping provides optional support for the XML Schema poly)HY(mor)HY(phism)YH( + features \201)SM(xsi:type)ES( and substi)HY(tu)HY(tion)YH( groups\202 which can + be requested with the )SM(--gener)HY(ate)YH(-poly)HY(mor)HY(phic)YH()ES( option. + When used, the dynamic type of a member may be differ)HY(ent)YH( from + its static type. Consider the follow)HY(ing)YH( schema defi)HY(ni)HY(tion)YH( and + instance docu)HY(ment)YH(: + )EP( + + ) 28 62 PR( + + + + + + + + + + + + + + + + + + + + + + + + + + +)RP( + + )0 P(In the result)HY(ing)YH( object model, the container for + the )SM(root::item)ES( member will have two elements: + the first element's type will be )SM(base)ES( while + the second element's \201dynamic\202 type will be + )SM(derived)ES(. This can be discov)HY(ered)YH( using the + )SM(dynamic_cast)ES( oper)HY(a)HY(tor)YH( as shown in the follow)HY(ing)YH( + example: + )EP( + + ) 17 56 PR(void +f \201root& r\202 +{ + for \201root::item_const_iterator i \201r.item \201\202.begin \201\202\202; + i != r.item \201\202.end \201\202 + ++i\202 + { + if \201derived* d = dynamic_cast \201&\201*i\202\202\202 + { + // derived + } + else + { + // base + } + } +})RP( + + )0 P(The )SM(_clone)ES( virtual func)HY(tion)YH( should be used instead of + copy construc)HY(tors)YH( to make copies of members that might use + poly)HY(mor)HY(phism)YH(: + )EP( + + ) 10 56 PR(void +f \201root& r\202 +{ + for \201root::item_const_iterator i \201r.item \201\202.begin \201\202\202; + i != r.item \201\202.end \201\202 + ++i\202 + { + std::auto_ptr c \201i->_clone \201\202\202; + } +})RP( + + )0 P(The mapping can often auto)HY(mat)HY(i)HY(cally)YH( deter)HY(mine)YH( which types are + poly)HY(mor)HY(phic)YH( based on the substi)HY(tu)HY(tion)YH( group decla)HY(ra)HY(tions)YH(. However, + if your XML vocab)HY(u)HY(lary)YH( is not using substi)HY(tu)HY(tion)YH( groups or if + substi)HY(tu)HY(tion)YH( groups are defined in a sepa)HY(rate)YH( schema, then you will + need to use the )SM(--poly)HY(mor)HY(phic)YH(-type)ES( option to specify + which types are poly)HY(mor)HY(phic)YH(. When using this option you only need + to specify the root of a poly)HY(mor)HY(phic)YH( type hier)HY(ar)HY(chy)YH( and the mapping + will assume that all the derived types are also poly)HY(mor)HY(phic)YH(. + Also note that you need to specify this option when compil)HY(ing)YH( every + schema file that refer)HY(ences)YH( the poly)HY(mor)HY(phic)YH( type. Consider the follow)HY(ing)YH( + two schemas as an example:)EP( + + ) 13 55 PR( + + + + + + + + + + + +)RP( + + ) 18 70 PR( + + + + + + + + + + + + + + + + +)RP( + + )0 P(In this example we need to specify ")SM(--poly)HY(mor)HY(phic)YH(-type base)ES(" + when compil)HY(ing)YH( both schemas because the substi)HY(tu)HY(tion)YH( group is declared + in a schema other than the one defin)HY(ing)YH( type )SM(base)ES(.)EP( + + )0 P(You can also indi)HY(cate)YH( that all types should be treated as poly)HY(mor)HY(phic)YH( + with the )SM(--poly)HY(mor)HY(phic)YH(-type-all)ES(. However, this may result + in slower gener)HY(ated)YH( code with a greater foot)HY(print)YH(.)EP( + + + + + + )0 2 53 H(2.12)WB 150 Sn()WB 57 Sn( Mapping for )SM(any)ES( and )SM(anyAt)HY(tribute)YH()ES()EA()EH( + + )0 P(For the XML Schema )SM(any)ES( and )SM(anyAt)HY(tribute)YH()ES( + wild)HY(cards)YH( an optional mapping can be requested with the + )SM(--gener)HY(ate)YH(-wild)HY(card)YH()ES( option. The mapping repre)HY(sents)YH( + the content matched by wild)HY(cards)YH( as DOM frag)HY(ments)YH(. Because the + DOM API is used to access such content, the Xerces-C++ runtime + should be initial)HY(ized)YH( by the appli)HY(ca)HY(tion)YH( prior to parsing and + should remain initial)HY(ized)YH( for the life)HY(time)YH( of objects with + the wild)HY(card)YH( content. For more infor)HY(ma)HY(tion)YH( on the Xerces-C++ + runtime initial)HY(iza)HY(tion)YH( see )0 65 1 A(Section 3.1, + "Initial)HY(iz)HY(ing)YH( the Xerces-C++ Runtime")65 0 TN TL()Ec /AF f D(. + )EP( + + )0 P(The mapping for )SM(any)ES( is similar to the mapping for + local elements \201see )0 47 1 A(Section 2.8, "Mapping for Local + Elements and Attributes")47 0 TN TL()Ec /AF f D(\202 except that the type used in the + wild)HY(card)YH( mapping is )SM(xercesc::DOMEle)HY(ment)YH()ES(. As with local + elements, the mapping divides all possi)HY(ble)YH( cardi)HY(nal)HY(ity)YH( combi)HY(na)HY(tions)YH( + into three cardi)HY(nal)HY(ity)YH( classes: )I(one)ES(, )I(optional)ES(, and + )I(sequence)ES(. + )EP( + + )0 P(The mapping for )SM(anyAt)HY(tribute)YH()ES( repre)HY(sents)YH( the attributes + matched by this wild)HY(card)YH( as a set of )SM(xercesc::DOMAttr)ES( + objects with a key being the attribute's name and names)HY(pace)YH(.)EP( + + )0 P(Similar to local elements and attributes, the )SM(any)ES( and + )SM(anyAt)HY(tribute)YH()ES( wild)HY(cards)YH( are mapped to a set of public type + defi)HY(ni)HY(tions)YH( \201type)HY(defs)YH(\202 and a set of public acces)HY(sor)YH( and modi)HY(fier)YH( + func)HY(tions)YH(. Type defi)HY(ni)HY(tions)YH( have names derived from )SM("any")ES( + for the )SM(any)ES( wild)HY(card)YH( and )SM("any_attribute")ES( + for the )SM(anyAt)HY(tribute)YH()ES( wild)HY(card)YH(. The acces)HY(sor)YH( and modi)HY(fier)YH( + func)HY(tions)YH( are named )SM("any")ES( for the )SM(any)ES( wild)HY(card)YH( + and )SM("any_attribute")ES( for the )SM(anyAt)HY(tribute)YH()ES( + wild)HY(card)YH(. Subse)HY(quent)YH( wild)HY(cards)YH( in the same type have escaped names + such as )SM("any1")ES( or )SM("any_attribute1")ES(. + )EP( + + )0 P(Because Xerces-C++ DOM nodes always belong to a )SM(DOMDoc)HY(u)HY(ment)YH()ES(, + each type with a wild)HY(card)YH( has an asso)HY(ci)HY(ated)YH( )SM(DOMDoc)HY(u)HY(ment)YH()ES( + object. The refer)HY(ence)YH( to this object can be obtained using the acces)HY(sor)YH( + func)HY(tion)YH( called )SM(dom_docu)HY(ment)YH()ES(. The access to the docu)HY(ment)YH( + object from the appli)HY(ca)HY(tion)YH( code may be neces)HY(sary)YH( to create or modify + the wild)HY(card)YH( content. For example: + )EP( + + ) 6 37 PR( + + + + +)RP( + + )0 P(is mapped to:)EP( + + ) 37 73 PR(class object: public xml_schema::type +{ +public: + // any + // + const xercesc::DOMElement& + any \201\202 const; + + void + any \201const xercesc::DOMElement&\202; + + ... + + // any_attribute + // + typedef attribute_set any_attribute_set; + typedef any_attribute_set::iterator any_attribute_iterator; + typedef any_attribute_set::const_iterator any_attribute_const_iterator; + + const any_attribute_set& + any_attribute \201\202 const; + + any_attribute_set& + any_attribute \201\202; + + ... + + // DOMDocument object for wildcard content. + // + const xercesc::DOMDocument& + dom_document \201\202 const;)WR( + + xercesc::DOMDocument& + dom_document \201\202; + + ... +};)RP( + + + )0 P(Names and seman)HY(tics)YH( of type defi)HY(ni)HY(tions)YH( for the wild)HY(cards)YH( as well + as signa)HY(tures)YH( of the acces)HY(sor)YH( and modi)HY(fier)YH( func)HY(tions)YH( depend on the + wild)HY(card)YH( type as well as the cardi)HY(nal)HY(ity)YH( class for the )SM(any)ES( + wild)HY(card)YH(. They are described in the follow)HY(ing)YH( sub-sections. + )EP( + + + )0 3 54 H(2.12.1)WB 151 Sn()WB 58 Sn( Mapping for )SM(any)ES( with the One Cardi)HY(nal)HY(ity)YH( Class)EA()EH( + + )0 P(For )SM(any)ES( with the One cardi)HY(nal)HY(ity)YH( class, + there are no type defi)HY(ni)HY(tions)YH(. The acces)HY(sor)YH( func)HY(tions)YH( come in + constant and non-constant versions. The constant acces)HY(sor)YH( func)HY(tion)YH( + returns a constant refer)HY(ence)YH( to )SM(xercesc::DOMEle)HY(ment)YH()ES( and + can be used for read-only access. The non-constant version returns + an unre)HY(stricted)YH( refer)HY(ence)YH( to )SM(xercesc::DOMEle)HY(ment)YH()ES( and can + be used for read-write access. + )EP( + + )0 P(The first modi)HY(fier)YH( func)HY(tion)YH( expects an argu)HY(ment)YH( of type refer)HY(ence)YH( + to constant )SM(xercesc::DOMEle)HY(ment)YH()ES( and makes a deep copy + of its argu)HY(ment)YH(. The second modi)HY(fier)YH( func)HY(tion)YH( expects an argu)HY(ment)YH( of + type pointer to )SM(xercesc::DOMEle)HY(ment)YH()ES(. This modi)HY(fier)YH( + func)HY(tion)YH( assumes owner)HY(ship)YH( of its argu)HY(ment)YH( and expects the element + object to be created using the DOM docu)HY(ment)YH( asso)HY(ci)HY(ated)YH( with this + instance. For example: + )EP( + + ) 5 30 PR( + + + +)RP( + + )0 P(is mapped to:)EP( + + ) 22 37 PR(class object: public xml_schema::type +{ +public: + // Accessors. + // + const xercesc::DOMElement& + any \201\202 const; + + xercesc::DOMElement& + any \201\202; + + // Modifiers. + // + void + any \201const xercesc::DOMElement&\202; + + void + any \201xercesc::DOMElement*\202; + + ... + +};)RP( + + + )0 P(The follow)HY(ing)YH( code shows how one could use this mapping:)EP( + + ) 10 66 PR(void +f \201object& o, const xercesc::DOMElement& e\202 +{ + using namespace xercesc; + + DOMElement& e1 \201o.any \201\202\202; // get + o.any \201e\202 // set, deep copy + DOMDocument& doc \201o.dom_document \201\202\202; + o.any \201doc.createElement \201...\202\202; // set, assumes ownership +})RP( + + )0 3 55 H(2.12.2)WB 152 Sn()WB 59 Sn( Mapping for )SM(any)ES( with the Optional Cardi)HY(nal)HY(ity)YH( Class)EA()EH( + + )0 P(For )SM(any)ES( with the Optional cardi)HY(nal)HY(ity)YH( class, the type + defi)HY(ni)HY(tions)YH( consist of an alias for the container type with name + )SM(any_optional)ES( \201or )SM(any1_optional)ES(, etc., for + subse)HY(quent)YH( wild)HY(cards)YH( in the type defi)HY(ni)HY(tion)YH(\202. + )EP( + + )0 P(Unlike acces)HY(sor)YH( func)HY(tions)YH( for the One cardi)HY(nal)HY(ity)YH( class, acces)HY(sor)YH( + func)HY(tions)YH( for the Optional cardi)HY(nal)HY(ity)YH( class return refer)HY(ences)YH( to + corre)HY(spond)HY(ing)YH( contain)HY(ers)YH( rather than directly to )SM(DOMEle)HY(ment)YH()ES(. + The acces)HY(sor)YH( func)HY(tions)YH( come in constant and non-constant versions. + The constant acces)HY(sor)YH( func)HY(tion)YH( returns a constant refer)HY(ence)YH( to + the container and can be used for read-only access. The non-constant + version returns an unre)HY(stricted)YH( refer)HY(ence)YH( to the container + and can be used for read-write access. + )EP( + + )0 P(The modi)HY(fier)YH( func)HY(tions)YH( are over)HY(loaded)YH( for )SM(xercesc::DOMEle)HY(ment)YH()ES( + and the container type. The first modi)HY(fier)YH( func)HY(tion)YH( expects an argu)HY(ment)YH( of + type refer)HY(ence)YH( to constant )SM(xercesc::DOMEle)HY(ment)YH()ES( and + makes a deep copy of its argu)HY(ment)YH(. The second modi)HY(fier)YH( func)HY(tion)YH( + expects an argu)HY(ment)YH( of type pointer to )SM(xercesc::DOMEle)HY(ment)YH()ES(. + This modi)HY(fier)YH( func)HY(tion)YH( assumes owner)HY(ship)YH( of its argu)HY(ment)YH( and expects + the element object to be created using the DOM docu)HY(ment)YH( asso)HY(ci)HY(ated)YH( + with this instance. The third modi)HY(fier)YH( func)HY(tion)YH( expects an argu)HY(ment)YH( + of type refer)HY(ence)YH( to constant of the container type and makes a + deep copy of its argu)HY(ment)YH(. For instance: + )EP( + + ) 5 44 PR( + + + +)RP( + + )0 P(is mapped to:)EP( + + ) 29 40 PR(class object: public xml_schema::type +{ +public: + // Type definitions. + // + typedef element_optional any_optional; + + // Accessors. + // + const any_optional& + any \201\202 const; + + any_optional& + any \201\202; + + // Modifiers. + // + void + any \201const xercesc::DOMElement&\202; + + void + any \201xercesc::DOMElement*\202; + + void + any \201const any_optional&\202; + + ... + +};)RP( + + + )0 P(The )SM(element_optional)ES( container is a + special)HY(iza)HY(tion)YH( of the )SM(optional)ES( class template described + in )0 49 1 A(Section 2.8.2, "Mapping for Members with the Optional + Cardi)HY(nal)HY(ity)YH( Class")49 0 TN TL()Ec /AF f D(. Its inter)HY(face)YH( is presented below: + )EP( + + ) 72 71 PR(class element_optional +{ +public: + explicit + element_optional \201xercesc::DOMDocument&\202; + + // Makes a deep copy. + // + element_optional \201const xercesc::DOMElement&, xercesc::DOMDocument&\202; + + // Assumes ownership. + // + element_optional \201xercesc::DOMElement*, xercesc::DOMDocument&\202; + + element_optional \201const element_optional&, xercesc::DOMDocument&\202; + +public: + element_optional& + operator= \201const xercesc::DOMElement&\202; + + element_optional& + operator= \201const element_optional&\202; + + // Pointer-like interface. + // +public: + const xercesc::DOMElement* + operator-> \201\202 const; + + xercesc::DOMElement* + operator-> \201\202;)WR( + + const xercesc::DOMElement& + operator* \201\202 const; + + xercesc::DOMElement& + operator* \201\202; + + typedef void \201element_optional::*bool_convertible\202 \201\202; + operator bool_convertible \201\202 const; + + // Get/set interface. + // +public: + bool + present \201\202 const; + + const xercesc::DOMElement& + get \201\202 const; + + xercesc::DOMElement& + get \201\202; + + // Makes a deep copy. + // + void + set \201const xercesc::DOMElement&\202; + + // Assumes ownership. + // + void)WR( + set \201xercesc::DOMElement*\202; + + void + reset \201\202; +}; + +bool +operator== \201const element_optional&, const element_optional&\202; + +bool +operator!= \201const element_optional&, const element_optional&\202;)RP( + + + )0 P(The follow)HY(ing)YH( code shows how one could use this mapping:)EP( + + ) 25 69 PR(void +f \201object& o, const xercesc::DOMElement& e\202 +{ + using namespace xercesc; + + DOMDocument& doc \201o.dom_document \201\202\202; + + if \201o.any \201\202.present \201\202\202 // test + { + DOMElement& e1 \201o.any \201\202.get \201\202\202; // get + o.any \201\202.set \201e\202; // set, deep copy + o.any \201\202.set \201doc.createElement \201...\202\202; // set, assumes ownership + o.any \201\202.reset \201\202; // reset + } + + // Same as above but using pointer notation: + // + if \201o.member \201\202\202 // test + { + DOMElement& e1 \201*o.any \201\202\202; // get + o.any \201e\202; // set, deep copy + o.any \201doc.createElement \201...\202\202; // set, assumes ownership + o.any \201\202.reset \201\202; // reset + } +})RP( + + + + )0 3 56 H(2.12.3)WB 153 Sn()WB 60 Sn( Mapping for )SM(any)ES( with the Sequence Cardi)HY(nal)HY(ity)YH( Class)EA()EH( + + )0 P(For )SM(any)ES( with the Sequence cardi)HY(nal)HY(ity)YH( class, the type + defi)HY(ni)HY(tions)YH( consist of an alias of the container type with name + )SM(any_sequence)ES( \201or )SM(any1_sequence)ES(, etc., for + subse)HY(quent)YH( wild)HY(cards)YH( in the type defi)HY(ni)HY(tion)YH(\202, an alias of the iter)HY(a)HY(tor)YH( + type with name )SM(any_iter)HY(a)HY(tor)YH()ES( \201or )SM(any1_iter)HY(a)HY(tor)YH()ES(, + etc., for subse)HY(quent)YH( wild)HY(cards)YH( in the type defi)HY(ni)HY(tion)YH(\202, and an alias + of the constant iter)HY(a)HY(tor)YH( type with name )SM(any_const_iter)HY(a)HY(tor)YH()ES( + \201or )SM(any1_const_iter)HY(a)HY(tor)YH()ES(, etc., for subse)HY(quent)YH( wild)HY(cards)YH( + in the type defi)HY(ni)HY(tion)YH(\202. + )EP( + + )0 P(The acces)HY(sor)YH( func)HY(tions)YH( come in constant and non-constant versions. + The constant acces)HY(sor)YH( func)HY(tion)YH( returns a constant refer)HY(ence)YH( to the + container and can be used for read-only access. The non-constant + version returns an unre)HY(stricted)YH( refer)HY(ence)YH( to the container and can + be used for read-write access. + )EP( + + )0 P(The modi)HY(fier)YH( func)HY(tion)YH( expects an argu)HY(ment)YH( of type refer)HY(ence)YH( to + constant of the container type. The modi)HY(fier)YH( func)HY(tion)YH( makes + a deep copy of its argu)HY(ment)YH(. For instance: + )EP( + + + ) 5 52 PR( + + + +)RP( + + )0 P(is mapped to:)EP( + + ) 25 58 PR(class object: public xml_schema::type +{ +public: + // Type definitions. + // + typedef element_sequence any_sequence; + typedef any_sequence::iterator any_iterator; + typedef any_sequence::const_iterator any_const_iterator; + + // Accessors. + // + const any_sequence& + any \201\202 const; + + any_sequence& + any \201\202; + + // Modifier. + // + void + any \201const any_sequence&\202; + + ... + +};)RP( + + )0 P(The )SM(element_sequence)ES( container is a + special)HY(iza)HY(tion)YH( of the )SM(sequence)ES( class template described + in )0 50 1 A(Section 2.8.3, "Mapping for Members with the + Sequence Cardi)HY(nal)HY(ity)YH( Class")50 0 TN TL()Ec /AF f D(. Its inter)HY(face)YH( is similar to + the sequence inter)HY(face)YH( as defined by the ISO/ANSI Stan)HY(dard)YH( for + C++ \201ISO/IEC 14882:1998, Section 23.1.1, "Sequences"\202 and is + presented below: + )EP( + + ) 178 70 PR(class element_sequence +{ +public: + typedef xercesc::DOMElement value_type; + typedef xercesc::DOMElement* pointer; + typedef const xercesc::DOMElement* const_pointer; + typedef xercesc::DOMElement& reference; + typedef const xercesc::DOMElement& const_reference; + + typedef iterator; + typedef const_iterator; + typedef reverse_iterator; + typedef const_reverse_iterator; + + typedef size_type; + typedef difference_type; + typedef allocator_type; + +public: + explicit + element_sequence \201xercesc::DOMDocument&\202; + + // DOMElement cannot be default-constructed. + // + // explicit + // element_sequence \201size_type n\202; + + element_sequence \201size_type n, + const xercesc::DOMElement&, + xercesc::DOMDocument&\202; +)WR( + template + element_sequence \201const I& begin, + const I& end, + xercesc::DOMDocument&\202; + + element_sequence \201const element_sequence&, xercesc::DOMDocument&\202; + + element_sequence& + operator= \201const element_sequence&\202; + +public: + void + assign \201size_type n, const xercesc::DOMElement&\202; + + template + void + assign \201const I& begin, const I& end\202; + +public: + // This version of resize can only be used to shrink the + // sequence because DOMElement cannot be default-constructed. + // + void + resize \201size_type\202; + + void + resize \201size_type, const xercesc::DOMElement&\202; + +public: + size_type)WR( + size \201\202 const; + + size_type + max_size \201\202 const; + + size_type + capacity \201\202 const; + + bool + empty \201\202 const; + + void + reserve \201size_type\202; + + void + clear \201\202; + +public: + const_iterator + begin \201\202 const; + + const_iterator + end \201\202 const; + + iterator + begin \201\202; + + iterator + end \201\202; +)WR( + const_reverse_iterator + rbegin \201\202 const; + + const_reverse_iterator + rend \201\202 const + + reverse_iterator + rbegin \201\202; + + reverse_iterator + rend \201\202; + +public: + xercesc::DOMElement& + operator[] \201size_type\202; + + const xercesc::DOMElement& + operator[] \201size_type\202 const; + + xercesc::DOMElement& + at \201size_type\202; + + const xercesc::DOMElement& + at \201size_type\202 const; + + xercesc::DOMElement& + front \201\202; + + const xercesc::DOMElement& + front \201\202 const;)WR( + + xercesc::DOMElement& + back \201\202; + + const xercesc::DOMElement& + back \201\202 const; + +public: + // Makes a deep copy. + // + void + push_back \201const xercesc::DOMElement&\202; + + // Assumes ownership. + // + void + push_back \201xercesc::DOMElement*\202; + + void + pop_back \201\202; + + // Makes a deep copy. + // + iterator + insert \201iterator position, const xercesc::DOMElement&\202; + + // Assumes ownership. + // + iterator + insert \201iterator position, xercesc::DOMElement*\202;)WR( + + void + insert \201iterator position, size_type n, const xercesc::DOMElement&\202; + + template + void + insert \201iterator position, const I& begin, const I& end\202; + + iterator + erase \201iterator position\202; + + iterator + erase \201iterator begin, iterator end\202; + +public: + // Note that the DOMDocument object of the two sequences being + // swapped should be the same. + // + void + swap \201sequence& x\202; +}; + +inline bool +operator== \201const element_sequence&, const element_sequence&\202; + +inline bool +operator!= \201const element_sequence&, const element_sequence&\202;)RP( + + + )0 P(The follow)HY(ing)YH( code shows how one could use this mapping:)EP( + + ) 20 63 PR(void +f \201object& o, const xercesc::DOMElement& e\202 +{ + using namespace xercesc; + + object::any_sequence& s \201o.any \201\202\202; + + // Iteration. + // + for \201object::any_iterator i \201s.begin \201\202\202; i != s.end \201\202; ++i\202 + { + DOMElement& e \201*i\202; + } + + // Modification. + // + s.push_back \201e\202; // deep copy + DOMDocument& doc \201o.dom_document \201\202\202; + s.push_back \201doc.createElement \201...\202\202; // assumes ownership +})RP( + + )0 3 57 H(2.12.4)WB 154 Sn()WB 61 Sn( Element Wild)HY(card)YH( Order)EA()EH( + + )0 P(Similar to elements, element wild)HY(cards)YH( in ordered types + \201)0 51 1 A(Section 2.8.4, "Element Order")51 0 TN TL()Ec /AF f D(\202 are assigned + content ids and are included in the content order sequence. + Contin)HY(u)HY(ing)YH( with the bank trans)HY(ac)HY(tions)YH( example started in Section + 2.8.4, we can extend the batch by allow)HY(ing)YH( custom trans)HY(ac)HY(tions)YH(:)EP( + + ) 7 52 PR( + + + + + +)RP( + + )0 P(This will lead to the follow)HY(ing)YH( changes in the gener)HY(ated)YH( + )SM(batch)ES( C++ class:)EP( + + ) 24 58 PR(class batch: public xml_schema::type +{ +public: + ... + + // any + // + typedef element_sequence any_sequence; + typedef any_sequence::iterator any_iterator; + typedef any_sequence::const_iterator any_const_iterator; + + static const std::size_t any_id = 3UL; + + const any_sequence& + any \201\202 const; + + any_sequence& + any \201\202; + + void + any \201const any_sequence&\202; + + ... +};)RP( + + )0 P(With this change we also need to update the iter)HY(a)HY(tion)YH( code to handle + the new content id:)EP( + + ) 18 73 PR(for \201batch::content_order_const_iterator i \201b.content_order \201\202.begin \201\202\202; + i != b.content_order \201\202.end \201\202; + ++i\202 +{ + switch \201i->id\202 + { + ... + + case batch::any_id: + { + const DOMElement& e \201b.any \201\202[i->index]\202; + ... + break; + } + + ... + } +})RP( + + )0 P(For the complete working code that shows the use of wild)HY(cards)YH( in + ordered types refer to the )SM(order/element)ES( example in + the )SM(exam)HY(ples)YH(/cxx/tree/)ES( direc)HY(tory)YH( in the XSD + distri)HY(bu)HY(tion)YH(.)EP( + + )0 3 58 H(2.12.5)WB 155 Sn()WB 62 Sn( Mapping for )SM(anyAt)HY(tribute)YH()ES()EA()EH( + + )0 P(For )SM(anyAt)HY(tribute)YH()ES( the type defi)HY(ni)HY(tions)YH( consist of an alias + of the container type with name )SM(any_attribute_set)ES( + \201or )SM(any1_attribute_set)ES(, etc., for subse)HY(quent)YH( wild)HY(cards)YH( + in the type defi)HY(ni)HY(tion)YH(\202, an alias of the iter)HY(a)HY(tor)YH( type with name + )SM(any_attribute_iter)HY(a)HY(tor)YH()ES( \201or )SM(any1_attribute_iter)HY(a)HY(tor)YH()ES(, + etc., for subse)HY(quent)YH( wild)HY(cards)YH( in the type defi)HY(ni)HY(tion)YH(\202, and an alias + of the constant iter)HY(a)HY(tor)YH( type with name )SM(any_attribute_const_iter)HY(a)HY(tor)YH()ES( + \201or )SM(any1_attribute_const_iter)HY(a)HY(tor)YH()ES(, etc., for subse)HY(quent)YH( + wild)HY(cards)YH( in the type defi)HY(ni)HY(tion)YH(\202. + )EP( + + )0 P(The acces)HY(sor)YH( func)HY(tions)YH( come in constant and non-constant versions. + The constant acces)HY(sor)YH( func)HY(tion)YH( returns a constant refer)HY(ence)YH( to the + container and can be used for read-only access. The non-constant + version returns an unre)HY(stricted)YH( refer)HY(ence)YH( to the container and can + be used for read-write access. + )EP( + + )0 P(The modi)HY(fier)YH( func)HY(tion)YH( expects an argu)HY(ment)YH( of type refer)HY(ence)YH( to + constant of the container type. The modi)HY(fier)YH( func)HY(tion)YH( makes + a deep copy of its argu)HY(ment)YH(. For instance: + )EP( + + + ) 6 37 PR( + + ... + + +)RP( + + )0 P(is mapped to:)EP( + + ) 25 73 PR(class object: public xml_schema::type +{ +public: + // Type definitions. + // + typedef attribute_set any_attribute_set; + typedef any_attribute_set::iterator any_attribute_iterator; + typedef any_attribute_set::const_iterator any_attribute_const_iterator; + + // Accessors. + // + const any_attribute_set& + any_attribute \201\202 const; + + any_attribute_set& + any_attribute \201\202; + + // Modifier. + // + void + any_attribute \201const any_attribute_set&\202; + + ... + +};)RP( + + )0 P(The )SM(attribute_set)ES( class is an asso)HY(cia)HY(tive)YH( container + similar to the )SM(std::set)ES( class template as defined by + the ISO/ANSI Stan)HY(dard)YH( for C++ \201ISO/IEC 14882:1998, Section 23.3.3, + "Class template set"\202 with the key being the attribute's name + and names)HY(pace)YH(. Unlike )SM(std::set)ES(, )SM(attribute_set)ES( + allows search)HY(ing)YH( using names and names)HY(paces)YH( instead of + )SM(xercesc::DOMAttr)ES( objects. It is defined in an + imple)HY(men)HY(ta)HY(tion)YH(-specific names)HY(pace)YH( and its inter)HY(face)YH( is presented + below: + )EP( + + ) 166 70 PR(class attribute_set +{ +public: + typedef xercesc::DOMAttr key_type; + typedef xercesc::DOMAttr value_type; + typedef xercesc::DOMAttr* pointer; + typedef const xercesc::DOMAttr* const_pointer; + typedef xercesc::DOMAttr& reference; + typedef const xercesc::DOMAttr& const_reference; + + typedef iterator; + typedef const_iterator; + typedef reverse_iterator; + typedef const_reverse_iterator; + + typedef size_type; + typedef difference_type; + typedef allocator_type; + +public: + attribute_set \201xercesc::DOMDocument&\202; + + template + attribute_set \201const I& begin, const I& end, xercesc::DOMDocument&\202; + + attribute_set \201const attribute_set&, xercesc::DOMDocument&\202; + + attribute_set& + operator= \201const attribute_set&\202; + +public:)WR( + const_iterator + begin \201\202 const; + + const_iterator + end \201\202 const; + + iterator + begin \201\202; + + iterator + end \201\202; + + const_reverse_iterator + rbegin \201\202 const; + + const_reverse_iterator + rend \201\202 const; + + reverse_iterator + rbegin \201\202; + + reverse_iterator + rend \201\202; + +public: + size_type + size \201\202 const; + + size_type + max_size \201\202 const;)WR( + + bool + empty \201\202 const; + + void + clear \201\202; + +public: + // Makes a deep copy. + // + std::pair + insert \201const xercesc::DOMAttr&\202; + + // Assumes ownership. + // + std::pair + insert \201xercesc::DOMAttr*\202; + + // Makes a deep copy. + // + iterator + insert \201iterator position, const xercesc::DOMAttr&\202; + + // Assumes ownership. + // + iterator + insert \201iterator position, xercesc::DOMAttr*\202; + + template + void)WR( + insert \201const I& begin, const I& end\202; + +public: + void + erase \201iterator position\202; + + size_type + erase \201const std::basic_string& name\202; + + size_type + erase \201const std::basic_string& namespace_, + const std::basic_string& name\202; + + size_type + erase \201const XMLCh* name\202; + + size_type + erase \201const XMLCh* namespace_, const XMLCh* name\202; + + void + erase \201iterator begin, iterator end\202; + +public: + size_type + count \201const std::basic_string& name\202 const; + + size_type + count \201const std::basic_string& namespace_, + const std::basic_string& name\202 const; +)WR( + size_type + count \201const XMLCh* name\202 const; + + size_type + count \201const XMLCh* namespace_, const XMLCh* name\202 const; + + iterator + find \201const std::basic_string& name\202; + + iterator + find \201const std::basic_string& namespace_, + const std::basic_string& name\202; + + iterator + find \201const XMLCh* name\202; + + iterator + find \201const XMLCh* namespace_, const XMLCh* name\202; + + const_iterator + find \201const std::basic_string& name\202 const; + + const_iterator + find \201const std::basic_string& namespace_, + const std::basic_string& name\202 const; + + const_iterator + find \201const XMLCh* name\202 const; + + const_iterator)WR( + find \201const XMLCh* namespace_, const XMLCh* name\202 const; + +public: + // Note that the DOMDocument object of the two sets being + // swapped should be the same. + // + void + swap \201attribute_set&\202; +}; + +bool +operator== \201const attribute_set&, const attribute_set&\202; + +bool +operator!= \201const attribute_set&, const attribute_set&\202;)RP( + + )0 P(The follow)HY(ing)YH( code shows how one could use this mapping:)EP( + + ) 25 73 PR(void +f \201object& o, const xercesc::DOMAttr& a\202 +{ + using namespace xercesc; + + object::any_attribute_set& s \201o.any_attribute \201\202\202; + + // Iteration. + // + for \201object::any_attribute_iterator i \201s.begin \201\202\202; i != s.end \201\202; ++i\202 + { + DOMAttr& a \201*i\202; + } + + // Modification. + // + s.insert \201a\202; // deep copy + DOMDocument& doc \201o.dom_document \201\202\202; + s.insert \201doc.createAttribute \201...\202\202; // assumes ownership + + // Searching. + // + object::any_attribute_iterator i \201s.find \201"name"\202\202; + i = s.find \201"http://www.w3.org/XML/1998/namespace", "lang"\202; +})RP( + + + + )0 2 59 H(2.13)WB 156 Sn()WB 63 Sn( Mapping for Mixed Content Models)EA()EH( + + )0 P(For XML Schema types with mixed content models C++/Tree provides + mapping support only if the type is marked as ordered + \201)0 51 1 A(Section 2.8.4, "Element Order")51 0 TN TL()Ec /AF f D(\202. Use the + )SM(--ordered-type-mixed)ES( XSD compiler option to + auto)HY(mat)HY(i)HY(cally)YH( mark all types with mixed content as ordered.)EP( + + )0 P(For an ordered type with mixed content, C++/Tree adds an extra + text content sequence that is used to store the text frag)HY(ments)YH(. + This text content sequence is also assigned the content id and + its entries are included in the content order sequence, just + like elements. As a result, it is possi)HY(ble)YH( to capture the order + between elements and text frag)HY(ments)YH(.)EP( + + )0 P(As an example, consider the follow)HY(ing)YH( schema that describes text + with embed)HY(ded)YH( links:)EP( + + ) 13 73 PR( + + + + + + + + + + + +)RP( + + )0 P(The gener)HY(ated)YH( )SM(text)ES( C++ class will provide the follow)HY(ing)YH( + API \201assum)HY(ing)YH( it is marked as ordered\202:)EP( + + ) 57 78 PR(class text: public xml_schema::type +{ +public: + // a + // + typedef anchor a_type; + typedef sequence a_sequence; + typedef a_sequence::iterator a_iterator; + typedef a_sequence::const_iterator a_const_iterator; + + static const std::size_t a_id = 1UL; + + const a_sequence& + a \201\202 const; + + a_sequence& + a \201\202; + + void + a \201const a_sequence&\202; + + // text_content + // + typedef xml_schema::string text_content_type; + typedef sequence text_content_sequence; + typedef text_content_sequence::iterator text_content_iterator; + typedef text_content_sequence::const_iterator text_content_const_iterator; + + static const std::size_t text_content_id = 2UL; + + const text_content_sequence&)WR( + text_content \201\202 const; + + text_content_sequence& + text_content \201\202; + + void + text_content \201const text_content_sequence&\202; + + // content_order + // + typedef xml_schema::content_order content_order_type; + typedef std::vector content_order_sequence; + typedef content_order_sequence::iterator content_order_iterator; + typedef content_order_sequence::const_iterator content_order_const_iterator; + + const content_order_sequence& + content_order \201\202 const; + + content_order_sequence& + content_order \201\202; + + void + content_order \201const content_order_sequence&\202; + + ... +};)RP( + + )0 P(Given this inter)HY(face)YH( we can iterate over both link elements + and text in content order. The follow)HY(ing)YH( code frag)HY(ment)YH( converts + our format to plain text with refer)HY(ences)YH(.)EP( + + ) 26 72 PR(const text& t = ... + +for \201text::content_order_const_iterator i \201t.content_order \201\202.begin \201\202\202; + i != t.content_order \201\202.end \201\202; + ++i\202 +{ + switch \201i->id\202 + { + case text::a_id: + { + const anchor& a \201t.a \201\202[i->index]\202; + cerr << a << "[" << a.href \201\202 << "]"; + break; + } + case text::text_content_id: + { + const xml_schema::string& s \201t.text_content \201\202[i->index]\202; + cerr << s; + break; + } + default: + { + assert \201false\202; // Unknown content id. + } + } +})RP( + + )0 P(For the complete working code that shows the use of mixed content + in ordered types refer to the )SM(order/mixed)ES( example in + the )SM(exam)HY(ples)YH(/cxx/tree/)ES( direc)HY(tory)YH( in the XSD + distri)HY(bu)HY(tion)YH(.)EP( + + + + + )0 1 60 H(3)WB 157 Sn()WB 64 Sn( Parsing)EA()EH( + + )0 P(This chapter covers various aspects of parsing XML instance + docu)HY(ments)YH( in order to obtain corre)HY(spond)HY(ing)YH( tree-like object + model. + )EP( + + )0 P(Each global XML Schema element in the form:)EP( + + ) 1 34 PR()RP( + + )0 P(is mapped to 14 over)HY(loaded)YH( C++ func)HY(tions)YH( in the form:)EP( + + ) 96 65 PR(// Read from a URI or a local file. +// + +std::[auto|unique]_ptr +name \201const std::basic_string& uri, + xml_schema::flags = 0, + const xml_schema::properties& = xml_schema::properties \201\202\202; + +std::[auto|unique]_ptr +name \201const std::basic_string& uri, + xml_schema::error_handler&, + xml_schema::flags = 0, + const xml_schema::properties& = xml_schema::properties \201\202\202; + +std::[auto|unique]_ptr +name \201const std::basic_string& uri, + xercesc::DOMErrorHandler&, + xml_schema::flags = 0, + const xml_schema::properties& = xml_schema::properties \201\202\202; + + +// Read from std::istream. +// + +std::[auto|unique]_ptr +name \201std::istream&, + xml_schema::flags = 0, + const xml_schema::properties& = xml_schema::properties \201\202\202; + +std::[auto|unique]_ptr +name \201std::istream&,)WR( + xml_schema::error_handler&, + xml_schema::flags = 0, + const xml_schema::properties& = xml_schema::properties \201\202\202; + +std::[auto|unique]_ptr +name \201std::istream&, + xercesc::DOMErrorHandler&, + xml_schema::flags = 0, + const xml_schema::properties& = xml_schema::properties \201\202\202; + + +std::[auto|unique]_ptr +name \201std::istream&, + const std::basic_string& id, + xml_schema::flags = 0, + const xml_schema::properties& = xml_schema::properties \201\202\202; + +std::[auto|unique]_ptr +name \201std::istream&, + const std::basic_string& id, + xml_schema::error_handler&, + xml_schema::flags = 0, + const xml_schema::properties& = xml_schema::properties \201\202\202; + +std::[auto|unique]_ptr +name \201std::istream&, + const std::basic_string& id, + xercesc::DOMErrorHandler&, + xml_schema::flags = 0, + const xml_schema::properties& = xml_schema::properties \201\202\202;)WR( + + +// Read from InputSource. +// + +std::[auto|unique]_ptr +name \201xercesc::InputSource&, + xml_schema::flags = 0, + const xml_schema::properties& = xml_schema::properties \201\202\202; + +std::[auto|unique]_ptr +name \201xercesc::InputSource&, + xml_schema::error_handler&, + xml_schema::flags = 0, + const xml_schema::properties& = xml_schema::properties \201\202\202; + +std::[auto|unique]_ptr +name \201xercesc::InputSource&, + xercesc::DOMErrorHandler&, + xml_schema::flags = 0, + const xml_schema::properties& = xml_schema::properties \201\202\202; + + +// Read from DOM. +// + +std::[auto|unique]_ptr +name \201const xercesc::DOMDocument&, + xml_schema::flags = 0, + const xml_schema::properties& = xml_schema::properties \201\202\202;)WR( + +std::[auto|unique]_ptr +name \201xml_schema::dom::[auto|unique]_ptr, + xml_schema::flags = 0, + const xml_schema::properties& = xml_schema::properties \201\202\202;)RP( + + )0 P(You can choose between reading an XML instance from a local file, + URI, )SM(std::istream)ES(, )SM(xercesc::Input)HY(Source)YH()ES(, + or a pre-parsed DOM instance in the form of + )SM(xercesc::DOMDoc)HY(u)HY(ment)YH()ES(. All the parsing func)HY(tions)YH( + return a dynam)HY(i)HY(cally)YH( allo)HY(cated)YH( object model as either + )SM(std::auto_ptr)ES( or )SM(std::unique_ptr)ES(, + depend)HY(ing)YH( on the C++ stan)HY(dard)YH( selected. Each of these parsing + func)HY(tions)YH( is discussed in more detail in the follow)HY(ing)YH( sections. + )EP( + + )0 2 61 H(3.1)WB 158 Sn()WB 65 Sn( Initial)HY(iz)HY(ing)YH( the Xerces-C++ Runtime)EA()EH( + + )0 P(Some parsing func)HY(tions)YH( expect you to initial)HY(ize)YH( the Xerces-C++ + runtime while others initial)HY(ize)YH( and termi)HY(nate)YH( it as part of their + work. The general rule is as follows: if a func)HY(tion)YH( has any argu)HY(ments)YH( + or return a value that is an instance of a Xerces-C++ type, then + this func)HY(tion)YH( expects you to initial)HY(ize)YH( the Xerces-C++ runtime. + Other)HY(wise)YH(, the func)HY(tion)YH( initial)HY(izes)YH( and termi)HY(nates)YH( the runtime for + you. Note that it is legal to have nested calls to the Xerces-C++ + initial)HY(ize)YH( and termi)HY(nate)YH( func)HY(tions)YH( as long as the calls are balanced. + )EP( + + )0 P(You can instruct parsing func)HY(tions)YH( that initial)HY(ize)YH( and termi)HY(nate)YH( + the runtime not to do so by passing the + )SM(xml_schema::flags::dont_initial)HY(ize)YH()ES( flag \201see + )0 66 1 A(Section 3.2, "Flags and Prop)HY(er)HY(ties)YH(")66 0 TN TL()Ec /AF f D(\202. + )EP( + + + )0 2 62 H(3.2)WB 159 Sn()WB 66 Sn( Flags and Prop)HY(er)HY(ties)YH()EA()EH( + + )0 P(Parsing flags and prop)HY(er)HY(ties)YH( are the last two argu)HY(ments)YH( of every + parsing func)HY(tion)YH(. They allow you to fine-tune the process of + instance vali)HY(da)HY(tion)YH( and parsing. Both argu)HY(ments)YH( are optional. + )EP( + + + )0 P(The follow)HY(ing)YH( flags are recog)HY(nized)YH( by the parsing func)HY(tions)YH(:)EP( + + )0 DL( )0 DT()SM(xml_schema::flags::keep_dom)ES( + )DD(Keep asso)HY(ci)HY(a)HY(tion)YH( between DOM nodes and the result)HY(ing)YH( + object model nodes. For more infor)HY(ma)HY(tion)YH( about DOM asso)HY(ci)HY(a)HY(tion)YH( + refer to )0 93 1 A(Section 5.1, "DOM Asso)HY(ci)HY(a)HY(tion)YH(")93 0 TN TL()Ec /AF f D(. + + )0 DT()SM(xml_schema::flags::own_dom)ES( + )DD(Assume owner)HY(ship)YH( of the DOM docu)HY(ment)YH( passed. This flag only + makes sense together with the )SM(keep_dom)ES( flag in + the call to the parsing func)HY(tion)YH( with the + )SM(xml_schema::dom::[auto|unique]_ptr)ES( + argu)HY(ment)YH(. + + )0 DT()SM(xml_schema::flags::dont_vali)HY(date)YH()ES( + )DD(Do not vali)HY(date)YH( instance docu)HY(ments)YH( against schemas. + + )0 DT()SM(xml_schema::flags::dont_initial)HY(ize)YH()ES( + )DD(Do not initial)HY(ize)YH( the Xerces-C++ runtime. + )LD( + + )0 P(You can pass several flags by combin)HY(ing)YH( them using the bit-wise OR + oper)HY(a)HY(tor)YH(. For example:)EP( + + ) 4 61 PR(using xml_schema::flags; + +std::auto_ptr r \201 + name \201"test.xml", flags::keep_dom | flags::dont_validate\202\202;)RP( + + )0 P(By default, vali)HY(da)HY(tion)YH( of instance docu)HY(ments)YH( is turned on even + though parsers gener)HY(ated)YH( by XSD do not assume instance + docu)HY(ments)YH( are valid. They include a number of checks that prevent + construc)HY(tion)YH( of incon)HY(sis)HY(tent)YH( object models. This, + however, does not mean that an instance docu)HY(ment)YH( that was + success)HY(fully)YH( parsed by the XSD-gener)HY(ated)YH( parsers is + valid per the corre)HY(spond)HY(ing)YH( schema. If an instance docu)HY(ment)YH( is not + "valid enough" for the gener)HY(ated)YH( parsers to construct consis)HY(tent)YH( + object model, one of the excep)HY(tions)YH( defined in + )SM(xml_schema)ES( names)HY(pace)YH( is thrown \201see + )0 67 1 A(Section 3.3, "Error Handling")67 0 TN TL()Ec /AF f D(\202. + )EP( + + )0 P(For more infor)HY(ma)HY(tion)YH( on the Xerces-C++ runtime initial)HY(iza)HY(tion)YH( + refer to )0 65 1 A(Section 3.1, "Initial)HY(iz)HY(ing)YH( the Xerces-C++ + Runtime")65 0 TN TL()Ec /AF f D(. + )EP( + + )0 P(The )SM(xml_schema::prop)HY(er)HY(ties)YH()ES( class allows you to + program)HY(mat)HY(i)HY(cally)YH( specify schema loca)HY(tions)YH( to be used instead + of those spec)HY(i)HY(fied)YH( with the )SM(xsi::schemaLo)HY(ca)HY(tion)YH()ES( + and )SM(xsi::noNames)HY(paceSchemaLo)HY(ca)HY(tion)YH()ES( attributes + in instance docu)HY(ments)YH(. The inter)HY(face)YH( of the )SM(prop)HY(er)HY(ties)YH()ES( + class is presented below: + )EP( + + ) 9 70 PR(class properties +{ +public: + void + schema_location \201const std::basic_string& namespace_, + const std::basic_string& location\202; + void + no_namespace_schema_location \201const std::basic_string& location\202; +};)RP( + + )0 P(Note that all loca)HY(tions)YH( are rela)HY(tive)YH( to an instance docu)HY(ment)YH( unless + they are URIs. For example, if you want to use a local file as your + schema, then you will need to pass + )SM(file:///abso)HY(lute)YH(/path/to/your/schema)ES( as the loca)HY(tion)YH( + argu)HY(ment)YH(. + )EP( + + )0 2 63 H(3.3)WB 160 Sn()WB 67 Sn( Error Handling)EA()EH( + + )0 P(As discussed in )0 14 1 A(Section 2.2, "Error Handling")14 0 TN TL()Ec /AF f D(, + the mapping uses the C++ excep)HY(tion)YH( handling mech)HY(a)HY(nism)YH( as its primary + way of report)HY(ing)YH( error condi)HY(tions)YH(. However, to handle recov)HY(er)HY(able)YH( + parsing and vali)HY(da)HY(tion)YH( errors and warn)HY(ings)YH(, a call)HY(back)YH( inter)HY(face)YH( maybe + preferred by the appli)HY(ca)HY(tion)YH(.)EP( + + )0 P(To better under)HY(stand)YH( error handling and report)HY(ing)YH( strate)HY(gies)YH( employed + by the parsing func)HY(tions)YH(, it is useful to know that the + trans)HY(for)HY(ma)HY(tion)YH( of an XML instance docu)HY(ment)YH( to a stat)HY(i)HY(cally)YH(-typed + tree happens in two stages. The first stage, performed by Xerces-C++, + consists of parsing an XML docu)HY(ment)YH( into a DOM instance. For short, + we will call this stage the XML-DOM stage. Vali)HY(da)HY(tion)YH(, if not disabled, + happens during this stage. The second stage, + performed by the gener)HY(ated)YH( parsers, consist of parsing the DOM + instance into the stat)HY(i)HY(cally)YH(-typed tree. We will call this stage + the DOM-Tree stage. Addi)HY(tional)YH( checks are performed during this + stage in order to prevent construc)HY(tion)YH( of incon)HY(sis)HY(tent)YH( tree which + could other)HY(wise)YH( happen when vali)HY(da)HY(tion)YH( is disabled, for example.)EP( + + )0 P(All parsing func)HY(tions)YH( except the one that oper)HY(ates)YH( on a DOM instance + come in over)HY(loaded)YH( triples. The first func)HY(tion)YH( in such a triple + reports error condi)HY(tions)YH( exclu)HY(sively)YH( by throw)HY(ing)YH( excep)HY(tions)YH(. It + accu)HY(mu)HY(lates)YH( all the parsing and vali)HY(da)HY(tion)YH( errors of the XML-DOM + stage and throws them in a single instance of the + )SM(xml_schema::parsing)ES( excep)HY(tion)YH( \201described below\202. + The second and the third func)HY(tions)YH( in the triple use call)HY(back)YH( + inter)HY(faces)YH( to report parsing and vali)HY(da)HY(tion)YH( errors and warn)HY(ings)YH(. + The two call)HY(back)YH( inter)HY(faces)YH( are )SM(xml_schema::error_handler)ES( + and )SM(xercesc::DOMEr)HY(rorHan)HY(dler)YH()ES(. For more infor)HY(ma)HY(tion)YH( + on the )SM(xercesc::DOMEr)HY(rorHan)HY(dler)YH()ES( inter)HY(face)YH( refer to + the Xerces-C++ docu)HY(men)HY(ta)HY(tion)YH(. The )SM(xml_schema::error_handler)ES( + inter)HY(face)YH( is presented below: + )EP( + + ) 23 51 PR(class error_handler +{ +public: + struct severity + { + enum value + { + warning, + error, + fatal + }; + }; + + virtual bool + handle \201const std::basic_string& id, + unsigned long line, + unsigned long column, + severity, + const std::basic_string& message\202 = 0; + + virtual + ~error_handler \201\202; +};)RP( + + )0 P(The )SM(id)ES( argu)HY(ment)YH( of the )SM(error_handler::handle)ES( + func)HY(tion)YH( iden)HY(ti)HY(fies)YH( the resource being parsed \201e.g., a file name or + URI\202. + )EP( + + )0 P(By return)HY(ing)YH( )SM(true)ES( from the )SM(handle)ES( func)HY(tion)YH( + you instruct the parser to recover and continue parsing. Return)HY(ing)YH( + )SM(false)ES( results in termi)HY(na)HY(tion)YH( of the parsing process. + An error with the )SM(fatal)ES( sever)HY(ity)YH( level results in + termi)HY(na)HY(tion)YH( of the parsing process no matter what is returned from + the )SM(handle)ES( func)HY(tion)YH(. It is safe to throw an excep)HY(tion)YH( + from the )SM(handle)ES( func)HY(tion)YH(. + )EP( + + )0 P(The DOM-Tree stage reports error condi)HY(tions)YH( exclu)HY(sively)YH( by throw)HY(ing)YH( + excep)HY(tions)YH(. Indi)HY(vid)HY(ual)YH( excep)HY(tions)YH( thrown by the parsing func)HY(tions)YH( + are described in the follow)HY(ing)YH( sub-sections. + )EP( + + + )0 3 64 H(3.3.1)WB 161 Sn()WB 68 Sn( )SM(xml_schema::parsing)ES()EA()EH( + + ) 57 56 PR(struct severity +{ + enum value + { + warning, + error + }; + + severity \201value\202; + operator value \201\202 const; +}; + +struct error +{ + error \201severity, + const std::basic_string& id, + unsigned long line, + unsigned long column, + const std::basic_string& message\202; + + severity + severity \201\202 const; + + const std::basic_string& + id \201\202 const; + + unsigned long + line \201\202 const; + + unsigned long + column \201\202 const;)WR( + + const std::basic_string& + message \201\202 const; +}; + +std::basic_ostream& +operator<< \201std::basic_ostream&, const error&\202; + +struct diagnostics: std::vector +{ +}; + +std::basic_ostream& +operator<< \201std::basic_ostream&, const diagnostics&\202; + +struct parsing: virtual exception +{ + parsing \201\202; + parsing \201const diagnostics&\202; + + const diagnostics& + diagnostics \201\202 const; + + virtual const char* + what \201\202 const throw \201\202; +};)RP( + + )0 P(The )SM(xml_schema::parsing)ES( excep)HY(tion)YH( is thrown if there + were parsing or vali)HY(da)HY(tion)YH( errors reported during the XML-DOM stage. + If no call)HY(back)YH( inter)HY(face)YH( was provided to the parsing func)HY(tion)YH(, the + excep)HY(tion)YH( contains a list of errors and warn)HY(ings)YH( acces)HY(si)HY(ble)YH( using + the )SM(diag)HY(nos)HY(tics)YH()ES( func)HY(tion)YH(. The usual condi)HY(tions)YH( when + this excep)HY(tion)YH( is thrown include malformed XML instances and, if + vali)HY(da)HY(tion)YH( is turned on, invalid instance docu)HY(ments)YH(. + )EP( + + )0 3 65 H(3.3.2)WB 162 Sn()WB 69 Sn( )SM(xml_schema::expected_element)ES()EA()EH( + + ) 16 60 PR(struct expected_element: virtual exception +{ + expected_element \201const std::basic_string& name, + const std::basic_string& namespace_\202; + + + const std::basic_string& + name \201\202 const; + + const std::basic_string& + namespace_ \201\202 const; + + + virtual const char* + what \201\202 const throw \201\202; +};)RP( + + )0 P(The )SM(xml_schema::expected_element)ES( excep)HY(tion)YH( is thrown + when an expected element is not encoun)HY(tered)YH( by the DOM-Tree stage. + The name and names)HY(pace)YH( of the expected element can be obtained using + the )SM(name)ES( and )SM(names)HY(pace)YH(_)ES( func)HY(tions)YH( respec)HY(tively)YH(. + )EP( + + + )0 3 66 H(3.3.3)WB 163 Sn()WB 70 Sn( )SM(xml_schema::unex)HY(pected)YH(_element)ES()EA()EH( + + ) 25 72 PR(struct unexpected_element: virtual exception +{ + unexpected_element \201const std::basic_string& encountered_name, + const std::basic_string& encountered_namespace, + const std::basic_string& expected_name, + const std::basic_string& expected_namespace\202 + + + const std::basic_string& + encountered_name \201\202 const; + + const std::basic_string& + encountered_namespace \201\202 const; + + + const std::basic_string& + expected_name \201\202 const; + + const std::basic_string& + expected_namespace \201\202 const; + + + virtual const char* + what \201\202 const throw \201\202; +};)RP( + + )0 P(The )SM(xml_schema::unex)HY(pected)YH(_element)ES( excep)HY(tion)YH( is thrown + when an unex)HY(pected)YH( element is encoun)HY(tered)YH( by the DOM-Tree stage. + The name and names)HY(pace)YH( of the encoun)HY(tered)YH( element can be obtained + using the )SM(encoun)HY(tered)YH(_name)ES( and + )SM(encoun)HY(tered)YH(_names)HY(pace)YH()ES( func)HY(tions)YH( respec)HY(tively)YH(. If an + element was expected instead of the encoun)HY(tered)YH( one, its name + and names)HY(pace)YH( can be obtained using the )SM(expected_name)ES( and + )SM(expected_names)HY(pace)YH()ES( func)HY(tions)YH( respec)HY(tively)YH(. Other)HY(wise)YH( + these func)HY(tions)YH( return empty strings. + )EP( + + )0 3 67 H(3.3.4)WB 164 Sn()WB 71 Sn( )SM(xml_schema::expected_attribute)ES()EA()EH( + + ) 16 62 PR(struct expected_attribute: virtual exception +{ + expected_attribute \201const std::basic_string& name, + const std::basic_string& namespace_\202; + + + const std::basic_string& + name \201\202 const; + + const std::basic_string& + namespace_ \201\202 const; + + + virtual const char* + what \201\202 const throw \201\202; +};)RP( + + )0 P(The )SM(xml_schema::expected_attribute)ES( excep)HY(tion)YH( is thrown + when an expected attribute is not encoun)HY(tered)YH( by the DOM-Tree stage. + The name and names)HY(pace)YH( of the expected attribute can be obtained using + the )SM(name)ES( and )SM(names)HY(pace)YH(_)ES( func)HY(tions)YH( respec)HY(tively)YH(. + )EP( + + + )0 3 68 H(3.3.5)WB 165 Sn()WB 72 Sn( )SM(xml_schema::unex)HY(pected)YH(_enumer)HY(a)HY(tor)YH()ES()EA()EH( + + ) 10 65 PR(struct unexpected_enumerator: virtual exception +{ + unexpected_enumerator \201const std::basic_string& enumerator\202; + + const std::basic_string& + enumerator \201\202 const; + + virtual const char* + what \201\202 const throw \201\202; +};)RP( + + )0 P(The )SM(xml_schema::unex)HY(pected)YH(_enumer)HY(a)HY(tor)YH()ES( excep)HY(tion)YH( is thrown + when an unex)HY(pected)YH( enumer)HY(a)HY(tor)YH( is encoun)HY(tered)YH( by the DOM-Tree stage. + The enumer)HY(a)HY(tor)YH( can be obtained using the )SM(enumer)HY(a)HY(tor)YH()ES( + func)HY(tions)YH(. + )EP( + + )0 3 69 H(3.3.6)WB 166 Sn()WB 73 Sn( )SM(xml_schema::expected_text_content)ES()EA()EH( + + ) 5 47 PR(struct expected_text_content: virtual exception +{ + virtual const char* + what \201\202 const throw \201\202; +};)RP( + + )0 P(The )SM(xml_schema::expected_text_content)ES( excep)HY(tion)YH( is thrown + when a content other than text is encoun)HY(tered)YH( and the text content was + expected by the DOM-Tree stage. + )EP( + + )0 3 70 H(3.3.7)WB 167 Sn()WB 74 Sn( )SM(xml_schema::no_type_info)ES()EA()EH( + + ) 14 60 PR(struct no_type_info: virtual exception +{ + no_type_info \201const std::basic_string& type_name, + const std::basic_string& type_namespace\202; + + const std::basic_string& + type_name \201\202 const; + + const std::basic_string& + type_namespace \201\202 const; + + virtual const char* + what \201\202 const throw \201\202; +};)RP( + + )0 P(The )SM(xml_schema::no_type_info)ES( excep)HY(tion)YH( is thrown + when there is no type infor)HY(ma)HY(tion)YH( asso)HY(ci)HY(ated)YH( with a type spec)HY(i)HY(fied)YH( + by the )SM(xsi:type)ES( attribute. This excep)HY(tion)YH( is thrown + by the DOM-Tree stage. The name and names)HY(pace)YH( of the type in ques)HY(tion)YH( + can be obtained using the )SM(type_name)ES( and + )SM(type_names)HY(pace)YH()ES( func)HY(tions)YH( respec)HY(tively)YH(. Usually, catch)HY(ing)YH( + this excep)HY(tion)YH( means that you haven't linked the code gener)HY(ated)YH( + from the schema defin)HY(ing)YH( the type in ques)HY(tion)YH( with your appli)HY(ca)HY(tion)YH( + or this schema has been compiled without the + )SM(--gener)HY(ate)YH(-poly)HY(mor)HY(phic)YH()ES( option. + )EP( + + + )0 3 71 H(3.3.8)WB 168 Sn()WB 75 Sn( )SM(xml_schema::not_derived)ES()EA()EH( + + ) 23 67 PR(struct not_derived: virtual exception +{ + not_derived \201const std::basic_string& base_type_name, + const std::basic_string& base_type_namespace, + const std::basic_string& derived_type_name, + const std::basic_string& derived_type_namespace\202; + + const std::basic_string& + base_type_name \201\202 const; + + const std::basic_string& + base_type_namespace \201\202 const; + + + const std::basic_string& + derived_type_name \201\202 const; + + const std::basic_string& + derived_type_namespace \201\202 const; + + virtual const char* + what \201\202 const throw \201\202; +};)RP( + + )0 P(The )SM(xml_schema::not_derived)ES( excep)HY(tion)YH( is thrown + when a type spec)HY(i)HY(fied)YH( by the )SM(xsi:type)ES( attribute is + not derived from the expected base type. This excep)HY(tion)YH( is thrown + by the DOM-Tree stage. The name and names)HY(pace)YH( of the expected + base type can be obtained using the )SM(base_type_name)ES( and + )SM(base_type_names)HY(pace)YH()ES( func)HY(tions)YH( respec)HY(tively)YH(. The name + and names)HY(pace)YH( of the offend)HY(ing)YH( type can be obtained using the + )SM(derived_type_name)ES( and + )SM(derived_type_names)HY(pace)YH()ES( func)HY(tions)YH( respec)HY(tively)YH(. + )EP( + + )0 3 72 H(3.3.9)WB 169 Sn()WB 76 Sn( )SM(xml_schema::no_prefix_mapping)ES()EA()EH( + + ) 10 57 PR(struct no_prefix_mapping: virtual exception +{ + no_prefix_mapping \201const std::basic_string& prefix\202; + + const std::basic_string& + prefix \201\202 const; + + virtual const char* + what \201\202 const throw \201\202; +};)RP( + + )0 P(The )SM(xml_schema::no_prefix_mapping)ES( excep)HY(tion)YH( is thrown + during the DOM-Tree stage if a names)HY(pace)YH( prefix is encoun)HY(tered)YH( for + which a prefix-names)HY(pace)YH( mapping hasn't been provided. The names)HY(pace)YH( + prefix in ques)HY(tion)YH( can be obtained using the )SM(prefix)ES( + func)HY(tion)YH(. + )EP( + + )0 2 73 H(3.4)WB 170 Sn()WB 77 Sn( Reading from a Local File or URI)EA()EH( + + )0 P(Using a local file or URI is the simplest way to parse an XML instance. + For example:)EP( + + ) 4 67 PR(using std::auto_ptr; + +auto_ptr r1 \201name \201"test.xml"\202\202; +auto_ptr r2 \201name \201"http://www.codesynthesis.com/test.xml"\202\202;)RP( + + )0 P(Or, in the C++11 mode:)EP( + + ) 4 69 PR(using std::unique_ptr; + +unique_ptr r1 \201name \201"test.xml"\202\202; +unique_ptr r2 \201name \201"http://www.codesynthesis.com/test.xml"\202\202;)RP( + + )0 2 74 H(3.5)WB 171 Sn()WB 78 Sn( Reading from )SM(std::istream)ES()EA()EH( + + )0 P(When using an )SM(std::istream)ES( instance, you may also + pass an optional resource id. This id is used to iden)HY(tify)YH( the + resource \201for example in error messages\202 as well as to resolve + rela)HY(tive)YH( paths. For instance:)EP( + + ) 12 48 PR(using std::auto_ptr; + +{ + std::ifstream ifs \201"test.xml"\202; + auto_ptr r \201name \201ifs, "test.xml"\202\202; +} + +{ + std::string str \201"..."\202; // Some XML fragment. + std::istringstream iss \201str\202; + auto_ptr r \201name \201iss\202\202; +})RP( + + )0 2 75 H(3.6)WB 172 Sn()WB 79 Sn( Reading from )SM(xercesc::Input)HY(Source)YH()ES()EA()EH( + + )0 P(Reading from a )SM(xercesc::Input)HY(Source)YH()ES( instance + is similar to the )SM(std::istream)ES( case except + the resource id is main)HY(tained)YH( by the )SM(Input)HY(Source)YH()ES( + object. For instance:)EP( + + ) 2 34 PR(xercesc::StdInInputSource is; +std::auto_ptr r \201name \201is\202\202;)RP( + + )0 2 76 H(3.7)WB 173 Sn()WB 80 Sn( Reading from DOM)EA()EH( + + )0 P(Reading from a )SM(xercesc::DOMDoc)HY(u)HY(ment)YH()ES( instance allows + you to setup a custom XML-DOM stage. Things like DOM + parser reuse, schema pre-parsing, and schema caching can be achieved + with this approach. For more infor)HY(ma)HY(tion)YH( on how to obtain DOM + repre)HY(sen)HY(ta)HY(tion)YH( from an XML instance refer to the Xerces-C++ + docu)HY(men)HY(ta)HY(tion)YH(. In addi)HY(tion)YH(, the + )R7 2 A(C++/Tree Mapping + FAQ)EA( shows how to parse an XML instance to a Xerces-C++ + DOM docu)HY(ment)YH( using the XSD runtime util)HY(i)HY(ties)YH(. + )EP( + + )0 P(The last parsing func)HY(tion)YH( is useful when you would like to perform + your own XML-to-DOM parsing and as)HY(so)HY(ciate)YH( the result)HY(ing)YH( DOM docu)HY(ment)YH( + with the object model nodes. The auto)HY(matic)YH( )SM(DOMDoc)HY(u)HY(ment)YH()ES( + pointer is reset and the result)HY(ing)YH( object model assumes owner)HY(ship)YH( + of the DOM docu)HY(ment)YH( passed. For example:)EP( + + ) 18 72 PR(// C++98 version. +// +xml_schema::dom::auto_ptr doc = ... + +std::auto_ptr r \201 + name \201doc, xml_schema::flags::keep_dom | xml_schema::flags::own_dom\202\202; + +// At this point doc is reset to 0. + +// C++11 version. +// +xml_schema::dom::unique_ptr doc = ... + +std::unique_ptr r \201 + name \201std::move \201doc\202, + xml_schema::flags::keep_dom | xml_schema::flags::own_dom\202\202; + +// At this point doc is reset to 0.)RP( + + )0 1 77 H(4)WB 174 Sn()WB 81 Sn( Seri)HY(al)HY(iza)HY(tion)YH()EA()EH( + + )0 P(This chapter covers various aspects of seri)HY(al)HY(iz)HY(ing)YH( a + tree-like object model to DOM or XML. + In this regard, seri)HY(al)HY(iza)HY(tion)YH( is compli)HY(men)HY(tary)YH( to the reverse + process of parsing a DOM or XML instance into an object model + which is discussed in )0 64 1 A(Chapter 3, + "Parsing")64 0 TN TL()Ec /AF f D(. Note that the gener)HY(a)HY(tion)YH( of the seri)HY(al)HY(iza)HY(tion)YH( code + is optional and should be explic)HY(itly)YH( requested with the + )SM(--gener)HY(ate)YH(-seri)HY(al)HY(iza)HY(tion)YH()ES( option. See the + )R8 2 A(XSD + Compiler Command Line Manual)EA( for more infor)HY(ma)HY(tion)YH(. + )EP( + + )0 P(Each global XML Schema element in the form: + )EP( + + + ) 1 38 PR()RP( + + )0 P(is mapped to 8 over)HY(loaded)YH( C++ func)HY(tions)YH( in the form:)EP( + + ) 70 56 PR(// Serialize to std::ostream. +// +void +name \201std::ostream&, + const type&, + const xml_schema::namespace_fomap& = + xml_schema::namespace_infomap \201\202, + const std::basic_string& encoding = "UTF-8", + xml_schema::flags = 0\202; + +void +name \201std::ostream&, + const type&, + xml_schema::error_handler&, + const xml_schema::namespace_infomap& = + xml_schema::namespace_infomap \201\202, + const std::basic_string& encoding = "UTF-8", + xml_schema::flags = 0\202; + +void +name \201std::ostream&, + const type&, + xercesc::DOMErrorHandler&, + const xml_schema::namespace_infomap& = + xml_schema::namespace_infomap \201\202, + const std::basic_string& encoding = "UTF-8", + xml_schema::flags = 0\202; + + +// Serialize to XMLFormatTarget. +//)WR( +void +name \201xercesc::XMLFormatTarget&, + const type&, + const xml_schema::namespace_infomap& = + xml_schema::namespace_infomap \201\202, + const std::basic_string& encoding = "UTF-8", + xml_schema::flags = 0\202; + +void +name \201xercesc::XMLFormatTarget&, + const type&, + xml_schema::error_handler&, + const xml_schema::namespace_infomap& = + xml_schema::namespace_infomap \201\202, + const std::basic_string& encoding = "UTF-8", + xml_schema::flags = 0\202; + +void +name \201xercesc::XMLFormatTarget&, + const type&, + xercesc::DOMErrorHandler&, + const xml_schema::namespace_infomap& = + xml_schema::namespace_infomap \201\202, + const std::basic_string& encoding = "UTF-8", + xml_schema::flags = 0\202; + + +// Serialize to DOM. +// +xml_schema::dom::[auto|unique]_ptr)WR( +name \201const type&, + const xml_schema::namespace_infomap& + xml_schema::namespace_infomap \201\202, + xml_schema::flags = 0\202; + +void +name \201xercesc::DOMDocument&, + const type&, + xml_schema::flags = 0\202;)RP( + + )0 P(You can choose between writing XML to )SM(std::ostream)ES( or + )SM(xercesc::XMLFor)HY(mat)HY(Tar)HY(get)YH()ES( and creat)HY(ing)YH( a DOM instance + in the form of )SM(xercesc::DOMDoc)HY(u)HY(ment)YH()ES(. Seri)HY(al)HY(iza)HY(tion)YH( + to )SM(ostream)ES( or )SM(XMLFor)HY(mat)HY(Tar)HY(get)YH()ES( requires a + consid)HY(er)HY(ably)YH( less work while seri)HY(al)HY(iza)HY(tion)YH( to DOM provides + for greater flex)HY(i)HY(bil)HY(ity)YH(. Each of these seri)HY(al)HY(iza)HY(tion)YH( func)HY(tions)YH( + is discussed in more detail in the follow)HY(ing)YH( sections. + )EP( + + + )0 2 78 H(4.1)WB 175 Sn()WB 82 Sn( Initial)HY(iz)HY(ing)YH( the Xerces-C++ Runtime)EA()EH( + + )0 P(Some seri)HY(al)HY(iza)HY(tion)YH( func)HY(tions)YH( expect you to initial)HY(ize)YH( the Xerces-C++ + runtime while others initial)HY(ize)YH( and termi)HY(nate)YH( it as part of their + work. The general rule is as follows: if a func)HY(tion)YH( has any argu)HY(ments)YH( + or return a value that is an instance of a Xerces-C++ type, then + this func)HY(tion)YH( expects you to initial)HY(ize)YH( the Xerces-C++ runtime. + Other)HY(wise)YH(, the func)HY(tion)YH( initial)HY(izes)YH( and termi)HY(nates)YH( the runtime for + you. Note that it is legal to have nested calls to the Xerces-C++ + initial)HY(ize)YH( and termi)HY(nate)YH( func)HY(tions)YH( as long as the calls are balanced. + )EP( + + )0 P(You can instruct seri)HY(al)HY(iza)HY(tion)YH( func)HY(tions)YH( that initial)HY(ize)YH( and termi)HY(nate)YH( + the runtime not to do so by passing the + )SM(xml_schema::flags::dont_initial)HY(ize)YH()ES( flag \201see + )0 84 1 A(Section 4.3, "Flags")84 0 TN TL()Ec /AF f D(\202. + )EP( + + )0 2 79 H(4.2)WB 176 Sn()WB 83 Sn( Names)HY(pace)YH( Infomap and Char)HY(ac)HY(ter)YH( Encod)HY(ing)YH()EA()EH( + + )0 P(When a docu)HY(ment)YH( being seri)HY(al)HY(ized)YH( uses XML names)HY(paces)YH(, custom + prefix-names)HY(pace)YH( asso)HY(ci)HY(a)HY(tions)YH( can to be estab)HY(lished)YH(. If custom + prefix-names)HY(pace)YH( mapping is not provided then generic prefixes + \201)SM(p1)ES(, )SM(p2)ES(, etc\202 are auto)HY(mat)HY(i)HY(cally)YH( assigned + to names)HY(paces)YH( as needed. Also, if + you would like the result)HY(ing)YH( instance docu)HY(ment)YH( to contain the + )SM(schemaLo)HY(ca)HY(tion)YH()ES( or )SM(noNames)HY(paceSchemaLo)HY(ca)HY(tion)YH()ES( + attributes, you will need to provide names)HY(pace)YH(-schema asso)HY(ci)HY(a)HY(tions)YH(. + The )SM(xml_schema::names)HY(pace)YH(_infomap)ES( class is used + to capture this infor)HY(ma)HY(tion)YH(:)EP( + + ) 16 63 PR(struct namespace_info +{ + namespace_info \201\202; + namespace_info \201const std::basic_string& name, + const std::basic_string& schema\202; + + std::basic_string name; + std::basic_string schema; +}; + +// Map of namespace prefix to namespace_info. +// +struct namespace_infomap: public std::map, + namespace_info> +{ +};)RP( + + )0 P(Consider the follow)HY(ing)YH( asso)HY(ci)HY(a)HY(tions)YH( as an example:)EP( + + ) 4 52 PR(xml_schema::namespace_infomap map; + +map["t"].name = "http://www.codesynthesis.com/test"; +map["t"].schema = "test.xsd";)RP( + + )0 P(This map, if passed to one of the seri)HY(al)HY(iza)HY(tion)YH( func)HY(tions)YH(, + could result in the follow)HY(ing)YH( XML frag)HY(ment)YH(:)EP( + + ) 4 72 PR( +)RP( + + )0 P(As you can see, the seri)HY(al)HY(iza)HY(tion)YH( func)HY(tion)YH( auto)HY(mat)HY(i)HY(cally)YH( added names)HY(pace)YH( + mapping for the )SM(xsi)ES( prefix. You can change this by + provid)HY(ing)YH( your own prefix:)EP( + + ) 6 62 PR(xml_schema::namespace_infomap map; + +map["xsn"].name = "http://www.w3.org/2001/XMLSchema-instance"; + +map["t"].name = "http://www.codesynthesis.com/test"; +map["t"].schema = "test.xsd";)RP( + + )0 P(This could result in the follow)HY(ing)YH( XML frag)HY(ment)YH(:)EP( + + ) 4 72 PR( +)RP( + + )0 P(To specify the loca)HY(tion)YH( of a schema without a names)HY(pace)YH( you can use + an empty prefix as in the example below: )EP( + + ) 3 34 PR(xml_schema::namespace_infomap map; + +map[""].schema = "test.xsd";)RP( + + )0 P(This would result in the follow)HY(ing)YH( XML frag)HY(ment)YH(:)EP( + + ) 3 59 PR( +)RP( + + )0 P(To make a partic)HY(u)HY(lar)YH( names)HY(pace)YH( default you can use an empty + prefix, for example:)EP( + + ) 4 51 PR(xml_schema::namespace_infomap map; + +map[""].name = "http://www.codesynthesis.com/test"; +map[""].schema = "test.xsd";)RP( + + )0 P(This could result in the follow)HY(ing)YH( XML frag)HY(ment)YH(:)EP( + + ) 4 70 PR( +)RP( + + + )0 P(Another bit of infor)HY(ma)HY(tion)YH( that you can pass to the seri)HY(al)HY(iza)HY(tion)YH( + func)HY(tions)YH( is the char)HY(ac)HY(ter)YH( encod)HY(ing)YH( method that you would like to use. + Common values for this argu)HY(ment)YH( are )SM("US-ASCII")ES(, + )SM("ISO8859-1")ES(, )SM("UTF-8")ES(, + )SM("UTF-16BE")ES(, )SM("UTF-16LE")ES(, + )SM("UCS-4BE")ES(, and )SM("UCS-4LE")ES(. The default + encod)HY(ing)YH( is )SM("UTF-8")ES(. For more infor)HY(ma)HY(tion)YH( on + encod)HY(ing)YH( methods see the + ")R11 2 A(Char)HY(ac)HY(ter)YH( + Encod)HY(ing)YH()EA(" article from Wikipedia. + )EP( + + )0 2 80 H(4.3)WB 177 Sn()WB 84 Sn( Flags)EA()EH( + + )0 P(Seri)HY(al)HY(iza)HY(tion)YH( flags are the last argu)HY(ment)YH( of every seri)HY(al)HY(iza)HY(tion)YH( + func)HY(tion)YH(. They allow you to fine-tune the process of seri)HY(al)HY(iza)HY(tion)YH(. + The flags argu)HY(ment)YH( is optional. + )EP( + + + )0 P(The follow)HY(ing)YH( flags are recog)HY(nized)YH( by the seri)HY(al)HY(iza)HY(tion)YH( + func)HY(tions)YH(:)EP( + + )0 DL( )0 DT()SM(xml_schema::flags::dont_initial)HY(ize)YH()ES( + )DD(Do not initial)HY(ize)YH( the Xerces-C++ runtime. + + )0 DT()SM(xml_schema::flags::dont_pretty_print)ES( + )DD(Do not add extra spaces or new lines that make the result)HY(ing)YH( XML + slightly bigger but easier to read. + + )0 DT()SM(xml_schema::flags::no_xml_decla)HY(ra)HY(tion)YH()ES( + )DD(Do not write XML decla)HY(ra)HY(tion)YH( \201\202. + )LD( + + )0 P(You can pass several flags by combin)HY(ing)YH( them using the bit-wise OR + oper)HY(a)HY(tor)YH(. For example:)EP( + + ) 9 45 PR(std::auto_ptr r = ... +std::ofstream ofs \201"test.xml"\202; +xml_schema::namespace_infomap map; +name \201ofs, + *r, + map, + "UTF-8", + xml_schema::flags::no_xml_declaration | + xml_schema::flags::dont_pretty_print\202;)RP( + + )0 P(For more infor)HY(ma)HY(tion)YH( on the Xerces-C++ runtime initial)HY(iza)HY(tion)YH( + refer to )0 82 1 A(Section 4.1, "Initial)HY(iz)HY(ing)YH( the Xerces-C++ + Runtime")82 0 TN TL()Ec /AF f D(. + )EP( + + )0 2 81 H(4.4)WB 178 Sn()WB 85 Sn( Error Handling)EA()EH( + + )0 P(As with the parsing func)HY(tions)YH( \201see )0 67 1 A(Section 3.3, + "Error Handling")67 0 TN TL()Ec /AF f D(\202, to better under)HY(stand)YH( error handling and + report)HY(ing)YH( strate)HY(gies)YH( employed by the seri)HY(al)HY(iza)HY(tion)YH( func)HY(tions)YH(, it + is useful to know that the trans)HY(for)HY(ma)HY(tion)YH( of a stat)HY(i)HY(cally)YH(-typed + tree to an XML instance docu)HY(ment)YH( happens in two stages. The first + stage, performed by the gener)HY(ated)YH( code, consist of build)HY(ing)YH( a DOM + instance from the stat)HY(i)HY(cally)YH(-typed tree . For short, we will call + this stage the Tree-DOM stage. The second stage, performed by + Xerces-C++, consists of seri)HY(al)HY(iz)HY(ing)YH( the DOM instance into the XML + docu)HY(ment)YH(. We will call this stage the DOM-XML stage. + )EP( + + )0 P(All seri)HY(al)HY(iza)HY(tion)YH( func)HY(tions)YH( except the two that seri)HY(al)HY(ize)YH( into + a DOM instance come in over)HY(loaded)YH( triples. The first func)HY(tion)YH( + in such a triple reports error condi)HY(tions)YH( exclu)HY(sively)YH( by throw)HY(ing)YH( + excep)HY(tions)YH(. It accu)HY(mu)HY(lates)YH( all the seri)HY(al)HY(iza)HY(tion)YH( errors of the + DOM-XML stage and throws them in a single instance of the + )SM(xml_schema::seri)HY(al)HY(iza)HY(tion)YH()ES( excep)HY(tion)YH( \201described below\202. + The second and the third func)HY(tions)YH( in the triple use call)HY(back)YH( + inter)HY(faces)YH( to report seri)HY(al)HY(iza)HY(tion)YH( errors and warn)HY(ings)YH(. The two + call)HY(back)YH( inter)HY(faces)YH( are )SM(xml_schema::error_handler)ES( and + )SM(xercesc::DOMEr)HY(rorHan)HY(dler)YH()ES(. The + )SM(xml_schema::error_handler)ES( inter)HY(face)YH( is described in + )0 67 1 A(Section 3.3, "Error Handling")67 0 TN TL()Ec /AF f D(. For more infor)HY(ma)HY(tion)YH( + on the )SM(xercesc::DOMEr)HY(rorHan)HY(dler)YH()ES( inter)HY(face)YH( refer to the + Xerces-C++ docu)HY(men)HY(ta)HY(tion)YH(. + )EP( + + )0 P(The Tree-DOM stage reports error condi)HY(tions)YH( exclu)HY(sively)YH( by throw)HY(ing)YH( + excep)HY(tions)YH(. Indi)HY(vid)HY(ual)YH( excep)HY(tions)YH( thrown by the seri)HY(al)HY(iza)HY(tion)YH( func)HY(tions)YH( + are described in the follow)HY(ing)YH( sub-sections. + )EP( + + )0 3 82 H(4.4.1)WB 179 Sn()WB 86 Sn( )SM(xml_schema::seri)HY(al)HY(iza)HY(tion)YH()ES()EA()EH( + + ) 11 39 PR(struct serialization: virtual exception +{ + serialization \201\202; + serialization \201const diagnostics&\202; + + const diagnostics& + diagnostics \201\202 const; + + virtual const char* + what \201\202 const throw \201\202; +};)RP( + + )0 P(The )SM(xml_schema::diag)HY(nos)HY(tics)YH()ES( class is described in + )0 68 1 A(Section 3.3.1, ")SM(xml_schema::parsing)ES(")68 0 TN TL()Ec /AF f D(. + The )SM(xml_schema::seri)HY(al)HY(iza)HY(tion)YH()ES( excep)HY(tion)YH( is thrown if + there were seri)HY(al)HY(iza)HY(tion)YH( errors reported during the DOM-XML stage. + If no call)HY(back)YH( inter)HY(face)YH( was provided to the seri)HY(al)HY(iza)HY(tion)YH( func)HY(tion)YH(, + the excep)HY(tion)YH( contains a list of errors and warn)HY(ings)YH( acces)HY(si)HY(ble)YH( using + the )SM(diag)HY(nos)HY(tics)YH()ES( func)HY(tion)YH(. + )EP( + + + )0 3 83 H(4.4.2)WB 180 Sn()WB 87 Sn( )SM(xml_schema::unex)HY(pected)YH(_element)ES()EA()EH( + + )0 P(The )SM(xml_schema::unex)HY(pected)YH(_element)ES( excep)HY(tion)YH( is + described in )0 70 1 A(Section 3.3.3, + ")SM(xml_schema::unex)HY(pected)YH(_element)ES(")70 0 TN TL()Ec /AF f D(. It is thrown + by the seri)HY(al)HY(iza)HY(tion)YH( func)HY(tions)YH( during the Tree-DOM stage if the + root element name of the provided DOM instance does not match with + the name of the element this seri)HY(al)HY(iza)HY(tion)YH( func)HY(tion)YH( is for. + )EP( + + )0 3 84 H(4.4.3)WB 181 Sn()WB 88 Sn( )SM(xml_schema::no_type_info)ES()EA()EH( + + )0 P(The )SM(xml_schema::no_type_info)ES( excep)HY(tion)YH( is + described in )0 74 1 A(Section 3.3.7, + ")SM(xml_schema::no_type_info)ES(")74 0 TN TL()Ec /AF f D(. It is thrown + by the seri)HY(al)HY(iza)HY(tion)YH( func)HY(tions)YH( during the Tree-DOM stage when there + is no type infor)HY(ma)HY(tion)YH( asso)HY(ci)HY(ated)YH( with a dynamic type of an + element. Usually, catch)HY(ing)YH( this excep)HY(tion)YH( means that you haven't + linked the code gener)HY(ated)YH( from the schema defin)HY(ing)YH( the type in + ques)HY(tion)YH( with your appli)HY(ca)HY(tion)YH( or this schema has been compiled + without the )SM(--gener)HY(ate)YH(-poly)HY(mor)HY(phic)YH()ES( option. + )EP( + + )0 2 85 H(4.5)WB 182 Sn()WB 89 Sn( Seri)HY(al)HY(iz)HY(ing)YH( to )SM(std::ostream)ES()EA()EH( + + )0 P(In order to seri)HY(al)HY(ize)YH( to )SM(std::ostream)ES( you will need + an object model, an output stream and, option)HY(ally)YH(, a names)HY(pace)YH( + infomap. For instance:)EP( + + ) 14 61 PR(// Obtain the object model. +// +std::auto_ptr r = ... + +// Prepare namespace mapping and schema location information. +// +xml_schema::namespace_infomap map; + +map["t"].name = "http://www.codesynthesis.com/test"; +map["t"].schema = "test.xsd"; + +// Write it out. +// +name \201std::cout, *r, map\202;)RP( + + )0 P(Note that the output stream is treated as a binary stream. This + becomes impor)HY(tant)YH( when you use a char)HY(ac)HY(ter)YH( encod)HY(ing)YH( that is wider + than 8-bit )SM(char)ES(, for instance UTF-16 or UCS-4. For + example, things will most likely break if you try to seri)HY(al)HY(ize)YH( + to )SM(std::ostringstream)ES( with UTF-16 or UCS-4 as an + encod)HY(ing)YH(. This is due to the special value, + )SM('\2000')ES(, that will most likely occur as part of such + seri)HY(al)HY(iza)HY(tion)YH( and it won't have the special meaning assumed by + )SM(std::ostringstream)ES(. + )EP( + + + )0 2 86 H(4.6)WB 183 Sn()WB 90 Sn( Seri)HY(al)HY(iz)HY(ing)YH( to )SM(xercesc::XMLFor)HY(mat)HY(Tar)HY(get)YH()ES()EA()EH( + + )0 P(Seri)HY(al)HY(iz)HY(ing)YH( to an )SM(xercesc::XMLFor)HY(mat)HY(Tar)HY(get)YH()ES( instance + is similar the )SM(std::ostream)ES( case. For instance: + )EP( + + ) 38 63 PR(using std::auto_ptr; + +// Obtain the object model. +// +auto_ptr r = ... + +// Prepare namespace mapping and schema location information. +// +xml_schema::namespace_infomap map; + +map["t"].name = "http://www.codesynthesis.com/test"; +map["t"].schema = "test.xsd"; + +using namespace xercesc; + +XMLPlatformUtils::Initialize \201\202; + +{ + // Choose a target. + // + auto_ptr ft; + + if \201argc != 2\202 + { + ft = auto_ptr \201new StdOutFormatTarget \201\202\202; + } + else + { + ft = auto_ptr \201 + new LocalFileFormatTarget \201argv[1]\202\202; + })WR( + + // Write it out. + // + name \201*ft, *r, map\202; +} + +XMLPlatformUtils::Terminate \201\202;)RP( + + )0 P(Note that we had to initial)HY(ize)YH( the Xerces-C++ runtime before we + could call this seri)HY(al)HY(iza)HY(tion)YH( func)HY(tion)YH(.)EP( + + )0 2 87 H(4.7)WB 184 Sn()WB 91 Sn( Seri)HY(al)HY(iz)HY(ing)YH( to DOM)EA()EH( + + )0 P(The mapping provides two over)HY(loaded)YH( func)HY(tions)YH( that imple)HY(ment)YH( + seri)HY(al)HY(iza)HY(tion)YH( to a DOM instance. The first creates a DOM instance + for you and the second seri)HY(al)HY(izes)YH( to an exist)HY(ing)YH( DOM instance. + While seri)HY(al)HY(iz)HY(ing)YH( to a new DOM instance is similar to seri)HY(al)HY(iz)HY(ing)YH( + to )SM(std::ostream)ES( or )SM(xercesc::XMLFor)HY(mat)HY(Tar)HY(get)YH()ES(, + seri)HY(al)HY(iz)HY(ing)YH( to an exist)HY(ing)YH( DOM instance requires quite a bit of work + from your side. You will need to set all the custom names)HY(pace)YH( mapping + attributes as well as the )SM(schemaLo)HY(ca)HY(tion)YH()ES( and/or + )SM(noNames)HY(paceSchemaLo)HY(ca)HY(tion)YH()ES( attributes. The follow)HY(ing)YH( + listing should give you an idea about what needs to be done: + )EP( + + ) 24 67 PR(// Obtain the object model. +// +std::auto_ptr r = ... + +using namespace xercesc; + +XMLPlatformUtils::Initialize \201\202; + +{ + // Create a DOM instance. Set custom namespace mapping and schema + // location attributes. + // + DOMDocument& doc = ... + + // Serialize to DOM. + // + name \201doc, *r\202; + + // Serialize the DOM document to XML. + // + ... +} + +XMLPlatformUtils::Terminate \201\202;)RP( + + )0 P(For more infor)HY(ma)HY(tion)YH( on how to create and seri)HY(al)HY(ize)YH( a DOM instance + refer to the Xerces-C++ docu)HY(men)HY(ta)HY(tion)YH(. In addi)HY(tion)YH(, the + )R7 2 A(C++/Tree Mapping + FAQ)EA( shows how to imple)HY(ment)YH( these oper)HY(a)HY(tions)YH( using the XSD + runtime util)HY(i)HY(ties)YH(. + )EP( + + )0 1 88 H(5)WB 185 Sn()WB 92 Sn( Addi)HY(tional)YH( Func)HY(tion)HY(al)HY(ity)YH()EA()EH( + + )0 P(The C++/Tree mapping provides a number of optional features + that can be useful in certain situ)HY(a)HY(tions)YH(. They are described + in the follow)HY(ing)YH( sections.)EP( + + )0 2 89 H(5.1)WB 186 Sn()WB 93 Sn( DOM Asso)HY(ci)HY(a)HY(tion)YH()EA()EH( + + )0 P(Normally, after parsing is complete, the DOM docu)HY(ment)YH( which + was used to extract the data is discarded. However, the parsing + func)HY(tions)YH( can be instructed to preserve the DOM docu)HY(ment)YH( + and create an asso)HY(ci)HY(a)HY(tion)YH( between the DOM nodes and object model + nodes. When there is an asso)HY(ci)HY(a)HY(tion)YH( between the DOM and + object model nodes, you can obtain the corre)HY(spond)HY(ing)YH( DOM element + or attribute node from an object model node as well as perform + the reverse tran)HY(si)HY(tion)YH(: obtain the corre)HY(spond)HY(ing)YH( object model + from a DOM element or attribute node.)EP( + + )0 P(Main)HY(tain)HY(ing)YH( DOM asso)HY(ci)HY(a)HY(tion)YH( is normally useful when the appli)HY(ca)HY(tion)YH( + needs access to XML constructs that are not preserved in the + object model, for example, XML comments. + Another useful aspect of DOM asso)HY(ci)HY(a)HY(tion)YH( is the ability of the + appli)HY(ca)HY(tion)YH( to navi)HY(gate)YH( the docu)HY(ment)YH( tree using the generic DOM + inter)HY(face)YH( \201for example, with the help of an XPath proces)HY(sor)YH(\202 + and then move back to the stat)HY(i)HY(cally)YH(-typed object model. Note + also that while you can change the under)HY(ly)HY(ing)YH( DOM docu)HY(ment)YH(, + these changes are not reflected in the object model and will + be ignored during seri)HY(al)HY(iza)HY(tion)YH(. If you need to not only access + but also modify some aspects of XML that are not preserved in + the object model, then type customiza)HY(tion)YH( with custom parsing + construc)HY(tors)YH( and seri)HY(al)HY(iza)HY(tion)YH( oper)HY(a)HY(tors)YH( should be used instead.)EP( + + )0 P(To request DOM asso)HY(ci)HY(a)HY(tion)YH( you will need to pass the + )SM(xml_schema::flags::keep_dom)ES( flag to one of the + parsing func)HY(tions)YH( \201see )0 66 1 A(Section 3.2, + "Flags and Prop)HY(er)HY(ties)YH(")66 0 TN TL()Ec /AF f D( for more infor)HY(ma)HY(tion)YH(\202. In this case the + DOM docu)HY(ment)YH( is retained and will be released when the object model + is deleted. Note that since DOM nodes "out-live" the parsing func)HY(tion)YH( + call, you need to initial)HY(ize)YH( the Xerces-C++ runtime before calling + one of the parsing func)HY(tions)YH( with the )SM(keep_dom)ES( flag and + termi)HY(nate)YH( it after the object model is destroyed \201see + )0 65 1 A(Section 3.1, "Initial)HY(iz)HY(ing)YH( the Xerces-C++ Runtime")65 0 TN TL()Ec /AF f D(\202.)EP( + + )0 P(If the )SM(keep_dom)ES( flag is passed + as the second argu)HY(ment)YH( to the copy construc)HY(tor)YH( and the copy + being made is of a complete tree, then the DOM asso)HY(ci)HY(a)HY(tion)YH( + is also main)HY(tained)YH( in the copy by cloning the under)HY(ly)HY(ing)YH( + DOM docu)HY(ment)YH( and reestab)HY(lish)HY(ing)YH( the asso)HY(ci)HY(a)HY(tions)YH(. For example:)EP( + + ) 22 48 PR(using namespace xercesc; + +XMLPlatformUtils::Initialize \201\202; + +{ + // Parse XML to object model. + // + std::auto_ptr r \201root \201 + "root.xml", + xml_schema::flags::keep_dom | + xml_schema::flags::dont_initialize\202\202; + + // Copy without DOM association. + // + type copy1 \201*r\202; + + // Copy with DOM association. + // + type copy2 \201*r, xml_schema::flags::keep_dom\202; +} + +XMLPlatformUtils::Terminate \201\202;)RP( + + + )0 P(To obtain the corre)HY(spond)HY(ing)YH( DOM node from an object model node + you will need to call the )SM(_node)ES( acces)HY(sor)YH( func)HY(tion)YH( + which returns a pointer to )SM(DOMNode)ES(. You can then query + this DOM node's type and cast it to either )SM(DOMAttr*)ES( + or )SM(DOMEle)HY(ment)YH(*)ES(. To obtain the corre)HY(spond)HY(ing)YH( object + model node from a DOM node, the DOM user data API is used. The + )SM(xml_schema::dom::tree_node_key)ES( vari)HY(able)YH( contains + the key for object model nodes. The follow)HY(ing)YH( schema and code + frag)HY(ment)YH( show how to navi)HY(gate)YH( from DOM to object model nodes + and in the oppo)HY(site)YH( direc)HY(tion)YH(:)EP( + + ) 7 37 PR( + + + + + +)RP( + + ) 42 68 PR(using namespace xercesc; + +XMLPlatformUtils::Initialize \201\202; + +{ + // Parse XML to object model. + // + std::auto_ptr r \201root \201 + "root.xml", + xml_schema::flags::keep_dom | + xml_schema::flags::dont_initialize\202\202; + + DOMNode* n = root->_node \201\202; + assert \201n->getNodeType \201\202 == DOMNode::ELEMENT_NODE\202; + DOMElement* re = static_cast \201n\202; + + // Get the 'a' element. Note that it is not necessarily the + // first child node of 'root' since there could be whitespace + // nodes before it. + // + DOMElement* ae; + + for \201n = re->getFirstChild \201\202; n != 0; n = n->getNextSibling \201\202\202 + { + if \201n->getNodeType \201\202 == DOMNode::ELEMENT_NODE\202 + { + ae = static_cast \201n\202; + break; + } + } +)WR( + // Get from the 'a' DOM element to xml_schema::string object model + // node. + // + xml_schema::type& t \201 + *reinterpret_cast \201 + ae->getUserData \201xml_schema::dom::tree_node_key\202\202\202; + + xml_schema::string& a \201dynamic_cast \201t\202\202; +} + +XMLPlatformUtils::Terminate \201\202;)RP( + + )0 P(The 'mixed' example which can be found in the XSD distri)HY(bu)HY(tion)YH( + shows how to handle the mixed content using DOM asso)HY(ci)HY(a)HY(tion)YH(.)EP( + + )0 2 90 H(5.2)WB 187 Sn()WB 94 Sn( Binary Seri)HY(al)HY(iza)HY(tion)YH()EA()EH( + + )0 P(Besides reading from and writing to XML, the C++/Tree mapping + also allows you to save the object model to and load it from a + number of prede)HY(fined)YH( as well as custom data repre)HY(sen)HY(ta)HY(tion)YH( + formats. The prede)HY(fined)YH( binary formats are CDR \201Common Data + Repre)HY(sen)HY(ta)HY(tion)YH(\202 and XDR \201eXter)HY(nal)YH( Data Repre)HY(sen)HY(ta)HY(tion)YH(\202. A + custom format can easily be supported by provid)HY(ing)YH( + inser)HY(tion)YH( and extrac)HY(tion)YH( oper)HY(a)HY(tors)YH( for basic types.)EP( + + )0 P(Binary seri)HY(al)HY(iza)HY(tion)YH( saves only the data without any meta + infor)HY(ma)HY(tion)YH( or markup. As a result, saving to and loading + from a binary repre)HY(sen)HY(ta)HY(tion)YH( can be an order of magni)HY(tude)YH( + faster than parsing and seri)HY(al)HY(iz)HY(ing)YH( the same data in XML. + Further)HY(more)YH(, the result)HY(ing)YH( repre)HY(sen)HY(ta)HY(tion)YH( is normally several + times smaller than the equiv)HY(a)HY(lent)YH( XML repre)HY(sen)HY(ta)HY(tion)YH(. These + prop)HY(er)HY(ties)YH( make binary seri)HY(al)HY(iza)HY(tion)YH( ideal for inter)HY(nal)YH( data + exchange and storage. A typical appli)HY(ca)HY(tion)YH( that uses this + facil)HY(ity)YH( stores the data and commu)HY(ni)HY(cates)YH( within the + system using a binary format and reads/writes the data + in XML when commu)HY(ni)HY(cat)HY(ing)YH( with the outside world.)EP( + + )0 P(In order to request the gener)HY(a)HY(tion)YH( of inser)HY(tion)YH( oper)HY(a)HY(tors)YH( and + extrac)HY(tion)YH( construc)HY(tors)YH( for a specific prede)HY(fined)YH( or custom + data repre)HY(sen)HY(ta)HY(tion)YH( stream, you will need to use the + )SM(--gener)HY(ate)YH(-inser)HY(tion)YH()ES( and )SM(--gener)HY(ate)YH(-extrac)HY(tion)YH()ES( + compiler options. See the + )R8 2 A(XSD + Compiler Command Line Manual)EA( for more infor)HY(ma)HY(tion)YH(.)EP( + + )0 P(Once the inser)HY(tion)YH( oper)HY(a)HY(tors)YH( and extrac)HY(tion)YH( construc)HY(tors)YH( are + gener)HY(ated)YH(, you can use the )SM(xml_schema::istream)ES( + and )SM(xml_schema::ostream)ES( wrapper stream templates + to save the object model to and load it from a specific format. + The follow)HY(ing)YH( code frag)HY(ment)YH( shows how to do this using ACE + \201Adap)HY(tive)YH( Commu)HY(ni)HY(ca)HY(tion)YH( Envi)HY(ron)HY(ment)YH(\202 CDR streams as an example:)EP( + + ) 8 37 PR( + + + + + + +)RP( + + ) 21 51 PR(// Parse XML to object model. +// +std::auto_ptr r \201root \201"root.xml"\202\202; + +// Save to a CDR stream. +// +ACE_OutputCDR ace_ocdr; +xml_schema::ostream ocdr \201ace_ocdr\202; + +ocdr << *r; + +// Load from a CDR stream. +// +ACE_InputCDR ace_icdr \201buf, size\202; +xml_schema::istream icdr \201ace_icdr\202; + +std::auto_ptr copy \201new object \201icdr\202\202; + +// Serialize to XML. +// +root \201std::cout, *copy\202;)RP( + + )0 P(The XSD distri)HY(bu)HY(tion)YH( contains a number of exam)HY(ples)YH( that + show how to save the object model to and load it from + CDR, XDR, and a custom format.)EP( + + + + + )0 1 91 H(Appendix)WB 188 Sn()WB 95 Sn( A \236 Default and Fixed Values)EA()EH( + + )0 P(The follow)HY(ing)YH( table summa)HY(rizes)YH( the effect of default and fixed + values \201spec)HY(i)HY(fied)YH( with the )SM(default)ES( and )SM(fixed)ES( + attributes, respec)HY(tively)YH(\202 on attribute and element values. The + )SM(default)ES( and )SM(fixed)ES( attributes are mutu)HY(ally)YH( + exclu)HY(sive)YH(. It is also worth)HY(while)YH( to note that the fixed value seman)HY(tics)YH( + is a super)HY(set)YH( of the default value seman)HY(tics)YH(. + )EP( + + + )1 PT( + + )BR( +)BR( + + +)WB NL +/TE t D NP /OU t D TU PM 1 eq and{/Pn () D showpage}if end restore diff --git a/xsd/doc/cxx/tree/manual/index.xhtml b/xsd/doc/cxx/tree/manual/index.xhtml new file mode 100644 index 0000000..56213e0 --- /dev/null +++ b/xsd/doc/cxx/tree/manual/index.xhtml @@ -0,0 +1,6822 @@ + + + + + + C++/Tree Mapping User Manual + + + + + + + + + + + + + + +
+
+ +
+ +
+
C++/Tree Mapping User Manual
+ +

Copyright © 2005-2014 CODE SYNTHESIS TOOLS CC

+ +

Permission is granted to copy, distribute and/or modify this + document under the terms of the + GNU Free + Documentation License, version 1.2; with no Invariant Sections, + no Front-Cover Texts and no Back-Cover Texts. +

+ +

This document is available in the following formats: + XHTML, + PDF, and + PostScript.

+
+ +

Table of Contents

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Preface + + + +
About This Document
More Information
+
1Introduction
2C++/Tree Mapping + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2.1Preliminary Information + + + + + + +
2.1.1C++ Standard
2.1.2Identifiers
2.1.3Character Type and Encoding
2.1.4XML Schema Namespace
2.1.5Anonymous Types
+
2.2Error Handling + + +
2.2.1xml_schema::duplicate_id
+
2.3Mapping for import and include + + + + +
2.3.1Import
2.3.2Inclusion with Target Namespace
2.3.3Inclusion without Target Namespace
+
2.4Mapping for Namespaces
2.5Mapping for Built-in Data Types + + + + + + + + + + + + + + + + + +
2.5.1Inheritance from Built-in Data Types
2.5.2Mapping for anyType
2.5.3Mapping for anySimpleType
2.5.4Mapping for QName
2.5.5Mapping for IDREF
2.5.6Mapping for base64Binary and hexBinary
2.5.7Time Zone Representation
2.5.8Mapping for date
2.5.9Mapping for dateTime
2.5.10Mapping for duration
2.5.11Mapping for gDay
2.5.12Mapping for gMonth
2.5.13Mapping for gMonthDay
2.5.14Mapping for gYear
2.5.15Mapping for gYearMonth
2.5.16Mapping for time
+
2.6Mapping for Simple Types + + + + + +
2.6.1Mapping for Derivation by Restriction
2.6.2Mapping for Enumerations
2.6.3Mapping for Derivation by List
2.6.4Mapping for Derivation by Union
+
2.7Mapping for Complex Types + + + +
2.7.1Mapping for Derivation by Extension
2.7.2Mapping for Derivation by Restriction
+
2.8Mapping for Local Elements and Attributes + + + + + +
2.8.1Mapping for Members with the One Cardinality Class
2.8.2Mapping for Members with the Optional Cardinality Class
2.8.3Mapping for Members with the Sequence Cardinality Class
2.8.4Element Order
+
2.9Mapping for Global Elements + + + +
2.9.1Element Types
2.9.2Element Map
+
2.10Mapping for Global Attributes
2.11Mapping for xsi:type and Substitution Groups
2.12Mapping for any and anyAttribute + + + + + + +
2.12.1Mapping for any with the One Cardinality Class
2.12.2Mapping for any with the Optional Cardinality Class
2.12.3Mapping for any with the Sequence Cardinality Class
2.12.4Element Wildcard Order
2.12.5Mapping for anyAttribute
+
2.13Mapping for Mixed Content Models
+
3Parsing + + + + + + + + + + + + + + + + + + + + + + +
3.1Initializing the Xerces-C++ Runtime
3.2Flags and Properties
3.3Error Handling + + + + + + + + + + +
3.3.1xml_schema::parsing
3.3.2xml_schema::expected_element
3.3.3xml_schema::unexpected_element
3.3.4xml_schema::expected_attribute
3.3.5xml_schema::unexpected_enumerator
3.3.6xml_schema::expected_text_content
3.3.7xml_schema::no_type_info
3.3.8xml_schema::not_derived
3.3.9xml_schema::not_prefix_mapping
+
3.4Reading from a Local File or URI
3.5Reading from std::istream
3.6Reading from xercesc::InputSource
3.7Reading from DOM
+
4Serialization + + + + + + + + + + + + + + + + + + + + + + +
4.1Initializing the Xerces-C++ Runtime
4.2Namespace Infomap and Character Encoding
4.3Flags
4.4Error Handling + + + + +
4.4.1xml_schema::serialization
4.4.2xml_schema::unexpected_element
4.4.3xml_schema::no_type_info
+
4.5Serializing to std::ostream
4.6Serializing to xercesc::XMLFormatTarget
4.7Serializing to DOM
+
5Additional Functionality + + + + + + + +
5.1DOM Association
5.2Binary Serialization
+
Appendix A — Default and Fixed Values
+
+ +

Preface

+ +

About This Document

+ +

This document describes the mapping of W3C XML Schema + to the C++ programming language as implemented by + CodeSynthesis + XSD - an XML Schema to C++ data binding compiler. The mapping + represents information stored in XML instance documents as a + statically-typed, tree-like in-memory data structure and is + called C++/Tree. +

+ +

Revision 4.0.0
+ This revision of the manual describes the C++/Tree + mapping as implemented by CodeSynthesis XSD version 4.0.0. +

+ +

This document is available in the following formats: + XHTML, + PDF, and + PostScript.

+ +

More Information

+ +

Beyond this manual, you may also find the following sources of + information useful:

+ + + + +

1 Introduction

+ +

C++/Tree is a W3C XML Schema to C++ mapping that represents the + data stored in XML as a statically-typed, vocabulary-specific + object model. Based on a formal description of an XML vocabulary + (schema), the C++/Tree mapping produces a tree-like data structure + suitable for in-memory processing as well as XML parsing and + serialization code.

+ +

A typical application that processes XML documents usually + performs the following three steps: it first reads (parses) an XML + instance document to an object model, it then performs + some useful computations on that model which may involve + modification of the model, and finally it may write (serialize) + the modified object model back to XML. +

+ +

The C++/Tree mapping consists of C++ types that represent the + given vocabulary (Chapter 2, "C++/Tree Mapping"), + a set of parsing functions that convert XML documents to + a tree-like in-memory data structure (Chapter 3, + "Parsing"), and a set of serialization functions that convert + the object model back to XML (Chapter 4, + "Serialization"). Furthermore, the mapping provides a number + of additional features, such as DOM association and binary + serialization, that can be useful in some applications + (Chapter 5, "Additional Functionality"). +

+ + + + + +

2 C++/Tree Mapping

+ +

2.1 Preliminary Information

+ +

2.1.1 C++ Standard

+ +

The C++/Tree mapping provides support for ISO/IEC C++ 1998/2003 (C++98) + and ISO/IEC C++ 2011 (C++11). To select the C++ standard for the + generated code we use the --std XSD compiler command + line option. While the majority of the examples in this manual use + C++98, support for the new functionality and library components + introduced in C++11 are discussed throughout the document.

+ +

2.1.2 Identifiers

+ +

XML Schema names may happen to be reserved C++ keywords or contain + characters that are illegal in C++ identifiers. To avoid C++ compilation + problems, such names are changed (escaped) when mapped to C++. If an + XML Schema name is a C++ keyword, the "_" suffix is added to it. All + character of an XML Schema name that are not allowed in C++ identifiers + are replaced with "_". +

+ +

For example, XML Schema name try will be mapped to + C++ identifier try_. Similarly, XML Schema name + strange.na-me will be mapped to C++ identifier + strange_na_me. +

+ +

Furthermore, conflicts between type names and function names in the + same scope are resolved using name escaping. Such conflicts include + both a global element (which is mapped to a set of parsing and/or + serialization functions or element types, see Section + 2.9, "Mapping for Global Elements") and a global type sharing the + same name as well as a local element or attribute inside a type having + the same name as the type itself.

+ +

For example, if we had a global type catalog + and a global element with the same name then the type would be + mapped to a C++ class with name catalog while the + parsing functions corresponding to the global element would have + their names escaped as catalog_. +

+ +

By default the mapping uses the so-called K&R (Kernighan and + Ritchie) identifier naming convention which is also used throughout + this manual. In this convention both type and function names are in + lower case and words are separated by underscores. If your application + code or schemas use a different notation, you may want to change the + naming convention used by the mapping for consistency. + The compiler supports a set of widely-used naming conventions + that you can select with the --type-naming and + --function-naming options. You can also further + refine one of the predefined conventions or create a completely + custom naming scheme by using the --*-regex options. + For more detailed information on these options refer to the NAMING + CONVENTION section in the XSD + Compiler Command Line Manual.

+ +

2.1.3 Character Type and Encoding

+ +

The code that implements the mapping, depending on the + --char-type option, is generated using either + char or wchar_t as the character + type. In this document code samples use symbol C + to refer to the character type you have selected when translating + your schemas, for example std::basic_string<C>. +

+ +

Another aspect of the mapping that depends on the character type + is character encoding. For the char character type + the default encoding is UTF-8. Other supported encodings are + ISO-8859-1, Xerces-C++ Local Code Page (LPC), as well as + custom encodings and can be selected with the + --char-encoding command line option.

+ +

For the wchar_t character type the encoding is + automatically selected between UTF-16 and UTF-32/UCS-4 depending + on the size of the wchar_t type. On some platforms + (for example, Windows with Visual C++ and AIX with IBM XL C++) + wchar_t is 2 bytes long. For these platforms the + encoding is UTF-16. On other platforms wchar_t is 4 bytes + long and UTF-32/UCS-4 is used.

+ +

2.1.4 XML Schema Namespace

+ +

The mapping relies on some predefined types, classes, and functions + that are logically defined in the XML Schema namespace reserved for + the XML Schema language (http://www.w3.org/2001/XMLSchema). + By default, this namespace is mapped to C++ namespace + xml_schema. It is automatically accessible + from a C++ compilation unit that includes a header file generated + from an XML Schema definition. +

+ +

Note that, if desired, the default mapping of this namespace can be + changed as described in Section 2.4, "Mapping for + Namespaces". +

+ + +

2.1.5 Anonymous Types

+ +

For the purpose of code generation, anonymous types defined in + XML Schema are automatically assigned names that are derived + from enclosing attributes and elements. Otherwise, such types + follows standard mapping rules for simple and complex type + definitions (see Section 2.6, "Mapping for Simple Types" + and Section 2.7, "Mapping for Complex Types"). + For example, in the following schema fragment: +

+ +
+<element name="object">
+  <complexType>
+    ...
+  </complexType>
+</element>
+  
+ +

The anonymous type defined inside element object will + be given name object. The compiler has a number of + options that control the process of anonymous type naming. For more + information refer to the XSD + Compiler Command Line Manual.

+ + +

2.2 Error Handling

+ +

The mapping uses the C++ exception handling mechanism as a primary way + of reporting error conditions. All exceptions that are specified in + this mapping derive from xml_schema::exception which + itself is derived from std::exception: +

+ +
+struct exception: virtual std::exception
+{
+  friend
+  std::basic_ostream<C>&
+  operator<< (std::basic_ostream<C>& os, const exception& e)
+  {
+    e.print (os);
+    return os;
+  }
+
+protected:
+  virtual void
+  print (std::basic_ostream<C>&) const = 0;
+};
+  
+ +

The exception hierarchy supports "virtual" operator<< + which allows you to obtain diagnostics corresponding to the thrown + exception using the base exception interface. For example:

+ +
+try
+{
+  ...
+}
+catch (const xml_schema::exception& e)
+{
+  cerr << e << endl;
+}
+  
+ +

The following sub-sections describe exceptions thrown by the + types that constitute the object model. + Section 3.3, "Error Handling" of + Chapter 3, "Parsing" describes exceptions + and error handling mechanisms specific to the parsing functions. + Section 4.4, "Error Handling" of + Chapter 4, "Serialization" describes exceptions + and error handling mechanisms specific to the serialization functions. +

+ + +

2.2.1 xml_schema::duplicate_id

+ +
+struct duplicate_id: virtual exception
+{
+  duplicate_id (const std::basic_string<C>& id);
+
+  const std::basic_string<C>&
+  id () const;
+
+  virtual const char*
+  what () const throw ();
+};
+  
+ +

The xml_schema::duplicate_id is thrown when + a conflicting instance of xml_schema::id (see + Section 2.5, "Mapping for Built-in Data Types") + is added to a tree. The offending ID value can be obtained using + the id function. +

+ +

2.3 Mapping for import and include

+ +

2.3.1 Import

+ +

The XML Schema import element is mapped to the C++ + Preprocessor #include directive. The value of + the schemaLocation attribute is used to derive + the name of the header file that appears in the #include + directive. For instance: +

+ +
+<import namespace="http://www.codesynthesis.com/test"
+        schemaLocation="test.xsd"/>
+  
+ +

is mapped to:

+ +
+#include "test.hxx"
+  
+ +

Note that you will need to compile imported schemas separately + in order to produce corresponding header files.

+ +

2.3.2 Inclusion with Target Namespace

+ +

The XML Schema include element which refers to a schema + with a target namespace or appears in a schema without a target namespace + follows the same mapping rules as the import element, + see Section 2.3.1, "Import". +

+ +

2.3.3 Inclusion without Target Namespace

+ +

For the XML Schema include element which refers to a schema + without a target namespace and appears in a schema with a target + namespace (such inclusion sometimes called "chameleon inclusion"), + declarations and definitions from the included schema are generated + in-line in the namespace of the including schema as if they were + declared and defined there verbatim. For example, consider the + following two schemas: +

+ +
+<-- common.xsd -->
+<schema>
+  <complexType name="type">
+  ...
+  </complexType>
+</schema>
+
+<-- test.xsd -->
+<schema targetNamespace="http://www.codesynthesis.com/test">
+  <include schemaLocation="common.xsd"/>
+</schema>
+  
+ +

The fragment of interest from the generated header file for + text.xsd would look like this:

+ +
+// test.hxx
+namespace test
+{
+  class type
+  {
+    ...
+  };
+}
+  
+ +

2.4 Mapping for Namespaces

+ +

An XML Schema namespace is mapped to one or more nested C++ + namespaces. XML Schema namespaces are identified by URIs. + By default, a namespace URI is mapped to a sequence of + C++ namespace names by removing the protocol and host parts + and splitting the rest into a sequence of names with '/' + as the name separator. For instance: +

+ +
+<schema targetNamespace="http://www.codesynthesis.com/system/test">
+  ...
+</schema>
+  
+ +

is mapped to:

+ +
+namespace system
+{
+  namespace test
+  {
+    ...
+  }
+}
+  
+ +

The default mapping of namespace URIs to C++ namespace names can be + altered using the --namespace-map and + --namespace-regex options. See the + XSD + Compiler Command Line Manual for more information. +

+ +

2.5 Mapping for Built-in Data Types

+ +

The mapping of XML Schema built-in data types to C++ types is + summarized in the table below.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
XML Schema typeAlias in the xml_schema namespaceC++ type
anyType and anySimpleType types
anyTypetypeSection 2.5.2, "Mapping for anyType"
anySimpleTypesimple_typeSection 2.5.3, "Mapping for anySimpleType"
fixed-length integral types
bytebytesigned char
unsignedByteunsigned_byteunsigned char
shortshort_short
unsignedShortunsigned_shortunsigned short
intint_int
unsignedIntunsigned_intunsigned int
longlong_long long
unsignedLongunsigned_longunsigned long long
arbitrary-length integral types
integerintegerlong long
nonPositiveIntegernon_positive_integerlong long
nonNegativeIntegernon_negative_integerunsigned long long
positiveIntegerpositive_integerunsigned long long
negativeIntegernegative_integerlong long
boolean types
booleanbooleanbool
fixed-precision floating-point types
floatfloat_float
doubledouble_double
arbitrary-precision floating-point types
decimaldecimaldouble
string types
stringstringtype derived from std::basic_string
normalizedStringnormalized_stringtype derived from string
tokentokentype derived from normalized_string
Namenametype derived from token
NMTOKENnmtokentype derived from token
NMTOKENSnmtokenstype derived from sequence<nmtoken>
NCNamencnametype derived from name
languagelanguagetype derived from token
qualified name
QNameqnameSection 2.5.4, "Mapping for QName"
ID/IDREF types
IDidtype derived from ncname
IDREFidrefSection 2.5.5, "Mapping for IDREF"
IDREFSidrefstype derived from sequence<idref>
URI types
anyURIuritype derived from std::basic_string
binary types
base64Binarybase64_binarySection 2.5.6, "Mapping for + base64Binary and hexBinary"
hexBinaryhex_binary
date/time types
datedateSection 2.5.8, "Mapping for + date"
dateTimedate_timeSection 2.5.9, "Mapping for + dateTime"
durationdurationSection 2.5.10, "Mapping for + duration"
gDaygdaySection 2.5.11, "Mapping for + gDay"
gMonthgmonthSection 2.5.12, "Mapping for + gMonth"
gMonthDaygmonth_daySection 2.5.13, "Mapping for + gMonthDay"
gYeargyearSection 2.5.14, "Mapping for + gYear"
gYearMonthgyear_monthSection 2.5.15, "Mapping for + gYearMonth"
timetimeSection 2.5.16, "Mapping for + time"
entity types
ENTITYentitytype derived from name
ENTITIESentitiestype derived from sequence<entity>
+ +

All XML Schema built-in types are mapped to C++ classes that are + derived from the xml_schema::simple_type class except + where the mapping is to a fundamental C++ type.

+ +

The sequence class template is defined in an + implementation-specific namespace. It conforms to the + sequence interface as defined by the ISO/ANSI Standard for + C++ (ISO/IEC 14882:1998, Section 23.1.1, "Sequences"). + Practically, this means that you can treat such a sequence + as if it was std::vector. One notable extension + to the standard interface that is available only for + sequences of non-fundamental C++ types is the addition of + the overloaded push_back and insert + member functions which instead of the constant reference + to the element type accept automatic pointer (std::auto_ptr + or std::unique_ptr, depending on the C++ standard + selected) to the element type. These functions assume ownership + of the pointed to object and reset the passed automatic pointer. +

+ +

2.5.1 Inheritance from Built-in Data Types

+ +

In cases where the mapping calls for an inheritance from a built-in + type which is mapped to a fundamental C++ type, a proxy type is + used instead of the fundamental C++ type (C++ does not allow + inheritance from fundamental types). For instance:

+ +
+<simpleType name="my_int">
+  <restriction base="int"/>
+</simpleType>
+  
+ +

is mapped to:

+ +
+class my_int: public fundamental_base<int>
+{
+  ...
+};
+  
+ +

The fundamental_base class template provides a close + emulation (though not exact) of a fundamental C++ type. + It is defined in an implementation-specific namespace and has the + following interface:

+ +
+template <typename X>
+class fundamental_base: public simple_type
+{
+public:
+  fundamental_base ();
+  fundamental_base (X)
+  fundamental_base (const fundamental_base&)
+
+public:
+  fundamental_base&
+  operator= (const X&);
+
+public:
+  operator const X & () const;
+  operator X& ();
+
+  template <typename Y>
+  operator Y () const;
+
+  template <typename Y>
+  operator Y ();
+};
+  
+ +

2.5.2 Mapping for anyType

+ +

The XML Schema anyType built-in data type is mapped to the + xml_schema::type C++ class:

+ +
+class type
+{
+public:
+  virtual
+  ~type ();
+
+  type ();
+  type (const type&);
+
+  type&
+  operator= (const type&);
+
+  virtual type*
+  _clone () const;
+
+  // anyType DOM content.
+  //
+public:
+  typedef element_optional dom_content_optional;
+
+  const dom_content_optional&
+  dom_content () const;
+
+  dom_content_optional&
+  dom_content ();
+
+  void
+  dom_content (const xercesc::DOMElement&);
+
+  void
+  dom_content (xercesc::DOMElement*);
+
+  void
+  dom_content (const dom_content_optional&);
+
+  const xercesc::DOMDocument&
+  dom_content_document () const;
+
+  xercesc::DOMDocument&
+  dom_content_document ();
+
+  bool
+  null_content () const;
+
+  // DOM association.
+  //
+public:
+  const xercesc::DOMNode*
+  _node () const;
+
+  xercesc::DOMNode*
+  _node ();
+};
+  
+ +

When xml_schema::type is used to create an instance + (as opposed to being a base of a derived type), it represents + the XML Schema anyType type. anyType + allows any attributes and any content in any order. In the + C++/Tree mapping this content can be represented as a DOM + fragment, similar to XML Schema wildcards (Section + 2.12, "Mapping for any and + anyAttribute").

+ +

To enable automatic extraction of anyType content + during parsing, the --generate-any-type option must be + specified. Because the DOM API is used to access such content, the + Xerces-C++ runtime should be initialized by the application prior to + parsing and should remain initialized for the lifetime of objects + with the DOM content. For more information on the Xerces-C++ runtime + initialization see Section 3.1, "Initializing the + Xerces-C++ Runtime".

+ +

The DOM content is stored as the optional DOM element container + and the DOM content accessors and modifiers presented above are + identical to those generated for an optional element wildcard. + Refer to Section 2.12.2, "Mapping for any + with the Optional Cardinality Class" for details on their + semantics.

+ +

The dom_content_document() function returns the + DOM document used to store the raw XML content corresponding + to the anyType instance. It is equivalent to the + dom_document() function generated for types + with wildcards.

+ +

The null_content() accessor is an optimization function + that allows us to check for the lack of content without actually + creating its empty representation, that is, empty DOM document for + anyType or empty string for anySimpleType + (see the following section for details on anySimpleType).

+ +

For more information on DOM association refer to + Section 5.1, "DOM Association".

+ +

2.5.3 Mapping for anySimpleType

+ +

The XML Schema anySimpleType built-in data type is mapped + to the xml_schema::simple_type C++ class:

+ +
+class simple_type: public type
+{
+public:
+  simple_type ();
+  simple_type (const C*);
+  simple_type (const std::basic_string<C>&);
+
+  simple_type (const simple_type&);
+
+  simple_type&
+  operator= (const simple_type&);
+
+  virtual simple_type*
+  _clone () const;
+
+  // anySimpleType text content.
+  //
+public:
+  const std::basic_string<C>&
+  text_content () const;
+
+  std::basic_string<C>&
+  text_content ();
+
+  void
+  text_content (const std::basic_string<C>&);
+};
+  
+ +

When xml_schema::simple_type is used to create an instance + (as opposed to being a base of a derived type), it represents + the XML Schema anySimpleType type. anySimpleType + allows any simple content. In the C++/Tree mapping this content can + be represented as a string and accessed or modified with the + text_content() functions shown above.

+ +

2.5.4 Mapping for QName

+ +

The XML Schema QName built-in data type is mapped to the + xml_schema::qname C++ class:

+ +
+class qname: public simple_type
+{
+public:
+  qname (const ncname&);
+  qname (const uri&, const ncname&);
+  qname (const qname&);
+
+public:
+  qname&
+  operator= (const qname&);
+
+public:
+  virtual qname*
+  _clone () const;
+
+public:
+  bool
+  qualified () const;
+
+  const uri&
+  namespace_ () const;
+
+  const ncname&
+  name () const;
+};
+  
+ +

The qualified accessor function can be used to determine + if the name is qualified.

+ +

2.5.5 Mapping for IDREF

+ +

The XML Schema IDREF built-in data type is mapped to the + xml_schema::idref C++ class. This class implements the + smart pointer C++ idiom:

+ +
+class idref: public ncname
+{
+public:
+  idref (const C* s);
+  idref (const C* s, std::size_t n);
+  idref (std::size_t n, C c);
+  idref (const std::basic_string<C>&);
+  idref (const std::basic_string<C>&,
+         std::size_t pos,
+         std::size_t n = npos);
+
+public:
+  idref (const idref&);
+
+public:
+  virtual idref*
+  _clone () const;
+
+public:
+  idref&
+  operator= (C c);
+
+  idref&
+  operator= (const C* s);
+
+  idref&
+  operator= (const std::basic_string<C>&)
+
+  idref&
+  operator= (const idref&);
+
+public:
+  const type*
+  operator-> () const;
+
+  type*
+  operator-> ();
+
+  const type&
+  operator* () const;
+
+  type&
+  operator* ();
+
+  const type*
+  get () const;
+
+  type*
+  get ();
+
+  // Conversion to bool.
+  //
+public:
+  typedef void (idref::*bool_convertible)();
+  operator bool_convertible () const;
+};
+  
+ +

The object, idref instance refers to, is the immediate + container of the matching id instance. For example, + with the following instance document and schema: +

+ + +
+<!-- test.xml -->
+<root>
+  <object id="obj-1" text="hello"/>
+  <reference>obj-1</reference>
+</root>
+
+<!-- test.xsd -->
+<schema>
+  <complexType name="object_type">
+    <attribute name="id" type="ID"/>
+    <attribute name="text" type="string"/>
+  </complexType>
+
+  <complexType name="root_type">
+    <sequence>
+      <element name="object" type="object_type"/>
+      <element name="reference" type="IDREF"/>
+    </sequence>
+  </complexType>
+
+  <element name="root" type="root_type"/>
+</schema>
+  
+ +

The ref instance in the code below will refer to + an object of type object_type:

+ +
+root_type& root = ...;
+xml_schema::idref& ref (root.reference ());
+object_type& obj (dynamic_cast<object_type&> (*ref));
+cout << obj.text () << endl;
+  
+ +

The smart pointer interface of the idref class always + returns a pointer or reference to xml_schema::type. + This means that you will need to manually cast such pointer or + reference to its real (dynamic) type before you can use it (unless + all you need is the base interface provided by + xml_schema::type). As a special extension to the XML + Schema language, the mapping supports static typing of idref + references by employing the refType extension attribute. + The following example illustrates this mechanism: +

+ +
+<!-- test.xsd -->
+<schema
+  xmlns:xse="http://www.codesynthesis.com/xmlns/xml-schema-extension">
+
+  ...
+
+      <element name="reference" type="IDREF" xse:refType="object_type"/>
+
+  ...
+
+</schema>
+  
+ +

With this modification we do not need to do manual casting anymore: +

+ +
+root_type& root = ...;
+root_type::reference_type& ref (root.reference ());
+object_type& obj (*ref);
+cout << ref->text () << endl;
+  
+ + +

2.5.6 Mapping for base64Binary and + hexBinary

+ +

The XML Schema base64Binary and hexBinary + built-in data types are mapped to the + xml_schema::base64_binary and + xml_schema::hex_binary C++ classes, respectively. The + base64_binary and hex_binary classes + support a simple buffer abstraction by inheriting from the + xml_schema::buffer class: +

+ +
+class bounds: public virtual exception
+{
+public:
+  virtual const char*
+  what () const throw ();
+};
+
+class buffer
+{
+public:
+  typedef std::size_t size_t;
+
+public:
+  buffer (size_t size = 0);
+  buffer (size_t size, size_t capacity);
+  buffer (const void* data, size_t size);
+  buffer (const void* data, size_t size, size_t capacity);
+  buffer (void* data,
+          size_t size,
+          size_t capacity,
+          bool assume_ownership);
+
+public:
+  buffer (const buffer&);
+
+  buffer&
+  operator= (const buffer&);
+
+  void
+  swap (buffer&);
+
+public:
+  size_t
+  capacity () const;
+
+  bool
+  capacity (size_t);
+
+public:
+  size_t
+  size () const;
+
+  bool
+  size (size_t);
+
+public:
+  const char*
+  data () const;
+
+  char*
+  data ();
+
+  const char*
+  begin () const;
+
+  char*
+  begin ();
+
+  const char*
+  end () const;
+
+  char*
+  end ();
+};
+  
+ +

The last overloaded constructor reuses an existing data buffer instead + of making a copy. If the assume_ownership argument is + true, the instance assumes ownership of the + memory block pointed to by the data argument and will + eventually release it by calling operator delete. The + capacity and size modifier functions return + true if the underlying buffer has moved. +

+ +

The bounds exception is thrown if the constructor + arguments violate the (size <= capacity) + constraint.

+ +

The base64_binary and hex_binary classes + support the buffer interface and perform automatic + decoding/encoding from/to the Base64 and Hex formats, respectively: +

+ +
+class base64_binary: public simple_type, public buffer
+{
+public:
+  base64_binary (size_t size = 0);
+  base64_binary (size_t size, size_t capacity);
+  base64_binary (const void* data, size_t size);
+  base64_binary (const void* data, size_t size, size_t capacity);
+  base64_binary (void* data,
+                 size_t size,
+                 size_t capacity,
+                 bool assume_ownership);
+
+public:
+  base64_binary (const base64_binary&);
+
+  base64_binary&
+  operator= (const base64_binary&);
+
+  virtual base64_binary*
+  _clone () const;
+
+public:
+  std::basic_string<C>
+  encode () const;
+};
+  
+ +
+class hex_binary: public simple_type, public buffer
+{
+public:
+  hex_binary (size_t size = 0);
+  hex_binary (size_t size, size_t capacity);
+  hex_binary (const void* data, size_t size);
+  hex_binary (const void* data, size_t size, size_t capacity);
+  hex_binary (void* data,
+              size_t size,
+              size_t capacity,
+              bool assume_ownership);
+
+public:
+  hex_binary (const hex_binary&);
+
+  hex_binary&
+  operator= (const hex_binary&);
+
+  virtual hex_binary*
+  _clone () const;
+
+public:
+  std::basic_string<C>
+  encode () const;
+};
+  
+ + +

2.5.7 Time Zone Representation

+ +

The date, dateTime, gDay, + gMonth, gMonthDay, gYear, + gYearMonth, and time XML Schema built-in + types all include an optional time zone component. The following + xml_schema::time_zone base class is used to represent + this information:

+ +
+class time_zone
+{
+public:
+  time_zone ();
+  time_zone (short hours, short minutes);
+
+  bool
+  zone_present () const;
+
+  void
+  zone_reset ();
+
+  short
+  zone_hours () const;
+
+  void
+  zone_hours (short);
+
+  short
+  zone_minutes () const;
+
+  void
+  zone_minutes (short);
+};
+
+bool
+operator== (const time_zone&, const time_zone&);
+
+bool
+operator!= (const time_zone&, const time_zone&);
+  
+ +

The zone_present() accessor function returns true + if the time zone is specified. The zone_reset() modifier + function resets the time zone object to the not specified + state. If the time zone offset is negative then both hours and + minutes components are represented as negative integers.

+ + +

2.5.8 Mapping for date

+ +

The XML Schema date built-in data type is mapped to the + xml_schema::date C++ class which represents a year, a day, + and a month with an optional time zone. Its interface is presented + below. For more information on the base xml_schema::time_zone + class refer to Section 2.5.7, "Time Zone + Representation".

+ +
+class date: public simple_type, public time_zone
+{
+public:
+  date (int year, unsigned short month, unsigned short day);
+  date (int year, unsigned short month, unsigned short day,
+        short zone_hours, short zone_minutes);
+
+public:
+  date (const date&);
+
+  date&
+  operator= (const date&);
+
+  virtual date*
+  _clone () const;
+
+public:
+  int
+  year () const;
+
+  void
+  year (int);
+
+  unsigned short
+  month () const;
+
+  void
+  month (unsigned short);
+
+  unsigned short
+  day () const;
+
+  void
+  day (unsigned short);
+};
+
+bool
+operator== (const date&, const date&);
+
+bool
+operator!= (const date&, const date&);
+  
+ +

2.5.9 Mapping for dateTime

+ +

The XML Schema dateTime built-in data type is mapped to the + xml_schema::date_time C++ class which represents a year, a month, + a day, hours, minutes, and seconds with an optional time zone. Its interface + is presented below. For more information on the base + xml_schema::time_zone class refer to Section + 2.5.7, "Time Zone Representation".

+ +
+class date_time: public simple_type, public time_zone
+{
+public:
+  date_time (int year, unsigned short month, unsigned short day,
+             unsigned short hours, unsigned short minutes,
+             double seconds);
+
+  date_time (int year, unsigned short month, unsigned short day,
+             unsigned short hours, unsigned short minutes,
+             double seconds, short zone_hours, short zone_minutes);
+public:
+  date_time (const date_time&);
+
+  date_time&
+  operator= (const date_time&);
+
+  virtual date_time*
+  _clone () const;
+
+public:
+  int
+  year () const;
+
+  void
+  year (int);
+
+  unsigned short
+  month () const;
+
+  void
+  month (unsigned short);
+
+  unsigned short
+  day () const;
+
+  void
+  day (unsigned short);
+
+  unsigned short
+  hours () const;
+
+  void
+  hours (unsigned short);
+
+  unsigned short
+  minutes () const;
+
+  void
+  minutes (unsigned short);
+
+  double
+  seconds () const;
+
+  void
+  seconds (double);
+};
+
+bool
+operator== (const date_time&, const date_time&);
+
+bool
+operator!= (const date_time&, const date_time&);
+  
+ + +

2.5.10 Mapping for duration

+ +

The XML Schema duration built-in data type is mapped to the + xml_schema::duration C++ class which represents a potentially + negative duration in the form of years, months, days, hours, minutes, + and seconds. Its interface is presented below.

+ +
+class duration: public simple_type
+{
+public:
+  duration (bool negative,
+            unsigned int years, unsigned int months, unsigned int days,
+            unsigned int hours, unsigned int minutes, double seconds);
+public:
+  duration (const duration&);
+
+  duration&
+  operator= (const duration&);
+
+  virtual duration*
+  _clone () const;
+
+public:
+  bool
+  negative () const;
+
+  void
+  negative (bool);
+
+  unsigned int
+  years () const;
+
+  void
+  years (unsigned int);
+
+  unsigned int
+  months () const;
+
+  void
+  months (unsigned int);
+
+  unsigned int
+  days () const;
+
+  void
+  days (unsigned int);
+
+  unsigned int
+  hours () const;
+
+  void
+  hours (unsigned int);
+
+  unsigned int
+  minutes () const;
+
+  void
+  minutes (unsigned int);
+
+  double
+  seconds () const;
+
+  void
+  seconds (double);
+};
+
+bool
+operator== (const duration&, const duration&);
+
+bool
+operator!= (const duration&, const duration&);
+  
+ + +

2.5.11 Mapping for gDay

+ +

The XML Schema gDay built-in data type is mapped to the + xml_schema::gday C++ class which represents a day of the + month with an optional time zone. Its interface is presented below. + For more information on the base xml_schema::time_zone + class refer to Section 2.5.7, "Time Zone + Representation".

+ +
+class gday: public simple_type, public time_zone
+{
+public:
+  explicit
+  gday (unsigned short day);
+  gday (unsigned short day, short zone_hours, short zone_minutes);
+
+public:
+  gday (const gday&);
+
+  gday&
+  operator= (const gday&);
+
+  virtual gday*
+  _clone () const;
+
+public:
+  unsigned short
+  day () const;
+
+  void
+  day (unsigned short);
+};
+
+bool
+operator== (const gday&, const gday&);
+
+bool
+operator!= (const gday&, const gday&);
+  
+ + +

2.5.12 Mapping for gMonth

+ +

The XML Schema gMonth built-in data type is mapped to the + xml_schema::gmonth C++ class which represents a month of the + year with an optional time zone. Its interface is presented below. + For more information on the base xml_schema::time_zone + class refer to Section 2.5.7, "Time Zone + Representation".

+ +
+class gmonth: public simple_type, public time_zone
+{
+public:
+  explicit
+  gmonth (unsigned short month);
+  gmonth (unsigned short month,
+          short zone_hours, short zone_minutes);
+
+public:
+  gmonth (const gmonth&);
+
+  gmonth&
+  operator= (const gmonth&);
+
+  virtual gmonth*
+  _clone () const;
+
+public:
+  unsigned short
+  month () const;
+
+  void
+  month (unsigned short);
+};
+
+bool
+operator== (const gmonth&, const gmonth&);
+
+bool
+operator!= (const gmonth&, const gmonth&);
+  
+ + +

2.5.13 Mapping for gMonthDay

+ +

The XML Schema gMonthDay built-in data type is mapped to the + xml_schema::gmonth_day C++ class which represents a day and + a month of the year with an optional time zone. Its interface is presented + below. For more information on the base xml_schema::time_zone + class refer to Section 2.5.7, "Time Zone + Representation".

+ +
+class gmonth_day: public simple_type, public time_zone
+{
+public:
+  gmonth_day (unsigned short month, unsigned short day);
+  gmonth_day (unsigned short month, unsigned short day,
+              short zone_hours, short zone_minutes);
+
+public:
+  gmonth_day (const gmonth_day&);
+
+  gmonth_day&
+  operator= (const gmonth_day&);
+
+  virtual gmonth_day*
+  _clone () const;
+
+public:
+  unsigned short
+  month () const;
+
+  void
+  month (unsigned short);
+
+  unsigned short
+  day () const;
+
+  void
+  day (unsigned short);
+};
+
+bool
+operator== (const gmonth_day&, const gmonth_day&);
+
+bool
+operator!= (const gmonth_day&, const gmonth_day&);
+  
+ + +

2.5.14 Mapping for gYear

+ +

The XML Schema gYear built-in data type is mapped to the + xml_schema::gyear C++ class which represents a year with + an optional time zone. Its interface is presented below. For more + information on the base xml_schema::time_zone class refer + to Section 2.5.7, "Time Zone Representation".

+ +
+class gyear: public simple_type, public time_zone
+{
+public:
+  explicit
+  gyear (int year);
+  gyear (int year, short zone_hours, short zone_minutes);
+
+public:
+  gyear (const gyear&);
+
+  gyear&
+  operator= (const gyear&);
+
+  virtual gyear*
+  _clone () const;
+
+public:
+  int
+  year () const;
+
+  void
+  year (int);
+};
+
+bool
+operator== (const gyear&, const gyear&);
+
+bool
+operator!= (const gyear&, const gyear&);
+  
+ + +

2.5.15 Mapping for gYearMonth

+ +

The XML Schema gYearMonth built-in data type is mapped to + the xml_schema::gyear_month C++ class which represents + a year and a month with an optional time zone. Its interface is presented + below. For more information on the base xml_schema::time_zone + class refer to Section 2.5.7, "Time Zone + Representation".

+ +
+class gyear_month: public simple_type, public time_zone
+{
+public:
+  gyear_month (int year, unsigned short month);
+  gyear_month (int year, unsigned short month,
+               short zone_hours, short zone_minutes);
+public:
+  gyear_month (const gyear_month&);
+
+  gyear_month&
+  operator= (const gyear_month&);
+
+  virtual gyear_month*
+  _clone () const;
+
+public:
+  int
+  year () const;
+
+  void
+  year (int);
+
+  unsigned short
+  month () const;
+
+  void
+  month (unsigned short);
+};
+
+bool
+operator== (const gyear_month&, const gyear_month&);
+
+bool
+operator!= (const gyear_month&, const gyear_month&);
+  
+ + +

2.5.16 Mapping for time

+ +

The XML Schema time built-in data type is mapped to + the xml_schema::time C++ class which represents hours, + minutes, and seconds with an optional time zone. Its interface is + presented below. For more information on the base + xml_schema::time_zone class refer to + Section 2.5.7, "Time Zone Representation".

+ +
+class time: public simple_type, public time_zone
+{
+public:
+  time (unsigned short hours, unsigned short minutes, double seconds);
+  time (unsigned short hours, unsigned short minutes, double seconds,
+        short zone_hours, short zone_minutes);
+
+public:
+  time (const time&);
+
+  time&
+  operator= (const time&);
+
+  virtual time*
+  _clone () const;
+
+public:
+  unsigned short
+  hours () const;
+
+  void
+  hours (unsigned short);
+
+  unsigned short
+  minutes () const;
+
+  void
+  minutes (unsigned short);
+
+  double
+  seconds () const;
+
+  void
+  seconds (double);
+};
+
+bool
+operator== (const time&, const time&);
+
+bool
+operator!= (const time&, const time&);
+  
+ + + + +

2.6 Mapping for Simple Types

+ +

An XML Schema simple type is mapped to a C++ class with the same + name as the simple type. The class defines a public copy constructor, + a public copy assignment operator, and a public virtual + _clone function. The _clone function is + declared const, does not take any arguments, and returns + a pointer to a complete copy of the instance allocated in the free + store. The _clone function shall be used to make copies + when static type and dynamic type of the instance may differ (see + Section 2.11, "Mapping for xsi:type + and Substitution Groups"). For instance:

+ +
+<simpleType name="object">
+  ...
+</simpleType>
+  
+ +

is mapped to:

+ +
+class object: ...
+{
+public:
+  object (const object&);
+
+public:
+  object&
+  operator= (const object&);
+
+public:
+  virtual object*
+  _clone () const;
+
+  ...
+
+};
+  
+ +

The base class specification and the rest of the class definition + depend on the type of derivation used to define the simple type.

+ + +

2.6.1 Mapping for Derivation by Restriction

+ +

XML Schema derivation by restriction is mapped to C++ public + inheritance. The base type of the restriction becomes the base + type for the resulting C++ class. In addition to the members described + in Section 2.6, "Mapping for Simple Types", the + resulting C++ class defines a public constructor with the base type + as its single argument. For instance:

+ +
+<simpleType name="object">
+  <restriction base="base">
+    ...
+  </restriction>
+</simpleType>
+  
+ +

is mapped to:

+ +
+class object: public base
+{
+public:
+  object (const base&);
+  object (const object&);
+
+public:
+  object&
+  operator= (const object&);
+
+public:
+  virtual object*
+  _clone () const;
+};
+  
+ + +

2.6.2 Mapping for Enumerations

+ +

XML Schema restriction by enumeration is mapped to a C++ class + with semantics similar to C++ enum. Each XML Schema + enumeration element is mapped to a C++ enumerator with the + name derived from the value attribute and defined + in the class scope. In addition to the members + described in Section 2.6, "Mapping for Simple Types", + the resulting C++ class defines a public constructor that can be called + with one of the enumerators as its single argument, a public constructor + that can be called with enumeration's base value as its single + argument, a public assignment operator that can be used to assign the + value of one of the enumerators, and a public implicit conversion + operator to the underlying C++ enum type.

+ +

Furthermore, for string-based enumeration types, the resulting C++ + class defines a public constructor with a single argument of type + const C* and a public constructor with a single + argument of type const std::basic_string<C>&. + For instance:

+ +
+<simpleType name="color">
+  <restriction base="string">
+    <enumeration value="red"/>
+    <enumeration value="green"/>
+    <enumeration value="blue"/>
+  </restriction>
+</simpleType>
+  
+ +

is mapped to:

+ +
+class color: public xml_schema::string
+{
+public:
+  enum value
+  {
+    red,
+    green,
+    blue
+  };
+
+public:
+  color (value);
+  color (const C*);
+  color (const std::basic_string<C>&);
+  color (const xml_schema::string&);
+  color (const color&);
+
+public:
+  color&
+  operator= (value);
+
+  color&
+  operator= (const color&);
+
+public:
+  virtual color*
+  _clone () const;
+
+public:
+  operator value () const;
+};
+  
+ +

2.6.3 Mapping for Derivation by List

+ +

XML Schema derivation by list is mapped to C++ public + inheritance from xml_schema::simple_type + (Section 2.5.3, "Mapping for + anySimpleType") and a suitable sequence type. + The list item type becomes the element type of the sequence. + In addition to the members described in Section 2.6, + "Mapping for Simple Types", the resulting C++ class defines + a public default constructor, a public constructor + with the first argument of type size_type and + the second argument of list item type that creates + a list object with the specified number of copies of the specified + element value, and a public constructor with the two arguments + of an input iterator type that creates a list object from an + iterator range. For instance: +

+ +
+<simpleType name="int_list">
+  <list itemType="int"/>
+</simpleType>
+  
+ +

is mapped to:

+ +
+class int_list: public simple_type,
+                public sequence<int>
+{
+public:
+  int_list ();
+  int_list (size_type n, int x);
+
+  template <typename I>
+  int_list (const I& begin, const I& end);
+  int_list (const int_list&);
+
+public:
+  int_list&
+  operator= (const int_list&);
+
+public:
+  virtual int_list*
+  _clone () const;
+};
+  
+ +

The sequence class template is defined in an + implementation-specific namespace. It conforms to the + sequence interface as defined by the ISO/ANSI Standard for + C++ (ISO/IEC 14882:1998, Section 23.1.1, "Sequences"). + Practically, this means that you can treat such a sequence + as if it was std::vector. One notable extension + to the standard interface that is available only for + sequences of non-fundamental C++ types is the addition of + the overloaded push_back and insert + member functions which instead of the constant reference + to the element type accept automatic pointer (std::auto_ptr + or std::unique_ptr, depending on the C++ standard + selected) to the element type. These functions assume ownership + of the pointed to object and reset the passed automatic pointer. +

+ +

2.6.4 Mapping for Derivation by Union

+ +

XML Schema derivation by union is mapped to C++ public + inheritance from xml_schema::simple_type + (Section 2.5.3, "Mapping for + anySimpleType") and std::basic_string<C>. + In addition to the members described in Section 2.6, + "Mapping for Simple Types", the resulting C++ class defines a + public constructor with a single argument of type const C* + and a public constructor with a single argument of type + const std::basic_string<C>&. For instance: +

+ +
+<simpleType name="int_string_union">
+  <xsd:union memberTypes="xsd:int xsd:string"/>
+</simpleType>
+  
+ +

is mapped to:

+ +
+class int_string_union: public simple_type,
+                        public std::basic_string<C>
+{
+public:
+  int_string_union (const C*);
+  int_string_union (const std::basic_string<C>&);
+  int_string_union (const int_string_union&);
+
+public:
+  int_string_union&
+  operator= (const int_string_union&);
+
+public:
+  virtual int_string_union*
+  _clone () const;
+};
+  
+ +

2.7 Mapping for Complex Types

+ +

An XML Schema complex type is mapped to a C++ class with the same + name as the complex type. The class defines a public copy constructor, + a public copy assignment operator, and a public virtual + _clone function. The _clone function is + declared const, does not take any arguments, and returns + a pointer to a complete copy of the instance allocated in the free + store. The _clone function shall be used to make copies + when static type and dynamic type of the instance may differ (see + Section 2.11, "Mapping for xsi:type + and Substitution Groups").

+ +

Additionally, the resulting C++ class + defines two public constructors that take an initializer for each + member of the complex type and all its base types that belongs to + the One cardinality class (see Section 2.8, "Mapping + for Local Elements and Attributes"). In the first constructor, + the arguments are passed as constant references and the newly created + instance is initialized with copies of the passed objects. In the + second constructor, arguments that are complex types (that is, + they themselves contain elements or attributes) are passed as + either std::auto_ptr (C++98) or std::unique_ptr + (C++11), depending on the C++ standard selected. In this case the newly + created instance is directly initialized with and assumes ownership + of the pointed to objects and the std::[auto|unique]_ptr + arguments are reset to 0. For instance:

+ +
+<complexType name="complex">
+  <sequence>
+    <element name="a" type="int"/>
+    <element name="b" type="string"/>
+  </sequence>
+</complexType>
+
+<complexType name="object">
+  <sequence>
+    <element name="s-one" type="boolean"/>
+    <element name="c-one" type="complex"/>
+    <element name="optional" type="int" minOccurs="0"/>
+    <element name="sequence" type="string" maxOccurs="unbounded"/>
+  </sequence>
+</complexType>
+  
+ +

is mapped to:

+ +
+class complex: public xml_schema::type
+{
+public:
+  object (const int& a, const xml_schema::string& b);
+  object (const complex&);
+
+public:
+  object&
+  operator= (const complex&);
+
+public:
+  virtual complex*
+  _clone () const;
+
+  ...
+
+};
+
+class object: public xml_schema::type
+{
+public:
+  object (const bool& s_one, const complex& c_one);
+  object (const bool& s_one, std::[auto|unique]_ptr<complex> c_one);
+  object (const object&);
+
+public:
+  object&
+  operator= (const object&);
+
+public:
+  virtual object*
+  _clone () const;
+
+  ...
+
+};
+  
+ +

Notice that the generated complex class does not + have the second (std::[auto|unique]_ptr) version of the + constructor since all its required members are of simple types.

+ +

If an XML Schema complex type has an ultimate base which is an XML + Schema simple type then the resulting C++ class also defines a public + constructor that takes an initializer for the base type as well as + for each member of the complex type and all its base types that + belongs to the One cardinality class. For instance:

+ +
+<complexType name="object">
+  <simpleContent>
+    <extension base="date">
+      <attribute name="lang" type="language" use="required"/>
+    </extension>
+  </simpleContent>
+</complexType>
+  
+ +

is mapped to:

+ +
+class object: public xml_schema::string
+{
+public:
+  object (const xml_schema::language& lang);
+
+  object (const xml_schema::date& base,
+          const xml_schema::language& lang);
+
+  ...
+
+};
+  
+ +

Furthermore, for string-based XML Schema complex types, the resulting C++ + class also defines two public constructors with the first arguments + of type const C* and std::basic_string<C>&, + respectively, followed by arguments for each member of the complex + type and all its base types that belongs to the One cardinality + class. For enumeration-based complex types the resulting C++ + class also defines a public constructor with the first arguments + of the underlying enum type followed by arguments for each member + of the complex type and all its base types that belongs to the One + cardinality class. For instance:

+ +
+<simpleType name="color">
+  <restriction base="string">
+    <enumeration value="red"/>
+    <enumeration value="green"/>
+    <enumeration value="blue"/>
+  </restriction>
+</simpleType>
+
+<complexType name="object">
+  <simpleContent>
+    <extension base="color">
+      <attribute name="lang" type="language" use="required"/>
+    </extension>
+  </simpleContent>
+</complexType>
+  
+ +

is mapped to:

+ +
+class color: public xml_schema::string
+{
+public:
+  enum value
+  {
+    red,
+    green,
+    blue
+  };
+
+public:
+  color (value);
+  color (const C*);
+  color (const std::basic_string<C>&);
+
+  ...
+
+};
+
+class object: color
+{
+public:
+  object (const color& base,
+          const xml_schema::language& lang);
+
+  object (const color::value& base,
+          const xml_schema::language& lang);
+
+  object (const C* base,
+          const xml_schema::language& lang);
+
+  object (const std::basic_string<C>& base,
+          const xml_schema::language& lang);
+
+  ...
+
+};
+  
+ +

Additional constructors can be requested with the + --generate-default-ctor and + --generate-from-base-ctor options. See the + XSD + Compiler Command Line Manual for details.

+ +

If an XML Schema complex type is not explicitly derived from any type, + the resulting C++ class is derived from xml_schema::type. + In cases where an XML Schema complex type is defined using derivation + by extension or restriction, the resulting C++ base class specification + depends on the type of derivation and is described in the subsequent + sections. +

+ +

The mapping for elements and attributes that are defined in a complex + type is described in Section 2.8, "Mapping for Local + Elements and Attributes". +

+ +

2.7.1 Mapping for Derivation by Extension

+ +

XML Schema derivation by extension is mapped to C++ public + inheritance. The base type of the extension becomes the base + type for the resulting C++ class. +

+ +

2.7.2 Mapping for Derivation by Restriction

+ +

XML Schema derivation by restriction is mapped to C++ public + inheritance. The base type of the restriction becomes the base + type for the resulting C++ class. XML Schema elements and + attributes defined within restriction do not result in any + definitions in the resulting C++ class. Instead, corresponding + (unrestricted) definitions are inherited from the base class. + In the future versions of this mapping, such elements and + attributes may result in redefinitions of accessors and + modifiers to reflect their restricted semantics. +

+ + + +

2.8 Mapping for Local Elements and Attributes

+ +

XML Schema element and attribute definitions are called local + if they appear within a complex type definition, an element group + definition, or an attribute group definitions. +

+ +

Local XML Schema element and attribute definitions have the same + C++ mapping. Therefore, in this section, local elements and + attributes are collectively called members. +

+ +

While there are many different member cardinality combinations + (determined by the use attribute for attributes and + the minOccurs and maxOccurs attributes + for elements), the mapping divides all possible cardinality + combinations into three cardinality classes: +

+ +
+
one
+
attributes: use == "required"
+
attributes: use == "optional" and has default or fixed value
+
elements: minOccurs == "1" and maxOccurs == "1"
+ +
optional
+
attributes: use == "optional" and doesn't have default or fixed value
+
elements: minOccurs == "0" and maxOccurs == "1"
+ +
sequence
+
elements: maxOccurs > "1"
+
+ +

An optional attribute with a default or fixed value acquires this value + if the attribute hasn't been specified in an instance document (see + Appendix A, "Default and Fixed Values"). This + mapping places such optional attributes to the One cardinality + class.

+ +

A member is mapped to a set of public type definitions + (typedefs) and a set of public accessor and modifier + functions. Type definitions have names derived from the member's + name. The accessor and modifier functions have the same name as the + member. For example: +

+ +
+<complexType name="object">
+  <sequence>
+    <element name="member" type="string"/>
+  </sequence>
+</complexType>
+  
+ +

is mapped to:

+ +
+class object: public xml_schema::type
+{
+public:
+  typedef xml_schema::string member_type;
+
+  const member_type&
+  member () const;
+
+  ...
+
+};
+  
+ +

In addition, if a member has a default or fixed value, a static + accessor function is generated that returns this value. For + example:

+ +
+<complexType name="object">
+  <attribute name="data" type="string" default="test"/>
+</complexType>
+  
+ +

is mapped to:

+ +
+class object: public xml_schema::type
+{
+public:
+  typedef xml_schema::string data_type;
+
+  const data_type&
+  data () const;
+
+  static const data_type&
+  data_default_value ();
+
+  ...
+
+};
+  
+ +

Names and semantics of type definitions for the member as well + as signatures of the accessor and modifier functions depend on + the member's cardinality class and are described in the following + sub-sections. +

+ + +

2.8.1 Mapping for Members with the One Cardinality Class

+ +

For the One cardinality class, the type definitions consist of + an alias for the member's type with the name created by appending + the _type suffix to the member's name. +

+ +

The accessor functions come in constant and non-constant versions. + The constant accessor function returns a constant reference to the + member and can be used for read-only access. The non-constant + version returns an unrestricted reference to the member and can + be used for read-write access. +

+ +

The first modifier function expects an argument of type reference to + constant of the member's type. It makes a deep copy of its argument. + Except for member's types that are mapped to fundamental C++ types, + the second modifier function is provided that expects an argument + of type automatic pointer (std::auto_ptr or + std::unique_ptr, depending on the C++ standard selected) + to the member's type. It assumes ownership of the pointed to object + and resets the passed automatic pointer. For instance:

+ +
+<complexType name="object">
+  <sequence>
+    <element name="member" type="string"/>
+  </sequence>
+</complexType>
+  
+ +

is mapped to:

+ +
+class object: public xml_schema::type
+{
+public:
+  // Type definitions.
+  //
+  typedef xml_schema::string member_type;
+
+  // Accessors.
+  //
+  const member_type&
+  member () const;
+
+  member_type&
+  member ();
+
+  // Modifiers.
+  //
+  void
+  member (const member_type&);
+
+  void
+  member (std::[auto|unique]_ptr<member_type>);
+  ...
+
+};
+  
+ +

In addition, if requested by specifying the --generate-detach + option and only for members of non-fundamental C++ types, the mapping + provides a detach function that returns an automatic pointer to the + member's type, for example:

+ +
+class object: public xml_schema::type
+{
+public:
+  ...
+
+  std::[auto|unique]_ptr<member_type>
+  detach_member ();
+  ...
+
+};
+  
+ +

This function detaches the value from the tree leaving the member + value uninitialized. Accessing such an uninitialized value prior to + re-initializing it results in undefined behavior.

+ +

The following code shows how one could use this mapping:

+ +
+void
+f (object& o)
+{
+  using xml_schema::string;
+
+  string s (o.member ());                // get
+  object::member_type& sr (o.member ()); // get
+
+  o.member ("hello");           // set, deep copy
+  o.member () = "hello";        // set, deep copy
+
+  // C++98 version.
+  //
+  std::auto_ptr<string> p (new string ("hello"));
+  o.member (p);                 // set, assumes ownership
+  p = o.detach_member ();       // detach, member is uninitialized
+  o.member (p);                 // re-attach
+
+  // C++11 version.
+  //
+  std::unique_ptr<string> p (new string ("hello"));
+  o.member (std::move (p));     // set, assumes ownership
+  p = o.detach_member ();       // detach, member is uninitialized
+  o.member (std::move (p));     // re-attach
+}
+  
+ + +

2.8.2 Mapping for Members with the Optional Cardinality Class

+ +

For the Optional cardinality class, the type definitions consist of + an alias for the member's type with the name created by appending + the _type suffix to the member's name and an alias for + the container type with the name created by appending the + _optional suffix to the member's name. +

+ +

Unlike accessor functions for the One cardinality class, accessor + functions for the Optional cardinality class return references to + corresponding containers rather than directly to members. The + accessor functions come in constant and non-constant versions. + The constant accessor function returns a constant reference to + the container and can be used for read-only access. The non-constant + version returns an unrestricted reference to the container + and can be used for read-write access. +

+ +

The modifier functions are overloaded for the member's + type and the container type. The first modifier function + expects an argument of type reference to constant of the + member's type. It makes a deep copy of its argument. + Except for member's types that are mapped to fundamental C++ types, + the second modifier function is provided that expects an argument + of type automatic pointer (std::auto_ptr or + std::unique_ptr, depending on the C++ standard selected) + to the member's type. It assumes ownership of the pointed to object + and resets the passed automatic pointer. The last modifier function + expects an argument of type reference to constant of the container + type. It makes a deep copy of its argument. For instance: +

+ +
+<complexType name="object">
+  <sequence>
+    <element name="member" type="string" minOccurs="0"/>
+  </sequence>
+</complexType>
+  
+ +

is mapped to:

+ +
+class object: public xml_schema::type
+{
+public:
+  // Type definitions.
+  //
+  typedef xml_schema::string member_type;
+  typedef optional<member_type> member_optional;
+
+  // Accessors.
+  //
+  const member_optional&
+  member () const;
+
+  member_optional&
+  member ();
+
+  // Modifiers.
+  //
+  void
+  member (const member_type&);
+
+  void
+  member (std::[auto|unique]_ptr<member_type>);
+
+  void
+  member (const member_optional&);
+
+  ...
+
+};
+  
+ + +

The optional class template is defined in an + implementation-specific namespace and has the following + interface. The [auto|unique]_ptr-based constructor + and modifier function are only available if the template + argument is not a fundamental C++ type. +

+ +
+template <typename X>
+class optional
+{
+public:
+  optional ();
+
+  // Makes a deep copy.
+  //
+  explicit
+  optional (const X&);
+
+  // Assumes ownership.
+  //
+  explicit
+  optional (std::[auto|unique]_ptr<X>);
+
+  optional (const optional&);
+
+public:
+  optional&
+  operator= (const X&);
+
+  optional&
+  operator= (const optional&);
+
+  // Pointer-like interface.
+  //
+public:
+  const X*
+  operator-> () const;
+
+  X*
+  operator-> ();
+
+  const X&
+  operator* () const;
+
+  X&
+  operator* ();
+
+  typedef void (optional::*bool_convertible) ();
+  operator bool_convertible () const;
+
+  // Get/set interface.
+  //
+public:
+  bool
+  present () const;
+
+  const X&
+  get () const;
+
+  X&
+  get ();
+
+  // Makes a deep copy.
+  //
+  void
+  set (const X&);
+
+  // Assumes ownership.
+  //
+  void
+  set (std::[auto|unique]_ptr<X>);
+
+  // Detach and return the contained value.
+  //
+  std::[auto|unique]_ptr<X>
+  detach ();
+
+  void
+  reset ();
+};
+
+template <typename X>
+bool
+operator== (const optional<X>&, const optional<X>&);
+
+template <typename X>
+bool
+operator!= (const optional<X>&, const optional<X>&);
+
+template <typename X>
+bool
+operator< (const optional<X>&, const optional<X>&);
+
+template <typename X>
+bool
+operator> (const optional<X>&, const optional<X>&);
+
+template <typename X>
+bool
+operator<= (const optional<X>&, const optional<X>&);
+
+template <typename X>
+bool
+operator>= (const optional<X>&, const optional<X>&);
+  
+ + +

The following code shows how one could use this mapping:

+ +
+void
+f (object& o)
+{
+  using xml_schema::string;
+
+  if (o.member ().present ())       // test
+  {
+    string& s (o.member ().get ()); // get
+    o.member ("hello");             // set, deep copy
+    o.member ().set ("hello");      // set, deep copy
+    o.member ().reset ();           // reset
+  }
+
+  // Same as above but using pointer notation:
+  //
+  if (o.member ())                  // test
+  {
+    string& s (*o.member ());       // get
+    o.member ("hello");             // set, deep copy
+    *o.member () = "hello";         // set, deep copy
+    o.member ().reset ();           // reset
+  }
+
+  // C++98 version.
+  //
+  std::auto_ptr<string> p (new string ("hello"));
+  o.member (p);                     // set, assumes ownership
+
+  p = new string ("hello");
+  o.member ().set (p);              // set, assumes ownership
+
+  p = o.member ().detach ();        // detach, member is reset
+  o.member ().set (p);              // re-attach
+
+  // C++11 version.
+  //
+  std::unique_ptr<string> p (new string ("hello"));
+  o.member (std::move (p));         // set, assumes ownership
+
+  p.reset (new string ("hello"));
+  o.member ().set (std::move (p));  // set, assumes ownership
+
+  p = o.member ().detach ();        // detach, member is reset
+  o.member ().set (std::move (p));  // re-attach
+}
+  
+ + +

2.8.3 Mapping for Members with the Sequence Cardinality Class

+ +

For the Sequence cardinality class, the type definitions consist of an + alias for the member's type with the name created by appending + the _type suffix to the member's name, an alias of + the container type with the name created by appending the + _sequence suffix to the member's name, an alias of + the iterator type with the name created by appending the + _iterator suffix to the member's name, and an alias + of the constant iterator type with the name created by appending the + _const_iterator suffix to the member's name. +

+ +

The accessor functions come in constant and non-constant versions. + The constant accessor function returns a constant reference to the + container and can be used for read-only access. The non-constant + version returns an unrestricted reference to the container and can + be used for read-write access. +

+ +

The modifier function expects an argument of type reference to + constant of the container type. The modifier function + makes a deep copy of its argument. For instance: +

+ + +
+<complexType name="object">
+  <sequence>
+    <element name="member" type="string" minOccurs="unbounded"/>
+  </sequence>
+</complexType>
+  
+ +

is mapped to:

+ +
+class object: public xml_schema::type
+{
+public:
+  // Type definitions.
+  //
+  typedef xml_schema::string member_type;
+  typedef sequence<member_type> member_sequence;
+  typedef member_sequence::iterator member_iterator;
+  typedef member_sequence::const_iterator member_const_iterator;
+
+  // Accessors.
+  //
+  const member_sequence&
+  member () const;
+
+  member_sequence&
+  member ();
+
+  // Modifier.
+  //
+  void
+  member (const member_sequence&);
+
+  ...
+
+};
+  
+ +

The sequence class template is defined in an + implementation-specific namespace. It conforms to the + sequence interface as defined by the ISO/ANSI Standard for + C++ (ISO/IEC 14882:1998, Section 23.1.1, "Sequences"). + Practically, this means that you can treat such a sequence + as if it was std::vector. Two notable extensions + to the standard interface that are available only for + sequences of non-fundamental C++ types are the addition of + the overloaded push_back and insert + as well as the detach_back and detach + member functions. The additional push_back and + insert functions accept an automatic pointer + (std::auto_ptr or std::unique_ptr, + depending on the C++ standard selected) to the + element type instead of the constant reference. They assume + ownership of the pointed to object and reset the passed + automatic pointer. The detach_back and + detach functions detach the element + value from the sequence container and, by default, remove + the element from the sequence. These additional functions + have the following signatures:

+ +
+template <typename X>
+class sequence
+{
+public:
+  ...
+
+  void
+  push_back (std::[auto|unique]_ptr<X>)
+
+  iterator
+  insert (iterator position, std::[auto|unique]_ptr<X>)
+
+  std::[auto|unique]_ptr<X>
+  detach_back (bool pop = true);
+
+  iterator
+  detach (iterator position,
+          std::[auto|unique]_ptr<X>& result,
+          bool erase = true)
+
+  ...
+}
+  
+ +

The following code shows how one could use this mapping:

+ +
+void
+f (object& o)
+{
+  using xml_schema::string;
+
+  object::member_sequence& s (o.member ());
+
+  // Iteration.
+  //
+  for (object::member_iterator i (s.begin ()); i != s.end (); ++i)
+  {
+    string& value (*i);
+  }
+
+  // Modification.
+  //
+  s.push_back ("hello");  // deep copy
+
+  // C++98 version.
+  //
+  std::auto_ptr<string> p (new string ("hello"));
+  s.push_back (p);        // assumes ownership
+  p = s.detach_back ();   // detach and pop
+  s.push_back (p);        // re-append
+
+  // C++11 version.
+  //
+  std::unique_ptr<string> p (new string ("hello"));
+  s.push_back (std::move (p)); // assumes ownership
+  p = s.detach_back ();        // detach and pop
+  s.push_back (std::move (p)); // re-append
+
+  // Setting a new container.
+  //
+  object::member_sequence n;
+  n.push_back ("one");
+  n.push_back ("two");
+  o.member (n);           // deep copy
+}
+  
+ +

2.8.4 Element Order

+ +

C++/Tree is a "flattening" mapping in a sense that many levels of + nested compositors (choice and sequence), + all potentially with their own cardinalities, are in the end mapped + to a flat set of elements with one of the three cardinality classes + discussed in the previous sections. While this results in a simple + and easy to use API for most types, in certain cases, the order of + elements in the actual XML documents is not preserved once parsed + into the object model. And sometimes such order has + application-specific significance. As an example, consider a schema + that defines a batch of bank transactions:

+ +
+<complexType name="withdraw">
+  <sequence>
+    <element name="account" type="unsignedInt"/>
+    <element name="amount" type="unsignedInt"/>
+  </sequence>
+</complexType>
+
+<complexType name="deposit">
+  <sequence>
+    <element name="account" type="unsignedInt"/>
+    <element name="amount" type="unsignedInt"/>
+  </sequence>
+</complexType>
+
+<complexType name="batch">
+  <choice minOccurs="0" maxOccurs="unbounded">
+    <element name="withdraw" type="withdraw"/>
+    <element name="deposit" type="deposit"/>
+  </choice>
+</complexType>
+  
+ +

The batch can contain any number of transactions in any order + but the order of transactions in each actual batch is significant. + For instance, consider what could happen if we reorder the + transactions and apply all the withdrawals before deposits.

+ +

For the batch schema type defined above the default + C++/Tree mapping will produce a C++ class that contains a pair of + sequence containers, one for each of the two elements. While this + will capture the content (transactions), the order of this content + as it appears in XML will be lost. Also, if we try to serialize the + batch we just loaded back to XML, all the withdrawal transactions + will appear before deposits.

+ +

To overcome this limitation of a flattening mapping, C++/Tree + allows us to mark certain XML Schema types, for which content + order is important, as ordered.

+ +

There are several command line options that control which + schema types are treated as ordered. To make an individual + type ordered, we use the --ordered-type option, + for example:

+ +
+--ordered-type batch
+  
+ +

To automatically treat all the types that are derived from an ordered + type also ordered, we use the --ordered-type-derived + option. This is primarily useful if you would like to iterate + over the complete hierarchy's content using the content order + sequence (discussed below).

+ +

Ordered types are also useful for handling mixed content. To + automatically mark all the types with mixed content as ordered + we use the --ordered-type-mixed option. For more + information on handling mixed content see Section + 2.13, "Mapping for Mixed Content Models".

+ +

Finally, we can mark all the types in the schema we are + compiling with the --ordered-type-all option. + You should only resort to this option if all the types in + your schema truly suffer from the loss of content + order since, as we will discuss shortly, ordered types + require extra effort to access and, especially, modify. + See the + XSD + Compiler Command Line Manual for more information on + these options.

+ +

Once a type is marked ordered, C++/Tree alters its mapping + in several ways. Firstly, for each local element, element + wildcard (Section 2.12.4, "Element Wildcard + Order"), and mixed content text (Section + 2.13, "Mapping for Mixed Content Models") in this type, a + content id constant is generated. Secondly, an addition sequence + is added to the class that captures the content order. Here + is how the mapping of our batch class changes + once we make it ordered:

+ +
+class batch: public xml_schema::type
+{
+public:
+  // withdraw
+  //
+  typedef withdraw withdraw_type;
+  typedef sequence<withdraw_type> withdraw_sequence;
+  typedef withdraw_sequence::iterator withdraw_iterator;
+  typedef withdraw_sequence::const_iterator withdraw_const_iterator;
+
+  static const std::size_t withdraw_id = 1;
+
+  const withdraw_sequence&
+  withdraw () const;
+
+  withdraw_sequence&
+  withdraw ();
+
+  void
+  withdraw (const withdraw_sequence&);
+
+  // deposit
+  //
+  typedef deposit deposit_type;
+  typedef sequence<deposit_type> deposit_sequence;
+  typedef deposit_sequence::iterator deposit_iterator;
+  typedef deposit_sequence::const_iterator deposit_const_iterator;
+
+  static const std::size_t deposit_id = 2;
+
+  const deposit_sequence&
+  deposit () const;
+
+  deposit_sequence&
+  deposit ();
+
+  void
+  deposit (const deposit_sequence&);
+
+  // content_order
+  //
+  typedef xml_schema::content_order content_order_type;
+  typedef std::vector<content_order_type> content_order_sequence;
+  typedef content_order_sequence::iterator content_order_iterator;
+  typedef content_order_sequence::const_iterator content_order_const_iterator;
+
+  const content_order_sequence&
+  content_order () const;
+
+  content_order_sequence&
+  content_order ();
+
+  void
+  content_order (const content_order_sequence&);
+
+  ...
+};
+  
+ +

Notice the withdraw_id and deposit_id + content ids as well as the extra content_order + sequence that does not correspond to any element in the + schema definition. The other changes to the mapping for ordered + types has to do with XML parsing and serialization code. During + parsing the content order is captured in the content_order + sequence while during serialization this sequence is used to + determine the order in which content is serialized. The + content_order sequence is also copied during + copy construction and assigned during copy assignment. It is also + taken into account during comparison.

+ +

The entry type of the content_order sequence is the + xml_schema::content_order type that has the following + interface:

+ +
+namespace xml_schema
+{
+  struct content_order
+  {
+    content_order (std::size_t id, std::size_t index = 0);
+
+    std::size_t id;
+    std::size_t index;
+  };
+
+  bool
+  operator== (const content_order&, const content_order&);
+
+  bool
+  operator!= (const content_order&, const content_order&);
+
+  bool
+  operator< (const content_order&, const content_order&);
+}
+  
+ +

The content_order sequence describes the order of + content (elements, including wildcards, as well as mixed content + text). Each entry in this sequence consists of the content id + (for example, withdraw_id or deposit_id + in our case) as well as, for elements of the sequence cardinality + class, an index into the corresponding sequence container (the + index is unused for the one and optional cardinality classes). + For example, in our case, if the content id is withdraw_id, + then the index will point into the withdraw element + sequence.

+ +

With all this information we can now examine how to iterate over + transaction in the batch in content order:

+ +
+batch& b = ...
+
+for (batch::content_order_const_iterator i (b.content_order ().begin ());
+     i != b.content_order ().end ();
+     ++i)
+{
+  switch (i->id)
+  {
+  case batch::withdraw_id:
+    {
+      const withdraw& t (b.withdraw ()[i->index]);
+      cerr << t.account () << " withdraw " << t.amount () << endl;
+      break;
+    }
+  case batch::deposit_id:
+    {
+      const deposit& t (b.deposit ()[i->index]);
+      cerr << t.account () << " deposit " << t.amount () << endl;
+      break;
+    }
+  default:
+    {
+      assert (false); // Unknown content id.
+    }
+  }
+}
+  
+ +

If we serialized our batch back to XML, we would also see that the + order of transactions in the output is exactly the same as in the + input rather than all the withdrawals first followed by all the + deposits.

+ +

The most complex aspect of working with ordered types is + modifications. Now we not only need to change the content, + but also remember to update the order information corresponding + to this change. As a first example, we add a deposit transaction + to the batch:

+ +
+using xml_schema::content_order;
+
+batch::deposit_sequence& d (b.deposit ());
+batch::withdraw_sequence& w (b.withdraw ());
+batch::content_order_sequence& co (b.content_order ());
+
+d.push_back (deposit (123456789, 100000));
+co.push_back (content_order (batch::deposit_id, d.size () - 1));
+  
+ +

In the above example we first added the content (deposit + transaction) and then updated the content order information + by adding an entry with deposit_id content + id and the index of the just added deposit transaction.

+ +

Removing the last transaction can be easy if we know which + transaction (deposit or withdrawal) is last:

+ +
+d.pop_back ();
+co.pop_back ();
+  
+ +

If, however, we do not know which transaction is last, then + things get a bit more complicated:

+ +
+switch (co.back ().id)
+{
+case batch::withdraw_id:
+  {
+    d.pop_back ();
+    break;
+  }
+case batch::deposit_id:
+  {
+    w.pop_back ();
+    break;
+  }
+}
+
+co.pop_back ();
+  
+ +

The following example shows how to add a transaction at the + beginning of the batch:

+ +
+w.push_back (withdraw (123456789, 100000));
+co.insert (co.begin (),
+           content_order (batch::withdraw_id, w.size () - 1));
+  
+ +

Note also that when we merely modify the content of one + of the elements in place, we do not need to update its + order since it doesn't change. For example, here is how + we can change the amount in the first withdrawal:

+ +
+w[0].amount (10000);
+  
+ +

For the complete working code shown in this section refer to the + order/element example in the + examples/cxx/tree/ directory in the XSD distribution.

+ +

If both the base and derived types are ordered, then the + content order sequence is only added to the base and the content + ids are unique within the whole hierarchy. In this case + the content order sequence for the derived type contains + ordering information for both base and derived content.

+ +

In some applications we may need to perform more complex + content processing. For example, in our case, we may need + to remove all the withdrawal transactions. The default + container, std::vector, is not particularly + suitable for such operations. What may be required by + some applications is a multi-index container that not + only allows us to iterate in content order similar to + std::vector but also search by the content + id as well as the content id and index pair.

+ +

While C++/Tree does not provide this functionality by + default, it allows us to specify a custom container + type for content order with the --order-container + command line option. The only requirement from the + generated code side for such a container is to provide + the vector-like push_back(), + size(), and const iteration interfaces.

+ +

As an example, here is how we can use the Boost Multi-Index + container for content order. First we create the + content-order-container.hxx header with the + following definition (in C++11, use the alias template + instead):

+ +
+#ifndef CONTENT_ORDER_CONTAINER
+#define CONTENT_ORDER_CONTAINER
+
+#include <cstddef> // std::size_t
+
+#include <boost/multi_index_container.hpp>
+#include <boost/multi_index/member.hpp>
+#include <boost/multi_index/identity.hpp>
+#include <boost/multi_index/ordered_index.hpp>
+#include <boost/multi_index/random_access_index.hpp>
+
+struct by_id {};
+struct by_id_index {};
+
+template <typename T>
+struct content_order_container:
+  boost::multi_index::multi_index_container<
+    T,
+    boost::multi_index::indexed_by<
+      boost::multi_index::random_access<>,
+      boost::multi_index::ordered_unique<
+        boost::multi_index::tag<by_id_index>,
+        boost::multi_index::identity<T>
+      >,
+      boost::multi_index::ordered_non_unique<
+        boost::multi_index::tag<by_id>,
+        boost::multi_index::member<T, std::size_t, &T::id>
+      >
+    >
+  >
+{};
+
+#endif
+  
+ +

Next we add the following two XSD compiler options to include + this header into every generated header file and to use the + custom container type (see the XSD compiler command line manual + for more information on shell quoting for the first option):

+ +
+--hxx-prologue '#include "content-order-container.hxx"'
+--order-container content_order_container
+  
+ +

With these changes we can now use the multi-index functionality, + for example, to search for a specific content id:

+ +
+typedef batch::content_order_sequence::index<by_id>::type id_set;
+typedef id_set::iterator id_iterator;
+
+const id_set& ids (b.content_order ().get<by_id> ());
+
+std::pair<id_iterator, id_iterator> r (
+  ids.equal_range (std::size_t (batch::deposit_id));
+
+for (id_iterator i (r.first); i != r.second; ++i)
+{
+  const deposit& t (b.deposit ()[i->index]);
+  cerr << t.account () << " deposit " << t.amount () << endl;
+}
+  
+ +

2.9 Mapping for Global Elements

+ +

An XML Schema element definition is called global if it appears + directly under the schema element. + A global element is a valid root of an instance document. By + default, a global element is mapped to a set of overloaded + parsing and, optionally, serialization functions with the + same name as the element. It is also possible to generate types + for root elements instead of parsing and serialization functions. + This is primarily useful to distinguish object models with the + same root type but with different root elements. See + Section 2.9.1, "Element Types" for details. + It is also possible to request the generation of an element map + which allows uniform parsing and serialization of multiple root + elements. See Section 2.9.2, "Element Map" + for details. +

+ +

The parsing functions read XML instance documents and return + corresponding object models as an automatic pointer + (std::auto_ptr or std::unique_ptr, + depending on the C++ standard selected). Their signatures + have the following pattern (type denotes + element's type and name denotes element's + name): +

+ +
+std::[auto|unique]_ptr<type>
+name (....);
+  
+ +

The process of parsing, including the exact signatures of the parsing + functions, is the subject of Chapter 3, "Parsing". +

+ +

The serialization functions write object models back to XML instance + documents. Their signatures have the following pattern: +

+ +
+void
+name (<stream type>&, const type&, ....);
+  
+ +

The process of serialization, including the exact signatures of the + serialization functions, is the subject of Chapter 4, + "Serialization". +

+ + +

2.9.1 Element Types

+ +

The generation of element types is requested with the + --generate-element-map option. With this option + each global element is mapped to a C++ class with the + same name as the element. Such a class is derived from + xml_schema::element_type and contains the same set + of type definitions, constructors, and member function as would a + type containing a single element with the One cardinality class + named "value". In addition, the element type also + contains a set of member functions for accessing the element + name and namespace as well as its value in a uniform manner. + For example:

+ +
+<complexType name="type">
+  <sequence>
+    ...
+  </sequence>
+</complexType>
+
+<element name="root" type="type"/>
+  
+ +

is mapped to:

+ +
+class type
+{
+  ...
+};
+
+class root: public xml_schema::element_type
+{
+public:
+  // Element value.
+  //
+  typedef type value_type;
+
+  const value_type&
+  value () const;
+
+  value_type&
+  value ();
+
+  void
+  value (const value_type&);
+
+  void
+  value (std::[auto|unique]_ptr<value_type>);
+
+  // Constructors.
+  //
+  root (const value_type&);
+
+  root (std::[auto|unique]_ptr<value_type>);
+
+  root (const xercesc::DOMElement&, xml_schema::flags = 0);
+
+  root (const root&, xml_schema::flags = 0);
+
+  virtual root*
+  _clone (xml_schema::flags = 0) const;
+
+  // Element name and namespace.
+  //
+  static const std::string&
+  name ();
+
+  static const std::string&
+  namespace_ ();
+
+  virtual const std::string&
+  _name () const;
+
+  virtual const std::string&
+  _namespace () const;
+
+  // Element value as xml_schema::type.
+  //
+  virtual const xml_schema::type*
+  _value () const;
+
+  virtual xml_schema::type*
+  _value ();
+};
+
+void
+operator<< (xercesc::DOMElement&, const root&);
+  
+ +

The xml_schema::element_type class is a common + base type for all element types and is defined as follows:

+ +
+namespace xml_schema
+{
+  class element_type
+  {
+  public:
+    virtual
+    ~element_type ();
+
+    virtual element_type*
+    _clone (flags f = 0) const = 0;
+
+    virtual const std::basic_string<C>&
+    _name () const = 0;
+
+    virtual const std::basic_string<C>&
+    _namespace () const = 0;
+
+    virtual xml_schema::type*
+    _value () = 0;
+
+    virtual const xml_schema::type*
+    _value () const = 0;
+  };
+}
+  
+ +

The _value() member function returns a pointer to + the element value or 0 if the element is of a fundamental C++ + type and therefore is not derived from xml_schema::type. +

+ +

Unlike parsing and serialization functions, element types + are only capable of parsing and serializing from/to a + DOMElement object. This means that the application + will need to perform its own XML-to-DOM parsing and DOM-to-XML + serialization. The following section describes a mechanism + provided by the mapping to uniformly parse and serialize + multiple root elements.

+ + +

2.9.2 Element Map

+ +

When element types are generated for root elements it is also + possible to request the generation of an element map with the + --generate-element-map option. The element map + allows uniform parsing and serialization of multiple root + elements via the common xml_schema::element_type + base type. The xml_schema::element_map class is + defined as follows:

+ +
+namespace xml_schema
+{
+  class element_map
+  {
+  public:
+    static std::[auto|unique]_ptr<xml_schema::element_type>
+    parse (const xercesc::DOMElement&, flags = 0);
+
+    static void
+    serialize (xercesc::DOMElement&, const element_type&);
+  };
+}
+  
+ +

The parse() function creates the corresponding + element type object based on the element name and namespace + and returns it as an automatic pointer (std::auto_ptr + or std::unique_ptr, depending on the C++ standard + selected) to xml_schema::element_type. + The serialize() function serializes the passed element + object to DOMElement. Note that in case of + serialize(), the DOMElement object + should have the correct name and namespace. If no element type is + available for an element, both functions throw the + xml_schema::no_element_info exception:

+ +
+struct no_element_info: virtual exception
+{
+  no_element_info (const std::basic_string<C>& element_name,
+                   const std::basic_string<C>& element_namespace);
+
+  const std::basic_string<C>&
+  element_name () const;
+
+  const std::basic_string<C>&
+  element_namespace () const;
+
+  virtual const char*
+  what () const throw ();
+};
+  
+ +

The application can discover the actual type of the element + object returned by parse() either using + dynamic_cast or by comparing element names and + namespaces. The following code fragments illustrate how the + element map can be used:

+ +
+// Parsing.
+//
+DOMElement& e = ... // Parse XML to DOM.
+
+auto_ptr<xml_schema::element_type> r (
+  xml_schema::element_map::parse (e));
+
+if (root1 r1 = dynamic_cast<root1*> (r.get ()))
+{
+  ...
+}
+else if (r->_name == root2::name () &&
+         r->_namespace () == root2::namespace_ ())
+{
+  root2& r2 (static_cast<root2&> (*r));
+
+  ...
+}
+  
+ +
+// Serialization.
+//
+xml_schema::element_type& r = ...
+
+string name (r._name ());
+string ns (r._namespace ());
+
+DOMDocument& doc = ... // Create a new DOMDocument with name and ns.
+DOMElement& e (*doc->getDocumentElement ());
+
+xml_schema::element_map::serialize (e, r);
+
+// Serialize DOMDocument to XML.
+  
+ + + +

2.10 Mapping for Global Attributes

+ +

An XML Schema attribute definition is called global if it appears + directly under the schema element. A global + attribute does not have any mapping. +

+ + + +

2.11 Mapping for xsi:type and Substitution + Groups

+ +

The mapping provides optional support for the XML Schema polymorphism + features (xsi:type and substitution groups) which can + be requested with the --generate-polymorphic option. + When used, the dynamic type of a member may be different from + its static type. Consider the following schema definition and + instance document: +

+ +
+<!-- test.xsd -->
+<schema>
+  <complexType name="base">
+    <attribute name="text" type="string"/>
+  </complexType>
+
+  <complexType name="derived">
+    <complexContent>
+      <extension base="base">
+        <attribute name="extra-text" type="string"/>
+      </extension>
+    </complexContent>
+  </complexType>
+
+  <complexType name="root_type">
+    <sequence>
+      <element name="item" type="base" maxOccurs="unbounded"/>
+    </sequence>
+  </complexType>
+
+  <element name="root" type="root_type"/>
+</schema>
+
+<!-- test.xml -->
+<root xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+  <item text="hello"/>
+  <item text="hello" extra-text="world" xsi:type="derived"/>
+</root>
+  
+ +

In the resulting object model, the container for + the root::item member will have two elements: + the first element's type will be base while + the second element's (dynamic) type will be + derived. This can be discovered using the + dynamic_cast operator as shown in the following + example: +

+ +
+void
+f (root& r)
+{
+  for (root::item_const_iterator i (r.item ().begin ());
+       i != r.item ().end ()
+       ++i)
+  {
+    if (derived* d = dynamic_cast<derived*> (&(*i)))
+    {
+      // derived
+    }
+    else
+    {
+      // base
+    }
+  }
+}
+  
+ +

The _clone virtual function should be used instead of + copy constructors to make copies of members that might use + polymorphism: +

+ +
+void
+f (root& r)
+{
+  for (root::item_const_iterator i (r.item ().begin ());
+       i != r.item ().end ()
+       ++i)
+  {
+    std::auto_ptr<base> c (i->_clone ());
+  }
+}
+  
+ +

The mapping can often automatically determine which types are + polymorphic based on the substitution group declarations. However, + if your XML vocabulary is not using substitution groups or if + substitution groups are defined in a separate schema, then you will + need to use the --polymorphic-type option to specify + which types are polymorphic. When using this option you only need + to specify the root of a polymorphic type hierarchy and the mapping + will assume that all the derived types are also polymorphic. + Also note that you need to specify this option when compiling every + schema file that references the polymorphic type. Consider the following + two schemas as an example:

+ +
+<!-- base.xsd -->
+<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
+
+  <xs:complexType name="base">
+    <xs:sequence>
+      <xs:element name="b" type="xs:int"/>
+    </xs:sequence>
+  </xs:complexType>
+
+  <!-- substitution group root -->
+  <xs:element name="base" type="base"/>
+
+</xs:schema>
+  
+ +
+<!-- derived.xsd -->
+<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
+
+  <include schemaLocation="base.xsd"/>
+
+  <xs:complexType name="derived">
+    <xs:complexContent>
+      <xs:extension base="base">
+        <xs:sequence>
+          <xs:element name="d" type="xs:string"/>
+        </xs:sequence>
+      </xs:extension>
+    </xs:complexContent>
+  </xs:complexType>
+
+  <xs:element name="derived" type="derived" substitutionGroup="base"/>
+
+</xs:schema>
+  
+ +

In this example we need to specify "--polymorphic-type base" + when compiling both schemas because the substitution group is declared + in a schema other than the one defining type base.

+ +

You can also indicate that all types should be treated as polymorphic + with the --polymorphic-type-all. However, this may result + in slower generated code with a greater footprint.

+ + + + + +

2.12 Mapping for any and anyAttribute

+ +

For the XML Schema any and anyAttribute + wildcards an optional mapping can be requested with the + --generate-wildcard option. The mapping represents + the content matched by wildcards as DOM fragments. Because the + DOM API is used to access such content, the Xerces-C++ runtime + should be initialized by the application prior to parsing and + should remain initialized for the lifetime of objects with + the wildcard content. For more information on the Xerces-C++ + runtime initialization see Section 3.1, + "Initializing the Xerces-C++ Runtime". +

+ +

The mapping for any is similar to the mapping for + local elements (see Section 2.8, "Mapping for Local + Elements and Attributes") except that the type used in the + wildcard mapping is xercesc::DOMElement. As with local + elements, the mapping divides all possible cardinality combinations + into three cardinality classes: one, optional, and + sequence. +

+ +

The mapping for anyAttribute represents the attributes + matched by this wildcard as a set of xercesc::DOMAttr + objects with a key being the attribute's name and namespace.

+ +

Similar to local elements and attributes, the any and + anyAttribute wildcards are mapped to a set of public type + definitions (typedefs) and a set of public accessor and modifier + functions. Type definitions have names derived from "any" + for the any wildcard and "any_attribute" + for the anyAttribute wildcard. The accessor and modifier + functions are named "any" for the any wildcard + and "any_attribute" for the anyAttribute + wildcard. Subsequent wildcards in the same type have escaped names + such as "any1" or "any_attribute1". +

+ +

Because Xerces-C++ DOM nodes always belong to a DOMDocument, + each type with a wildcard has an associated DOMDocument + object. The reference to this object can be obtained using the accessor + function called dom_document. The access to the document + object from the application code may be necessary to create or modify + the wildcard content. For example: +

+ +
+<complexType name="object">
+  <sequence>
+    <any namespace="##other"/>
+  </sequence>
+  <anyAttribute namespace="##other"/>
+</complexType>
+  
+ +

is mapped to:

+ +
+class object: public xml_schema::type
+{
+public:
+  // any
+  //
+  const xercesc::DOMElement&
+  any () const;
+
+  void
+  any (const xercesc::DOMElement&);
+
+  ...
+
+  // any_attribute
+  //
+  typedef attribute_set any_attribute_set;
+  typedef any_attribute_set::iterator any_attribute_iterator;
+  typedef any_attribute_set::const_iterator any_attribute_const_iterator;
+
+  const any_attribute_set&
+  any_attribute () const;
+
+  any_attribute_set&
+  any_attribute ();
+
+  ...
+
+  // DOMDocument object for wildcard content.
+  //
+  const xercesc::DOMDocument&
+  dom_document () const;
+
+  xercesc::DOMDocument&
+  dom_document ();
+
+  ...
+};
+  
+ + +

Names and semantics of type definitions for the wildcards as well + as signatures of the accessor and modifier functions depend on the + wildcard type as well as the cardinality class for the any + wildcard. They are described in the following sub-sections. +

+ + +

2.12.1 Mapping for any with the One Cardinality Class

+ +

For any with the One cardinality class, + there are no type definitions. The accessor functions come in + constant and non-constant versions. The constant accessor function + returns a constant reference to xercesc::DOMElement and + can be used for read-only access. The non-constant version returns + an unrestricted reference to xercesc::DOMElement and can + be used for read-write access. +

+ +

The first modifier function expects an argument of type reference + to constant xercesc::DOMElement and makes a deep copy + of its argument. The second modifier function expects an argument of + type pointer to xercesc::DOMElement. This modifier + function assumes ownership of its argument and expects the element + object to be created using the DOM document associated with this + instance. For example: +

+ +
+<complexType name="object">
+  <sequence>
+    <any namespace="##other"/>
+  </sequence>
+</complexType>
+  
+ +

is mapped to:

+ +
+class object: public xml_schema::type
+{
+public:
+  // Accessors.
+  //
+  const xercesc::DOMElement&
+  any () const;
+
+  xercesc::DOMElement&
+  any ();
+
+  // Modifiers.
+  //
+  void
+  any (const xercesc::DOMElement&);
+
+  void
+  any (xercesc::DOMElement*);
+
+  ...
+
+};
+  
+ + +

The following code shows how one could use this mapping:

+ +
+void
+f (object& o, const xercesc::DOMElement& e)
+{
+  using namespace xercesc;
+
+  DOMElement& e1 (o.any ());             // get
+  o.any (e)                              // set, deep copy
+  DOMDocument& doc (o.dom_document ());
+  o.any (doc.createElement (...));       // set, assumes ownership
+}
+  
+ +

2.12.2 Mapping for any with the Optional Cardinality Class

+ +

For any with the Optional cardinality class, the type + definitions consist of an alias for the container type with name + any_optional (or any1_optional, etc., for + subsequent wildcards in the type definition). +

+ +

Unlike accessor functions for the One cardinality class, accessor + functions for the Optional cardinality class return references to + corresponding containers rather than directly to DOMElement. + The accessor functions come in constant and non-constant versions. + The constant accessor function returns a constant reference to + the container and can be used for read-only access. The non-constant + version returns an unrestricted reference to the container + and can be used for read-write access. +

+ +

The modifier functions are overloaded for xercesc::DOMElement + and the container type. The first modifier function expects an argument of + type reference to constant xercesc::DOMElement and + makes a deep copy of its argument. The second modifier function + expects an argument of type pointer to xercesc::DOMElement. + This modifier function assumes ownership of its argument and expects + the element object to be created using the DOM document associated + with this instance. The third modifier function expects an argument + of type reference to constant of the container type and makes a + deep copy of its argument. For instance: +

+ +
+<complexType name="object">
+  <sequence>
+    <any namespace="##other" minOccurs="0"/>
+  </sequence>
+</complexType>
+  
+ +

is mapped to:

+ +
+class object: public xml_schema::type
+{
+public:
+  // Type definitions.
+  //
+  typedef element_optional any_optional;
+
+  // Accessors.
+  //
+  const any_optional&
+  any () const;
+
+  any_optional&
+  any ();
+
+  // Modifiers.
+  //
+  void
+  any (const xercesc::DOMElement&);
+
+  void
+  any (xercesc::DOMElement*);
+
+  void
+  any (const any_optional&);
+
+  ...
+
+};
+  
+ + +

The element_optional container is a + specialization of the optional class template described + in Section 2.8.2, "Mapping for Members with the Optional + Cardinality Class". Its interface is presented below: +

+ +
+class element_optional
+{
+public:
+  explicit
+  element_optional (xercesc::DOMDocument&);
+
+  // Makes a deep copy.
+  //
+  element_optional (const xercesc::DOMElement&, xercesc::DOMDocument&);
+
+  // Assumes ownership.
+  //
+  element_optional (xercesc::DOMElement*, xercesc::DOMDocument&);
+
+  element_optional (const element_optional&, xercesc::DOMDocument&);
+
+public:
+  element_optional&
+  operator= (const xercesc::DOMElement&);
+
+  element_optional&
+  operator= (const element_optional&);
+
+  // Pointer-like interface.
+  //
+public:
+  const xercesc::DOMElement*
+  operator-> () const;
+
+  xercesc::DOMElement*
+  operator-> ();
+
+  const xercesc::DOMElement&
+  operator* () const;
+
+  xercesc::DOMElement&
+  operator* ();
+
+  typedef void (element_optional::*bool_convertible) ();
+  operator bool_convertible () const;
+
+  // Get/set interface.
+  //
+public:
+  bool
+  present () const;
+
+  const xercesc::DOMElement&
+  get () const;
+
+  xercesc::DOMElement&
+  get ();
+
+  // Makes a deep copy.
+  //
+  void
+  set (const xercesc::DOMElement&);
+
+  // Assumes ownership.
+  //
+  void
+  set (xercesc::DOMElement*);
+
+  void
+  reset ();
+};
+
+bool
+operator== (const element_optional&, const element_optional&);
+
+bool
+operator!= (const element_optional&, const element_optional&);
+  
+ + +

The following code shows how one could use this mapping:

+ +
+void
+f (object& o, const xercesc::DOMElement& e)
+{
+  using namespace xercesc;
+
+  DOMDocument& doc (o.dom_document ());
+
+  if (o.any ().present ())                  // test
+  {
+    DOMElement& e1 (o.any ().get ());       // get
+    o.any ().set (e);                       // set, deep copy
+    o.any ().set (doc.createElement (...)); // set, assumes ownership
+    o.any ().reset ();                      // reset
+  }
+
+  // Same as above but using pointer notation:
+  //
+  if (o.member ())                          // test
+  {
+    DOMElement& e1 (*o.any ());             // get
+    o.any (e);                              // set, deep copy
+    o.any (doc.createElement (...));        // set, assumes ownership
+    o.any ().reset ();                      // reset
+  }
+}
+  
+ + + +

2.12.3 Mapping for any with the Sequence Cardinality Class

+ +

For any with the Sequence cardinality class, the type + definitions consist of an alias of the container type with name + any_sequence (or any1_sequence, etc., for + subsequent wildcards in the type definition), an alias of the iterator + type with name any_iterator (or any1_iterator, + etc., for subsequent wildcards in the type definition), and an alias + of the constant iterator type with name any_const_iterator + (or any1_const_iterator, etc., for subsequent wildcards + in the type definition). +

+ +

The accessor functions come in constant and non-constant versions. + The constant accessor function returns a constant reference to the + container and can be used for read-only access. The non-constant + version returns an unrestricted reference to the container and can + be used for read-write access. +

+ +

The modifier function expects an argument of type reference to + constant of the container type. The modifier function makes + a deep copy of its argument. For instance: +

+ + +
+<complexType name="object">
+  <sequence>
+    <any namespace="##other" minOccurs="unbounded"/>
+  </sequence>
+</complexType>
+  
+ +

is mapped to:

+ +
+class object: public xml_schema::type
+{
+public:
+  // Type definitions.
+  //
+  typedef element_sequence any_sequence;
+  typedef any_sequence::iterator any_iterator;
+  typedef any_sequence::const_iterator any_const_iterator;
+
+  // Accessors.
+  //
+  const any_sequence&
+  any () const;
+
+  any_sequence&
+  any ();
+
+  // Modifier.
+  //
+  void
+  any (const any_sequence&);
+
+  ...
+
+};
+  
+ +

The element_sequence container is a + specialization of the sequence class template described + in Section 2.8.3, "Mapping for Members with the + Sequence Cardinality Class". Its interface is similar to + the sequence interface as defined by the ISO/ANSI Standard for + C++ (ISO/IEC 14882:1998, Section 23.1.1, "Sequences") and is + presented below: +

+ +
+class element_sequence
+{
+public:
+  typedef xercesc::DOMElement        value_type;
+  typedef xercesc::DOMElement*       pointer;
+  typedef const xercesc::DOMElement* const_pointer;
+  typedef xercesc::DOMElement&       reference;
+  typedef const xercesc::DOMElement& const_reference;
+
+  typedef <implementation-defined>   iterator;
+  typedef <implementation-defined>   const_iterator;
+  typedef <implementation-defined>   reverse_iterator;
+  typedef <implementation-defined>   const_reverse_iterator;
+
+  typedef <implementation-defined>   size_type;
+  typedef <implementation-defined>   difference_type;
+  typedef <implementation-defined>   allocator_type;
+
+public:
+  explicit
+  element_sequence (xercesc::DOMDocument&);
+
+  // DOMElement cannot be default-constructed.
+  //
+  // explicit
+  // element_sequence (size_type n);
+
+  element_sequence (size_type n,
+                    const xercesc::DOMElement&,
+                    xercesc::DOMDocument&);
+
+  template <typename I>
+  element_sequence (const I& begin,
+                    const I& end,
+                    xercesc::DOMDocument&);
+
+  element_sequence (const element_sequence&, xercesc::DOMDocument&);
+
+  element_sequence&
+  operator= (const element_sequence&);
+
+public:
+  void
+  assign (size_type n, const xercesc::DOMElement&);
+
+  template <typename I>
+  void
+  assign (const I& begin, const I& end);
+
+public:
+  // This version of resize can only be used to shrink the
+  // sequence because DOMElement cannot be default-constructed.
+  //
+  void
+  resize (size_type);
+
+  void
+  resize (size_type, const xercesc::DOMElement&);
+
+public:
+  size_type
+  size () const;
+
+  size_type
+  max_size () const;
+
+  size_type
+  capacity () const;
+
+  bool
+  empty () const;
+
+  void
+  reserve (size_type);
+
+  void
+  clear ();
+
+public:
+  const_iterator
+  begin () const;
+
+  const_iterator
+  end () const;
+
+  iterator
+  begin ();
+
+  iterator
+  end ();
+
+  const_reverse_iterator
+  rbegin () const;
+
+  const_reverse_iterator
+  rend () const
+
+    reverse_iterator
+  rbegin ();
+
+  reverse_iterator
+  rend ();
+
+public:
+  xercesc::DOMElement&
+  operator[] (size_type);
+
+  const xercesc::DOMElement&
+  operator[] (size_type) const;
+
+  xercesc::DOMElement&
+  at (size_type);
+
+  const xercesc::DOMElement&
+  at (size_type) const;
+
+  xercesc::DOMElement&
+  front ();
+
+  const xercesc::DOMElement&
+  front () const;
+
+  xercesc::DOMElement&
+  back ();
+
+  const xercesc::DOMElement&
+  back () const;
+
+public:
+  // Makes a deep copy.
+  //
+  void
+  push_back (const xercesc::DOMElement&);
+
+  // Assumes ownership.
+  //
+  void
+  push_back (xercesc::DOMElement*);
+
+  void
+  pop_back ();
+
+  // Makes a deep copy.
+  //
+  iterator
+  insert (iterator position, const xercesc::DOMElement&);
+
+  // Assumes ownership.
+  //
+  iterator
+  insert (iterator position, xercesc::DOMElement*);
+
+  void
+  insert (iterator position, size_type n, const xercesc::DOMElement&);
+
+  template <typename I>
+  void
+  insert (iterator position, const I& begin, const I& end);
+
+  iterator
+  erase (iterator position);
+
+  iterator
+  erase (iterator begin, iterator end);
+
+public:
+  // Note that the DOMDocument object of the two sequences being
+  // swapped should be the same.
+  //
+  void
+  swap (sequence& x);
+};
+
+inline bool
+operator== (const element_sequence&, const element_sequence&);
+
+inline bool
+operator!= (const element_sequence&, const element_sequence&);
+  
+ + +

The following code shows how one could use this mapping:

+ +
+void
+f (object& o, const xercesc::DOMElement& e)
+{
+  using namespace xercesc;
+
+  object::any_sequence& s (o.any ());
+
+  // Iteration.
+  //
+  for (object::any_iterator i (s.begin ()); i != s.end (); ++i)
+  {
+    DOMElement& e (*i);
+  }
+
+  // Modification.
+  //
+  s.push_back (e);                       // deep copy
+  DOMDocument& doc (o.dom_document ());
+  s.push_back (doc.createElement (...)); // assumes ownership
+}
+  
+ +

2.12.4 Element Wildcard Order

+ +

Similar to elements, element wildcards in ordered types + (Section 2.8.4, "Element Order") are assigned + content ids and are included in the content order sequence. + Continuing with the bank transactions example started in Section + 2.8.4, we can extend the batch by allowing custom transactions:

+ +
+<complexType name="batch">
+  <choice minOccurs="0" maxOccurs="unbounded">
+    <element name="withdraw" type="withdraw"/>
+    <element name="deposit" type="deposit"/>
+    <any namespace="##other" processContents="lax"/>
+  </choice>
+</complexType>
+  
+ +

This will lead to the following changes in the generated + batch C++ class:

+ +
+class batch: public xml_schema::type
+{
+public:
+  ...
+
+  // any
+  //
+  typedef element_sequence any_sequence;
+  typedef any_sequence::iterator any_iterator;
+  typedef any_sequence::const_iterator any_const_iterator;
+
+  static const std::size_t any_id = 3UL;
+
+  const any_sequence&
+  any () const;
+
+  any_sequence&
+  any ();
+
+  void
+  any (const any_sequence&);
+
+  ...
+};
+  
+ +

With this change we also need to update the iteration code to handle + the new content id:

+ +
+for (batch::content_order_const_iterator i (b.content_order ().begin ());
+     i != b.content_order ().end ();
+     ++i)
+{
+  switch (i->id)
+  {
+    ...
+
+  case batch::any_id:
+    {
+      const DOMElement& e (b.any ()[i->index]);
+      ...
+      break;
+    }
+
+    ...
+  }
+}
+  
+ +

For the complete working code that shows the use of wildcards in + ordered types refer to the order/element example in + the examples/cxx/tree/ directory in the XSD + distribution.

+ +

2.12.5 Mapping for anyAttribute

+ +

For anyAttribute the type definitions consist of an alias + of the container type with name any_attribute_set + (or any1_attribute_set, etc., for subsequent wildcards + in the type definition), an alias of the iterator type with name + any_attribute_iterator (or any1_attribute_iterator, + etc., for subsequent wildcards in the type definition), and an alias + of the constant iterator type with name any_attribute_const_iterator + (or any1_attribute_const_iterator, etc., for subsequent + wildcards in the type definition). +

+ +

The accessor functions come in constant and non-constant versions. + The constant accessor function returns a constant reference to the + container and can be used for read-only access. The non-constant + version returns an unrestricted reference to the container and can + be used for read-write access. +

+ +

The modifier function expects an argument of type reference to + constant of the container type. The modifier function makes + a deep copy of its argument. For instance: +

+ + +
+<complexType name="object">
+  <sequence>
+    ...
+  </sequence>
+  <anyAttribute namespace="##other"/>
+</complexType>
+  
+ +

is mapped to:

+ +
+class object: public xml_schema::type
+{
+public:
+  // Type definitions.
+  //
+  typedef attribute_set any_attribute_set;
+  typedef any_attribute_set::iterator any_attribute_iterator;
+  typedef any_attribute_set::const_iterator any_attribute_const_iterator;
+
+  // Accessors.
+  //
+  const any_attribute_set&
+  any_attribute () const;
+
+  any_attribute_set&
+  any_attribute ();
+
+  // Modifier.
+  //
+  void
+  any_attribute (const any_attribute_set&);
+
+  ...
+
+};
+  
+ +

The attribute_set class is an associative container + similar to the std::set class template as defined by + the ISO/ANSI Standard for C++ (ISO/IEC 14882:1998, Section 23.3.3, + "Class template set") with the key being the attribute's name + and namespace. Unlike std::set, attribute_set + allows searching using names and namespaces instead of + xercesc::DOMAttr objects. It is defined in an + implementation-specific namespace and its interface is presented + below: +

+ +
+class attribute_set
+{
+public:
+  typedef xercesc::DOMAttr         key_type;
+  typedef xercesc::DOMAttr         value_type;
+  typedef xercesc::DOMAttr*        pointer;
+  typedef const xercesc::DOMAttr*  const_pointer;
+  typedef xercesc::DOMAttr&        reference;
+  typedef const xercesc::DOMAttr&  const_reference;
+
+  typedef <implementation-defined> iterator;
+  typedef <implementation-defined> const_iterator;
+  typedef <implementation-defined> reverse_iterator;
+  typedef <implementation-defined> const_reverse_iterator;
+
+  typedef <implementation-defined> size_type;
+  typedef <implementation-defined> difference_type;
+  typedef <implementation-defined> allocator_type;
+
+public:
+  attribute_set (xercesc::DOMDocument&);
+
+  template <typename I>
+  attribute_set (const I& begin, const I& end, xercesc::DOMDocument&);
+
+  attribute_set (const attribute_set&, xercesc::DOMDocument&);
+
+  attribute_set&
+  operator= (const attribute_set&);
+
+public:
+  const_iterator
+  begin () const;
+
+  const_iterator
+  end () const;
+
+  iterator
+  begin ();
+
+  iterator
+  end ();
+
+  const_reverse_iterator
+  rbegin () const;
+
+  const_reverse_iterator
+  rend () const;
+
+  reverse_iterator
+  rbegin ();
+
+  reverse_iterator
+  rend ();
+
+public:
+  size_type
+  size () const;
+
+  size_type
+  max_size () const;
+
+  bool
+  empty () const;
+
+  void
+  clear ();
+
+public:
+  // Makes a deep copy.
+  //
+  std::pair<iterator, bool>
+  insert (const xercesc::DOMAttr&);
+
+  // Assumes ownership.
+  //
+  std::pair<iterator, bool>
+  insert (xercesc::DOMAttr*);
+
+  // Makes a deep copy.
+  //
+  iterator
+  insert (iterator position, const xercesc::DOMAttr&);
+
+  // Assumes ownership.
+  //
+  iterator
+  insert (iterator position, xercesc::DOMAttr*);
+
+  template <typename I>
+  void
+  insert (const I& begin, const I& end);
+
+public:
+  void
+  erase (iterator position);
+
+  size_type
+  erase (const std::basic_string<C>& name);
+
+  size_type
+  erase (const std::basic_string<C>& namespace_,
+         const std::basic_string<C>& name);
+
+  size_type
+  erase (const XMLCh* name);
+
+  size_type
+  erase (const XMLCh* namespace_, const XMLCh* name);
+
+  void
+  erase (iterator begin, iterator end);
+
+public:
+  size_type
+  count (const std::basic_string<C>& name) const;
+
+  size_type
+  count (const std::basic_string<C>& namespace_,
+         const std::basic_string<C>& name) const;
+
+  size_type
+  count (const XMLCh* name) const;
+
+  size_type
+  count (const XMLCh* namespace_, const XMLCh* name) const;
+
+  iterator
+  find (const std::basic_string<C>& name);
+
+  iterator
+  find (const std::basic_string<C>& namespace_,
+        const std::basic_string<C>& name);
+
+  iterator
+  find (const XMLCh* name);
+
+  iterator
+  find (const XMLCh* namespace_, const XMLCh* name);
+
+  const_iterator
+  find (const std::basic_string<C>& name) const;
+
+  const_iterator
+  find (const std::basic_string<C>& namespace_,
+        const std::basic_string<C>& name) const;
+
+  const_iterator
+  find (const XMLCh* name) const;
+
+  const_iterator
+  find (const XMLCh* namespace_, const XMLCh* name) const;
+
+public:
+  // Note that the DOMDocument object of the two sets being
+  // swapped should be the same.
+  //
+  void
+  swap (attribute_set&);
+};
+
+bool
+operator== (const attribute_set&, const attribute_set&);
+
+bool
+operator!= (const attribute_set&, const attribute_set&);
+  
+ +

The following code shows how one could use this mapping:

+ +
+void
+f (object& o, const xercesc::DOMAttr& a)
+{
+  using namespace xercesc;
+
+  object::any_attribute_set& s (o.any_attribute ());
+
+  // Iteration.
+  //
+  for (object::any_attribute_iterator i (s.begin ()); i != s.end (); ++i)
+  {
+    DOMAttr& a (*i);
+  }
+
+  // Modification.
+  //
+  s.insert (a);                         // deep copy
+  DOMDocument& doc (o.dom_document ());
+  s.insert (doc.createAttribute (...)); // assumes ownership
+
+  // Searching.
+  //
+  object::any_attribute_iterator i (s.find ("name"));
+  i = s.find ("http://www.w3.org/XML/1998/namespace", "lang");
+}
+  
+ + + +

2.13 Mapping for Mixed Content Models

+ +

For XML Schema types with mixed content models C++/Tree provides + mapping support only if the type is marked as ordered + (Section 2.8.4, "Element Order"). Use the + --ordered-type-mixed XSD compiler option to + automatically mark all types with mixed content as ordered.

+ +

For an ordered type with mixed content, C++/Tree adds an extra + text content sequence that is used to store the text fragments. + This text content sequence is also assigned the content id and + its entries are included in the content order sequence, just + like elements. As a result, it is possible to capture the order + between elements and text fragments.

+ +

As an example, consider the following schema that describes text + with embedded links:

+ +
+<complexType name="anchor">
+  <simpleContent>
+    <extension base="string">
+      <attribute name="href" type="anyURI" use="required"/>
+    </extension>
+  </simpleContent>
+</complexType>
+
+<complexType name="text" mixed="true">
+  <sequence>
+    <element name="a" type="anchor" minOccurs="0" maxOccurs="unbounded"/>
+  </sequence>
+</complexType>
+  
+ +

The generated text C++ class will provide the following + API (assuming it is marked as ordered):

+ +
+class text: public xml_schema::type
+{
+public:
+  // a
+  //
+  typedef anchor a_type;
+  typedef sequence<a_type> a_sequence;
+  typedef a_sequence::iterator a_iterator;
+  typedef a_sequence::const_iterator a_const_iterator;
+
+  static const std::size_t a_id = 1UL;
+
+  const a_sequence&
+  a () const;
+
+  a_sequence&
+  a ();
+
+  void
+  a (const a_sequence&);
+
+  // text_content
+  //
+  typedef xml_schema::string text_content_type;
+  typedef sequence<text_content_type> text_content_sequence;
+  typedef text_content_sequence::iterator text_content_iterator;
+  typedef text_content_sequence::const_iterator text_content_const_iterator;
+
+  static const std::size_t text_content_id = 2UL;
+
+  const text_content_sequence&
+  text_content () const;
+
+  text_content_sequence&
+  text_content ();
+
+  void
+  text_content (const text_content_sequence&);
+
+  // content_order
+  //
+  typedef xml_schema::content_order content_order_type;
+  typedef std::vector<content_order_type> content_order_sequence;
+  typedef content_order_sequence::iterator content_order_iterator;
+  typedef content_order_sequence::const_iterator content_order_const_iterator;
+
+  const content_order_sequence&
+  content_order () const;
+
+  content_order_sequence&
+  content_order ();
+
+  void
+  content_order (const content_order_sequence&);
+
+  ...
+};
+  
+ +

Given this interface we can iterate over both link elements + and text in content order. The following code fragment converts + our format to plain text with references.

+ +
+const text& t = ...
+
+for (text::content_order_const_iterator i (t.content_order ().begin ());
+     i != t.content_order ().end ();
+     ++i)
+{
+  switch (i->id)
+  {
+  case text::a_id:
+    {
+      const anchor& a (t.a ()[i->index]);
+      cerr << a << "[" << a.href () << "]";
+      break;
+    }
+  case text::text_content_id:
+    {
+      const xml_schema::string& s (t.text_content ()[i->index]);
+      cerr << s;
+      break;
+    }
+  default:
+    {
+      assert (false); // Unknown content id.
+    }
+  }
+}
+  
+ +

For the complete working code that shows the use of mixed content + in ordered types refer to the order/mixed example in + the examples/cxx/tree/ directory in the XSD + distribution.

+ + + + +

3 Parsing

+ +

This chapter covers various aspects of parsing XML instance + documents in order to obtain corresponding tree-like object + model. +

+ +

Each global XML Schema element in the form:

+ +
+<element name="name" type="type"/>
+  
+ +

is mapped to 14 overloaded C++ functions in the form:

+ +
+// Read from a URI or a local file.
+//
+
+std::[auto|unique]_ptr<type>
+name (const std::basic_string<C>& uri,
+      xml_schema::flags = 0,
+      const xml_schema::properties& = xml_schema::properties ());
+
+std::[auto|unique]_ptr<type>
+name (const std::basic_string<C>& uri,
+      xml_schema::error_handler&,
+      xml_schema::flags = 0,
+      const xml_schema::properties& = xml_schema::properties ());
+
+std::[auto|unique]_ptr<type>
+name (const std::basic_string<C>& uri,
+      xercesc::DOMErrorHandler&,
+      xml_schema::flags = 0,
+      const xml_schema::properties& = xml_schema::properties ());
+
+
+// Read from std::istream.
+//
+
+std::[auto|unique]_ptr<type>
+name (std::istream&,
+      xml_schema::flags = 0,
+      const xml_schema::properties& = xml_schema::properties ());
+
+std::[auto|unique]_ptr<type>
+name (std::istream&,
+      xml_schema::error_handler&,
+      xml_schema::flags = 0,
+      const xml_schema::properties& = xml_schema::properties ());
+
+std::[auto|unique]_ptr<type>
+name (std::istream&,
+      xercesc::DOMErrorHandler&,
+      xml_schema::flags = 0,
+      const xml_schema::properties& = xml_schema::properties ());
+
+
+std::[auto|unique]_ptr<type>
+name (std::istream&,
+      const std::basic_string<C>& id,
+      xml_schema::flags = 0,
+      const xml_schema::properties& = xml_schema::properties ());
+
+std::[auto|unique]_ptr<type>
+name (std::istream&,
+      const std::basic_string<C>& id,
+      xml_schema::error_handler&,
+      xml_schema::flags = 0,
+      const xml_schema::properties& = xml_schema::properties ());
+
+std::[auto|unique]_ptr<type>
+name (std::istream&,
+      const std::basic_string<C>& id,
+      xercesc::DOMErrorHandler&,
+      xml_schema::flags = 0,
+      const xml_schema::properties& = xml_schema::properties ());
+
+
+// Read from InputSource.
+//
+
+std::[auto|unique]_ptr<type>
+name (xercesc::InputSource&,
+      xml_schema::flags = 0,
+      const xml_schema::properties& = xml_schema::properties ());
+
+std::[auto|unique]_ptr<type>
+name (xercesc::InputSource&,
+      xml_schema::error_handler&,
+      xml_schema::flags = 0,
+      const xml_schema::properties& = xml_schema::properties ());
+
+std::[auto|unique]_ptr<type>
+name (xercesc::InputSource&,
+      xercesc::DOMErrorHandler&,
+      xml_schema::flags = 0,
+      const xml_schema::properties& = xml_schema::properties ());
+
+
+// Read from DOM.
+//
+
+std::[auto|unique]_ptr<type>
+name (const xercesc::DOMDocument&,
+      xml_schema::flags = 0,
+      const xml_schema::properties& = xml_schema::properties ());
+
+std::[auto|unique]_ptr<type>
+name (xml_schema::dom::[auto|unique]_ptr<xercesc::DOMDocument>,
+      xml_schema::flags = 0,
+      const xml_schema::properties& = xml_schema::properties ());
+  
+ +

You can choose between reading an XML instance from a local file, + URI, std::istream, xercesc::InputSource, + or a pre-parsed DOM instance in the form of + xercesc::DOMDocument. All the parsing functions + return a dynamically allocated object model as either + std::auto_ptr or std::unique_ptr, + depending on the C++ standard selected. Each of these parsing + functions is discussed in more detail in the following sections. +

+ +

3.1 Initializing the Xerces-C++ Runtime

+ +

Some parsing functions expect you to initialize the Xerces-C++ + runtime while others initialize and terminate it as part of their + work. The general rule is as follows: if a function has any arguments + or return a value that is an instance of a Xerces-C++ type, then + this function expects you to initialize the Xerces-C++ runtime. + Otherwise, the function initializes and terminates the runtime for + you. Note that it is legal to have nested calls to the Xerces-C++ + initialize and terminate functions as long as the calls are balanced. +

+ +

You can instruct parsing functions that initialize and terminate + the runtime not to do so by passing the + xml_schema::flags::dont_initialize flag (see + Section 3.2, "Flags and Properties"). +

+ + +

3.2 Flags and Properties

+ +

Parsing flags and properties are the last two arguments of every + parsing function. They allow you to fine-tune the process of + instance validation and parsing. Both arguments are optional. +

+ + +

The following flags are recognized by the parsing functions:

+ +
+
xml_schema::flags::keep_dom
+
Keep association between DOM nodes and the resulting + object model nodes. For more information about DOM association + refer to Section 5.1, "DOM Association".
+ +
xml_schema::flags::own_dom
+
Assume ownership of the DOM document passed. This flag only + makes sense together with the keep_dom flag in + the call to the parsing function with the + xml_schema::dom::[auto|unique]_ptr<DOMDocument> + argument.
+ +
xml_schema::flags::dont_validate
+
Do not validate instance documents against schemas.
+ +
xml_schema::flags::dont_initialize
+
Do not initialize the Xerces-C++ runtime.
+
+ +

You can pass several flags by combining them using the bit-wise OR + operator. For example:

+ +
+using xml_schema::flags;
+
+std::auto_ptr<type> r (
+  name ("test.xml", flags::keep_dom | flags::dont_validate));
+  
+ +

By default, validation of instance documents is turned on even + though parsers generated by XSD do not assume instance + documents are valid. They include a number of checks that prevent + construction of inconsistent object models. This, + however, does not mean that an instance document that was + successfully parsed by the XSD-generated parsers is + valid per the corresponding schema. If an instance document is not + "valid enough" for the generated parsers to construct consistent + object model, one of the exceptions defined in + xml_schema namespace is thrown (see + Section 3.3, "Error Handling"). +

+ +

For more information on the Xerces-C++ runtime initialization + refer to Section 3.1, "Initializing the Xerces-C++ + Runtime". +

+ +

The xml_schema::properties class allows you to + programmatically specify schema locations to be used instead + of those specified with the xsi::schemaLocation + and xsi::noNamespaceSchemaLocation attributes + in instance documents. The interface of the properties + class is presented below: +

+ +
+class properties
+{
+public:
+  void
+  schema_location (const std::basic_string<C>& namespace_,
+                   const std::basic_string<C>& location);
+  void
+  no_namespace_schema_location (const std::basic_string<C>& location);
+};
+  
+ +

Note that all locations are relative to an instance document unless + they are URIs. For example, if you want to use a local file as your + schema, then you will need to pass + file:///absolute/path/to/your/schema as the location + argument. +

+ +

3.3 Error Handling

+ +

As discussed in Section 2.2, "Error Handling", + the mapping uses the C++ exception handling mechanism as its primary + way of reporting error conditions. However, to handle recoverable + parsing and validation errors and warnings, a callback interface maybe + preferred by the application.

+ +

To better understand error handling and reporting strategies employed + by the parsing functions, it is useful to know that the + transformation of an XML instance document to a statically-typed + tree happens in two stages. The first stage, performed by Xerces-C++, + consists of parsing an XML document into a DOM instance. For short, + we will call this stage the XML-DOM stage. Validation, if not disabled, + happens during this stage. The second stage, + performed by the generated parsers, consist of parsing the DOM + instance into the statically-typed tree. We will call this stage + the DOM-Tree stage. Additional checks are performed during this + stage in order to prevent construction of inconsistent tree which + could otherwise happen when validation is disabled, for example.

+ +

All parsing functions except the one that operates on a DOM instance + come in overloaded triples. The first function in such a triple + reports error conditions exclusively by throwing exceptions. It + accumulates all the parsing and validation errors of the XML-DOM + stage and throws them in a single instance of the + xml_schema::parsing exception (described below). + The second and the third functions in the triple use callback + interfaces to report parsing and validation errors and warnings. + The two callback interfaces are xml_schema::error_handler + and xercesc::DOMErrorHandler. For more information + on the xercesc::DOMErrorHandler interface refer to + the Xerces-C++ documentation. The xml_schema::error_handler + interface is presented below: +

+ +
+class error_handler
+{
+public:
+  struct severity
+  {
+    enum value
+    {
+      warning,
+      error,
+      fatal
+    };
+  };
+
+  virtual bool
+  handle (const std::basic_string<C>& id,
+          unsigned long line,
+          unsigned long column,
+          severity,
+          const std::basic_string<C>& message) = 0;
+
+  virtual
+  ~error_handler ();
+};
+  
+ +

The id argument of the error_handler::handle + function identifies the resource being parsed (e.g., a file name or + URI). +

+ +

By returning true from the handle function + you instruct the parser to recover and continue parsing. Returning + false results in termination of the parsing process. + An error with the fatal severity level results in + termination of the parsing process no matter what is returned from + the handle function. It is safe to throw an exception + from the handle function. +

+ +

The DOM-Tree stage reports error conditions exclusively by throwing + exceptions. Individual exceptions thrown by the parsing functions + are described in the following sub-sections. +

+ + +

3.3.1 xml_schema::parsing

+ +
+struct severity
+{
+  enum value
+  {
+    warning,
+    error
+  };
+
+  severity (value);
+  operator value () const;
+};
+
+struct error
+{
+  error (severity,
+         const std::basic_string<C>& id,
+         unsigned long line,
+         unsigned long column,
+         const std::basic_string<C>& message);
+
+  severity
+  severity () const;
+
+  const std::basic_string<C>&
+  id () const;
+
+  unsigned long
+  line () const;
+
+  unsigned long
+  column () const;
+
+  const std::basic_string<C>&
+  message () const;
+};
+
+std::basic_ostream<C>&
+operator<< (std::basic_ostream<C>&, const error&);
+
+struct diagnostics: std::vector<error>
+{
+};
+
+std::basic_ostream<C>&
+operator<< (std::basic_ostream<C>&, const diagnostics&);
+
+struct parsing: virtual exception
+{
+  parsing ();
+  parsing (const diagnostics&);
+
+  const diagnostics&
+  diagnostics () const;
+
+  virtual const char*
+  what () const throw ();
+};
+  
+ +

The xml_schema::parsing exception is thrown if there + were parsing or validation errors reported during the XML-DOM stage. + If no callback interface was provided to the parsing function, the + exception contains a list of errors and warnings accessible using + the diagnostics function. The usual conditions when + this exception is thrown include malformed XML instances and, if + validation is turned on, invalid instance documents. +

+ +

3.3.2 xml_schema::expected_element

+ +
+struct expected_element: virtual exception
+{
+  expected_element (const std::basic_string<C>& name,
+                    const std::basic_string<C>& namespace_);
+
+
+  const std::basic_string<C>&
+  name () const;
+
+  const std::basic_string<C>&
+  namespace_ () const;
+
+
+  virtual const char*
+  what () const throw ();
+};
+  
+ +

The xml_schema::expected_element exception is thrown + when an expected element is not encountered by the DOM-Tree stage. + The name and namespace of the expected element can be obtained using + the name and namespace_ functions respectively. +

+ + +

3.3.3 xml_schema::unexpected_element

+ +
+struct unexpected_element: virtual exception
+{
+  unexpected_element (const std::basic_string<C>& encountered_name,
+                      const std::basic_string<C>& encountered_namespace,
+                      const std::basic_string<C>& expected_name,
+                      const std::basic_string<C>& expected_namespace)
+
+
+  const std::basic_string<C>&
+  encountered_name () const;
+
+  const std::basic_string<C>&
+  encountered_namespace () const;
+
+
+  const std::basic_string<C>&
+  expected_name () const;
+
+  const std::basic_string<C>&
+  expected_namespace () const;
+
+
+  virtual const char*
+  what () const throw ();
+};
+  
+ +

The xml_schema::unexpected_element exception is thrown + when an unexpected element is encountered by the DOM-Tree stage. + The name and namespace of the encountered element can be obtained + using the encountered_name and + encountered_namespace functions respectively. If an + element was expected instead of the encountered one, its name + and namespace can be obtained using the expected_name and + expected_namespace functions respectively. Otherwise + these functions return empty strings. +

+ +

3.3.4 xml_schema::expected_attribute

+ +
+struct expected_attribute: virtual exception
+{
+  expected_attribute (const std::basic_string<C>& name,
+                      const std::basic_string<C>& namespace_);
+
+
+  const std::basic_string<C>&
+  name () const;
+
+  const std::basic_string<C>&
+  namespace_ () const;
+
+
+  virtual const char*
+  what () const throw ();
+};
+  
+ +

The xml_schema::expected_attribute exception is thrown + when an expected attribute is not encountered by the DOM-Tree stage. + The name and namespace of the expected attribute can be obtained using + the name and namespace_ functions respectively. +

+ + +

3.3.5 xml_schema::unexpected_enumerator

+ +
+struct unexpected_enumerator: virtual exception
+{
+  unexpected_enumerator (const std::basic_string<C>& enumerator);
+
+  const std::basic_string<C>&
+  enumerator () const;
+
+  virtual const char*
+  what () const throw ();
+};
+  
+ +

The xml_schema::unexpected_enumerator exception is thrown + when an unexpected enumerator is encountered by the DOM-Tree stage. + The enumerator can be obtained using the enumerator + functions. +

+ +

3.3.6 xml_schema::expected_text_content

+ +
+struct expected_text_content: virtual exception
+{
+  virtual const char*
+  what () const throw ();
+};
+  
+ +

The xml_schema::expected_text_content exception is thrown + when a content other than text is encountered and the text content was + expected by the DOM-Tree stage. +

+ +

3.3.7 xml_schema::no_type_info

+ +
+struct no_type_info: virtual exception
+{
+  no_type_info (const std::basic_string<C>& type_name,
+                const std::basic_string<C>& type_namespace);
+
+  const std::basic_string<C>&
+  type_name () const;
+
+  const std::basic_string<C>&
+  type_namespace () const;
+
+  virtual const char*
+  what () const throw ();
+};
+  
+ +

The xml_schema::no_type_info exception is thrown + when there is no type information associated with a type specified + by the xsi:type attribute. This exception is thrown + by the DOM-Tree stage. The name and namespace of the type in question + can be obtained using the type_name and + type_namespace functions respectively. Usually, catching + this exception means that you haven't linked the code generated + from the schema defining the type in question with your application + or this schema has been compiled without the + --generate-polymorphic option. +

+ + +

3.3.8 xml_schema::not_derived

+ +
+struct not_derived: virtual exception
+{
+  not_derived (const std::basic_string<C>& base_type_name,
+               const std::basic_string<C>& base_type_namespace,
+               const std::basic_string<C>& derived_type_name,
+               const std::basic_string<C>& derived_type_namespace);
+
+  const std::basic_string<C>&
+  base_type_name () const;
+
+  const std::basic_string<C>&
+  base_type_namespace () const;
+
+
+  const std::basic_string<C>&
+  derived_type_name () const;
+
+  const std::basic_string<C>&
+  derived_type_namespace () const;
+
+  virtual const char*
+  what () const throw ();
+};
+  
+ +

The xml_schema::not_derived exception is thrown + when a type specified by the xsi:type attribute is + not derived from the expected base type. This exception is thrown + by the DOM-Tree stage. The name and namespace of the expected + base type can be obtained using the base_type_name and + base_type_namespace functions respectively. The name + and namespace of the offending type can be obtained using the + derived_type_name and + derived_type_namespace functions respectively. +

+ +

3.3.9 xml_schema::no_prefix_mapping

+ +
+struct no_prefix_mapping: virtual exception
+{
+  no_prefix_mapping (const std::basic_string<C>& prefix);
+
+  const std::basic_string<C>&
+  prefix () const;
+
+  virtual const char*
+  what () const throw ();
+};
+  
+ +

The xml_schema::no_prefix_mapping exception is thrown + during the DOM-Tree stage if a namespace prefix is encountered for + which a prefix-namespace mapping hasn't been provided. The namespace + prefix in question can be obtained using the prefix + function. +

+ +

3.4 Reading from a Local File or URI

+ +

Using a local file or URI is the simplest way to parse an XML instance. + For example:

+ +
+using std::auto_ptr;
+
+auto_ptr<type> r1 (name ("test.xml"));
+auto_ptr<type> r2 (name ("http://www.codesynthesis.com/test.xml"));
+  
+ +

Or, in the C++11 mode:

+ +
+using std::unique_ptr;
+
+unique_ptr<type> r1 (name ("test.xml"));
+unique_ptr<type> r2 (name ("http://www.codesynthesis.com/test.xml"));
+  
+ +

3.5 Reading from std::istream

+ +

When using an std::istream instance, you may also + pass an optional resource id. This id is used to identify the + resource (for example in error messages) as well as to resolve + relative paths. For instance:

+ +
+using std::auto_ptr;
+
+{
+  std::ifstream ifs ("test.xml");
+  auto_ptr<type> r (name (ifs, "test.xml"));
+}
+
+{
+  std::string str ("..."); // Some XML fragment.
+  std::istringstream iss (str);
+  auto_ptr<type> r (name (iss));
+}
+  
+ +

3.6 Reading from xercesc::InputSource

+ +

Reading from a xercesc::InputSource instance + is similar to the std::istream case except + the resource id is maintained by the InputSource + object. For instance:

+ +
+xercesc::StdInInputSource is;
+std::auto_ptr<type> r (name (is));
+  
+ +

3.7 Reading from DOM

+ +

Reading from a xercesc::DOMDocument instance allows + you to setup a custom XML-DOM stage. Things like DOM + parser reuse, schema pre-parsing, and schema caching can be achieved + with this approach. For more information on how to obtain DOM + representation from an XML instance refer to the Xerces-C++ + documentation. In addition, the + C++/Tree Mapping + FAQ shows how to parse an XML instance to a Xerces-C++ + DOM document using the XSD runtime utilities. +

+ +

The last parsing function is useful when you would like to perform + your own XML-to-DOM parsing and associate the resulting DOM document + with the object model nodes. The automatic DOMDocument + pointer is reset and the resulting object model assumes ownership + of the DOM document passed. For example:

+ +
+// C++98 version.
+//
+xml_schema::dom::auto_ptr<xercesc::DOMDocument> doc = ...
+
+std::auto_ptr<type> r (
+  name (doc, xml_schema::flags::keep_dom | xml_schema::flags::own_dom));
+
+// At this point doc is reset to 0.
+
+// C++11 version.
+//
+xml_schema::dom::unique_ptr<xercesc::DOMDocument> doc = ...
+
+std::unique_ptr<type> r (
+  name (std::move (doc),
+        xml_schema::flags::keep_dom | xml_schema::flags::own_dom));
+
+// At this point doc is reset to 0.
+  
+ +

4 Serialization

+ +

This chapter covers various aspects of serializing a + tree-like object model to DOM or XML. + In this regard, serialization is complimentary to the reverse + process of parsing a DOM or XML instance into an object model + which is discussed in Chapter 3, + "Parsing". Note that the generation of the serialization code + is optional and should be explicitly requested with the + --generate-serialization option. See the + XSD + Compiler Command Line Manual for more information. +

+ +

Each global XML Schema element in the form: +

+ + +
+<xsd:element name="name" type="type"/>
+  
+ +

is mapped to 8 overloaded C++ functions in the form:

+ +
+// Serialize to std::ostream.
+//
+void
+name (std::ostream&,
+      const type&,
+      const xml_schema::namespace_fomap& =
+        xml_schema::namespace_infomap (),
+      const std::basic_string<C>& encoding = "UTF-8",
+      xml_schema::flags = 0);
+
+void
+name (std::ostream&,
+      const type&,
+      xml_schema::error_handler&,
+      const xml_schema::namespace_infomap& =
+        xml_schema::namespace_infomap (),
+      const std::basic_string<C>& encoding = "UTF-8",
+      xml_schema::flags = 0);
+
+void
+name (std::ostream&,
+      const type&,
+      xercesc::DOMErrorHandler&,
+      const xml_schema::namespace_infomap& =
+        xml_schema::namespace_infomap (),
+      const std::basic_string<C>& encoding = "UTF-8",
+      xml_schema::flags = 0);
+
+
+// Serialize to XMLFormatTarget.
+//
+void
+name (xercesc::XMLFormatTarget&,
+      const type&,
+      const xml_schema::namespace_infomap& =
+        xml_schema::namespace_infomap (),
+      const std::basic_string<C>& encoding = "UTF-8",
+      xml_schema::flags = 0);
+
+void
+name (xercesc::XMLFormatTarget&,
+      const type&,
+      xml_schema::error_handler&,
+      const xml_schema::namespace_infomap& =
+        xml_schema::namespace_infomap (),
+      const std::basic_string<C>& encoding = "UTF-8",
+      xml_schema::flags = 0);
+
+void
+name (xercesc::XMLFormatTarget&,
+      const type&,
+      xercesc::DOMErrorHandler&,
+      const xml_schema::namespace_infomap& =
+        xml_schema::namespace_infomap (),
+      const std::basic_string<C>& encoding = "UTF-8",
+      xml_schema::flags = 0);
+
+
+// Serialize to DOM.
+//
+xml_schema::dom::[auto|unique]_ptr<xercesc::DOMDocument>
+name (const type&,
+      const xml_schema::namespace_infomap&
+        xml_schema::namespace_infomap (),
+      xml_schema::flags = 0);
+
+void
+name (xercesc::DOMDocument&,
+      const type&,
+      xml_schema::flags = 0);
+  
+ +

You can choose between writing XML to std::ostream or + xercesc::XMLFormatTarget and creating a DOM instance + in the form of xercesc::DOMDocument. Serialization + to ostream or XMLFormatTarget requires a + considerably less work while serialization to DOM provides + for greater flexibility. Each of these serialization functions + is discussed in more detail in the following sections. +

+ + +

4.1 Initializing the Xerces-C++ Runtime

+ +

Some serialization functions expect you to initialize the Xerces-C++ + runtime while others initialize and terminate it as part of their + work. The general rule is as follows: if a function has any arguments + or return a value that is an instance of a Xerces-C++ type, then + this function expects you to initialize the Xerces-C++ runtime. + Otherwise, the function initializes and terminates the runtime for + you. Note that it is legal to have nested calls to the Xerces-C++ + initialize and terminate functions as long as the calls are balanced. +

+ +

You can instruct serialization functions that initialize and terminate + the runtime not to do so by passing the + xml_schema::flags::dont_initialize flag (see + Section 4.3, "Flags"). +

+ +

4.2 Namespace Infomap and Character Encoding

+ +

When a document being serialized uses XML namespaces, custom + prefix-namespace associations can to be established. If custom + prefix-namespace mapping is not provided then generic prefixes + (p1, p2, etc) are automatically assigned + to namespaces as needed. Also, if + you would like the resulting instance document to contain the + schemaLocation or noNamespaceSchemaLocation + attributes, you will need to provide namespace-schema associations. + The xml_schema::namespace_infomap class is used + to capture this information:

+ +
+struct namespace_info
+{
+  namespace_info ();
+  namespace_info (const std::basic_string<C>& name,
+                  const std::basic_string<C>& schema);
+
+  std::basic_string<C> name;
+  std::basic_string<C> schema;
+};
+
+// Map of namespace prefix to namespace_info.
+//
+struct namespace_infomap: public std::map<std::basic_string<C>,
+                                          namespace_info>
+{
+};
+  
+ +

Consider the following associations as an example:

+ +
+xml_schema::namespace_infomap map;
+
+map["t"].name = "http://www.codesynthesis.com/test";
+map["t"].schema = "test.xsd";
+  
+ +

This map, if passed to one of the serialization functions, + could result in the following XML fragment:

+ +
+<?xml version="1.0" ?>
+<t:name xmlns:t="http://www.codesynthesis.com/test"
+        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+        xsi:schemaLocation="http://www.codesynthesis.com/test test.xsd">
+  
+ +

As you can see, the serialization function automatically added namespace + mapping for the xsi prefix. You can change this by + providing your own prefix:

+ +
+xml_schema::namespace_infomap map;
+
+map["xsn"].name = "http://www.w3.org/2001/XMLSchema-instance";
+
+map["t"].name = "http://www.codesynthesis.com/test";
+map["t"].schema = "test.xsd";
+  
+ +

This could result in the following XML fragment:

+ +
+<?xml version="1.0" ?>
+<t:name xmlns:t="http://www.codesynthesis.com/test"
+        xmlns:xsn="http://www.w3.org/2001/XMLSchema-instance"
+        xsn:schemaLocation="http://www.codesynthesis.com/test test.xsd">
+  
+ +

To specify the location of a schema without a namespace you can use + an empty prefix as in the example below:

+ +
+xml_schema::namespace_infomap map;
+
+map[""].schema = "test.xsd";
+  
+ +

This would result in the following XML fragment:

+ +
+<?xml version="1.0" ?>
+<name xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+      xsi:noNamespaceSchemaLocation="test.xsd">
+  
+ +

To make a particular namespace default you can use an empty + prefix, for example:

+ +
+xml_schema::namespace_infomap map;
+
+map[""].name = "http://www.codesynthesis.com/test";
+map[""].schema = "test.xsd";
+  
+ +

This could result in the following XML fragment:

+ +
+<?xml version="1.0" ?>
+<name xmlns="http://www.codesynthesis.com/test"
+      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+      xsi:schemaLocation="http://www.codesynthesis.com/test test.xsd">
+  
+ + +

Another bit of information that you can pass to the serialization + functions is the character encoding method that you would like to use. + Common values for this argument are "US-ASCII", + "ISO8859-1", "UTF-8", + "UTF-16BE", "UTF-16LE", + "UCS-4BE", and "UCS-4LE". The default + encoding is "UTF-8". For more information on + encoding methods see the + "Character + Encoding" article from Wikipedia. +

+ +

4.3 Flags

+ +

Serialization flags are the last argument of every serialization + function. They allow you to fine-tune the process of serialization. + The flags argument is optional. +

+ + +

The following flags are recognized by the serialization + functions:

+ +
+
xml_schema::flags::dont_initialize
+
Do not initialize the Xerces-C++ runtime.
+ +
xml_schema::flags::dont_pretty_print
+
Do not add extra spaces or new lines that make the resulting XML + slightly bigger but easier to read.
+ +
xml_schema::flags::no_xml_declaration
+
Do not write XML declaration (<?xml ... ?>).
+
+ +

You can pass several flags by combining them using the bit-wise OR + operator. For example:

+ +
+std::auto_ptr<type> r = ...
+std::ofstream ofs ("test.xml");
+xml_schema::namespace_infomap map;
+name (ofs,
+      *r,
+      map,
+      "UTF-8",
+      xml_schema::flags::no_xml_declaration |
+      xml_schema::flags::dont_pretty_print);
+  
+ +

For more information on the Xerces-C++ runtime initialization + refer to Section 4.1, "Initializing the Xerces-C++ + Runtime". +

+ +

4.4 Error Handling

+ +

As with the parsing functions (see Section 3.3, + "Error Handling"), to better understand error handling and + reporting strategies employed by the serialization functions, it + is useful to know that the transformation of a statically-typed + tree to an XML instance document happens in two stages. The first + stage, performed by the generated code, consist of building a DOM + instance from the statically-typed tree . For short, we will call + this stage the Tree-DOM stage. The second stage, performed by + Xerces-C++, consists of serializing the DOM instance into the XML + document. We will call this stage the DOM-XML stage. +

+ +

All serialization functions except the two that serialize into + a DOM instance come in overloaded triples. The first function + in such a triple reports error conditions exclusively by throwing + exceptions. It accumulates all the serialization errors of the + DOM-XML stage and throws them in a single instance of the + xml_schema::serialization exception (described below). + The second and the third functions in the triple use callback + interfaces to report serialization errors and warnings. The two + callback interfaces are xml_schema::error_handler and + xercesc::DOMErrorHandler. The + xml_schema::error_handler interface is described in + Section 3.3, "Error Handling". For more information + on the xercesc::DOMErrorHandler interface refer to the + Xerces-C++ documentation. +

+ +

The Tree-DOM stage reports error conditions exclusively by throwing + exceptions. Individual exceptions thrown by the serialization functions + are described in the following sub-sections. +

+ +

4.4.1 xml_schema::serialization

+ +
+struct serialization: virtual exception
+{
+  serialization ();
+  serialization (const diagnostics&);
+
+  const diagnostics&
+  diagnostics () const;
+
+  virtual const char*
+  what () const throw ();
+};
+  
+ +

The xml_schema::diagnostics class is described in + Section 3.3.1, "xml_schema::parsing". + The xml_schema::serialization exception is thrown if + there were serialization errors reported during the DOM-XML stage. + If no callback interface was provided to the serialization function, + the exception contains a list of errors and warnings accessible using + the diagnostics function. +

+ + +

4.4.2 xml_schema::unexpected_element

+ +

The xml_schema::unexpected_element exception is + described in Section 3.3.3, + "xml_schema::unexpected_element". It is thrown + by the serialization functions during the Tree-DOM stage if the + root element name of the provided DOM instance does not match with + the name of the element this serialization function is for. +

+ +

4.4.3 xml_schema::no_type_info

+ +

The xml_schema::no_type_info exception is + described in Section 3.3.7, + "xml_schema::no_type_info". It is thrown + by the serialization functions during the Tree-DOM stage when there + is no type information associated with a dynamic type of an + element. Usually, catching this exception means that you haven't + linked the code generated from the schema defining the type in + question with your application or this schema has been compiled + without the --generate-polymorphic option. +

+ +

4.5 Serializing to std::ostream

+ +

In order to serialize to std::ostream you will need + an object model, an output stream and, optionally, a namespace + infomap. For instance:

+ +
+// Obtain the object model.
+//
+std::auto_ptr<type> r = ...
+
+// Prepare namespace mapping and schema location information.
+//
+xml_schema::namespace_infomap map;
+
+map["t"].name = "http://www.codesynthesis.com/test";
+map["t"].schema = "test.xsd";
+
+// Write it out.
+//
+name (std::cout, *r, map);
+  
+ +

Note that the output stream is treated as a binary stream. This + becomes important when you use a character encoding that is wider + than 8-bit char, for instance UTF-16 or UCS-4. For + example, things will most likely break if you try to serialize + to std::ostringstream with UTF-16 or UCS-4 as an + encoding. This is due to the special value, + '\0', that will most likely occur as part of such + serialization and it won't have the special meaning assumed by + std::ostringstream. +

+ + +

4.6 Serializing to xercesc::XMLFormatTarget

+ +

Serializing to an xercesc::XMLFormatTarget instance + is similar the std::ostream case. For instance: +

+ +
+using std::auto_ptr;
+
+// Obtain the object model.
+//
+auto_ptr<type> r = ...
+
+// Prepare namespace mapping and schema location information.
+//
+xml_schema::namespace_infomap map;
+
+map["t"].name = "http://www.codesynthesis.com/test";
+map["t"].schema = "test.xsd";
+
+using namespace xercesc;
+
+XMLPlatformUtils::Initialize ();
+
+{
+  // Choose a target.
+  //
+  auto_ptr<XMLFormatTarget> ft;
+
+  if (argc != 2)
+  {
+    ft = auto_ptr<XMLFormatTarget> (new StdOutFormatTarget ());
+  }
+  else
+  {
+    ft = auto_ptr<XMLFormatTarget> (
+      new LocalFileFormatTarget (argv[1]));
+  }
+
+  // Write it out.
+  //
+  name (*ft, *r, map);
+}
+
+XMLPlatformUtils::Terminate ();
+  
+ +

Note that we had to initialize the Xerces-C++ runtime before we + could call this serialization function.

+ +

4.7 Serializing to DOM

+ +

The mapping provides two overloaded functions that implement + serialization to a DOM instance. The first creates a DOM instance + for you and the second serializes to an existing DOM instance. + While serializing to a new DOM instance is similar to serializing + to std::ostream or xercesc::XMLFormatTarget, + serializing to an existing DOM instance requires quite a bit of work + from your side. You will need to set all the custom namespace mapping + attributes as well as the schemaLocation and/or + noNamespaceSchemaLocation attributes. The following + listing should give you an idea about what needs to be done: +

+ +
+// Obtain the object model.
+//
+std::auto_ptr<type> r = ...
+
+using namespace xercesc;
+
+XMLPlatformUtils::Initialize ();
+
+{
+  // Create a DOM instance. Set custom namespace mapping and schema
+  // location attributes.
+  //
+  DOMDocument& doc = ...
+
+  // Serialize to DOM.
+  //
+  name (doc, *r);
+
+  // Serialize the DOM document to XML.
+  //
+  ...
+}
+
+XMLPlatformUtils::Terminate ();
+  
+ +

For more information on how to create and serialize a DOM instance + refer to the Xerces-C++ documentation. In addition, the + C++/Tree Mapping + FAQ shows how to implement these operations using the XSD + runtime utilities. +

+ +

5 Additional Functionality

+ +

The C++/Tree mapping provides a number of optional features + that can be useful in certain situations. They are described + in the following sections.

+ +

5.1 DOM Association

+ +

Normally, after parsing is complete, the DOM document which + was used to extract the data is discarded. However, the parsing + functions can be instructed to preserve the DOM document + and create an association between the DOM nodes and object model + nodes. When there is an association between the DOM and + object model nodes, you can obtain the corresponding DOM element + or attribute node from an object model node as well as perform + the reverse transition: obtain the corresponding object model + from a DOM element or attribute node.

+ +

Maintaining DOM association is normally useful when the application + needs access to XML constructs that are not preserved in the + object model, for example, XML comments. + Another useful aspect of DOM association is the ability of the + application to navigate the document tree using the generic DOM + interface (for example, with the help of an XPath processor) + and then move back to the statically-typed object model. Note + also that while you can change the underlying DOM document, + these changes are not reflected in the object model and will + be ignored during serialization. If you need to not only access + but also modify some aspects of XML that are not preserved in + the object model, then type customization with custom parsing + constructors and serialization operators should be used instead.

+ +

To request DOM association you will need to pass the + xml_schema::flags::keep_dom flag to one of the + parsing functions (see Section 3.2, + "Flags and Properties" for more information). In this case the + DOM document is retained and will be released when the object model + is deleted. Note that since DOM nodes "out-live" the parsing function + call, you need to initialize the Xerces-C++ runtime before calling + one of the parsing functions with the keep_dom flag and + terminate it after the object model is destroyed (see + Section 3.1, "Initializing the Xerces-C++ Runtime").

+ +

If the keep_dom flag is passed + as the second argument to the copy constructor and the copy + being made is of a complete tree, then the DOM association + is also maintained in the copy by cloning the underlying + DOM document and reestablishing the associations. For example:

+ +
+using namespace xercesc;
+
+XMLPlatformUtils::Initialize ();
+
+{
+  // Parse XML to object model.
+  //
+  std::auto_ptr<type> r (root (
+    "root.xml",
+     xml_schema::flags::keep_dom |
+     xml_schema::flags::dont_initialize));
+
+   // Copy without DOM association.
+   //
+   type copy1 (*r);
+
+   // Copy with DOM association.
+   //
+   type copy2 (*r, xml_schema::flags::keep_dom);
+}
+
+XMLPlatformUtils::Terminate ();
+  
+ + +

To obtain the corresponding DOM node from an object model node + you will need to call the _node accessor function + which returns a pointer to DOMNode. You can then query + this DOM node's type and cast it to either DOMAttr* + or DOMElement*. To obtain the corresponding object + model node from a DOM node, the DOM user data API is used. The + xml_schema::dom::tree_node_key variable contains + the key for object model nodes. The following schema and code + fragment show how to navigate from DOM to object model nodes + and in the opposite direction:

+ +
+<complexType name="object">
+  <sequence>
+    <element name="a" type="string"/>
+  </sequence>
+</complexType>
+
+<element name="root" type="object"/>
+  
+ +
+using namespace xercesc;
+
+XMLPlatformUtils::Initialize ();
+
+{
+  // Parse XML to object model.
+  //
+  std::auto_ptr<type> r (root (
+    "root.xml",
+     xml_schema::flags::keep_dom |
+     xml_schema::flags::dont_initialize));
+
+  DOMNode* n = root->_node ();
+  assert (n->getNodeType () == DOMNode::ELEMENT_NODE);
+  DOMElement* re = static_cast<DOMElement*> (n);
+
+  // Get the 'a' element. Note that it is not necessarily the
+  // first child node of 'root' since there could be whitespace
+  // nodes before it.
+  //
+  DOMElement* ae;
+
+  for (n = re->getFirstChild (); n != 0; n = n->getNextSibling ())
+  {
+    if (n->getNodeType () == DOMNode::ELEMENT_NODE)
+    {
+      ae = static_cast<DOMElement*> (n);
+      break;
+    }
+  }
+
+  // Get from the 'a' DOM element to xml_schema::string object model
+  // node.
+  //
+  xml_schema::type& t (
+    *reinterpret_cast<xml_schema::type*> (
+       ae->getUserData (xml_schema::dom::tree_node_key)));
+
+  xml_schema::string& a (dynamic_cast<xml_schema::string&> (t));
+}
+
+XMLPlatformUtils::Terminate ();
+  
+ +

The 'mixed' example which can be found in the XSD distribution + shows how to handle the mixed content using DOM association.

+ +

5.2 Binary Serialization

+ +

Besides reading from and writing to XML, the C++/Tree mapping + also allows you to save the object model to and load it from a + number of predefined as well as custom data representation + formats. The predefined binary formats are CDR (Common Data + Representation) and XDR (eXternal Data Representation). A + custom format can easily be supported by providing + insertion and extraction operators for basic types.

+ +

Binary serialization saves only the data without any meta + information or markup. As a result, saving to and loading + from a binary representation can be an order of magnitude + faster than parsing and serializing the same data in XML. + Furthermore, the resulting representation is normally several + times smaller than the equivalent XML representation. These + properties make binary serialization ideal for internal data + exchange and storage. A typical application that uses this + facility stores the data and communicates within the + system using a binary format and reads/writes the data + in XML when communicating with the outside world.

+ +

In order to request the generation of insertion operators and + extraction constructors for a specific predefined or custom + data representation stream, you will need to use the + --generate-insertion and --generate-extraction + compiler options. See the + XSD + Compiler Command Line Manual for more information.

+ +

Once the insertion operators and extraction constructors are + generated, you can use the xml_schema::istream + and xml_schema::ostream wrapper stream templates + to save the object model to and load it from a specific format. + The following code fragment shows how to do this using ACE + (Adaptive Communication Environment) CDR streams as an example:

+ +
+<complexType name="object">
+  <sequence>
+    <element name="a" type="string"/>
+    <element name="b" type="int"/>
+  </sequence>
+</complexType>
+
+<element name="root" type="object"/>
+  
+ +
+// Parse XML to object model.
+//
+std::auto_ptr<type> r (root ("root.xml"));
+
+// Save to a CDR stream.
+//
+ACE_OutputCDR ace_ocdr;
+xml_schema::ostream<ACE_OutputCDR> ocdr (ace_ocdr);
+
+ocdr << *r;
+
+// Load from a CDR stream.
+//
+ACE_InputCDR ace_icdr (buf, size);
+xml_schema::istream<ACE_InputCDR> icdr (ace_icdr);
+
+std::auto_ptr<object> copy (new object (icdr));
+
+// Serialize to XML.
+//
+root (std::cout, *copy);
+  
+ +

The XSD distribution contains a number of examples that + show how to save the object model to and load it from + CDR, XDR, and a custom format.

+ + + + +

Appendix A — Default and Fixed Values

+ +

The following table summarizes the effect of default and fixed + values (specified with the default and fixed + attributes, respectively) on attribute and element values. The + default and fixed attributes are mutually + exclusive. It is also worthwhile to note that the fixed value semantics + is a superset of the default value semantics. +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
defaultfixed
elementnot presentoptionalrequiredoptionalrequired
not presentinvalid instancenot presentinvalid instance
emptydefault value is usedfixed value is used
valuevalue is usedvalue is used provided it's the same as fixed
attributenot presentoptionalrequiredoptionalrequired
default value is usedinvalid schemafixed value is usedinvalid instance
emptyempty value is usedempty value is used provided it's the same as fixed
valuevalue is usedvalue is used provided it's the same as fixed
+ +
+
+ + + + diff --git a/xsd/doc/cxx/tree/manual/makefile b/xsd/doc/cxx/tree/manual/makefile new file mode 100644 index 0000000..3cb0d80 --- /dev/null +++ b/xsd/doc/cxx/tree/manual/makefile @@ -0,0 +1,54 @@ +# file : doc/cxx/tree/manual/makefile +# copyright : Copyright (c) 2006-2014 Code Synthesis Tools CC +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +include $(dir $(lastword $(MAKEFILE_LIST)))../../../../build/bootstrap.make + +default := $(out_base)/ +install := $(out_base)/.install +dist := $(out_base)/.dist +dist-win := $(out_base)/.dist-win +clean := $(out_base)/.clean + +# Build. +# +$(default): $(out_base)/cxx-tree-manual.ps $(out_base)/cxx-tree-manual.pdf + + +$(out_base)/cxx-tree-manual.ps: $(src_base)/index.xhtml \ + $(src_base)/manual.html2ps \ + | $(out_base)/. + $(call message,html2ps $<,html2ps -f $(src_base)/manual.html2ps -o $@ $<) + +$(out_base)/cxx-tree-manual.pdf: $(out_base)/cxx-tree-manual.ps | $(out_base)/. + $(call message,ps2pdf $<,ps2pdf14 $< $@) + +# Install & Dist. +# +$(install): path := $(subst $(src_root)/doc/,,$(src_base)) +$(dist): path := $(subst $(src_root)/,,$(src_base)) + +$(install): $(out_base)/cxx-tree-manual.ps $(out_base)/cxx-tree-manual.pdf + $(call install-data,$(src_base)/index.xhtml,$(install_doc_dir)/xsd/$(path)/index.xhtml) + $(call install-data,$(out_base)/cxx-tree-manual.ps,$(install_doc_dir)/xsd/$(path)/cxx-tree-manual.ps) + $(call install-data,$(out_base)/cxx-tree-manual.pdf,$(install_doc_dir)/xsd/$(path)/cxx-tree-manual.pdf) + +$(dist): $(out_base)/cxx-tree-manual.ps $(out_base)/cxx-tree-manual.pdf + $(call install-data,$(src_base)/index.xhtml,$(dist_prefix)/$(path)/index.xhtml) + $(call install-data,$(out_base)/cxx-tree-manual.ps,$(dist_prefix)/$(path)/cxx-tree-manual.ps) + $(call install-data,$(out_base)/cxx-tree-manual.pdf,$(dist_prefix)/$(path)/cxx-tree-manual.pdf) + +$(dist-win): $(dist) + + +# Clean +# +$(clean): +ifneq ($(xsd_clean_gen),n) + $(call message,rm $$1,rm -f $$1,$(out_base)/cxx-tree-manual.ps) + $(call message,rm $$1,rm -f $$1,$(out_base)/cxx-tree-manual.pdf) +endif + +# How to. +# +$(call include,$(bld_root)/install.make) diff --git a/xsd/doc/cxx/tree/manual/manual.html2ps b/xsd/doc/cxx/tree/manual/manual.html2ps new file mode 100644 index 0000000..6e714a6 --- /dev/null +++ b/xsd/doc/cxx/tree/manual/manual.html2ps @@ -0,0 +1,66 @@ +@html2ps { + option { + toc: hb; + colour: 1; + hyphenate: 1; + titlepage: 1; + } + + datefmt: "%B %Y"; + + titlepage { + content: " +
+

C++/Tree Mapping User Manual

+

 

+

 

+

 

+

 

+

 

+

 

+

 

+
+

Revision $[revision]     $D

+

Copyright © 2005-2014 CODE SYNTHESIS TOOLS CC

+ +

Permission is granted to copy, distribute and/or modify this + document under the terms of the + GNU Free + Documentation License, version 1.2; with no Invariant Sections, + no Front-Cover Texts and no Back-Cover Texts. +

+ +

This document is available in the following formats: + XHTML, + PDF, and + PostScript.

"; + } + + toc { + indent: 2em; + } + + header { + odd-right: $H; + even-left: $H; + } + + footer { + odd-left: $D; + odd-center: $T, v$[revision]; + odd-right: $N; + + even-left: $N; + even-center: $T, v$[revision]; + even-right: $D; + } +} + +body { + font-size: 12pt; + text-align: justify; +} + +pre { + font-size: 10pt; +} diff --git a/xsd/doc/cxx/tree/reference/footer.html b/xsd/doc/cxx/tree/reference/footer.html new file mode 100644 index 0000000..4325116 --- /dev/null +++ b/xsd/doc/cxx/tree/reference/footer.html @@ -0,0 +1,6 @@ +
+
+ Copyright © 2005-2014 CODE SYNTHESIS TOOLS CC +
+ + diff --git a/xsd/doc/cxx/tree/reference/libxsd.doxygen b/xsd/doc/cxx/tree/reference/libxsd.doxygen new file mode 100644 index 0000000..376d34a --- /dev/null +++ b/xsd/doc/cxx/tree/reference/libxsd.doxygen @@ -0,0 +1,1322 @@ +# Doxyfile 1.5.4 + +# This file describes the settings to be used by the documentation system +# doxygen (www.doxygen.org) for a project +# +# All text after a hash (#) is considered a comment and will be ignored +# The format is: +# TAG = value [value, ...] +# For lists items can also be appended using: +# TAG += value [value, ...] +# Values that contain spaces should be placed between quotes (" ") + +#--------------------------------------------------------------------------- +# Project related configuration options +#--------------------------------------------------------------------------- + +# This tag specifies the encoding used for all characters in the config file that +# follow. The default is UTF-8 which is also the encoding used for all text before +# the first occurrence of this tag. Doxygen uses libiconv (or the iconv built into +# libc) for the transcoding. See http://www.gnu.org/software/libiconv for the list of +# possible encodings. + +DOXYFILE_ENCODING = UTF-8 + +# The PROJECT_NAME tag is a single word (or a sequence of words surrounded +# by quotes) that should identify the project. + +PROJECT_NAME = "C++/Tree Mapping Runtime Library" + +# The PROJECT_NUMBER tag can be used to enter a project or revision number. +# This could be handy for archiving the generated documentation or +# if some version control system is used. + +PROJECT_NUMBER = + +# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) +# base path where the generated documentation will be put. +# If a relative path is entered, it will be relative to the location +# where doxygen was started. If left blank the current directory will be used. + +OUTPUT_DIRECTORY = + +# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create +# 4096 sub-directories (in 2 levels) under the output directory of each output +# format and will distribute the generated files over these directories. +# Enabling this option can be useful when feeding doxygen a huge amount of +# source files, where putting all generated files in the same directory would +# otherwise cause performance problems for the file system. + +CREATE_SUBDIRS = NO + +# The OUTPUT_LANGUAGE tag is used to specify the language in which all +# documentation generated by doxygen is written. Doxygen will use this +# information to generate all constant output in the proper language. +# The default language is English, other supported languages are: +# Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, +# Croatian, Czech, Danish, Dutch, Finnish, French, German, Greek, Hungarian, +# Italian, Japanese, Japanese-en (Japanese with English messages), Korean, +# Korean-en, Lithuanian, Norwegian, Polish, Portuguese, Romanian, Russian, +# Serbian, Slovak, Slovene, Spanish, Swedish, and Ukrainian. + +OUTPUT_LANGUAGE = English + +# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will +# include brief member descriptions after the members that are listed in +# the file and class documentation (similar to JavaDoc). +# Set to NO to disable this. + +BRIEF_MEMBER_DESC = YES + +# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend +# the brief description of a member or function before the detailed description. +# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the +# brief descriptions will be completely suppressed. + +REPEAT_BRIEF = YES + +# This tag implements a quasi-intelligent brief description abbreviator +# that is used to form the text in various listings. Each string +# in this list, if found as the leading text of the brief description, will be +# stripped from the text and the result after processing the whole list, is +# used as the annotated text. Otherwise, the brief description is used as-is. +# If left blank, the following values are used ("$name" is automatically +# replaced with the name of the entity): "The $name class" "The $name widget" +# "The $name file" "is" "provides" "specifies" "contains" +# "represents" "a" "an" "the" + +ABBREVIATE_BRIEF = + +# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then +# Doxygen will generate a detailed section even if there is only a brief +# description. + +ALWAYS_DETAILED_SEC = NO + +# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all +# inherited members of a class in the documentation of that class as if those +# members were ordinary class members. Constructors, destructors and assignment +# operators of the base classes will not be shown. + +INLINE_INHERITED_MEMB = NO + +# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full +# path before files name in the file list and in the header files. If set +# to NO the shortest path that makes the file name unique will be used. + +FULL_PATH_NAMES = NO + +# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag +# can be used to strip a user-defined part of the path. Stripping is +# only done if one of the specified strings matches the left-hand part of +# the path. The tag can be used to show relative paths in the file list. +# If left blank the directory from which doxygen is run is used as the +# path to strip. + +STRIP_FROM_PATH = + +# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of +# the path mentioned in the documentation of a class, which tells +# the reader which header file to include in order to use a class. +# If left blank only the name of the header file containing the class +# definition is used. Otherwise one should specify the include paths that +# are normally passed to the compiler using the -I flag. + +STRIP_FROM_INC_PATH = + +# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter +# (but less readable) file names. This can be useful is your file systems +# doesn't support long names like on DOS, Mac, or CD-ROM. + +SHORT_NAMES = NO + +# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen +# will interpret the first line (until the first dot) of a JavaDoc-style +# comment as the brief description. If set to NO, the JavaDoc +# comments will behave just like regular Qt-style comments +# (thus requiring an explicit @brief command for a brief description.) + +JAVADOC_AUTOBRIEF = NO + +# If the QT_AUTOBRIEF tag is set to YES then Doxygen will +# interpret the first line (until the first dot) of a Qt-style +# comment as the brief description. If set to NO, the comments +# will behave just like regular Qt-style comments (thus requiring +# an explicit \brief command for a brief description.) + +QT_AUTOBRIEF = NO + +# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen +# treat a multi-line C++ special comment block (i.e. a block of //! or /// +# comments) as a brief description. This used to be the default behaviour. +# The new default is to treat a multi-line C++ comment block as a detailed +# description. Set this tag to YES if you prefer the old behaviour instead. + +MULTILINE_CPP_IS_BRIEF = NO + +# If the DETAILS_AT_TOP tag is set to YES then Doxygen +# will output the detailed description near the top, like JavaDoc. +# If set to NO, the detailed description appears after the member +# documentation. + +DETAILS_AT_TOP = NO + +# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented +# member inherits the documentation from any documented member that it +# re-implements. + +INHERIT_DOCS = YES + +# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce +# a new page for each member. If set to NO, the documentation of a member will +# be part of the file/class/namespace that contains it. + +SEPARATE_MEMBER_PAGES = NO + +# The TAB_SIZE tag can be used to set the number of spaces in a tab. +# Doxygen uses this value to replace tabs by spaces in code fragments. + +TAB_SIZE = 8 + +# This tag can be used to specify a number of aliases that acts +# as commands in the documentation. An alias has the form "name=value". +# For example adding "sideeffect=\par Side Effects:\n" will allow you to +# put the command \sideeffect (or @sideeffect) in the documentation, which +# will result in a user-defined paragraph with heading "Side Effects:". +# You can put \n's in the value part of an alias to insert newlines. + +ALIASES = + +# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C +# sources only. Doxygen will then generate output that is more tailored for C. +# For instance, some of the names that are used will be different. The list +# of all members will be omitted, etc. + +OPTIMIZE_OUTPUT_FOR_C = NO + +# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java +# sources only. Doxygen will then generate output that is more tailored for Java. +# For instance, namespaces will be presented as packages, qualified scopes +# will look different, etc. + +OPTIMIZE_OUTPUT_JAVA = NO + +# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want to +# include (a tag file for) the STL sources as input, then you should +# set this tag to YES in order to let doxygen match functions declarations and +# definitions whose arguments contain STL classes (e.g. func(std::string); v.s. +# func(std::string) {}). This also make the inheritance and collaboration +# diagrams that involve STL classes more complete and accurate. + +BUILTIN_STL_SUPPORT = YES + +# If you use Microsoft's C++/CLI language, you should set this option to YES to +# enable parsing support. + +CPP_CLI_SUPPORT = NO + +# Set the SIP_SUPPORT tag to YES if your project consists of sip sources only. +# Doxygen will parse them like normal C++ but will assume all classes use public +# instead of private inheritance when no explicit protection keyword is present. + +SIP_SUPPORT = NO + +# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC +# tag is set to YES, then doxygen will reuse the documentation of the first +# member in the group (if any) for the other members of the group. By default +# all members of a group must be documented explicitly. + +DISTRIBUTE_GROUP_DOC = NO + +# Set the SUBGROUPING tag to YES (the default) to allow class member groups of +# the same type (for instance a group of public functions) to be put as a +# subgroup of that type (e.g. under the Public Functions section). Set it to +# NO to prevent subgrouping. Alternatively, this can be done per class using +# the \nosubgrouping command. + +SUBGROUPING = YES + +# When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct (or union) is +# documented as struct with the name of the typedef. So +# typedef struct TypeS {} TypeT, will appear in the documentation as a struct +# with name TypeT. When disabled the typedef will appear as a member of a file, +# namespace, or class. And the struct will be named TypeS. This can typically +# be useful for C code where the coding convention is that all structs are +# typedef'ed and only the typedef is referenced never the struct's name. + +TYPEDEF_HIDES_STRUCT = NO + +#--------------------------------------------------------------------------- +# Build related configuration options +#--------------------------------------------------------------------------- + +# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in +# documentation are documented, even if no documentation was available. +# Private class members and static file members will be hidden unless +# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES + +EXTRACT_ALL = NO + +# If the EXTRACT_PRIVATE tag is set to YES all private members of a class +# will be included in the documentation. + +EXTRACT_PRIVATE = NO + +# If the EXTRACT_STATIC tag is set to YES all static members of a file +# will be included in the documentation. + +EXTRACT_STATIC = NO + +# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) +# defined locally in source files will be included in the documentation. +# If set to NO only classes defined in header files are included. + +EXTRACT_LOCAL_CLASSES = YES + +# This flag is only useful for Objective-C code. When set to YES local +# methods, which are defined in the implementation section but not in +# the interface are included in the documentation. +# If set to NO (the default) only methods in the interface are included. + +EXTRACT_LOCAL_METHODS = NO + +# If this flag is set to YES, the members of anonymous namespaces will be extracted +# and appear in the documentation as a namespace called 'anonymous_namespace{file}', +# where file will be replaced with the base name of the file that contains the anonymous +# namespace. By default anonymous namespace are hidden. + +EXTRACT_ANON_NSPACES = NO + +# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all +# undocumented members of documented classes, files or namespaces. +# If set to NO (the default) these members will be included in the +# various overviews, but no documentation section is generated. +# This option has no effect if EXTRACT_ALL is enabled. + +HIDE_UNDOC_MEMBERS = NO + +# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all +# undocumented classes that are normally visible in the class hierarchy. +# If set to NO (the default) these classes will be included in the various +# overviews. This option has no effect if EXTRACT_ALL is enabled. + +HIDE_UNDOC_CLASSES = NO + +# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all +# friend (class|struct|union) declarations. +# If set to NO (the default) these declarations will be included in the +# documentation. + +HIDE_FRIEND_COMPOUNDS = NO + +# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any +# documentation blocks found inside the body of a function. +# If set to NO (the default) these blocks will be appended to the +# function's detailed documentation block. + +HIDE_IN_BODY_DOCS = NO + +# The INTERNAL_DOCS tag determines if documentation +# that is typed after a \internal command is included. If the tag is set +# to NO (the default) then the documentation will be excluded. +# Set it to YES to include the internal documentation. + +INTERNAL_DOCS = NO + +# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate +# file names in lower-case letters. If set to YES upper-case letters are also +# allowed. This is useful if you have classes or files whose names only differ +# in case and if your file system supports case sensitive file names. Windows +# and Mac users are advised to set this option to NO. + +CASE_SENSE_NAMES = YES + +# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen +# will show members with their full class and namespace scopes in the +# documentation. If set to YES the scope will be hidden. + +HIDE_SCOPE_NAMES = YES + +# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen +# will put a list of the files that are included by a file in the documentation +# of that file. + +SHOW_INCLUDE_FILES = NO + +# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] +# is inserted in the documentation for inline members. + +INLINE_INFO = YES + +# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen +# will sort the (detailed) documentation of file and class members +# alphabetically by member name. If set to NO the members will appear in +# declaration order. + +SORT_MEMBER_DOCS = NO + +# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the +# brief documentation of file, namespace and class members alphabetically +# by member name. If set to NO (the default) the members will appear in +# declaration order. + +SORT_BRIEF_DOCS = NO + +# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be +# sorted by fully-qualified names, including namespaces. If set to +# NO (the default), the class list will be sorted only by class name, +# not including the namespace part. +# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. +# Note: This option applies only to the class list, not to the +# alphabetical list. + +SORT_BY_SCOPE_NAME = NO + +# The GENERATE_TODOLIST tag can be used to enable (YES) or +# disable (NO) the todo list. This list is created by putting \todo +# commands in the documentation. + +GENERATE_TODOLIST = YES + +# The GENERATE_TESTLIST tag can be used to enable (YES) or +# disable (NO) the test list. This list is created by putting \test +# commands in the documentation. + +GENERATE_TESTLIST = YES + +# The GENERATE_BUGLIST tag can be used to enable (YES) or +# disable (NO) the bug list. This list is created by putting \bug +# commands in the documentation. + +GENERATE_BUGLIST = YES + +# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or +# disable (NO) the deprecated list. This list is created by putting +# \deprecated commands in the documentation. + +GENERATE_DEPRECATEDLIST= YES + +# The ENABLED_SECTIONS tag can be used to enable conditional +# documentation sections, marked by \if sectionname ... \endif. + +ENABLED_SECTIONS = + +# The MAX_INITIALIZER_LINES tag determines the maximum number of lines +# the initial value of a variable or define consists of for it to appear in +# the documentation. If the initializer consists of more lines than specified +# here it will be hidden. Use a value of 0 to hide initializers completely. +# The appearance of the initializer of individual variables and defines in the +# documentation can be controlled using \showinitializer or \hideinitializer +# command in the documentation regardless of this setting. + +MAX_INITIALIZER_LINES = 30 + +# Set the SHOW_USED_FILES tag to NO to disable the list of files generated +# at the bottom of the documentation of classes and structs. If set to YES the +# list will mention the files that were used to generate the documentation. + +SHOW_USED_FILES = YES + +# If the sources in your project are distributed over multiple directories +# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy +# in the documentation. The default is NO. + +SHOW_DIRECTORIES = NO + +# The FILE_VERSION_FILTER tag can be used to specify a program or script that +# doxygen should invoke to get the current version for each file (typically from the +# version control system). Doxygen will invoke the program by executing (via +# popen()) the command , where is the value of +# the FILE_VERSION_FILTER tag, and is the name of an input file +# provided by doxygen. Whatever the program writes to standard output +# is used as the file version. See the manual for examples. + +FILE_VERSION_FILTER = + +#--------------------------------------------------------------------------- +# configuration options related to warning and progress messages +#--------------------------------------------------------------------------- + +# The QUIET tag can be used to turn on/off the messages that are generated +# by doxygen. Possible values are YES and NO. If left blank NO is used. + +QUIET = NO + +# The WARNINGS tag can be used to turn on/off the warning messages that are +# generated by doxygen. Possible values are YES and NO. If left blank +# NO is used. + +WARNINGS = YES + +# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings +# for undocumented members. If EXTRACT_ALL is set to YES then this flag will +# automatically be disabled. + +WARN_IF_UNDOCUMENTED = YES + +# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for +# potential errors in the documentation, such as not documenting some +# parameters in a documented function, or documenting parameters that +# don't exist or using markup commands wrongly. + +WARN_IF_DOC_ERROR = YES + +# This WARN_NO_PARAMDOC option can be abled to get warnings for +# functions that are documented, but have no documentation for their parameters +# or return value. If set to NO (the default) doxygen will only warn about +# wrong or incomplete parameter documentation, but not about the absence of +# documentation. + +WARN_NO_PARAMDOC = NO + +# The WARN_FORMAT tag determines the format of the warning messages that +# doxygen can produce. The string should contain the $file, $line, and $text +# tags, which will be replaced by the file and line number from which the +# warning originated and the warning text. Optionally the format may contain +# $version, which will be replaced by the version of the file (if it could +# be obtained via FILE_VERSION_FILTER) + +WARN_FORMAT = "$file:$line: $text" + +# The WARN_LOGFILE tag can be used to specify a file to which warning +# and error messages should be written. If left blank the output is written +# to stderr. + +WARN_LOGFILE = + +#--------------------------------------------------------------------------- +# configuration options related to the input files +#--------------------------------------------------------------------------- + +# The INPUT tag can be used to specify the files and/or directories that contain +# documented source files. You may enter file names like "myfile.cpp" or +# directories like "/usr/src/myproject". Separate the files or directories +# with spaces. + +INPUT = \ +../../../../libxsd/xsd/cxx/tree/buffer.hxx \ +../../../../libxsd/xsd/cxx/tree/types.hxx \ +../../../../libxsd/xsd/cxx/tree/date-time.hxx \ +../../../../libxsd/xsd/cxx/tree/elements.hxx \ +../../../../libxsd/xsd/cxx/tree/element-map.hxx \ +../../../../libxsd/xsd/cxx/tree/exceptions.hxx + +# This tag can be used to specify the character encoding of the source files that +# doxygen parses. Internally doxygen uses the UTF-8 encoding, which is also the default +# input encoding. Doxygen uses libiconv (or the iconv built into libc) for the transcoding. +# See http://www.gnu.org/software/libiconv for the list of possible encodings. + +INPUT_ENCODING = UTF-8 + +# If the value of the INPUT tag contains directories, you can use the +# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp +# and *.h) to filter out the source-files in the directories. If left +# blank the following patterns are tested: +# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx +# *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py *.f90 + +FILE_PATTERNS = + +# The RECURSIVE tag can be used to turn specify whether or not subdirectories +# should be searched for input files as well. Possible values are YES and NO. +# If left blank NO is used. + +RECURSIVE = NO + +# The EXCLUDE tag can be used to specify files and/or directories that should +# excluded from the INPUT source files. This way you can easily exclude a +# subdirectory from a directory tree whose root is specified with the INPUT tag. + +EXCLUDE = + +# The EXCLUDE_SYMLINKS tag can be used select whether or not files or +# directories that are symbolic links (a Unix filesystem feature) are excluded +# from the input. + +EXCLUDE_SYMLINKS = NO + +# If the value of the INPUT tag contains directories, you can use the +# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude +# certain files from those directories. Note that the wildcards are matched +# against the file with absolute path, so to exclude all test directories +# for example use the pattern */test/* + +EXCLUDE_PATTERNS = + +# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names +# (namespaces, classes, functions, etc.) that should be excluded from the output. +# The symbol name can be a fully qualified name, a word, or if the wildcard * is used, +# a substring. Examples: ANamespace, AClass, AClass::ANamespace, ANamespace::*Test + +EXCLUDE_SYMBOLS = + +# The EXAMPLE_PATH tag can be used to specify one or more files or +# directories that contain example code fragments that are included (see +# the \include command). + +EXAMPLE_PATH = + +# If the value of the EXAMPLE_PATH tag contains directories, you can use the +# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp +# and *.h) to filter out the source-files in the directories. If left +# blank all files are included. + +EXAMPLE_PATTERNS = + +# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be +# searched for input files to be used with the \include or \dontinclude +# commands irrespective of the value of the RECURSIVE tag. +# Possible values are YES and NO. If left blank NO is used. + +EXAMPLE_RECURSIVE = NO + +# The IMAGE_PATH tag can be used to specify one or more files or +# directories that contain image that are included in the documentation (see +# the \image command). + +IMAGE_PATH = + +# The INPUT_FILTER tag can be used to specify a program that doxygen should +# invoke to filter for each input file. Doxygen will invoke the filter program +# by executing (via popen()) the command , where +# is the value of the INPUT_FILTER tag, and is the name of an +# input file. Doxygen will then use the output that the filter program writes +# to standard output. If FILTER_PATTERNS is specified, this tag will be +# ignored. + +INPUT_FILTER = + +# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern +# basis. Doxygen will compare the file name with each pattern and apply the +# filter if there is a match. The filters are a list of the form: +# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further +# info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER +# is applied to all files. + +FILTER_PATTERNS = + +# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using +# INPUT_FILTER) will be used to filter the input files when producing source +# files to browse (i.e. when SOURCE_BROWSER is set to YES). + +FILTER_SOURCE_FILES = NO + +#--------------------------------------------------------------------------- +# configuration options related to source browsing +#--------------------------------------------------------------------------- + +# If the SOURCE_BROWSER tag is set to YES then a list of source files will +# be generated. Documented entities will be cross-referenced with these sources. +# Note: To get rid of all source code in the generated output, make sure also +# VERBATIM_HEADERS is set to NO. If you have enabled CALL_GRAPH or CALLER_GRAPH +# then you must also enable this option. If you don't then doxygen will produce +# a warning and turn it on anyway + +SOURCE_BROWSER = NO + +# Setting the INLINE_SOURCES tag to YES will include the body +# of functions and classes directly in the documentation. + +INLINE_SOURCES = NO + +# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct +# doxygen to hide any special comment blocks from generated source code +# fragments. Normal C and C++ comments will always remain visible. + +STRIP_CODE_COMMENTS = YES + +# If the REFERENCED_BY_RELATION tag is set to YES (the default) +# then for each documented function all documented +# functions referencing it will be listed. + +REFERENCED_BY_RELATION = YES + +# If the REFERENCES_RELATION tag is set to YES (the default) +# then for each documented function all documented entities +# called/used by that function will be listed. + +REFERENCES_RELATION = YES + +# If the REFERENCES_LINK_SOURCE tag is set to YES (the default) +# and SOURCE_BROWSER tag is set to YES, then the hyperlinks from +# functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will +# link to the source code. Otherwise they will link to the documentstion. + +REFERENCES_LINK_SOURCE = YES + +# If the USE_HTAGS tag is set to YES then the references to source code +# will point to the HTML generated by the htags(1) tool instead of doxygen +# built-in source browser. The htags tool is part of GNU's global source +# tagging system (see http://www.gnu.org/software/global/global.html). You +# will need version 4.8.6 or higher. + +USE_HTAGS = NO + +# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen +# will generate a verbatim copy of the header file for each class for +# which an include is specified. Set to NO to disable this. + +VERBATIM_HEADERS = YES + +#--------------------------------------------------------------------------- +# configuration options related to the alphabetical class index +#--------------------------------------------------------------------------- + +# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index +# of all compounds will be generated. Enable this if the project +# contains a lot of classes, structs, unions or interfaces. + +ALPHABETICAL_INDEX = NO + +# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then +# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns +# in which this list will be split (can be a number in the range [1..20]) + +COLS_IN_ALPHA_INDEX = 5 + +# In case all classes in a project start with a common prefix, all +# classes will be put under the same header in the alphabetical index. +# The IGNORE_PREFIX tag can be used to specify one or more prefixes that +# should be ignored while generating the index headers. + +IGNORE_PREFIX = + +#--------------------------------------------------------------------------- +# configuration options related to the HTML output +#--------------------------------------------------------------------------- + +# If the GENERATE_HTML tag is set to YES (the default) Doxygen will +# generate HTML output. + +GENERATE_HTML = YES + +# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `html' will be used as the default path. + +HTML_OUTPUT = html + +# The HTML_FILE_EXTENSION tag can be used to specify the file extension for +# each generated HTML page (for example: .htm,.php,.asp). If it is left blank +# doxygen will generate files with .html extension. + +HTML_FILE_EXTENSION = .html + +# The HTML_HEADER tag can be used to specify a personal HTML header for +# each generated HTML page. If it is left blank doxygen will generate a +# standard header. + +HTML_HEADER = + +# The HTML_FOOTER tag can be used to specify a personal HTML footer for +# each generated HTML page. If it is left blank doxygen will generate a +# standard footer. + +HTML_FOOTER = footer.html + +# The HTML_STYLESHEET tag can be used to specify a user-defined cascading +# style sheet that is used by each HTML page. It can be used to +# fine-tune the look of the HTML output. If the tag is left blank doxygen +# will generate a default style sheet. Note that doxygen will try to copy +# the style sheet file to the HTML output directory, so don't put your own +# stylesheet in the HTML output directory as well, or it will be erased! + +HTML_STYLESHEET = + +# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, +# files or namespaces will be aligned in HTML using tables. If set to +# NO a bullet list will be used. + +HTML_ALIGN_MEMBERS = YES + +# If the GENERATE_HTMLHELP tag is set to YES, additional index files +# will be generated that can be used as input for tools like the +# Microsoft HTML help workshop to generate a compressed HTML help file (.chm) +# of the generated HTML documentation. + +GENERATE_HTMLHELP = NO + +# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML +# documentation will contain sections that can be hidden and shown after the +# page has loaded. For this to work a browser that supports +# JavaScript and DHTML is required (for instance Mozilla 1.0+, Firefox +# Netscape 6.0+, Internet explorer 5.0+, Konqueror, or Safari). + +HTML_DYNAMIC_SECTIONS = NO + +# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can +# be used to specify the file name of the resulting .chm file. You +# can add a path in front of the file if the result should not be +# written to the html output directory. + +CHM_FILE = + +# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can +# be used to specify the location (absolute path including file name) of +# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run +# the HTML help compiler on the generated index.hhp. + +HHC_LOCATION = + +# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag +# controls if a separate .chi index file is generated (YES) or that +# it should be included in the master .chm file (NO). + +GENERATE_CHI = NO + +# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag +# controls whether a binary table of contents is generated (YES) or a +# normal table of contents (NO) in the .chm file. + +BINARY_TOC = NO + +# The TOC_EXPAND flag can be set to YES to add extra items for group members +# to the contents of the HTML help documentation and to the tree view. + +TOC_EXPAND = NO + +# The DISABLE_INDEX tag can be used to turn on/off the condensed index at +# top of each HTML page. The value NO (the default) enables the index and +# the value YES disables it. + +DISABLE_INDEX = NO + +# This tag can be used to set the number of enum values (range [1..20]) +# that doxygen will group on one line in the generated HTML documentation. + +ENUM_VALUES_PER_LINE = 4 + +# If the GENERATE_TREEVIEW tag is set to YES, a side panel will be +# generated containing a tree-like index structure (just like the one that +# is generated for HTML Help). For this to work a browser that supports +# JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+, +# Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are +# probably better off using the HTML help feature. + +GENERATE_TREEVIEW = NO + +# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be +# used to set the initial width (in pixels) of the frame in which the tree +# is shown. + +TREEVIEW_WIDTH = 250 + +#--------------------------------------------------------------------------- +# configuration options related to the LaTeX output +#--------------------------------------------------------------------------- + +# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will +# generate Latex output. + +GENERATE_LATEX = NO + +# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `latex' will be used as the default path. + +LATEX_OUTPUT = latex + +# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be +# invoked. If left blank `latex' will be used as the default command name. + +LATEX_CMD_NAME = latex + +# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to +# generate index for LaTeX. If left blank `makeindex' will be used as the +# default command name. + +MAKEINDEX_CMD_NAME = makeindex + +# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact +# LaTeX documents. This may be useful for small projects and may help to +# save some trees in general. + +COMPACT_LATEX = NO + +# The PAPER_TYPE tag can be used to set the paper type that is used +# by the printer. Possible values are: a4, a4wide, letter, legal and +# executive. If left blank a4wide will be used. + +PAPER_TYPE = a4wide + +# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX +# packages that should be included in the LaTeX output. + +EXTRA_PACKAGES = + +# The LATEX_HEADER tag can be used to specify a personal LaTeX header for +# the generated latex document. The header should contain everything until +# the first chapter. If it is left blank doxygen will generate a +# standard header. Notice: only use this tag if you know what you are doing! + +LATEX_HEADER = + +# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated +# is prepared for conversion to pdf (using ps2pdf). The pdf file will +# contain links (just like the HTML output) instead of page references +# This makes the output suitable for online browsing using a pdf viewer. + +PDF_HYPERLINKS = NO + +# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of +# plain latex in the generated Makefile. Set this option to YES to get a +# higher quality PDF documentation. + +USE_PDFLATEX = NO + +# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. +# command to the generated LaTeX files. This will instruct LaTeX to keep +# running if errors occur, instead of asking the user for help. +# This option is also used when generating formulas in HTML. + +LATEX_BATCHMODE = NO + +# If LATEX_HIDE_INDICES is set to YES then doxygen will not +# include the index chapters (such as File Index, Compound Index, etc.) +# in the output. + +LATEX_HIDE_INDICES = NO + +#--------------------------------------------------------------------------- +# configuration options related to the RTF output +#--------------------------------------------------------------------------- + +# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output +# The RTF output is optimized for Word 97 and may not look very pretty with +# other RTF readers or editors. + +GENERATE_RTF = NO + +# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `rtf' will be used as the default path. + +RTF_OUTPUT = rtf + +# If the COMPACT_RTF tag is set to YES Doxygen generates more compact +# RTF documents. This may be useful for small projects and may help to +# save some trees in general. + +COMPACT_RTF = NO + +# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated +# will contain hyperlink fields. The RTF file will +# contain links (just like the HTML output) instead of page references. +# This makes the output suitable for online browsing using WORD or other +# programs which support those fields. +# Note: wordpad (write) and others do not support links. + +RTF_HYPERLINKS = NO + +# Load stylesheet definitions from file. Syntax is similar to doxygen's +# config file, i.e. a series of assignments. You only have to provide +# replacements, missing definitions are set to their default value. + +RTF_STYLESHEET_FILE = + +# Set optional variables used in the generation of an rtf document. +# Syntax is similar to doxygen's config file. + +RTF_EXTENSIONS_FILE = + +#--------------------------------------------------------------------------- +# configuration options related to the man page output +#--------------------------------------------------------------------------- + +# If the GENERATE_MAN tag is set to YES (the default) Doxygen will +# generate man pages + +GENERATE_MAN = NO + +# The MAN_OUTPUT tag is used to specify where the man pages will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `man' will be used as the default path. + +MAN_OUTPUT = man + +# The MAN_EXTENSION tag determines the extension that is added to +# the generated man pages (default is the subroutine's section .3) + +MAN_EXTENSION = .3 + +# If the MAN_LINKS tag is set to YES and Doxygen generates man output, +# then it will generate one additional man file for each entity +# documented in the real man page(s). These additional files +# only source the real man page, but without them the man command +# would be unable to find the correct page. The default is NO. + +MAN_LINKS = NO + +#--------------------------------------------------------------------------- +# configuration options related to the XML output +#--------------------------------------------------------------------------- + +# If the GENERATE_XML tag is set to YES Doxygen will +# generate an XML file that captures the structure of +# the code including all documentation. + +GENERATE_XML = NO + +# The XML_OUTPUT tag is used to specify where the XML pages will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `xml' will be used as the default path. + +XML_OUTPUT = xml + +# The XML_SCHEMA tag can be used to specify an XML schema, +# which can be used by a validating XML parser to check the +# syntax of the XML files. + +XML_SCHEMA = + +# The XML_DTD tag can be used to specify an XML DTD, +# which can be used by a validating XML parser to check the +# syntax of the XML files. + +XML_DTD = + +# If the XML_PROGRAMLISTING tag is set to YES Doxygen will +# dump the program listings (including syntax highlighting +# and cross-referencing information) to the XML output. Note that +# enabling this will significantly increase the size of the XML output. + +XML_PROGRAMLISTING = YES + +#--------------------------------------------------------------------------- +# configuration options for the AutoGen Definitions output +#--------------------------------------------------------------------------- + +# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will +# generate an AutoGen Definitions (see autogen.sf.net) file +# that captures the structure of the code including all +# documentation. Note that this feature is still experimental +# and incomplete at the moment. + +GENERATE_AUTOGEN_DEF = NO + +#--------------------------------------------------------------------------- +# configuration options related to the Perl module output +#--------------------------------------------------------------------------- + +# If the GENERATE_PERLMOD tag is set to YES Doxygen will +# generate a Perl module file that captures the structure of +# the code including all documentation. Note that this +# feature is still experimental and incomplete at the +# moment. + +GENERATE_PERLMOD = NO + +# If the PERLMOD_LATEX tag is set to YES Doxygen will generate +# the necessary Makefile rules, Perl scripts and LaTeX code to be able +# to generate PDF and DVI output from the Perl module output. + +PERLMOD_LATEX = NO + +# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be +# nicely formatted so it can be parsed by a human reader. This is useful +# if you want to understand what is going on. On the other hand, if this +# tag is set to NO the size of the Perl module output will be much smaller +# and Perl will parse it just the same. + +PERLMOD_PRETTY = YES + +# The names of the make variables in the generated doxyrules.make file +# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. +# This is useful so different doxyrules.make files included by the same +# Makefile don't overwrite each other's variables. + +PERLMOD_MAKEVAR_PREFIX = + +#--------------------------------------------------------------------------- +# Configuration options related to the preprocessor +#--------------------------------------------------------------------------- + +# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will +# evaluate all C-preprocessor directives found in the sources and include +# files. + +ENABLE_PREPROCESSING = YES + +# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro +# names in the source code. If set to NO (the default) only conditional +# compilation will be performed. Macro expansion can be done in a controlled +# way by setting EXPAND_ONLY_PREDEF to YES. + +MACRO_EXPANSION = YES + +# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES +# then the macro expansion is limited to the macros specified with the +# PREDEFINED and EXPAND_AS_DEFINED tags. + +EXPAND_ONLY_PREDEF = YES + +# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files +# in the INCLUDE_PATH (see below) will be search if a #include is found. + +SEARCH_INCLUDES = YES + +# The INCLUDE_PATH tag can be used to specify one or more directories that +# contain include files that are not input files but should be processed by +# the preprocessor. + +INCLUDE_PATH = + +# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard +# patterns (like *.h and *.hpp) to filter out the header-files in the +# directories. If left blank, the patterns specified with FILE_PATTERNS will +# be used. + +INCLUDE_FILE_PATTERNS = + +# The PREDEFINED tag can be used to specify one or more macro names that +# are defined before the preprocessor is started (similar to the -D option of +# gcc). The argument of the tag is a list of macros of the form: name +# or name=definition (no spaces). If the definition and the = are +# omitted =1 is assumed. To prevent a macro definition from being +# undefined via #undef or recursively expanded use the := operator +# instead of the = operator. + +# C++98 version. +# +PREDEFINED = XSD_AUTO_PTR=std::auto_ptr + +# C++11 version. +# +# PREDEFINED = XSD_AUTO_PTR=std::unique_ptr + +# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then +# this tag can be used to specify a list of macro names that should be expanded. +# The macro definition that is found in the sources will be used. +# Use the PREDEFINED tag if you want to use a different macro definition. + +EXPAND_AS_DEFINED = + +# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then +# doxygen's preprocessor will remove all function-like macros that are alone +# on a line, have an all uppercase name, and do not end with a semicolon. Such +# function macros are typically used for boiler-plate code, and will confuse +# the parser if not removed. + +SKIP_FUNCTION_MACROS = YES + +#--------------------------------------------------------------------------- +# Configuration::additions related to external references +#--------------------------------------------------------------------------- + +# The TAGFILES option can be used to specify one or more tagfiles. +# Optionally an initial location of the external documentation +# can be added for each tagfile. The format of a tag file without +# this location is as follows: +# TAGFILES = file1 file2 ... +# Adding location for the tag files is done as follows: +# TAGFILES = file1=loc1 "file2 = loc2" ... +# where "loc1" and "loc2" can be relative or absolute paths or +# URLs. If a location is present for each tag, the installdox tool +# does not have to be run to correct the links. +# Note that each tag file must have a unique name +# (where the name does NOT include the path) +# If a tag file is not located in the directory in which doxygen +# is run, you must also specify the path to the tagfile here. + +TAGFILES = + +# When a file name is specified after GENERATE_TAGFILE, doxygen will create +# a tag file that is based on the input files it reads. + +GENERATE_TAGFILE = libxsd.doxytag + +# If the ALLEXTERNALS tag is set to YES all external classes will be listed +# in the class index. If set to NO only the inherited external classes +# will be listed. + +ALLEXTERNALS = NO + +# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed +# in the modules index. If set to NO, only the current project's groups will +# be listed. + +EXTERNAL_GROUPS = YES + +# The PERL_PATH should be the absolute path and name of the perl script +# interpreter (i.e. the result of `which perl'). + +PERL_PATH = /usr/bin/perl + +#--------------------------------------------------------------------------- +# Configuration options related to the dot tool +#--------------------------------------------------------------------------- + +# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will +# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base +# or super classes. Setting the tag to NO turns the diagrams off. Note that +# this option is superseded by the HAVE_DOT option below. This is only a +# fallback. It is recommended to install and use dot, since it yields more +# powerful graphs. + +CLASS_DIAGRAMS = YES + +# You can define message sequence charts within doxygen comments using the \msc +# command. Doxygen will then run the mscgen tool (see http://www.mcternan.me.uk/mscgen/) to +# produce the chart and insert it in the documentation. The MSCGEN_PATH tag allows you to +# specify the directory where the mscgen tool resides. If left empty the tool is assumed to +# be found in the default search path. + +MSCGEN_PATH = + +# If set to YES, the inheritance and collaboration graphs will hide +# inheritance and usage relations if the target is undocumented +# or is not a class. + +HIDE_UNDOC_RELATIONS = YES + +# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is +# available from the path. This tool is part of Graphviz, a graph visualization +# toolkit from AT&T and Lucent Bell Labs. The other options in this section +# have no effect if this option is set to NO (the default) + +HAVE_DOT = NO + +# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen +# will generate a graph for each documented class showing the direct and +# indirect inheritance relations. Setting this tag to YES will force the +# the CLASS_DIAGRAMS tag to NO. + +CLASS_GRAPH = YES + +# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen +# will generate a graph for each documented class showing the direct and +# indirect implementation dependencies (inheritance, containment, and +# class references variables) of the class with other documented classes. + +COLLABORATION_GRAPH = YES + +# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen +# will generate a graph for groups, showing the direct groups dependencies + +GROUP_GRAPHS = YES + +# If the UML_LOOK tag is set to YES doxygen will generate inheritance and +# collaboration diagrams in a style similar to the OMG's Unified Modeling +# Language. + +UML_LOOK = NO + +# If set to YES, the inheritance and collaboration graphs will show the +# relations between templates and their instances. + +TEMPLATE_RELATIONS = NO + +# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT +# tags are set to YES then doxygen will generate a graph for each documented +# file showing the direct and indirect include dependencies of the file with +# other documented files. + +INCLUDE_GRAPH = YES + +# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and +# HAVE_DOT tags are set to YES then doxygen will generate a graph for each +# documented header file showing the documented files that directly or +# indirectly include this file. + +INCLUDED_BY_GRAPH = YES + +# If the CALL_GRAPH, SOURCE_BROWSER and HAVE_DOT tags are set to YES then doxygen will +# generate a call dependency graph for every global function or class method. +# Note that enabling this option will significantly increase the time of a run. +# So in most cases it will be better to enable call graphs for selected +# functions only using the \callgraph command. + +CALL_GRAPH = NO + +# If the CALLER_GRAPH, SOURCE_BROWSER and HAVE_DOT tags are set to YES then doxygen will +# generate a caller dependency graph for every global function or class method. +# Note that enabling this option will significantly increase the time of a run. +# So in most cases it will be better to enable caller graphs for selected +# functions only using the \callergraph command. + +CALLER_GRAPH = NO + +# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen +# will graphical hierarchy of all classes instead of a textual one. + +GRAPHICAL_HIERARCHY = YES + +# If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES +# then doxygen will show the dependencies a directory has on other directories +# in a graphical way. The dependency relations are determined by the #include +# relations between the files in the directories. + +DIRECTORY_GRAPH = YES + +# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images +# generated by dot. Possible values are png, jpg, or gif +# If left blank png will be used. + +DOT_IMAGE_FORMAT = png + +# The tag DOT_PATH can be used to specify the path where the dot tool can be +# found. If left blank, it is assumed the dot tool can be found in the path. + +DOT_PATH = + +# The DOTFILE_DIRS tag can be used to specify one or more directories that +# contain dot files that are included in the documentation (see the +# \dotfile command). + +DOTFILE_DIRS = + +# The MAX_DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of +# nodes that will be shown in the graph. If the number of nodes in a graph +# becomes larger than this value, doxygen will truncate the graph, which is +# visualized by representing a node as a red box. Note that doxygen if the number +# of direct children of the root node in a graph is already larger than +# MAX_DOT_GRAPH_NOTES then the graph will not be shown at all. Also note +# that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH. + +DOT_GRAPH_MAX_NODES = 50 + +# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the +# graphs generated by dot. A depth value of 3 means that only nodes reachable +# from the root by following a path via at most 3 edges will be shown. Nodes +# that lay further from the root node will be omitted. Note that setting this +# option to 1 or 2 may greatly reduce the computation time needed for large +# code bases. Also note that the size of a graph can be further restricted by +# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction. + +MAX_DOT_GRAPH_DEPTH = 0 + +# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent +# background. This is disabled by default, which results in a white background. +# Warning: Depending on the platform used, enabling this option may lead to +# badly anti-aliased labels on the edges of a graph (i.e. they become hard to +# read). + +DOT_TRANSPARENT = YES + +# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output +# files in one run (i.e. multiple -o and -T options on the command line). This +# makes dot run faster, but since only newer versions of dot (>1.8.10) +# support this, this feature is disabled by default. + +DOT_MULTI_TARGETS = NO + +# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will +# generate a legend page explaining the meaning of the various boxes and +# arrows in the dot generated graphs. + +GENERATE_LEGEND = YES + +# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will +# remove the intermediate dot files that are used to generate +# the various graphs. + +DOT_CLEANUP = YES + +#--------------------------------------------------------------------------- +# Configuration::additions related to the search engine +#--------------------------------------------------------------------------- + +# The SEARCHENGINE tag specifies whether or not a search engine should be +# used. If set to NO the values of all tags below this one will be ignored. + +SEARCHENGINE = NO diff --git a/xsd/doc/cxx/tree/reference/makefile b/xsd/doc/cxx/tree/reference/makefile new file mode 100644 index 0000000..5df62c9 --- /dev/null +++ b/xsd/doc/cxx/tree/reference/makefile @@ -0,0 +1,18 @@ +.PHONY: all +all: libxsd.doxytag + +headers := \ +../../../../libxsd/xsd/cxx/tree/buffer.hxx \ +../../../../libxsd/xsd/cxx/tree/types.hxx \ +../../../../libxsd/xsd/cxx/tree/date-time.hxx \ +../../../../libxsd/xsd/cxx/tree/elements.hxx \ +../../../../libxsd/xsd/cxx/tree/exceptions.hxx + +libxsd.doxytag: libxsd.doxygen footer.html $(headers) + doxygen $< + +.PHONY: clean +clean: + rm -f libxsd.doxytag + rm -rf html + diff --git a/xsd/doc/default.css b/xsd/doc/default.css new file mode 100644 index 0000000..bb3805b --- /dev/null +++ b/xsd/doc/default.css @@ -0,0 +1,319 @@ +html { + margin : 0; + padding : 0; + background : white; +} + +body { + font-family : "Lucida Grande", Verdana, "Bitstream Vera Sans", sans-serif; + font-weight : normal; + font-size : 13px; + line-height : 19px; + + color : black; + + margin : 0 2em 0 2em; + padding : 0; +} + + +body { + min-width: 40em; +} + +#container { + max-width : 46em; + margin : 0 auto; + padding : 0 1em 0 1em; +} + + + +/* + * Footer + * + */ +#footer { + color : #3a84a7; + + padding : 1em 0 0.5em 0; + + font-size : 10px; + line-height : 15px; + + text-align: center; +} + +#footer a:link, #footer a:visited { + + color:#1d6699; + text-decoration: underline; +} + +#footer a { + margin-left: 0.7em; + margin-right: 0.7em; +} + +#footer p { + padding: 0; + margin: 0.3em 0 0 0; +} + +/* Distribution terms. */ +#footer #terms { + text-align: justify; + + font-size : 110%; + font-family : monospace; + + padding : 1em 0 0.5em 0; +} + + +/* + * Content + * + */ + +#content { + padding : 0em 0.1em 0 1.3em; + margin : 1.4em 0 0 0; +} + +#content p, +#content ol, +#content ul, +#content dl { + text-align: justify; +} + +#content h1 { + margin-left: -0.89em; +} + +a:link { + color:#0536d2; +} + + +/* + * Headings + * + */ + +h1, h2, h3, h4, h5, h6 { + font-weight : 500; +} + +h1 { font-size : 155%; } +h2 { font-size : 130%; } +h3 { font-size : 125%; } +h4 { font-size : 110%; } +h5 { font-size : 106%; } +h6 { font-size : 100%; } + +h1 { margin : 1.8em 0 0.8em 0;} +h2 { margin-top : 1.4em;} +h3 { margin-top : 1em;} + +p.indent { + margin-left : 1.5em; +} + + +/* + * Fix for IE 5.5 table font problem + * + */ + +table { + font-size : 13px; +} + + +/* + * table of content + * + */ + +ul.toc li { + padding : .4em 0em 0em 0em; +} + + +/* Toc links don't need to show when they are visited. */ +.toc a:visited { + color:#0536d2; +} + + +/* + * lists + * + */ + + +/* list of links */ +ul.menu { + list-style-type : none; +} + +ul.menu li { + padding-top : 0.3em; + padding-bottom : 0.3em; +} + + + +/* @@ I should probably use child selector here */ +/* list with multiline list-elements */ +ul.multiline li, ol.multiline li, dl.multiline dd { + padding-top : 0.16em; + padding-bottom : 0.16em; + + font-size : 11px; + line-height : 15px; +} + + + +/* C++ code snippet */ +pre.cxx { + margin-top : 0em; + margin-bottom : 2em; + + margin-left : 1em; +} + + + +/* make code snippet */ +pre.make { + margin-top : 0em; + margin-bottom : 2em; + + margin-left : 1em; +} + + + +/* terminal output */ +pre.term { + margin-top : 0em; + margin-bottom : 2em; + + margin-left : 1em; +} + + +/* Images */ +div.center { + text-align: center; +} + +/* Document info. */ +#docinfo { + margin-top: 4em; + border-top: 1px dashed #000000; + font-size: 70%; +} + + +/* Footnote */ + +#footnote { + margin-top : 2.5em; +} + +#footnote hr, hr.footnote { + margin-left: 0; + margin-bottom: 0.6em; + width: 8em; + border-top: 1px solid #000000; + border-right: none; + border-bottom: none; + border-left: none; + +} + +#footnote ol { + margin-left: 0; + padding-left: 1.45em; +} + +#footnote li { + text-align : left; + font-size : 11px; + line-height : 15px; + + padding : .4em 0 .4em 0; +} + + +/* Normal table with borders, etc. */ + +table.std { + margin: 2em 0 2em 0; + + border-collapse : collapse; + border : 1px solid; + border-color : #000000; + + font-size : 11px; + line-height : 14px; +} + +table.std th, table.std td { + border : 1px solid; + padding : 0.6em 0.8em 0.6em 0.8em; +} + +table.std th { + background : #cde8f6; +} + +table.std td { + text-align: left; +} + + +/* + * "item | description" table. + * + */ + +table.description { + border-style : none; + border-collapse : separate; + border-spacing : 0; + + font-size : 13px; + + margin : 0.6em 0 0.6em 0; + padding : 0 0 0 0; +} + +table.description tr { + padding : 0 0 0 0; + margin : 0 0 0 0; +} + +table.description * td, table.description * th { + border-style : none; + margin : 0 0 0 0; + vertical-align : top; +} + +table.description * th { + font-weight : normal; + padding : 0.4em 1em 0.4em 0; + text-align : left; + white-space : nowrap; + background : none; +} + +table.description * td { + padding : 0.4em 0 0.4em 1em; + text-align : justify; +} diff --git a/xsd/doc/makefile b/xsd/doc/makefile new file mode 100644 index 0000000..4ed00cc --- /dev/null +++ b/xsd/doc/makefile @@ -0,0 +1,143 @@ +# file : doc/makefile +# copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +include $(dir $(lastword $(MAKEFILE_LIST)))../build/bootstrap.make + +default := $(out_base)/ +install := $(out_base)/.install +dist := $(out_base)/.dist +dist-win := $(out_base)/.dist-win +clean := $(out_base)/.clean + +# Import. +# +$(call import,\ + $(scf_root)/import/cli/stub.make,\ + cli: cli,cli-rules: cli_rules) + +# Build. +# +$(default): \ +$(out_base)/cxx/ \ +$(out_base)/xsd.xhtml \ +$(out_base)/xsd.1 + +# Man/html pages. +# +$(out_base)/xsd.xhtml $(out_base)/xsd.1: cli := $(cli) +$(out_base)/xsd.xhtml $(out_base)/xsd.1: cli_options += -I $(src_root)/xsd + +$(out_base)/xsd.xhtml $(out_base)/xsd.1: \ +$(src_root)/xsd/options.cli \ +$(src_root)/xsd/cxx/options.cli \ +$(src_root)/xsd/cxx/tree/options.cli \ +$(src_root)/xsd/cxx/parser/options.cli + +# Assemble the options from different files in a specific order. +# + +# XHTML +# +$(out_base)/xsd.xhtml: $(src_base)/xsd-prologue.xhtml \ + $(src_base)/xsd-epilogue.xhtml \ + $(src_base)/xsd-tree-header.xhtml \ + $(src_base)/xsd-parser-header.xhtml \ + | $(out_base)/. +# Common options. +# + $(call message,cli-html $$1,$(cli) $(cli_options) --generate-html \ +--stdout --suppress-undocumented --exclude-base --class CXX::options \ +--class options --html-prologue-file $(src_base)/xsd-prologue.xhtml \ +$$1 >$@, $(src_root)/xsd/cxx/options.cli) + +# C++/Tree options. +# + $(call message,cli-html $$1,$(cli) $(cli_options) --generate-html \ +--stdout --suppress-undocumented --exclude-base \ +--html-prologue-file $(src_base)/xsd-tree-header.xhtml \ +$$1 >>$@, $(src_root)/xsd/cxx/tree/options.cli) + +# C++/Parser options. +# + $(call message,cli-html $$1,$(cli) $(cli_options) --generate-html \ +--stdout --suppress-undocumented --exclude-base \ +--html-prologue-file $(src_base)/xsd-parser-header.xhtml \ +--html-epilogue-file $(src_base)/xsd-epilogue.xhtml \ +$$1 >>$@, $(src_root)/xsd/cxx/parser/options.cli) + +# MAN +# +$(out_base)/xsd.1: $(src_base)/xsd-prologue.1 \ + $(src_base)/xsd-epilogue.1 \ + $(src_base)/xsd-tree-header.1 \ + $(src_base)/xsd-parser-header.1 \ + | $(out_base)/. +# Common options. +# + $(call message,cli-man $$1,$(cli) $(cli_options) --generate-man \ +--stdout --suppress-undocumented --exclude-base --class CXX::options \ +--class options --man-prologue-file $(src_base)/xsd-prologue.1 \ +$$1 >$@, $(src_root)/xsd/cxx/options.cli) + +# C++/Tree options. +# + $(call message,cli-man $$1,$(cli) $(cli_options) --generate-man \ +--stdout --suppress-undocumented --exclude-base \ +--man-prologue-file $(src_base)/xsd-tree-header.1 \ +$$1 >>$@, $(src_root)/xsd/cxx/tree/options.cli) + +# C++/Parser options. +# + $(call message,cli-man $$1,$(cli) $(cli_options) --generate-man \ +--stdout --suppress-undocumented --exclude-base \ +--man-prologue-file $(src_base)/xsd-parser-header.1 \ +--man-epilogue-file $(src_base)/xsd-epilogue.1 \ +$$1 >>$@, $(src_root)/xsd/cxx/parser/options.cli) + + +# Install. +# +$(install): $(out_base)/cxx/.install \ + $(out_base)/xsd.xhtml \ + $(out_base)/xsd.1 + $(call install-data,$(src_base)/default.css,$(install_doc_dir)/xsd/default.css) + $(call install-data,$(out_base)/xsd.xhtml,$(install_doc_dir)/xsd/xsd.xhtml) + $(call install-data,$(src_base)/custom-literals.xsd,$(install_doc_dir)/xsd/custom-literals.xsd) + $(call install-data,$(out_base)/xsd.1,$(install_man_dir)/man1/xsd.1) + +# Dist. +# +dist-common := $(out_base)/.dist-common + +$(dist-common): $(out_base)/xsd.xhtml \ + $(out_base)/xsd.1 + $(call install-data,$(src_base)/default.css,$(dist_prefix)/doc/default.css) + $(call install-data,$(out_base)/xsd.xhtml,$(dist_prefix)/doc/xsd.xhtml) + $(call install-data,$(out_base)/xsd.1,$(dist_prefix)/doc/xsd.1) + $(call install-data,$(src_base)/custom-literals.xsd,$(dist_prefix)/doc/custom-literals.xsd) + +$(dist): $(dist-common) $(out_base)/cxx/.dist +$(dist-win): $(dist-common) $(out_base)/cxx/.dist-win + +# Clean. +# +$(clean): $(out_base)/cxx/.clean +ifneq ($(xsd_clean_gen),n) + $(call message,rm $$1,rm -f $$1,$(out_base)/xsd.1) + $(call message,rm $$1,rm -f $$1,$(out_base)/xsd.xhtml) +endif + +# Generated .gitignore. +# +ifeq ($(out_base),$(src_base)) +$(out_base)/xsd.xhtml $(out_base)/xsd.1: | $(out_base)/.gitignore + +$(out_base)/.gitignore: files := xsd.1 xsd.xhtml +$(clean): $(out_base)/.gitignore.clean + +$(call include,$(bld_root)/git/gitignore.make) +endif + +$(call include,$(bld_root)/install.make) +$(call import,$(src_base)/cxx/makefile) diff --git a/xsd/doc/xsd-epilogue.1 b/xsd/doc/xsd-epilogue.1 new file mode 100644 index 0000000..2b78ff7 --- /dev/null +++ b/xsd/doc/xsd-epilogue.1 @@ -0,0 +1,566 @@ +\" +\" NAMING CONVENTION +\" + +.SH NAMING CONVENTION +The compiler can be instructed to use a particular naming convention in +the generated code. A number of widely-used conventions can be selected +using the +.B --type-naming +and +.B --function-naming +options. A custom naming convention can be achieved using the +.BR --type-regex , +.BR --accessor-regex , +.BR --one-accessor-regex , +.BR --opt-accessor-regex , +.BR --seq-accessor-regex , +.BR --modifier-regex , +.BR --one-modifier-regex , +.BR --opt-modifier-regex , +.BR --seq-modifier-regex , +.BR --parser-regex , +.BR --serializer-regex , +.BR --const-regex , +.BR --enumerator-regex , +and +.B --element-type-regex +options. + +The +.B --type-naming +option specifies the convention that should be used for naming C++ types. +Possible values for this option are +.B knr +(default), +.BR ucc , +and +.BR java . +The +.B knr +value (stands for K&R) signifies the standard, lower-case naming convention +with the underscore used as a word delimiter, for example: foo, foo_bar. +The +.B ucc +(stands for upper-camel-case) and +.B java +values a synonyms for the same naming convention where the first letter +of each word in the name is capitalized, for example: Foo, FooBar. + +Similarly, the +.B --function-naming +option specifies the convention that should be used for naming C++ functions. +Possible values for this option are +.B knr +(default), +.BR lcc , +and +.BR java . +The +.B knr +value (stands for K&R) signifies the standard, lower-case naming convention +with the underscore used as a word delimiter, for example: foo(), foo_bar(). +The +.B lcc +value (stands for lower-camel-case) signifies a naming convention where the +first letter of each word except the first is capitalized, for example: foo(), +fooBar(). The +.B java +naming convention is similar to the lower-camel-case one except that accessor +functions are prefixed with get, modifier functions are prefixed with set, +parsing functions are prefixed with parse, and serialization functions are +prefixed with serialize, for example: getFoo(), setFooBar(), parseRoot(), +serializeRoot(). + +Note that the naming conventions specified with the +.B --type-naming +and +.B --function-naming +options perform only limited transformations on the +names that come from the schema in the form of type, attribute, and element +names. In other words, to get consistent results, your schemas should follow +a similar naming convention as the one you would like to have in the generated +code. Alternatively, you can use the +.B --*-regex +options (discussed below) to perform further transformations on the names +that come from the schema. + +The +.BR --type-regex , +.BR --accessor-regex , +.BR --one-accessor-regex , +.BR --opt-accessor-regex , +.BR --seq-accessor-regex , +.BR --modifier-regex , +.BR --one-modifier-regex , +.BR --opt-modifier-regex , +.BR --seq-modifier-regex , +.BR --parser-regex , +.BR --serializer-regex , +.BR --const-regex , +.BR --enumerator-regex , +and +.B --element-type-regex +options allow you to specify extra regular expressions for each name +category in addition to the predefined set that is added depending on +the +.B --type-naming +and +.B --function-naming +options. Expressions that are provided with the +.B --*-regex +options are evaluated prior to any predefined expressions. This allows +you to selectively override some or all of the predefined transformations. +When debugging your own expressions, it is often useful to see which +expressions match which names. The +.B --name-regex-trace +option allows you to trace the process of applying +regular expressions to names. + +The value for the +.B --*-regex +options should be a perl-like regular expression in the form +.BI / pattern / replacement /\fR. +Any character can be used as a delimiter instead of +.BR / . +Escaping of the delimiter character in +.I pattern +or +.I replacement +is not supported. All the regular expressions for each category are pushed +into a category-specific stack with the last specified expression +considered first. The first match that succeeds is used. For the +.B --one-accessor-regex +(accessors with cardinality one), +.B --opt-accessor-regex +(accessors with cardinality optional), and +.B --seq-accessor-regex +(accessors with cardinality sequence) categories the +.B --accessor-regex +expressions are used as a fallback. For the +.BR --one-modifier-regex , +.BR --opt-modifier-regex , +and +.B --seq-modifier-regex +categories the +.B --modifier-regex +expressions are used as a fallback. For the +.B --element-type-regex +category the +.B --type-regex +expressions are used as a fallback. + +The type name expressions +.RB ( --type-regex ) +are evaluated on the name string that has the following format: + +[\fInamespace \fR]\fIname\fR[\fB,\fIname\fR][\fB,\fIname\fR][\fB,\fIname\fR] + +The element type name expressions +.RB ( --element-type-regex ), +effective only when the +.B --generate-element-type +option is specified, are evaluated on the name string that has the following +format: + +.I namespace name + +In the type name format the +.I namespace +part followed by a space is only present for global type names. For global +types and elements defined in schemas without a target namespace, the +.I namespace +part is empty but the space is still present. In the type name format after +the initial +.I name +component, up to three additional +.I name +components can be present, separated by commas. For example: + +.B http://example.com/hello type + +.B foo + +.B foo,iterator + +.B foo,const,iterator + +The following set of predefined regular expressions is used to transform +type names when the upper-camel-case naming convention is selected: + +.B /(?:[^ ]* )?([^,]+)/\\\\u$1/ + +.B /(?:[^ ]* )?([^,]+),([^,]+)/\\\\u$1\\\\u$2/ + +.B /(?:[^ ]* )?([^,]+),([^,]+),([^,]+)/\\\\u$1\\\\u$2\\\\u$3/ + +.B /(?:[^ ]* )?([^,]+),([^,]+),([^,]+),([^,]+)/\\\\u$1\\\\u$2\\\\u$3\\\\u$4/ + +The accessor and modifier expressions +.RB ( --*accessor-regex +and +.BR --*modifier-regex ) +are evaluated on the name string that has the following format: + +\fIname\fR[\fB,\fIname\fR][\fB,\fIname\fR] + +After the initial +.I name +component, up to two additional +.I name +components can be present, separated by commas. For example: + +.B foo + +.B dom,document + +.B foo,default,value + +The following set of predefined regular expressions is used to transform +accessor names when the +.B java +naming convention is selected: + +.B /([^,]+)/get\\\\u$1/ + +.B /([^,]+),([^,]+)/get\\\\u$1\\\\u$2/ + +.B /([^,]+),([^,]+),([^,]+)/get\\\\u$1\\\\u$2\\\\u$3/ + +For the parser, serializer, and enumerator categories, the corresponding +regular expressions are evaluated on local names of elements and on +enumeration values, respectively. For example, the following predefined +regular expression is used to transform parsing function names when the +.B java +naming convention is selected: + +.B /(.+)/parse\\\\u$1/ + +The const category is used to create C++ constant names for the +element/wildcard/text content ids in ordered types. + +See also the REGEX AND SHELL QUOTING section below. + +\" +\" TYPE MAP +\" +.SH TYPE MAP +Type map files are used in C++/Parser to define a mapping between XML +Schema and C++ types. The compiler uses this information to determine +the return types of +.B post_* +functions in parser skeletons corresponding to XML Schema types +as well as argument types for callbacks corresponding to elements +and attributes of these types. + +The compiler has a set of predefined mapping rules that map built-in +XML Schema types to suitable C++ types (discussed below) and all +other types to +.BR void . +By providing your own type maps you can override these predefined rules. +The format of the type map file is presented below: + +.RS +.B namespace +.I schema-namespace +[ +.I cxx-namespace +] +.br +.B { +.br + ( +.B include +.IB file-name ; +)* +.br + ([ +.B type +] +.I schema-type cxx-ret-type +[ +.I cxx-arg-type +.RB ] ; +)* +.br +.B } +.br +.RE + +Both +.I schema-namespace +and +.I schema-type +are regex patterns while +.IR cxx-namespace , +.IR cxx-ret-type , +and +.I cxx-arg-type +are regex pattern substitutions. All names can be optionally enclosed +in \fR" "\fR, for example, to include white-spaces. + +.I schema-namespace +determines XML Schema namespace. Optional +.I cxx-namespace +is prefixed to every C++ type name in this namespace declaration. +.I cxx-ret-type +is a C++ type name that is used as a return type for the +.B post_* +functions. Optional +.I cxx-arg-type +is an argument type for callback functions corresponding to elements and +attributes of this type. If +.I cxx-arg-type +is not specified, it defaults to +.I cxx-ret-type +if +.I cxx-ret-type +ends with +.B * +or +.B & +(that is, it is a pointer or a reference) and +.B const +\fIcxx-ret-type\fB&\fR otherwise. +.I file-name +is a file name either in the \fR" "\fR or < > format and is added with the +.B #include +directive to the generated code. + +The \fB#\fR character starts a comment that ends with a new line or end of +file. To specify a name that contains \fB#\fR enclose it in \fR" "\fR. For +example: + +.RS +namespace http://www.example.com/xmlns/my my +.br +{ +.br + include "my.hxx"; +.br + + # Pass apples by value. + # + apple apple; +.br + + # Pass oranges as pointers. + # + orange orange_t*; +.br +} +.br +.RE + +In the example above, for the +.B http://www.example.com/xmlns/my#orange +XML Schema type, the +.B my::orange_t* +C++ type will be used as both return and argument types. + +Several namespace declarations can be specified in a single file. +The namespace declaration can also be completely omitted to map +types in a schema without a namespace. For instance: + +.RS +include "my.hxx"; +.br +apple apple; +.br + +namespace http://www.example.com/xmlns/my +.br +{ +.br + orange "const orange_t*"; +.br +} +.br +.RE + + +The compiler has a number of predefined mapping rules that can be +presented as the following map files. The string-based XML Schema +built-in types are mapped to either +.B std::string +or +.B std::wstring +depending on the character type selected with the +.B --char-type +option +.RB ( char +by default). + +.RS +namespace http://www.w3.org/2001/XMLSchema +.br +{ +.br + boolean bool bool; +.br + + byte "signed char" "signed char"; +.br + unsignedByte "unsigned char" "unsigned char"; +.br + + short short short; +.br + unsignedShort "unsigned short" "unsigned short"; +.br + + int int int; +.br + unsignedInt "unsigned int" "unsigned int"; +.br + + long "long long" "long long"; +.br + unsignedLong "unsigned long long" "unsigned long long"; +.br + + integer "long long" "long long"; +.br + + negativeInteger "long long" "long long"; +.br + nonPositiveInteger "long long" "long long"; +.br + + positiveInteger "unsigned long long" "unsigned long long"; +.br + nonNegativeInteger "unsigned long long" "unsigned long long"; +.br + + float float float; +.br + double double double; +.br + decimal double double; +.br + + string std::string; +.br + normalizedString std::string; +.br + token std::string; +.br + Name std::string; +.br + NMTOKEN std::string; +.br + NCName std::string; +.br + ID std::string; +.br + IDREF std::string; +.br + language std::string; +.br + anyURI std::string; +.br + + NMTOKENS xml_schema::string_sequence; +.br + IDREFS xml_schema::string_sequence; +.br + + QName xml_schema::qname; +.br + + base64Binary std::auto_ptr +.br + std::auto_ptr; +.br + hexBinary std::auto_ptr +.br + std::auto_ptr; +.br + + date xml_schema::date; +.br + dateTime xml_schema::date_time; +.br + duration xml_schema::duration; +.br + gDay xml_schema::gday; +.br + gMonth xml_schema::gmonth; +.br + gMonthDay xml_schema::gmonth_day; +.br + gYear xml_schema::gyear; +.br + gYearMonth xml_schema::gyear_month; +.br + time xml_schema::time; +.br +} +.br +.RE + + +The last predefined rule maps anything that wasn't mapped by previous +rules to +.BR void : + +.RS +namespace .* +.br +{ +.br + .* void void; +.br +} +.br +.RE + +When you provide your own type maps with the +.B --type-map +option, they are evaluated first. This allows you to selectively override +predefined rules. + +.\" +.\" REGEX AND SHELL QUOTING +.\" +.SH REGEX AND SHELL QUOTING +When entering a regular expression argument in the shell command line +it is often necessary to use quoting (enclosing the argument in " " +or ' ') in order to prevent the shell from interpreting certain +characters, for example, spaces as argument separators and $ as +variable expansions. + +Unfortunately it is hard to achieve this in a manner that is portable +across POSIX shells, such as those found on GNU/Linux and UNIX, and +Windows shell. For example, if you use " " for quoting you will get +a wrong result with POSIX shells if your expression contains $. The +standard way of dealing with this on POSIX systems is to use ' ' +instead. Unfortunately, Windows shell does not remove ' ' from +arguments when they are passed to applications. As a result you may +have to use ' ' for POSIX and " " for Windows ($ is not treated as +a special character on Windows). + +Alternatively, you can save regular expression options into a file, +one option per line, and use this file with the +.B --options-file +option. With this approach you don't need to worry about shell quoting. + +.\" +.\" DIAGNOSTICS +.\" +.SH DIAGNOSTICS +If the input file is not a valid W3C XML Schema definition, +.B xsd +will issue diagnostic messages to +.B STDERR +and exit with non-zero exit code. +.SH BUGS +Send bug reports to the xsd-users@codesynthesis.com mailing list. +.SH COPYRIGHT +Copyright (c) 2005-2014 Code Synthesis Tools CC. + +Permission is granted to copy, distribute and/or modify this +document under the terms of the GNU Free Documentation License, +version 1.2; with no Invariant Sections, no Front-Cover Texts and +no Back-Cover Texts. Copy of the license can be obtained from +http://codesynthesis.com/licenses/fdl-1.2.txt diff --git a/xsd/doc/xsd-epilogue.xhtml b/xsd/doc/xsd-epilogue.xhtml new file mode 100644 index 0000000..5f91450 --- /dev/null +++ b/xsd/doc/xsd-epilogue.xhtml @@ -0,0 +1,422 @@ +

NAMING CONVENTION

+ +

The compiler can be instructed to use a particular naming + convention in the generated code. A number of widely-used + conventions can be selected using the --type-naming + and --function-naming options. A custom + naming convention can be achieved using the + --type-regex, + --accessor-regex, + --one-accessor-regex, + --opt-accessor-regex, + --seq-accessor-regex, + --modifier-regex, + --one-modifier-regex, + --opt-modifier-regex, + --seq-modifier-regex, + --parser-regex, + --serializer-regex, + --const-regex, + --enumerator-regex, and + --element-type-regex options. +

+ +

The --type-naming option specifies the + convention that should be used for naming C++ types. Possible + values for this option are knr (default), + ucc, and java. The + knr value (stands for K&R) signifies + the standard, lower-case naming convention with the underscore + used as a word delimiter, for example: foo, + foo_bar. The ucc (stands + for upper-camel-case) and + java values a synonyms for the same + naming convention where the first letter of each word in the + name is capitalized, for example: Foo, + FooBar.

+ +

Similarly, the --function-naming option + specifies the convention that should be used for naming C++ + functions. Possible values for this option are knr + (default), lcc, and java. The + knr value (stands for K&R) signifies + the standard, lower-case naming convention with the underscore + used as a word delimiter, for example: foo(), + foo_bar(). The lcc value + (stands for lower-camel-case) signifies a naming convention + where the first letter of each word except the first is + capitalized, for example: foo(), fooBar(). + The java naming convention is similar to + the lower-camel-case one except that accessor functions are prefixed + with get, modifier functions are prefixed + with set, parsing functions are prefixed + with parse, and serialization functions are + prefixed with serialize, for example: + getFoo(), setFooBar(), + parseRoot(), serializeRoot().

+ +

Note that the naming conventions specified with the + --type-naming and + --function-naming options perform only limited + transformations on the names that come from the schema in the + form of type, attribute, and element names. In other words, to + get consistent results, your schemas should follow a similar + naming convention as the one you would like to have in the + generated code. Alternatively, you can use the + --*-regex options (discussed below) + to perform further transformations on the names that come from + the schema.

+ +

The + --type-regex, + --accessor-regex, + --one-accessor-regex, + --opt-accessor-regex, + --seq-accessor-regex, + --modifier-regex, + --one-modifier-regex, + --opt-modifier-regex, + --seq-modifier-regex, + --parser-regex, + --serializer-regex, + --const-regex, + --enumerator-regex, and + --element-type-regex options allow you to + specify extra regular expressions for each name category in + addition to the predefined set that is added depending on + the --type-naming and + --function-naming options. Expressions + that are provided with the --*-regex + options are evaluated prior to any predefined expressions. + This allows you to selectively override some or all of the + predefined transformations. When debugging your own expressions, + it is often useful to see which expressions match which names. + The --name-regex-trace option allows you + to trace the process of applying regular expressions to + names.

+ +

The value for the --*-regex options should be + a perl-like regular expression in the form + /pattern/replacement/. + Any character can be used as a delimiter instead of /. + Escaping of the delimiter character in pattern or + replacement is not supported. + All the regular expressions for each category are pushed into a + category-specific stack with the last specified expression + considered first. The first match that succeeds is used. For the + --one-accessor-regex (accessors with cardinality one), + --opt-accessor-regex (accessors with cardinality optional), and + --seq-accessor-regex (accessors with cardinality sequence) + categories the --accessor-regex expressions are + used as a fallback. For the + --one-modifier-regex, + --opt-modifier-regex, and + --seq-modifier-regex + categories the --modifier-regex expressions are + used as a fallback. For the --element-type-regex + category the --type-regex expressions are + used as a fallback.

+ +

The type name expressions (--type-regex) + are evaluated on the name string that has the following + format:

+ +

[namespace ]name[,name][,name][,name]

+ +

The element type name expressions + (--element-type-regex), effective only when + the --generate-element-type option is specified, + are evaluated on the name string that has the following + format:

+ +

namespace name

+ +

In the type name format the namespace part + followed by a space is only present for global type names. For + global types and elements defined in schemas without a target + namespace, the namespace part is empty but + the space is still present. In the type name format after the + initial name component, up to three additional + name components can be present, separated + by commas. For example:

+ +

http://example.com/hello type

+

foo

+

foo,iterator

+

foo,const,iterator

+ +

The following set of predefined regular expressions is used to + transform type names when the upper-camel-case naming convention + is selected:

+ +

/(?:[^ ]* )?([^,]+)/\u$1/

+

/(?:[^ ]* )?([^,]+),([^,]+)/\u$1\u$2/

+

/(?:[^ ]* )?([^,]+),([^,]+),([^,]+)/\u$1\u$2\u$3/

+

/(?:[^ ]* )?([^,]+),([^,]+),([^,]+),([^,]+)/\u$1\u$2\u$3\u$4/

+ +

The accessor and modifier expressions + (--*accessor-regex and + --*modifier-regex) are evaluated on the name string + that has the following format:

+ +

name[,name][,name]

+ +

After the initial name component, up to two + additional name components can be present, + separated by commas. For example:

+ +

foo

+

dom,document

+

foo,default,value

+ +

The following set of predefined regular expressions is used to + transform accessor names when the java naming + convention is selected:

+ +

/([^,]+)/get\u$1/

+

/([^,]+),([^,]+)/get\u$1\u$2/

+

/([^,]+),([^,]+),([^,]+)/get\u$1\u$2\u$3/

+ +

For the parser, serializer, and enumerator categories, the + corresponding regular expressions are evaluated on local names of + elements and on enumeration values, respectively. For example, the + following predefined regular expression is used to transform parsing + function names when the java naming convention + is selected:

+ +

/(.+)/parse\u$1/

+ +

The const category is used to create C++ constant names for the + element/wildcard/text content ids in ordered types.

+ +

See also the REGEX AND SHELL QUOTING section below.

+ +

TYPE MAP

+ +

Type map files are used in C++/Parser to define a mapping between + XML Schema and C++ types. The compiler uses this information + to determine the return types of post_* + functions in parser skeletons corresponding to XML Schema + types as well as argument types for callbacks corresponding + to elements and attributes of these types.

+ +

The compiler has a set of predefined mapping rules that map + built-in XML Schema types to suitable C++ types (discussed + below) and all other types to void. + By providing your own type maps you can override these predefined + rules. The format of the type map file is presented below: +

+ +
+namespace <schema-namespace> [<cxx-namespace>]
+{
+  (include <file-name>;)*
+  ([type] <schema-type> <cxx-ret-type> [<cxx-arg-type>];)*
+}
+  
+ +

Both <schema-namespace> and + <schema-type> are regex patterns while + <cxx-namespace>, + <cxx-ret-type>, and + <cxx-arg-type> are regex pattern + substitutions. All names can be optionally enclosed in + " ", for example, to include white-spaces.

+ +

<schema-namespace> determines XML + Schema namespace. Optional <cxx-namespace> + is prefixed to every C++ type name in this namespace declaration. + <cxx-ret-type> is a C++ type name that is + used as a return type for the post_* functions. + Optional <cxx-arg-type> is an argument + type for callback functions corresponding to elements and attributes + of this type. If + <cxx-arg-type> is not specified, it defaults + to <cxx-ret-type> if <cxx-ret-type> + ends with * or & (that is, + it is a pointer or a reference) and + const <cxx-ret-type>& + otherwise. + <file-name> is a file name either in the + " " or < > format + and is added with the #include directive to + the generated code.

+ +

The # character starts a comment that ends + with a new line or end of file. To specify a name that contains + # enclose it in " ". + For example:

+ +
+namespace http://www.example.com/xmlns/my my
+{
+  include "my.hxx";
+
+  # Pass apples by value.
+  #
+  apple apple;
+
+  # Pass oranges as pointers.
+  #
+  orange orange_t*;
+}
+  
+ +

In the example above, for the + http://www.example.com/xmlns/my#orange + XML Schema type, the my::orange_t* C++ type will + be used as both return and argument types.

+ +

Several namespace declarations can be specified in a single + file. The namespace declaration can also be completely + omitted to map types in a schema without a namespace. For + instance:

+ +
+include "my.hxx";
+apple apple;
+
+namespace http://www.example.com/xmlns/my
+{
+  orange "const orange_t*";
+}
+  
+ +

The compiler has a number of predefined mapping rules that can be + presented as the following map files. The string-based XML Schema + built-in types are mapped to either std::string + or std::wstring depending on the character type + selected with the --char-type option + (char by default).

+ +
+namespace http://www.w3.org/2001/XMLSchema
+{
+  boolean bool bool;
+
+  byte "signed char" "signed char";
+  unsignedByte "unsigned char" "unsigned char";
+
+  short short short;
+  unsignedShort "unsigned short" "unsigned short";
+
+  int int int;
+  unsignedInt "unsigned int" "unsigned int";
+
+  long "long long" "long long";
+  unsignedLong "unsigned long long" "unsigned long long";
+
+  integer "long long" "long long";
+
+  negativeInteger "long long" "long long";
+  nonPositiveInteger "long long" "long long";
+
+  positiveInteger "unsigned long long" "unsigned long long";
+  nonNegativeInteger "unsigned long long" "unsigned long long";
+
+  float float float;
+  double double double;
+  decimal double double;
+
+  string std::string;
+  normalizedString std::string;
+  token std::string;
+  Name std::string;
+  NMTOKEN std::string;
+  NCName std::string;
+  ID std::string;
+  IDREF std::string;
+  language std::string;
+  anyURI std::string;
+
+  NMTOKENS xml_schema::string_sequence;
+  IDREFS xml_schema::string_sequence;
+
+  QName xml_schema::qname;
+
+  base64Binary std::auto_ptr<xml_schema::buffer>
+               std::auto_ptr<xml_schema::buffer>;
+  hexBinary std::auto_ptr<xml_schema::buffer>
+            std::auto_ptr<xml_schema::buffer>;
+
+  date xml_schema::date;
+  dateTime xml_schema::date_time;
+  duration xml_schema::duration;
+  gDay xml_schema::gday;
+  gMonth xml_schema::gmonth;
+  gMonthDay xml_schema::gmonth_day;
+  gYear xml_schema::gyear;
+  gYearMonth xml_schema::gyear_month;
+  time xml_schema::time;
+}
+  
+ +

The last predefined rule maps anything that wasn't mapped by + previous rules to void:

+ +
+namespace .*
+{
+  .* void void;
+}
+  
+ + +

When you provide your own type maps with the + --type-map option, they are evaluated first. + This allows you to selectively override predefined rules.

+ +

REGEX AND SHELL QUOTING

+ +

When entering a regular expression argument in the shell + command line it is often necessary to use quoting (enclosing + the argument in " " or + ' ') in order to prevent the shell + from interpreting certain characters, for example, spaces as + argument separators and $ as variable + expansions.

+ +

Unfortunately it is hard to achieve this in a manner that is + portable across POSIX shells, such as those found on + GNU/Linux and UNIX, and Windows shell. For example, if you + use " " for quoting you will get a + wrong result with POSIX shells if your expression contains + $. The standard way of dealing with this + on POSIX systems is to use ' ' instead. + Unfortunately, Windows shell does not remove ' ' + from arguments when they are passed to applications. As a result you + may have to use ' ' for POSIX and + " " for Windows ($ is + not treated as a special character on Windows).

+ +

Alternatively, you can save regular expression options into + a file, one option per line, and use this file with the + --options-file option. With this approach + you don't need to worry about shell quoting.

+ +

DIAGNOSTICS

+ +

If the input file is not a valid W3C XML Schema definition, + xsd will issue diagnostic messages to STDERR + and exit with non-zero exit code.

+ +

BUGS

+ +

Send bug reports to the + xsd-users@codesynthesis.com mailing list.

+ + + + + + diff --git a/xsd/doc/xsd-parser-header.1 b/xsd/doc/xsd-parser-header.1 new file mode 100644 index 0000000..e0cf84e --- /dev/null +++ b/xsd/doc/xsd-parser-header.1 @@ -0,0 +1,4 @@ +\" +\" C++/Parser +\" +.SS cxx-parser command options diff --git a/xsd/doc/xsd-parser-header.xhtml b/xsd/doc/xsd-parser-header.xhtml new file mode 100644 index 0000000..94fa2c1 --- /dev/null +++ b/xsd/doc/xsd-parser-header.xhtml @@ -0,0 +1 @@ +

CXX-PARSER COMMAND OPTIONS

diff --git a/xsd/doc/xsd-prologue.1 b/xsd/doc/xsd-prologue.1 new file mode 100644 index 0000000..f5c93b8 --- /dev/null +++ b/xsd/doc/xsd-prologue.1 @@ -0,0 +1,119 @@ +.\" Process this file with +.\" groff -man -Tascii xsd.1 +.\" +.TH XSD 1 "July 2014" "XSD 4.0.0" +.SH NAME +xsd \- W3C XML Schema to C++ Compiler +.\" +.\" +.\" +.\"-------------------------------------------------------------------- +.SH SYNOPSIS +.\"-------------------------------------------------------------------- +.B xsd +.I command +.B [ +.I options +.B ] +.I file +.B [ +.I file +.B ...] +.in +.B xsd help +.B [ +.I command +.B ] +.in +.B xsd version +.\" +.\" +.\" +.\"-------------------------------------------------------------------- +.SH DESCRIPTION +.\"-------------------------------------------------------------------- +.B xsd +generates vocabulary-specific, statically-typed C++ mapping from W3C XML +Schema definitions. Particular mapping to produce is selected by a +.IR command . +Each mapping has a number of mapping-specific +.I options +that should appear, if any, after the +.IR command . +Input files should be W3C XML Schema definitions. The exact set of the +generated files depends on the selected mapping and options. +.\" +.\" +.\" +.\"-------------------------------------------------------------------- +.SH COMMANDS +.\"-------------------------------------------------------------------- +.IP \fBcxx-tree\fR +Generate the C++/Tree mapping. For each input file in the form +.B name.xsd +the following C++ files are generated: +.B name.hxx +(header file), +.B name.ixx +(inline file, generated only if the +.B --generate-inline +option is specified), +.B name.cxx +(source file), and +.B name-fwd.hxx +(forward declaration file, generated only if the +.B --generate-forward +option is specified). + +.IP \fBcxx-parser\fR +Generate the C++/Parser mapping. For each input file in the form +.B name.xsd +the following C++ files are generated: +.B name-pskel.hxx +(parser skeleton header file), +.B name-pskel.ixx +(parser skeleton inline file, generated only if the +.B --generate-inline +option is specified), and +.B name-pskel.cxx +(parser skeleton source file). If the +.B --generate-noop-impl +or +.B --generate-print-impl +option is specified, the following additional sample implementation files +are generated: +.B name-pimpl.hxx +(parser implementation header file) and +.B name-pimpl.cxx +(parser implementation source file). If the +.B --generate-test-driver +option is specified, the additional +.B name-driver.cxx +test driver file is generated. + +.IP \fBhelp\fR +Print usage information and exit. Use +.PP +.RS +.RS 3 +.B xsd help +.I command +.RE +.PP +for command-specific help. +.RE +.IP \fBversion\fR +Print version and exit. +.\"-------------------------------------------------------------------- +.SH OPTIONS +.\"-------------------------------------------------------------------- +Command-specific +.IR options , +if any, should appear after the corresponding +.IR command . + +.\" +.\" Common options. +.\" +.SS common options +. diff --git a/xsd/doc/xsd-prologue.xhtml b/xsd/doc/xsd-prologue.xhtml new file mode 100644 index 0000000..4be8de7 --- /dev/null +++ b/xsd/doc/xsd-prologue.xhtml @@ -0,0 +1,120 @@ + + + + + + XSD 4.0.0 Compiler Command Line Manual + + + + + + + + + + + +
+
+ +

NAME

+ +

xsd - W3C XML Schema to C++ Compiler

+ +

SYNOPSIS

+ +
+
xsd command [options] file [file ...]
+
xsd help [command]
+
xsd version
+
+ +

DESCRIPTION

+ +

xsd generates vocabulary-specific, statically-typed + C++ mapping from W3C XML Schema definitions. Particular mapping to + produce is selected by a command. Each mapping has + a number of mapping-specific options that should + appear, if any, after the command. Input files should + be W3C XML Schema definitions. The exact set of the generated files depends + on the selected mapping and options.

+ +

COMMANDS

+ +
+
cxx-tree
+
Generate the C++/Tree mapping. For each input file in the form + name.xsd the following C++ files are generated: + name.hxx (header file), + name.ixx (inline file, generated only if the + --generate-inline option is specified), + name.cxx (source file), and + name-fwd.hxx (forward declaration file, generated + only if the --generate-forward option is + specified).
+ +
cxx-parser
+
Generate the C++/Parser mapping. For each input file in the form + name.xsd the following C++ files are generated: + name-pskel.hxx (parser skeleton header file), + name-pskel.ixx (parser skeleton inline file, + generated only if the --generate-inline + option is specified), and + name-pskel.cxx (parser skeleton source file). + If the --generate-noop-impl or + --generate-print-impl option is specified, + the following additional sample implementation files are generated: + name-pimpl.hxx (parser implementation header + file) and + name-pimpl.cxx (parser implementation source + file). If the --generate-test-driver option + is specified, the additional name-driver.cxx + test driver file is generated.
+ +
help
+
Print usage information and exit. Use +

xsd help command

+ for command-specific help. +
+ +
version
+
Print version and exit.
+
+ +

OPTIONS

+ +

Command-specific options, if any, should appear + after the corresponding command.

+ +

COMMON OPTIONS

diff --git a/xsd/doc/xsd-tree-header.1 b/xsd/doc/xsd-tree-header.1 new file mode 100644 index 0000000..b9146a7 --- /dev/null +++ b/xsd/doc/xsd-tree-header.1 @@ -0,0 +1,4 @@ +.\" +.\" C++/Tree options. +.\" +.SS cxx-tree command options diff --git a/xsd/doc/xsd-tree-header.xhtml b/xsd/doc/xsd-tree-header.xhtml new file mode 100644 index 0000000..73f9c99 --- /dev/null +++ b/xsd/doc/xsd-tree-header.xhtml @@ -0,0 +1 @@ +

CXX-TREE COMMAND OPTIONS

diff --git a/xsd/doc/xsd.1 b/xsd/doc/xsd.1 new file mode 100644 index 0000000..dc5b38a --- /dev/null +++ b/xsd/doc/xsd.1 @@ -0,0 +1,1648 @@ +.\" Process this file with +.\" groff -man -Tascii xsd.1 +.\" +.TH XSD 1 "July 2014" "XSD 4.0.0" +.SH NAME +xsd \- W3C XML Schema to C++ Compiler +.\" +.\" +.\" +.\"-------------------------------------------------------------------- +.SH SYNOPSIS +.\"-------------------------------------------------------------------- +.B xsd +.I command +.B [ +.I options +.B ] +.I file +.B [ +.I file +.B ...] +.in +.B xsd help +.B [ +.I command +.B ] +.in +.B xsd version +.\" +.\" +.\" +.\"-------------------------------------------------------------------- +.SH DESCRIPTION +.\"-------------------------------------------------------------------- +.B xsd +generates vocabulary-specific, statically-typed C++ mapping from W3C XML +Schema definitions. Particular mapping to produce is selected by a +.IR command . +Each mapping has a number of mapping-specific +.I options +that should appear, if any, after the +.IR command . +Input files should be W3C XML Schema definitions. The exact set of the +generated files depends on the selected mapping and options. +.\" +.\" +.\" +.\"-------------------------------------------------------------------- +.SH COMMANDS +.\"-------------------------------------------------------------------- +.IP \fBcxx-tree\fR +Generate the C++/Tree mapping. For each input file in the form +.B name.xsd +the following C++ files are generated: +.B name.hxx +(header file), +.B name.ixx +(inline file, generated only if the +.B --generate-inline +option is specified), +.B name.cxx +(source file), and +.B name-fwd.hxx +(forward declaration file, generated only if the +.B --generate-forward +option is specified). + +.IP \fBcxx-parser\fR +Generate the C++/Parser mapping. For each input file in the form +.B name.xsd +the following C++ files are generated: +.B name-pskel.hxx +(parser skeleton header file), +.B name-pskel.ixx +(parser skeleton inline file, generated only if the +.B --generate-inline +option is specified), and +.B name-pskel.cxx +(parser skeleton source file). If the +.B --generate-noop-impl +or +.B --generate-print-impl +option is specified, the following additional sample implementation files +are generated: +.B name-pimpl.hxx +(parser implementation header file) and +.B name-pimpl.cxx +(parser implementation source file). If the +.B --generate-test-driver +option is specified, the additional +.B name-driver.cxx +test driver file is generated. + +.IP \fBhelp\fR +Print usage information and exit. Use +.PP +.RS +.RS 3 +.B xsd help +.I command +.RE +.PP +for command-specific help. +.RE +.IP \fBversion\fR +Print version and exit. +.\"-------------------------------------------------------------------- +.SH OPTIONS +.\"-------------------------------------------------------------------- +Command-specific +.IR options , +if any, should appear after the corresponding +.IR command . + +.\" +.\" Common options. +.\" +.SS common options +. +.\" +.\" The following documentation was generated by CLI, a command +.\" line interface compiler for C++. +.\" +.IP "\fB--std\fP \fIversion\fP" +Specify the C++ standard that the generated code should conform to\. Valid +values are \fBc++98\fP (default) and \fBc++11\fP\. + +The C++ standard affects various aspects of the generated code that are +discussed in more detail in various mapping-specific documentation\. +Overall, when C++11 is selected, the generated code relies on the move +semantics and uses \fBstd::unique_ptr\fP instead of deprecated +\fBstd::auto_ptr\fP\. + +When the C++11 mode is selected, you normally don't need to perform any +extra steps other than enable C++11 in your C++ compiler, if required\. The +XSD compiler will automatically add the necessary macro defines to the +generated header files that will switch the header-only XSD runtime library +(\fBlibxsd\fP) to the C++11 mode\. However, if you include any of the XSD +runtime headers directly in your application (normally you just include the +generated headers), then you will need to define the \fBXSD_CXX11\fP macro +for your entire project\. + +.IP "\fB--char-type\fP \fItype\fP" +Generate code using the provided character \fItype\fP instead of the default +\fBchar\fP\. Valid values are \fBchar\fP and \fBwchar_t\fP\. + +.IP "\fB--char-encoding\fP \fIenc\fP" +Specify the character encoding that should be used in the generated code\. +Valid values for the \fBchar\fP character type are \fButf8\fP (default), +\fBiso8859-1\fP, \fBlcp\fP (Xerces-C++ local code page), and \fBcustom\fP\. +If you pass \fBcustom\fP as the value then you will need to include the +transcoder implementation header for your encoding at the beginning of the +generated header files (see the \fB--hxx-prologue\fP option)\. + +For the \fBwchar_t\fP character type the only valid value is \fBauto\fP and +the encoding is automatically selected between UTF-16 and UTF-32/UCS-4, +depending on the \fBwchar_t\fP type size\. + +.IP "\fB--output-dir\fP \fIdir\fP" +Write generated files to \fIdir\fP instead of the current directory\. + +.IP "\fB--generate-inline\fP" +Generate simple functions inline\. This option triggers creation of the +inline file\. + +.IP "\fB--generate-xml-schema\fP" +Generate a C++ header file as if the schema being compiled defines the XML +Schema namespace\. For the C++/Tree mapping, the resulting file will contain +definitions for all XML Schema built-in types\. For the C++/Parser mapping, +the resulting file will contain definitions for all the parser skeletons and +implementations corresponding to the XML Schema built-in types\. + +The schema file provided to the compiler need not exist and is only used to +derive the name of the resulting header file\. Use the +\fB--extern-xml-schema\fP option to include this file in the generated files +for other schemas\. + +.IP "\fB--extern-xml-schema\fP \fIfile\fP" +Include a header file derived from \fIfile\fP instead of generating the XML +Schema namespace mapping inline\. The provided file need not exist and is +only used to derive the name of the included header file\. Use the +\fB--generate-xml-schema\fP option to generate this header file\. + +.IP "\fB--namespace-map\fP \fIxns\fP=\fIcns\fP" +Map XML Schema namespace \fIxns\fP to C++ namespace \fIcns\fP\. Repeat this +option to specify mapping for more than one XML Schema namespace\. For +example, the following option: + +\fB--namespace-map http://example\.com/foo/bar=foo::bar\fP + +Will map the \fBhttp://example\.com/foo/bar\fP XML Schema namespace to the +\fBfoo::bar\fP C++ namespace\. + +.IP "\fB--namespace-regex\fP \fIregex\fP" +Add \fIregex\fP to the list of regular expressions used to translate XML +Schema namespace names to C++ namespace names\. \fIregex\fP is a Perl-like +regular expression in the form +\fB/\fP\fIpattern\fP\fB/\fP\fIreplacement\fP\fB/\fP\. Any character can be +used as a delimiter instead of \fB/\fP\. Escaping of the delimiter character +in \fIpattern\fP or \fIreplacement\fP is not supported\. + +All the regular expressions are pushed into a stack with the last specified +expression considered first\. The first match that succeeds is used\. +Regular expressions are applied to a string in the form + +\fIfilename\fP \fInamespace\fP + +For example, if you have file \fBhello\.xsd\fP with namespace +\fBhttp://example\.com/hello\fP and you run \fBxsd\fP on this file, then the +string in question will be: + +\fBhello\.xsd\. http://example\.com/hello\fP + +For the built-in XML Schema namespace the string is: + +\fBXMLSchema\.xsd http://www\.w3\.org/2001/XMLSchema\fP + +The following three steps are performed for each regular expression until +the match is found: + +1\. The expression is applied and if the result is empty the next expression +is considered\. + +2\. All \fB/\fP are replaced with \fB::\fP\. + +3\. The result is verified to be a valid C++ scope name (e\.g\., +\fBfoo::bar\fP)\. If this test succeeds, the result is used as a C++ +namespace name\. + +As an example, the following expression maps XML Schema namespaces in the +form \fBhttp://example\.com/foo/bar\fP to C++ namespaces in the form +\fBfoo::bar\fP: + +\fB%\.* http://example\.com/(\.+)%$1%\fP + +See also the REGEX AND SHELL QUOTING section below\. + +.IP "\fB--namespace-regex-trace\fP" +Trace the process of applying regular expressions specified with the +\fB--namespace-regex\fP option\. Use this option to find out why your +regular expressions don't do what you expected them to do\. + +.IP "\fB--reserved-name\fP \fIn\fP[=\fIr\fP]" +Add name \fIn\fP to the list of names that should not be used as +identifiers\. The name can optionally be followed by \fB=\fP and the +replacement name \fIr\fP that should be used instead\. All the C++ keywords +are already in this list\. + +.IP "\fB--include-with-brackets\fP" +Use angle brackets (<>) instead of quotes ("") in generated \fB#include\fP +directives\. + +.IP "\fB--include-prefix\fP \fIprefix\fP" +Add \fIprefix\fP to generated \fB#include\fP directive paths\. + +For example, if you had the following import element in your schema + +\fB\fP + +and compiled this fragment with \fB--include-prefix schemas/\fP, then the +include directive in the generated code would be: + +\fB#include "schemas/base\.hxx"\fP + +.IP "\fB--include-regex\fP \fIregex\fP" +Add \fIregex\fP to the list of regular expressions used to transform +\fB#include\fP directive paths\. \fIregex\fP is a Perl-like regular +expression in the form \fB/\fP\fIpattern\fP\fB/\fP\fIreplacement\fP\fB/\fP\. +Any character can be used as a delimiter instead of \fB/\fP\. Escaping of +the delimiter character in \fIpattern\fP or \fIreplacement\fP is not +supported\. + +All the regular expressions are pushed into a stack with the last specified +expression considered first\. The first match that succeeds is used\. + +As an example, the following expression transforms paths in the form +\fBschemas/foo/bar\fP to paths in the form \fBgenerated/foo/bar\fP: + +\fB%schemas/(\.+)%generated/$1%\fP + +See also the REGEX AND SHELL QUOTING section below\. + +.IP "\fB--include-regex-trace\fP" +Trace the process of applying regular expressions specified with the +\fB--include-regex\fP option\. Use this option to find out why your regular +expressions don't do what you expected them to do\. + +.IP "\fB--guard-prefix\fP \fIprefix\fP" +Add \fIprefix\fP to generated header inclusion guards\. The prefix is +transformed to upper case and characters that are illegal in a preprocessor +macro name are replaced with underscores\. If this option is not specified +then the directory part of the input schema file is used as a prefix\. + +.IP "\fB--hxx-suffix\fP \fIsuffix\fP" +Use the provided \fIsuffix\fP instead of the default \fB\.hxx\fP to +construct the name of the header file\. Note that this suffix is also used +to construct names of header files corresponding to included/imported +schemas\. + +.IP "\fB--ixx-suffix\fP \fIsuffix\fP" +Use the provided \fIsuffix\fP instead of the default \fB\.ixx\fP to +construct the name of the inline file\. + +.IP "\fB--cxx-suffix\fP \fIsuffix\fP" +Use the provided \fIsuffix\fP instead of the default \fB\.cxx\fP to +construct the name of the source file\. + +.IP "\fB--fwd-suffix\fP \fIsuffix\fP" +Use the provided \fIsuffix\fP instead of the default \fB-fwd\.hxx\fP to +construct the name of the forward declaration file\. + +.IP "\fB--hxx-regex\fP \fIregex\fP" +Use the provided expression to construct the name of the header file\. +\fIregex\fP is a Perl-like regular expression in the form +\fB/\fP\fIpattern\fP\fB/\fP\fIreplacement\fP\fB/\fP\. Note that this +expression is also used to construct names of header files corresponding to +included/imported schemas\. See also the REGEX AND SHELL QUOTING section +below\. + +.IP "\fB--ixx-regex\fP \fIregex\fP" +Use the provided expression to construct the name of the inline file\. +\fIregex\fP is a Perl-like regular expression in the form +\fB/\fP\fIpattern\fP\fB/\fP\fIreplacement\fP\fB/\fP\. See also the REGEX AND +SHELL QUOTING section below\. + +.IP "\fB--cxx-regex\fP \fIregex\fP" +Use the provided expression to construct the name of the source file\. +\fIregex\fP is a Perl-like regular expression in the form +\fB/\fP\fIpattern\fP\fB/\fP\fIreplacement\fP\fB/\fP\. See also the REGEX AND +SHELL QUOTING section below\. + +.IP "\fB--fwd-regex\fP \fIregex\fP" +Use the provided expression to construct the name of the forward declaration +file\. \fIregex\fP is a Perl-like regular expression in the form +\fB/\fP\fIpattern\fP\fB/\fP\fIreplacement\fP\fB/\fP\. See also the REGEX AND +SHELL QUOTING section below\. + +.IP "\fB--hxx-prologue\fP \fItext\fP" +Insert \fItext\fP at the beginning of the header file\. + +.IP "\fB--ixx-prologue\fP \fItext\fP" +Insert \fItext\fP at the beginning of the inline file\. + +.IP "\fB--cxx-prologue\fP \fItext\fP" +Insert \fItext\fP at the beginning of the source file\. + +.IP "\fB--fwd-prologue\fP \fItext\fP" +Insert \fItext\fP at the beginning of the forward declaration file\. + +.IP "\fB--prologue\fP \fItext\fP" +Insert \fItext\fP at the beginning of each generated file for which there is +no file-specific prologue\. + +.IP "\fB--hxx-epilogue\fP \fItext\fP" +Insert \fItext\fP at the end of the header file\. + +.IP "\fB--ixx-epilogue\fP \fItext\fP" +Insert \fItext\fP at the end of the inline file\. + +.IP "\fB--cxx-epilogue\fP \fItext\fP" +Insert \fItext\fP at the end of the source file\. + +.IP "\fB--fwd-epilogue\fP \fItext\fP" +Insert \fItext\fP at the end of the forward declaration file\. + +.IP "\fB--epilogue\fP \fItext\fP" +Insert \fItext\fP at the end of each generated file for which there is no +file-specific epilogue\. + +.IP "\fB--hxx-prologue-file\fP \fIfile\fP" +Insert the content of the \fIfile\fP at the beginning of the header file\. + +.IP "\fB--ixx-prologue-file\fP \fIfile\fP" +Insert the content of the \fIfile\fP at the beginning of the inline file\. + +.IP "\fB--cxx-prologue-file\fP \fIfile\fP" +Insert the content of the \fIfile\fP at the beginning of the source file\. + +.IP "\fB--fwd-prologue-file\fP \fIfile\fP" +Insert the content of the \fIfile\fP at the beginning of the forward +declaration file\. + +.IP "\fB--prologue-file\fP \fIfile\fP" +Insert the content of the \fIfile\fP at the beginning of each generated file +for which there is no file-specific prologue file\. + +.IP "\fB--hxx-epilogue-file\fP \fIfile\fP" +Insert the content of the \fIfile\fP at the end of the header file\. + +.IP "\fB--ixx-epilogue-file\fP \fIfile\fP" +Insert the content of the \fIfile\fP at the end of the inline file\. + +.IP "\fB--cxx-epilogue-file\fP \fIfile\fP" +Insert the content of the \fIfile\fP at the end of the source file\. + +.IP "\fB--fwd-epilogue-file\fP \fIfile\fP" +Insert the content of the \fIfile\fP at the end of the forward declaration +file\. + +.IP "\fB--epilogue-file\fP \fIfile\fP" +Insert the content of the \fIfile\fP at the end of each generated file for +which there is no file-specific epilogue file\. + +.IP "\fB--export-symbol\fP \fIsymbol\fP" +Insert \fIsymbol\fP in places where DLL export/import control statements +(\fB__declspec(dllexport/dllimport)\fP) are necessary\. + +.IP "\fB--export-xml-schema\fP" +Export/import types in the XML Schema namespace using the export symbol +provided with the \fB--export-symbol\fP option\. The \fBXSD_NO_EXPORT\fP +macro can be used to omit this code during C++ compilation, which may be +useful if you would like to use the same generated code across multiple +platforms\. + +.IP "\fB--export-maps\fP" +Export polymorphism support maps from a Win32 DLL into which this generated +code is placed\. This is necessary when your type hierarchy is split across +several DLLs since otherwise each DLL will have its own set of maps\. In +this situation the generated code for the DLL which contains base types +and/or substitution group heads should be compiled with this option and the +generated code for all other DLLs should be compiled with +\fB--import-maps\fP\. This option is only valid together with +\fB--generate-polymorphic\fP\. The \fBXSD_NO_EXPORT\fP macro can be used to +omit this code during C++ compilation, which may be useful if you would like +to use the same generated code across multiple platforms\. + +.IP "\fB--import-maps\fP" +Import polymorphism support maps to a Win32 DLL or executable into which +this generated code is linked\. See the \fB--export-maps\fP option +documentation for details\. This options is only valid together with +\fB--generate-polymorphic\fP\. The \fBXSD_NO_EXPORT\fP macro can be used to +omit this code during C++ compilation, which may be useful if you would like +to use the same generated code across multiple platforms\. + +.IP "\fB--generate-dep\fP" +Generate \fBmake\fP dependency information\. This option triggers the +creation of the \fB\.d\fP file containing the dependencies of the generated +files on the main schema file as well as all the schema files that it +includes/imports, transitively\. This dependency file is then normally +included into the main \fBmakefile\fP to implement automatic dependency +tracking\. + +Note also that automatic dependency generation is not supported in the +file-per-type mode (\fB--file-per-type\fP)\. In this case, all the generated +files are produced with a single compiler invocation and depend on all the +schemas\. As a result, it is easier to establish such a dependency manually, +perhaps with the help of the \fB--file-list*\fP options\. + +.IP "\fB--generate-dep-only\fP" +Generate \fBmake\fP dependency information only\. + +.IP "\fB--dep-phony\fP" +Generate phony targets for included/imported schema files, causing each to +depend on nothing\. Such dummy rules work around \fBmake\fP errors caused by +the removal of schema files without also updating the dependency file to +match\. + +.IP "\fB--dep-target\fP \fItarget\fP" +Change the target of the dependency rule\. By default it contains all the +generated C++ files as well as the dependency file itself, without any +directory prefixes\. If you require multiple targets, then you can specify +them as a single, space-separated argument or you can repeat this option +multiple times\. + +.IP "\fB--dep-suffix\fP \fIsuffix\fP" +Use the provided \fIsuffix\fP instead of the default \fB\.d\fP to construct +the name of the dependency file\. + +.IP "\fB--dep-regex\fP \fIregex\fP" +Use the provided expression to construct the name of the dependency file\. +\fIregex\fP is a Perl-like regular expression in the form +\fB/\fP\fIpattern\fP\fB/\fP\fIreplacement\fP\fB/\fP\. See also the REGEX AND +SHELL QUOTING section below\. + +.IP "\fB--disable-warning\fP \fIwarn\fP" +Disable printing warning with id \fIwarn\fP\. If \fBall\fP is specified for +the warning id then all warnings are disabled\. + +.IP "\fB--options-file\fP \fIfile\fP" +Read additional options from \fIfile\fP\. Each option should appearing on a +separate line optionally followed by space and an option value\. Empty lines +and lines starting with \fB#\fP are ignored\. Option values can be enclosed +in double (\fB"\fP) or single (\fB'\fP) quotes to preserve leading and +trailing whitespaces as well as to specify empty values\. If the value +itself contains trailing or leading quotes, enclose it with an extra pair of +quotes, for example \fB'"x"'\fP\. Non-leading and non-trailing quotes are +interpreted as being part of the option value\. + +The semantics of providing options in a file is equivalent to providing the +same set of options in the same order on the command line at the point where +the \fB--options-file\fP option is specified except that the shell escaping +and quoting is not required\. You can repeat this option to specify more +than one options file\. + +.IP "\fB--show-sloc\fP" +Show the number of generated physical source lines of code (SLOC)\. + +.IP "\fB--sloc-limit\fP \fInum\fP" +Check that the number of generated physical source lines of code (SLOC) does +not exceed \fInum\fP\. + +.IP "\fB--proprietary-license\fP" +Indicate that the generated code is licensed under a proprietary license +instead of the GPL\. + +.IP "\fB--custom-literals\fP \fIfile\fP" +Load custom XML string to C++ literal mappings from \fIfile\fP\. This +mechanism can be useful if you are using a custom character encoding and +some of the strings in your schemas, for example element/attribute names or +enumeration values, contain non-ASCII characters\. In this case you will +need to provide a custom mapping to C++ literals for such strings\. The +format of this file is specified in the \fBcustom-literals\.xsd\fP XML +Schema file that can be found in the documentation directory\. + +.IP "\fB--preserve-anonymous\fP" +Preserve anonymous types\. By default anonymous types are automatically +named with names derived from the enclosing elements/attributes\. Because +mappings implemented by this compiler require all types to be named, this +option is only useful if you want to make sure your schemas don't have +anonymous types\. + +.IP "\fB--show-anonymous\fP" +Show elements and attributes that are of anonymous types\. This option only +makes sense together with the \fB--preserve-anonymous\fP option\. + +.IP "\fB--anonymous-regex\fP \fIregex\fP" +Add \fIregex\fP to the list of regular expressions used to derive names for +anonymous types from the enclosing attributes/elements\. \fIregex\fP is a +Perl-like regular expression in the form +\fB/\fP\fIpattern\fP\fB/\fP\fIreplacement\fP\fB/\fP\. Any character can be +used as a delimiter instead of \fB/\fP\. Escaping of the delimiter character +in \fIpattern\fP or \fIreplacement\fP is not supported\. + +All the regular expressions are pushed into a stack with the last specified +expression considered first\. The first match that succeeds is used\. +Regular expressions are applied to a string in the form + +\fIfilename\fP \fInamespace\fP \fIxpath\fP + +For instance: + +\fBhello\.xsd http://example\.com/hello element\fP + +\fBhello\.xsd http://example\.com/hello type/element\fP + +As an example, the following expression makes all the derived names start +with capital letters\. This could be useful when your naming convention +requires type names to start with capital letters: + +\fB%\.* \.* (\.+/)*(\.+)%\eu$2%\fP + +See also the REGEX AND SHELL QUOTING section below\. + +.IP "\fB--anonymous-regex-trace\fP" +Trace the process of applying regular expressions specified with the +\fB--anonymous-regex\fP option\. Use this option to find out why your +regular expressions don't do what you expected them to do\. + +.IP "\fB--location-map\fP \fIol\fP=\fInl\fP" +Map the original schema location \fIol\fP that is specified in the XML +Schema include or import elements to new schema location \fInl\fP\. Repeat +this option to map more than one schema location\. For example, the +following option maps the \fBhttp://example\.com/foo\.xsd\fP URL to the +\fBfoo\.xsd\fP local file\. + +\fB--location-map http://example\.com/foo\.xsd=foo\.xsd\fP + +.IP "\fB--location-regex\fP \fIregex\fP" +Add \fIregex\fP to the list of regular expressions used to map schema +locations that are specified in the XML Schema include or import elements\. +\fIregex\fP is a Perl-like regular expression in the form +\fB/\fP\fIpattern\fP\fB/\fP\fIreplacement\fP\fB/\fP\. Any character can be +used as a delimiter instead of \fB/\fP\. Escaping of the delimiter character +in \fIpattern\fP or \fIreplacement\fP is not supported\. All the regular +expressions are pushed into a stack with the last specified expression +considered first\. The first match that succeeds is used\. + +For example, the following expression maps URL locations in the form +\fBhttp://example\.com/foo/bar\.xsd\fP to local files in the form +\fBbar\.xsd\fP: + +\fB%http://\.+/(\.+)%$1%\fP + +See also the REGEX AND SHELL QUOTING section below\. + +.IP "\fB--location-regex-trace\fP" +Trace the process of applying regular expressions specified with the +\fB--location-regex\fP option\. Use this option to find out why your regular +expressions don't do what you expected them to do\. + +.IP "\fB--file-per-type\fP" +Generate a separate set of C++ files for each type defined in XML Schema\. +Note that in this mode you only need to compile the root schema(s) and the +code will be generated for all included and imported schemas\. This +compilation mode is primarily useful when some of your schemas cannot be +compiled separately or have cyclic dependencies which involve type +inheritance\. Other options related to this mode are: +\fB--type-file-regex\fP, \fB--schema-file-regex\fP, \fB--fat-type-file\fP, +and \fB--file-list\fP\. + +.IP "\fB--type-file-regex\fP \fIregex\fP" +Add \fIregex\fP to the list of regular expressions used to translate type +names to file names when the \fB--file-per-type\fP option is specified\. +\fIregex\fP is a Perl-like regular expression in the form +\fB/\fP\fIpattern\fP\fB/\fP\fIreplacement\fP\fB/\fP\. Any character can be +used as a delimiter instead of \fB/\fP\. Escaping of the delimiter character +in \fIpattern\fP or \fIreplacement\fP is not supported\. All the regular +expressions are pushed into a stack with the last specified expression +considered first\. The first match that succeeds is used\. Regular +expressions are applied to a string in the form + +\fInamespace\fP \fItype-name\fP + +For example, the following expression maps type \fBfoo\fP that is defined in +the \fBhttp://example\.com/bar\fP namespace to file name \fBbar-foo\fP: + +\fB%http://example\.com/(\.+) (\.+)%$1-$2%\fP + +See also the REGEX AND SHELL QUOTING section below\. + +.IP "\fB--type-file-regex-trace\fP" +Trace the process of applying regular expressions specified with the +\fB--type-file-regex\fP option\. Use this option to find out why your +regular expressions don't do what you expected them to do\. + +.IP "\fB--schema-file-regex\fP \fIregex\fP" +Add \fIregex\fP to the list of regular expressions used to translate schema +file names when the \fB--file-per-type\fP option is specified\. \fIregex\fP +is a Perl-like regular expression in the form +\fB/\fP\fIpattern\fP\fB/\fP\fIreplacement\fP\fB/\fP\. Any character can be +used as a delimiter instead of \fB/\fP\. Escaping of the delimiter character +in \fIpattern\fP or \fIreplacement\fP is not supported\. All the regular +expressions are pushed into a stack with the last specified expression +considered first\. The first match that succeeds is used\. Regular +Expressions are applied to the absolute filesystem path of a schema file and +the result, including the directory part, if any, is used to derive the +\fB#include\fP directive paths as well as the generated C++ file paths\. +This option, along with \fB--type-file-regex\fP are primarily useful to +place the generated files into subdirectories or to resolve file name +conflicts\. + +For example, the following expression maps schema files in the +\fBfoo/1\.0\.0/\fP subdirectory to the files in the \fBfoo/\fP +subdirectory\. As a result, the \fB#include\fP directive paths for such +schemas will be in the \fBfoo/schema\.hxx\fP form and the generated C++ +files will be placed into the \fBfoo/\fP subdirectory: + +\fB%\.*/foo/1\.0\.0/(\.+)%foo/$1%\fP + +See also the REGEX AND SHELL QUOTING section below\. + +.IP "\fB--schema-file-regex-trace\fP" +Trace the process of applying regular expressions specified with the +\fB--schema-file-regex\fP option\. Use this option to find out why your +regular expressions don't do what you expected them to do\. + +.IP "\fB--fat-type-file\fP" +Generate code corresponding to global elements into type files instead of +schema files when the \fB--type-file-regex\fP option is specified\. This +option is primarily useful when trying to minimize the amount of object code +that is linked to an executable by packaging compiled generated code into a +static (archive) library\. + +.IP "\fB--file-list\fP \fIfile\fP" +Write a list of generated C++ files to \fIfile\fP\. This option is primarily +useful in the file-per-type compilation mode (\fB--file-per-type\fP) to +create a list of generated C++ files, for example, as a makefile fragment\. + +.IP "\fB--file-list-prologue\fP \fItext\fP" +Insert \fItext\fP at the beginning of the file list\. As a convenience, all +occurrences of the \fB\en\fP character sequence in \fItext\fP are replaced +with new lines\. This option can, for example, be used to assign the +generated file list to a makefile variable\. + +.IP "\fB--file-list-epilogue\fP \fItext\fP" +Insert \fItext\fP at the end of the file list\. As a convenience, all +occurrences of the \fB\en\fP character sequence in \fItext\fP are replaced +with new lines\. + +.IP "\fB--file-list-delim\fP \fItext\fP" +Delimit file names written to the file list with \fItext\fP instead of new +lines\. As a convenience, all occurrences of the \fB\en\fP character +sequence in \fItext\fP are replaced with new lines\. + +.\" +.\" C++/Tree options. +.\" +.SS cxx-tree command options +.\" +.\" The following documentation was generated by CLI, a command +.\" line interface compiler for C++. +.\" +.IP "\fB--generate-polymorphic\fP" +Generate polymorphism-aware code\. Specify this option if you use +substitution groups or \fBxsi:type\fP\. Use the \fB--polymorphic-type\fP or +\fB--polymorphic-type-all\fP option to specify which type hierarchies are +polymorphic\. + +.IP "\fB--polymorphic-type\fP \fItype\fP" +Indicate that \fItype\fP is a root of a polymorphic type hierarchy\. The +compiler can often automatically determine which types are polymorphic based +on the substitution group declarations\. However, you may need to use this +option if you are not using substitution groups or if substitution groups +are defined in another schema\. You need to specify this option when +compiling every schema file that references \fItype\fP\. The \fItype\fP +argument is an XML Schema type name that can be optionally qualified with a +namespace in the \fInamespace\fP\fB#\fP\fIname\fP form\. + +.IP "\fB--polymorphic-type-all\fP" +Indicate that all types should be treated as polymorphic\. + +.IP "\fB--polymorphic-plate\fP \fInum\fP" +Specify the polymorphic map plate the generated code should register on\. +This functionality is primarily useful to segregate multiple schemas that +define the same polymorphic types\. + +.IP "\fB--ordered-type\fP \fItype\fP" +Indicate that element order in \fItype\fP is significant\. An example would +be a complex type with unbounded choice as a content model where the element +order in XML has application-specific semantics\. For ordered types the +compiler generates a special container data member and a corresponding set +of accessors and modifiers that are used to capture the order of elements +and, for mixed content, of text\. + +The \fItype\fP argument is an XML Schema type name that can be optionally +qualified with a namespace in the \fInamespace\fP\fB#\fP\fIname\fP form\. +Note also that you will need to specify this option when compiling every +schema file that has other ordered types derived from this type\. + +.IP "\fB--ordered-type-derived\fP" +Automatically treat types derived from ordered bases as also ordered\. This +is primarily useful if you would like to be able to iterate over the +complete content using the content order container\. + +.IP "\fB--ordered-type-mixed\fP" +Automatically treat complex types with mixed content as ordered\. + +.IP "\fB--ordered-type-all\fP" +Indicate that element order in all types is significant\. + +.IP "\fB--order-container\fP \fItype\fP" +Specify a custom class template that should be used as a container for the +content order in ordered types instead of the default \fBstd::vector\fP\. +See \fB--ordered-type\fP for more information on ordered type\. This option +is primarily useful if you need to perform more complex lookups in the +content order container, for example by element id\. In this case, a +container like Boost multi-index may be more convenient\. Note that if using +a custom container, you will also most likely need to include the relevant +headers using the \fB--hxx-prologue*\fP options\. + +.IP "\fB--generate-serialization\fP" +Generate serialization functions\. Serialization functions convert the +object model back to XML\. + +.IP "\fB--generate-ostream\fP" +Generate ostream insertion operators (\fBoperator<<\fP) for generated +types\. This allows one to easily print a fragment or the whole object model +for debugging or logging\. + +.IP "\fB--generate-doxygen\fP" +Generate documentation comments suitable for extraction by the Doxygen +documentation system\. Documentation from annotations is added to the +comments if present in the schema\. + +.IP "\fB--generate-comparison\fP" +Generate comparison operators (\fBoperator==\fP and \fBoperator!=\fP) for +complex types\. Comparison is performed member-wise\. + +.IP "\fB--generate-default-ctor\fP" +Generate default constructors even for types that have required members\. +Required members of an instance constructed using such a constructor are not +initialized and accessing them results in undefined behavior\. + +.IP "\fB--generate-from-base-ctor\fP" +Generate constructors that expect an instance of a base type followed by all +required members\. + +.IP "\fB--suppress-assignment\fP" +Suppress the generation of copy assignment operators for complex types\. If +this option is specified, the copy assignment operators for such types are +declared private and left unimplemented\. + +.IP "\fB--generate-detach\fP" +Generate detach functions for required elements and attributes\. Detach +functions for optional and sequence cardinalities are provided by the +respective containers\. These functions, for example, allow you to move +sub-trees in the object model either within the same tree or between +different trees\. + +.IP "\fB--generate-wildcard\fP" +Generate accessors and modifiers as well as parsing and serialization code +for XML Schema wildcards (\fBany\fP and \fBanyAttribute\fP)\. XML content +matched by wildcards is presented as DOM fragments\. Note that you need to +initialize the Xerces-C++ runtime if you are using this option\. + +.IP "\fB--generate-any-type\fP" +Extract and store content of the XML Schema \fBanyType\fP type as a DOM +fragment\. Note that you need to initialize the Xerces-C++ runtime if you +are using this option\. + +.IP "\fB--generate-insertion\fP \fIos\fP" +Generate data representation stream insertion operators for the \fIos\fP +output stream type\. Repeat this option to specify more than one stream +type\. The ACE CDR stream (\fBACE_OutputCDR\fP) and RPC XDR are recognized +by the compiler and the necessary \fB#include\fP directives are +automatically generated\. For custom stream types use the +\fB--hxx-prologue*\fP options to provide the necessary declarations\. + +.IP "\fB--generate-extraction\fP \fIis\fP" +Generate data representation stream extraction constructors for the \fIis\fP +input stream type\. Repeat this option to specify more than one stream +type\. The ACE CDR stream (\fBACE_InputCDR\fP) and RPC XDR are recognized by +the compiler and the necessary \fB#include\fP directives are automatically +generated\. For custom stream types use the \fB--hxx-prologue*\fP options to +provide the necessary declarations\. + +.IP "\fB--generate-forward\fP" +Generate a separate header file with forward declarations for the types +being generated\. + +.IP "\fB--suppress-parsing\fP" +Suppress the generation of the parsing functions and constructors\. Use this +option to reduce the generated code size when parsing from XML is not +needed\. + +.IP "\fB--generate-element-type\fP" +Generate types instead of parsing and serialization functions for root +elements\. This is primarily useful to distinguish object models with the +same root type but with different root elements\. + +.IP "\fB--generate-element-map\fP" +Generate a root element map that allows uniform parsing and serialization of +multiple root elements\. This option is only valid together with +\fB--generate-element-type\fP\. + +.IP "\fB--generate-intellisense\fP" +Generate workarounds for IntelliSense bugs in Visual Studio 2005 (8\.0)\. +When this option is used, the resulting code is slightly more verbose\. +IntelliSense in Visual Studio 2008 (9\.0) and later does not require these +workarounds\. Support for IntelliSense in Visual Studio 2003 (7\.1) is +improved with this option but is still incomplete\. + +.IP "\fB--omit-default-attributes\fP" +Omit attributes with default and fixed values from serialized XML +documents\. + +.IP "\fB--type-naming\fP \fIstyle\fP" +Specify the type naming convention that should be used in the generated +code\. Valid styles are \fBknr\fP (default), \fBucc\fP, and \fBjava\fP\. See +the NAMING CONVENTION section below for more information\. + +.IP "\fB--function-naming\fP \fIstyle\fP" +Specify the function naming convention that should be used in the generated +code\. Valid styles are \fBknr\fP (default), \fBlcc\fP, and \fBjava\fP\. See +the NAMING CONVENTION section below for more information\. + +.IP "\fB--type-regex\fP \fIregex\fP" +Add \fIregex\fP to the list of regular expressions used to translate XML +Schema type names to C++ type names\. See the NAMING CONVENTION section +below for more information\. + +.IP "\fB--accessor-regex\fP \fIregex\fP" +Add \fIregex\fP to the list of regular expressions used to translate XML +Schema names of elements/attributes to C++ accessor function names\. See the +NAMING CONVENTION section below for more information\. + +.IP "\fB--one-accessor-regex\fP \fIregex\fP" +Add \fIregex\fP to the list of regular expressions used to translate XML +Schema names of elements/attributes with cardinality one to C++ accessor +function names\. See the NAMING CONVENTION section below for more +information\. + +.IP "\fB--opt-accessor-regex\fP \fIregex\fP" +Add \fIregex\fP to the list of regular expressions used to translate XML +Schema names of elements/attributes with cardinality optional to C++ +accessor function names\. See the NAMING CONVENTION section below for more +information\. + +.IP "\fB--seq-accessor-regex\fP \fIregex\fP" +Add \fIregex\fP to the list of regular expressions used to translate XML +Schema names of elements/attributes with cardinality sequence to C++ +accessor function names\. See the NAMING CONVENTION section below for more +information\. + +.IP "\fB--modifier-regex\fP \fIregex\fP" +Add \fIregex\fP to the list of regular expressions used to translate XML +Schema names of elements/attributes to C++ modifier function names\. See the +NAMING CONVENTION section below for more information\. + +.IP "\fB--one-modifier-regex\fP \fIregex\fP" +Add \fIregex\fP to the list of regular expressions used to translate XML +Schema names of elements/attributes with cardinality one to C++ modifier +function names\. See the NAMING CONVENTION section below for more +information\. + +.IP "\fB--opt-modifier-regex\fP \fIregex\fP" +Add \fIregex\fP to the list of regular expressions used to translate XML +Schema names of elements/attributes with cardinality optional to C++ +modifier function names\. See the NAMING CONVENTION section below for more +information\. + +.IP "\fB--seq-modifier-regex\fP \fIregex\fP" +Add \fIregex\fP to the list of regular expressions used to translate XML +Schema names of elements/attributes with cardinality sequence to C++ +modifier function names\. See the NAMING CONVENTION section below for more +information\. + +.IP "\fB--parser-regex\fP \fIregex\fP" +Add \fIregex\fP to the list of regular expressions used to translate XML +Schema element names to C++ parsing function names\. See the NAMING +CONVENTION section below for more information\. + +.IP "\fB--serializer-regex\fP \fIregex\fP" +Add \fIregex\fP to the list of regular expressions used to translate XML +Schema element names to C++ serialization function names\. See the NAMING +CONVENTION section below for more information\. + +.IP "\fB--const-regex\fP \fIregex\fP" +Add \fIregex\fP to the list of regular expressions used to translate XML +Schema-derived names to C++ constant names\. See the NAMING CONVENTION +section below for more information\. + +.IP "\fB--enumerator-regex\fP \fIregex\fP" +Add \fIregex\fP to the list of regular expressions used to translate XML +Schema enumeration values to C++ enumerator names\. See the NAMING +CONVENTION section below for more information\. + +.IP "\fB--element-type-regex\fP \fIregex\fP" +Add \fIregex\fP to the list of regular expressions used to translate XML +Schema element names to C++ element type names\. See the NAMING CONVENTION +section below for more information\. + +.IP "\fB--name-regex-trace\fP" +Trace the process of applying regular expressions specified with the name +transformation options\. Use this option to find out why your regular +expressions don't do what you expected them to do\. + +.IP "\fB--root-element-first\fP" +Treat only the first global element as a document root\. By default all +global elements are considered document roots\. + +.IP "\fB--root-element-last\fP" +Treat only the last global element as a document root\. By default all +global elements are considered document roots\. + +.IP "\fB--root-element-all\fP" +Treat all global elements as document roots\. This is the default behavior\. +By explicitly specifying this option you can suppress the warning that is +issued if more than one global element is defined\. + +.IP "\fB--root-element-none\fP" +Do not treat any global elements as document roots\. By default all global +elements are considered document roots\. + +.IP "\fB--root-element\fP \fIelement\fP" +Treat only \fIelement\fP as a document root\. Repeat this option to specify +more than one root element\. + +.IP "\fB--custom-type\fP \fImap\fP" +Use a custom C++ type instead of the generated class\. The \fImap\fP +argument is in the form \fIname\fP[\fB=\fP\fItype\fP[\fB/\fP\fIbase\fP]], +where \fIname\fP is a type name as defined in XML Schema and \fItype\fP is a +C++ type name that should be used instead\. If \fItype\fP is not present or +empty then the custom type is assumed to have the same name and be defined +in the same namespace as the generated class would have\. If \fIbase\fP is +specified then the generated class is still generated but with that name\. + +.IP "\fB--custom-type-regex\fP \fIregex\fP" +Use custom C++ types instead of the generated classes\. The \fIregex\fP +argument is in the form +\fB/\fP\fIname-pat\fP\fB/\fP[\fItype-sub\fP\fB/\fP[\fIbase-sub\fP\fB/\fP]], +where \fIname-pat\fP is a regex pattern that will be matched against type +names as defined in XML Schema and \fItype-sub\fP is a C++ type name +substitution that should be used instead\. If \fItype-sub\fP is not present +or its substitution results in an empty string then the custom type is +assumed to have the same name and be defined in the same namespace as the +generated class would have\. If \fIbase-sub\fP is present and its +substitution results in a non-empty string then the generated class is still +generated but with the result of this substitution as its name\. The pattern +and substitutions are in the Perl regular expression format\. See also the +REGEX AND SHELL QUOTING section below\. + +.IP "\fB--parts\fP \fInum\fP" +Split generated source code into \fInum\fP parts\. This is useful when +translating large, monolithic schemas and a C++ compiler is not able to +compile the resulting source code at once (usually due to insufficient +memory)\. + +.IP "\fB--parts-suffix\fP \fIsuffix\fP" +Use \fIsuffix\fP instead of the default '\fB-\fP' to separate the file name +from the part number\. + +\" +\" C++/Parser +\" +.SS cxx-parser command options +.\" +.\" The following documentation was generated by CLI, a command +.\" line interface compiler for C++. +.\" +.IP "\fB--type-map\fP \fImapfile\fP" +Read XML Schema to C++ type mapping information from \fImapfile\fP\. Repeat +this option to specify several type maps\. Type maps are considered in order +of appearance and the first match is used\. By default all user-defined +types are mapped to \fBvoid\fP\. See the TYPE MAP section below for more +information\. + +.IP "\fB--xml-parser\fP \fIparser\fP" +Use \fIparser\fP as the underlying XML parser\. Valid values are +\fBxerces\fP for Xerces-C++ (default) and \fBexpat\fP for Expat\. + +.IP "\fB--generate-validation\fP" +Generate validation code\. The validation code ("perfect parser") ensures +that instance documents conform to the schema\. Validation code is generated +by default when the selected underlying XML parser is non-validating +(\fBexpat\fP)\. + +.IP "\fB--suppress-validation\fP" +Suppress the generation of validation code\. Validation is suppressed by +default when the selected underlying XML parser is validating +(\fBxerces\fP)\. + +.IP "\fB--generate-polymorphic\fP" +Generate polymorphism-aware code\. Specify this option if you use +substitution groups or \fBxsi:type\fP\. + +.IP "\fB--generate-noop-impl\fP" +Generate a sample parser implementation that does nothing (no operation)\. +The sample implementation can then be filled with the application-specific +code\. For an input file in the form \fBname\.xsd\fP this option triggers +the generation of two additional C++ files in the form: +\fBname-pimpl\.hxx\fP (parser implementation header file) and +\fBname-pimpl\.cxx\fP (parser implementation source file)\. + +.IP "\fB--generate-print-impl\fP" +Generate a sample parser implementation that prints the XML data to STDOUT\. +For an input file in the form \fBname\.xsd\fP this option triggers the +generation of two additional C++ files in the form: \fBname-pimpl\.hxx\fP +(parser implementation header file) and \fBname-pimpl\.cxx\fP (parser +implementation source file)\. + +.IP "\fB--generate-test-driver\fP" +Generate a test driver for the sample parser implementation\. For an input +file in the form \fBname\.xsd\fP this option triggers the generation of an +additional C++ file in the form \fBname-driver\.cxx\fP\. + +.IP "\fB--force-overwrite\fP" +Force overwriting of the existing implementation and test driver files\. Use +this option only if you do not mind loosing the changes you have made in the +sample implementation or test driver files\. + +.IP "\fB--root-element-first\fP" +Indicate that the first global element is the document root\. This +information is used to generate the test driver for the sample +implementation\. + +.IP "\fB--root-element-last\fP" +Indicate that the last global element is the document root\. This +information is used to generate the test driver for the sample +implementation\. + +.IP "\fB--root-element\fP \fIelement\fP" +Indicate that \fIelement\fP is the document root\. This information is used +to generate the test driver for the sample implementation\. + +.IP "\fB--skel-type-suffix\fP \fIsuffix\fP" +Use the provided \fIsuffix\fP instead of the default \fB_pskel\fP to +construct the names of the generated parser skeletons\. + +.IP "\fB--skel-file-suffix\fP \fIsuffix\fP" +Use the provided \fIsuffix\fP instead of the default \fB-pskel\fP to +construct the names of the generated parser skeleton files\. + +.IP "\fB--impl-type-suffix\fP \fIsuffix\fP" +Use the provided \fIsuffix\fP instead of the default \fB_pimpl\fP to +construct the names of the parser implementations for the built-in XML +Schema types as well as sample parser implementations\. + +.IP "\fB--impl-file-suffix\fP \fIsuffix\fP" +Use the provided \fIsuffix\fP instead of the default \fB-pimpl\fP to +construct the names of the generated sample parser implementation files\. + +\" +\" NAMING CONVENTION +\" + +.SH NAMING CONVENTION +The compiler can be instructed to use a particular naming convention in +the generated code. A number of widely-used conventions can be selected +using the +.B --type-naming +and +.B --function-naming +options. A custom naming convention can be achieved using the +.BR --type-regex , +.BR --accessor-regex , +.BR --one-accessor-regex , +.BR --opt-accessor-regex , +.BR --seq-accessor-regex , +.BR --modifier-regex , +.BR --one-modifier-regex , +.BR --opt-modifier-regex , +.BR --seq-modifier-regex , +.BR --parser-regex , +.BR --serializer-regex , +.BR --const-regex , +.BR --enumerator-regex , +and +.B --element-type-regex +options. + +The +.B --type-naming +option specifies the convention that should be used for naming C++ types. +Possible values for this option are +.B knr +(default), +.BR ucc , +and +.BR java . +The +.B knr +value (stands for K&R) signifies the standard, lower-case naming convention +with the underscore used as a word delimiter, for example: foo, foo_bar. +The +.B ucc +(stands for upper-camel-case) and +.B java +values a synonyms for the same naming convention where the first letter +of each word in the name is capitalized, for example: Foo, FooBar. + +Similarly, the +.B --function-naming +option specifies the convention that should be used for naming C++ functions. +Possible values for this option are +.B knr +(default), +.BR lcc , +and +.BR java . +The +.B knr +value (stands for K&R) signifies the standard, lower-case naming convention +with the underscore used as a word delimiter, for example: foo(), foo_bar(). +The +.B lcc +value (stands for lower-camel-case) signifies a naming convention where the +first letter of each word except the first is capitalized, for example: foo(), +fooBar(). The +.B java +naming convention is similar to the lower-camel-case one except that accessor +functions are prefixed with get, modifier functions are prefixed with set, +parsing functions are prefixed with parse, and serialization functions are +prefixed with serialize, for example: getFoo(), setFooBar(), parseRoot(), +serializeRoot(). + +Note that the naming conventions specified with the +.B --type-naming +and +.B --function-naming +options perform only limited transformations on the +names that come from the schema in the form of type, attribute, and element +names. In other words, to get consistent results, your schemas should follow +a similar naming convention as the one you would like to have in the generated +code. Alternatively, you can use the +.B --*-regex +options (discussed below) to perform further transformations on the names +that come from the schema. + +The +.BR --type-regex , +.BR --accessor-regex , +.BR --one-accessor-regex , +.BR --opt-accessor-regex , +.BR --seq-accessor-regex , +.BR --modifier-regex , +.BR --one-modifier-regex , +.BR --opt-modifier-regex , +.BR --seq-modifier-regex , +.BR --parser-regex , +.BR --serializer-regex , +.BR --const-regex , +.BR --enumerator-regex , +and +.B --element-type-regex +options allow you to specify extra regular expressions for each name +category in addition to the predefined set that is added depending on +the +.B --type-naming +and +.B --function-naming +options. Expressions that are provided with the +.B --*-regex +options are evaluated prior to any predefined expressions. This allows +you to selectively override some or all of the predefined transformations. +When debugging your own expressions, it is often useful to see which +expressions match which names. The +.B --name-regex-trace +option allows you to trace the process of applying +regular expressions to names. + +The value for the +.B --*-regex +options should be a perl-like regular expression in the form +.BI / pattern / replacement /\fR. +Any character can be used as a delimiter instead of +.BR / . +Escaping of the delimiter character in +.I pattern +or +.I replacement +is not supported. All the regular expressions for each category are pushed +into a category-specific stack with the last specified expression +considered first. The first match that succeeds is used. For the +.B --one-accessor-regex +(accessors with cardinality one), +.B --opt-accessor-regex +(accessors with cardinality optional), and +.B --seq-accessor-regex +(accessors with cardinality sequence) categories the +.B --accessor-regex +expressions are used as a fallback. For the +.BR --one-modifier-regex , +.BR --opt-modifier-regex , +and +.B --seq-modifier-regex +categories the +.B --modifier-regex +expressions are used as a fallback. For the +.B --element-type-regex +category the +.B --type-regex +expressions are used as a fallback. + +The type name expressions +.RB ( --type-regex ) +are evaluated on the name string that has the following format: + +[\fInamespace \fR]\fIname\fR[\fB,\fIname\fR][\fB,\fIname\fR][\fB,\fIname\fR] + +The element type name expressions +.RB ( --element-type-regex ), +effective only when the +.B --generate-element-type +option is specified, are evaluated on the name string that has the following +format: + +.I namespace name + +In the type name format the +.I namespace +part followed by a space is only present for global type names. For global +types and elements defined in schemas without a target namespace, the +.I namespace +part is empty but the space is still present. In the type name format after +the initial +.I name +component, up to three additional +.I name +components can be present, separated by commas. For example: + +.B http://example.com/hello type + +.B foo + +.B foo,iterator + +.B foo,const,iterator + +The following set of predefined regular expressions is used to transform +type names when the upper-camel-case naming convention is selected: + +.B /(?:[^ ]* )?([^,]+)/\\\\u$1/ + +.B /(?:[^ ]* )?([^,]+),([^,]+)/\\\\u$1\\\\u$2/ + +.B /(?:[^ ]* )?([^,]+),([^,]+),([^,]+)/\\\\u$1\\\\u$2\\\\u$3/ + +.B /(?:[^ ]* )?([^,]+),([^,]+),([^,]+),([^,]+)/\\\\u$1\\\\u$2\\\\u$3\\\\u$4/ + +The accessor and modifier expressions +.RB ( --*accessor-regex +and +.BR --*modifier-regex ) +are evaluated on the name string that has the following format: + +\fIname\fR[\fB,\fIname\fR][\fB,\fIname\fR] + +After the initial +.I name +component, up to two additional +.I name +components can be present, separated by commas. For example: + +.B foo + +.B dom,document + +.B foo,default,value + +The following set of predefined regular expressions is used to transform +accessor names when the +.B java +naming convention is selected: + +.B /([^,]+)/get\\\\u$1/ + +.B /([^,]+),([^,]+)/get\\\\u$1\\\\u$2/ + +.B /([^,]+),([^,]+),([^,]+)/get\\\\u$1\\\\u$2\\\\u$3/ + +For the parser, serializer, and enumerator categories, the corresponding +regular expressions are evaluated on local names of elements and on +enumeration values, respectively. For example, the following predefined +regular expression is used to transform parsing function names when the +.B java +naming convention is selected: + +.B /(.+)/parse\\\\u$1/ + +The const category is used to create C++ constant names for the +element/wildcard/text content ids in ordered types. + +See also the REGEX AND SHELL QUOTING section below. + +\" +\" TYPE MAP +\" +.SH TYPE MAP +Type map files are used in C++/Parser to define a mapping between XML +Schema and C++ types. The compiler uses this information to determine +the return types of +.B post_* +functions in parser skeletons corresponding to XML Schema types +as well as argument types for callbacks corresponding to elements +and attributes of these types. + +The compiler has a set of predefined mapping rules that map built-in +XML Schema types to suitable C++ types (discussed below) and all +other types to +.BR void . +By providing your own type maps you can override these predefined rules. +The format of the type map file is presented below: + +.RS +.B namespace +.I schema-namespace +[ +.I cxx-namespace +] +.br +.B { +.br + ( +.B include +.IB file-name ; +)* +.br + ([ +.B type +] +.I schema-type cxx-ret-type +[ +.I cxx-arg-type +.RB ] ; +)* +.br +.B } +.br +.RE + +Both +.I schema-namespace +and +.I schema-type +are regex patterns while +.IR cxx-namespace , +.IR cxx-ret-type , +and +.I cxx-arg-type +are regex pattern substitutions. All names can be optionally enclosed +in \fR" "\fR, for example, to include white-spaces. + +.I schema-namespace +determines XML Schema namespace. Optional +.I cxx-namespace +is prefixed to every C++ type name in this namespace declaration. +.I cxx-ret-type +is a C++ type name that is used as a return type for the +.B post_* +functions. Optional +.I cxx-arg-type +is an argument type for callback functions corresponding to elements and +attributes of this type. If +.I cxx-arg-type +is not specified, it defaults to +.I cxx-ret-type +if +.I cxx-ret-type +ends with +.B * +or +.B & +(that is, it is a pointer or a reference) and +.B const +\fIcxx-ret-type\fB&\fR otherwise. +.I file-name +is a file name either in the \fR" "\fR or < > format and is added with the +.B #include +directive to the generated code. + +The \fB#\fR character starts a comment that ends with a new line or end of +file. To specify a name that contains \fB#\fR enclose it in \fR" "\fR. For +example: + +.RS +namespace http://www.example.com/xmlns/my my +.br +{ +.br + include "my.hxx"; +.br + + # Pass apples by value. + # + apple apple; +.br + + # Pass oranges as pointers. + # + orange orange_t*; +.br +} +.br +.RE + +In the example above, for the +.B http://www.example.com/xmlns/my#orange +XML Schema type, the +.B my::orange_t* +C++ type will be used as both return and argument types. + +Several namespace declarations can be specified in a single file. +The namespace declaration can also be completely omitted to map +types in a schema without a namespace. For instance: + +.RS +include "my.hxx"; +.br +apple apple; +.br + +namespace http://www.example.com/xmlns/my +.br +{ +.br + orange "const orange_t*"; +.br +} +.br +.RE + + +The compiler has a number of predefined mapping rules that can be +presented as the following map files. The string-based XML Schema +built-in types are mapped to either +.B std::string +or +.B std::wstring +depending on the character type selected with the +.B --char-type +option +.RB ( char +by default). + +.RS +namespace http://www.w3.org/2001/XMLSchema +.br +{ +.br + boolean bool bool; +.br + + byte "signed char" "signed char"; +.br + unsignedByte "unsigned char" "unsigned char"; +.br + + short short short; +.br + unsignedShort "unsigned short" "unsigned short"; +.br + + int int int; +.br + unsignedInt "unsigned int" "unsigned int"; +.br + + long "long long" "long long"; +.br + unsignedLong "unsigned long long" "unsigned long long"; +.br + + integer "long long" "long long"; +.br + + negativeInteger "long long" "long long"; +.br + nonPositiveInteger "long long" "long long"; +.br + + positiveInteger "unsigned long long" "unsigned long long"; +.br + nonNegativeInteger "unsigned long long" "unsigned long long"; +.br + + float float float; +.br + double double double; +.br + decimal double double; +.br + + string std::string; +.br + normalizedString std::string; +.br + token std::string; +.br + Name std::string; +.br + NMTOKEN std::string; +.br + NCName std::string; +.br + ID std::string; +.br + IDREF std::string; +.br + language std::string; +.br + anyURI std::string; +.br + + NMTOKENS xml_schema::string_sequence; +.br + IDREFS xml_schema::string_sequence; +.br + + QName xml_schema::qname; +.br + + base64Binary std::auto_ptr +.br + std::auto_ptr; +.br + hexBinary std::auto_ptr +.br + std::auto_ptr; +.br + + date xml_schema::date; +.br + dateTime xml_schema::date_time; +.br + duration xml_schema::duration; +.br + gDay xml_schema::gday; +.br + gMonth xml_schema::gmonth; +.br + gMonthDay xml_schema::gmonth_day; +.br + gYear xml_schema::gyear; +.br + gYearMonth xml_schema::gyear_month; +.br + time xml_schema::time; +.br +} +.br +.RE + + +The last predefined rule maps anything that wasn't mapped by previous +rules to +.BR void : + +.RS +namespace .* +.br +{ +.br + .* void void; +.br +} +.br +.RE + +When you provide your own type maps with the +.B --type-map +option, they are evaluated first. This allows you to selectively override +predefined rules. + +.\" +.\" REGEX AND SHELL QUOTING +.\" +.SH REGEX AND SHELL QUOTING +When entering a regular expression argument in the shell command line +it is often necessary to use quoting (enclosing the argument in " " +or ' ') in order to prevent the shell from interpreting certain +characters, for example, spaces as argument separators and $ as +variable expansions. + +Unfortunately it is hard to achieve this in a manner that is portable +across POSIX shells, such as those found on GNU/Linux and UNIX, and +Windows shell. For example, if you use " " for quoting you will get +a wrong result with POSIX shells if your expression contains $. The +standard way of dealing with this on POSIX systems is to use ' ' +instead. Unfortunately, Windows shell does not remove ' ' from +arguments when they are passed to applications. As a result you may +have to use ' ' for POSIX and " " for Windows ($ is not treated as +a special character on Windows). + +Alternatively, you can save regular expression options into a file, +one option per line, and use this file with the +.B --options-file +option. With this approach you don't need to worry about shell quoting. + +.\" +.\" DIAGNOSTICS +.\" +.SH DIAGNOSTICS +If the input file is not a valid W3C XML Schema definition, +.B xsd +will issue diagnostic messages to +.B STDERR +and exit with non-zero exit code. +.SH BUGS +Send bug reports to the xsd-users@codesynthesis.com mailing list. +.SH COPYRIGHT +Copyright (c) 2005-2014 Code Synthesis Tools CC. + +Permission is granted to copy, distribute and/or modify this +document under the terms of the GNU Free Documentation License, +version 1.2; with no Invariant Sections, no Front-Cover Texts and +no Back-Cover Texts. Copy of the license can be obtained from +http://codesynthesis.com/licenses/fdl-1.2.txt diff --git a/xsd/doc/xsd.xhtml b/xsd/doc/xsd.xhtml new file mode 100644 index 0000000..989d1bd --- /dev/null +++ b/xsd/doc/xsd.xhtml @@ -0,0 +1,1555 @@ + + + + + + XSD 4.0.0 Compiler Command Line Manual + + + + + + + + + + + +
+
+ +

NAME

+ +

xsd - W3C XML Schema to C++ Compiler

+ +

SYNOPSIS

+ +
+
xsd command [options] file [file ...]
+
xsd help [command]
+
xsd version
+
+ +

DESCRIPTION

+ +

xsd generates vocabulary-specific, statically-typed + C++ mapping from W3C XML Schema definitions. Particular mapping to + produce is selected by a command. Each mapping has + a number of mapping-specific options that should + appear, if any, after the command. Input files should + be W3C XML Schema definitions. The exact set of the generated files depends + on the selected mapping and options.

+ +

COMMANDS

+ +
+
cxx-tree
+
Generate the C++/Tree mapping. For each input file in the form + name.xsd the following C++ files are generated: + name.hxx (header file), + name.ixx (inline file, generated only if the + --generate-inline option is specified), + name.cxx (source file), and + name-fwd.hxx (forward declaration file, generated + only if the --generate-forward option is + specified).
+ +
cxx-parser
+
Generate the C++/Parser mapping. For each input file in the form + name.xsd the following C++ files are generated: + name-pskel.hxx (parser skeleton header file), + name-pskel.ixx (parser skeleton inline file, + generated only if the --generate-inline + option is specified), and + name-pskel.cxx (parser skeleton source file). + If the --generate-noop-impl or + --generate-print-impl option is specified, + the following additional sample implementation files are generated: + name-pimpl.hxx (parser implementation header + file) and + name-pimpl.cxx (parser implementation source + file). If the --generate-test-driver option + is specified, the additional name-driver.cxx + test driver file is generated.
+ +
help
+
Print usage information and exit. Use +

xsd help command

+ for command-specific help. +
+ +
version
+
Print version and exit.
+
+ +

OPTIONS

+ +

Command-specific options, if any, should appear + after the corresponding command.

+ +

COMMON OPTIONS

+ + + +
+
--std version
+
Specify the C++ standard that the generated code should conform to. Valid + values are c++98 (default) and + c++11. + +

The C++ standard affects various aspects of the generated code that are + discussed in more detail in various mapping-specific documentation. Overall, + when C++11 is selected, the generated code relies on the move semantics and + uses std::unique_ptr instead of deprecated + std::auto_ptr.

+ +

When the C++11 mode is selected, you normally don't need to perform any + extra steps other than enable C++11 in your C++ compiler, if required. The + XSD compiler will automatically add the necessary macro defines to the + generated header files that will switch the header-only XSD runtime library + (libxsd) to the C++11 mode. However, if you include any + of the XSD runtime headers directly in your application (normally you just + include the generated headers), then you will need to define the + XSD_CXX11 macro for your entire project.

+ +
--char-type type
+
Generate code using the provided character type instead of the + default char. Valid values are char + and wchar_t.
+ +
--char-encoding enc
+
Specify the character encoding that should be used in the generated code. + Valid values for the char character type are + utf8 (default), iso8859-1, + lcp (Xerces-C++ local code page), and + custom. If you pass custom as the + value then you will need to include the transcoder implementation header for + your encoding at the beginning of the generated header files (see the + --hxx-prologue option). + +

For the wchar_t character type the only valid value + is auto and the encoding is automatically selected + between UTF-16 and UTF-32/UCS-4, depending on the + wchar_t type size.

+ +
--output-dir dir
+
Write generated files to dir instead of the current directory.
+ +
--generate-inline
+
Generate simple functions inline. This option triggers creation of the + inline file.
+ +
--generate-xml-schema
+
Generate a C++ header file as if the schema being compiled defines the XML + Schema namespace. For the C++/Tree mapping, the resulting file will contain + definitions for all XML Schema built-in types. For the C++/Parser mapping, + the resulting file will contain definitions for all the parser skeletons and + implementations corresponding to the XML Schema built-in types. + +

The schema file provided to the compiler need not exist and is only used + to derive the name of the resulting header file. Use the + --extern-xml-schema option to include this file in the + generated files for other schemas.

+ +
--extern-xml-schema file
+
Include a header file derived from file instead of generating the XML + Schema namespace mapping inline. The provided file need not exist and is + only used to derive the name of the included header file. Use the + --generate-xml-schema option to generate this header + file.
+ +
--namespace-map xns=cns
+
Map XML Schema namespace xns to C++ namespace cns. Repeat this + option to specify mapping for more than one XML Schema namespace. For + example, the following option: + +

--namespace-map + http://example.com/foo/bar=foo::bar

+ +

Will map the http://example.com/foo/bar XML Schema + namespace to the foo::bar C++ namespace.

+ +
--namespace-regex regex
+
Add regex to the list of regular expressions used to translate XML + Schema namespace names to C++ namespace names. regex is a Perl-like + regular expression in the form + /pattern/replacement/. Any + character can be used as a delimiter instead of /. + Escaping of the delimiter character in pattern or + replacement is not supported. + +

All the regular expressions are pushed into a stack with the last + specified expression considered first. The first match that succeeds is + used. Regular expressions are applied to a string in the form

+ +

filename namespace

+ +

For example, if you have file hello.xsd with + namespace http://example.com/hello and you run + xsd on this file, then the string in question will + be:

+ +

hello.xsd. http://example.com/hello

+ +

For the built-in XML Schema namespace the string is:

+ +

XMLSchema.xsd http://www.w3.org/2001/XMLSchema

+ +

The following three steps are performed for each regular expression until + the match is found:

+ +

1. The expression is applied and if the result is empty the next + expression is considered.

+ +

2. All / are replaced with + ::.

+ +

3. The result is verified to be a valid C++ scope name (e.g., + foo::bar). If this test succeeds, the result is used as + a C++ namespace name.

+ +

As an example, the following expression maps XML Schema namespaces in + the form http://example.com/foo/bar to C++ namespaces in + the form foo::bar:

+ +

%.* http://example.com/(.+)%$1%

+ +

See also the REGEX AND SHELL QUOTING section below.

+ +
--namespace-regex-trace
+
Trace the process of applying regular expressions specified with the + --namespace-regex option. Use this option to find out + why your regular expressions don't do what you expected them to do.
+ +
--reserved-name n[=r]
+
Add name n to the list of names that should not be used as + identifiers. The name can optionally be followed by = + and the replacement name r that should be used instead. All the C++ + keywords are already in this list.
+ +
--include-with-brackets
+
Use angle brackets (<>) instead of quotes ("") in generated + #include directives.
+ +
--include-prefix prefix
+
Add prefix to generated #include directive paths. + +

For example, if you had the following import element in your schema

+ +

<import namespace="..." + schemaLocation="base.xsd"/>

+ +

and compiled this fragment with --include-prefix + schemas/, then the include directive in the generated code would + be:

+ +

#include "schemas/base.hxx"

+ +
--include-regex regex
+
Add regex to the list of regular expressions used to transform + #include directive paths. regex is a Perl-like + regular expression in the form + /pattern/replacement/. Any + character can be used as a delimiter instead of /. + Escaping of the delimiter character in pattern or + replacement is not supported. + +

All the regular expressions are pushed into a stack with the last + specified expression considered first. The first match that succeeds is + used.

+ +

As an example, the following expression transforms paths in the form + schemas/foo/bar to paths in the form + generated/foo/bar:

+ +

%schemas/(.+)%generated/$1%

+ +

See also the REGEX AND SHELL QUOTING section below.

+ +
--include-regex-trace
+
Trace the process of applying regular expressions specified with the + --include-regex option. Use this option to find out why + your regular expressions don't do what you expected them to do.
+ +
--guard-prefix prefix
+
Add prefix to generated header inclusion guards. The prefix is + transformed to upper case and characters that are illegal in a preprocessor + macro name are replaced with underscores. If this option is not specified + then the directory part of the input schema file is used as a prefix.
+ +
--hxx-suffix suffix
+
Use the provided suffix instead of the default + .hxx to construct the name of the header file. Note that + this suffix is also used to construct names of header files corresponding to + included/imported schemas.
+ +
--ixx-suffix suffix
+
Use the provided suffix instead of the default + .ixx to construct the name of the inline file.
+ +
--cxx-suffix suffix
+
Use the provided suffix instead of the default + .cxx to construct the name of the source file.
+ +
--fwd-suffix suffix
+
Use the provided suffix instead of the default + -fwd.hxx to construct the name of the forward + declaration file.
+ +
--hxx-regex regex
+
Use the provided expression to construct the name of the header file. + regex is a Perl-like regular expression in the form + /pattern/replacement/. Note + that this expression is also used to construct names of header files + corresponding to included/imported schemas. See also the REGEX AND SHELL + QUOTING section below.
+ +
--ixx-regex regex
+
Use the provided expression to construct the name of the inline file. + regex is a Perl-like regular expression in the form + /pattern/replacement/. See + also the REGEX AND SHELL QUOTING section below.
+ +
--cxx-regex regex
+
Use the provided expression to construct the name of the source file. + regex is a Perl-like regular expression in the form + /pattern/replacement/. See + also the REGEX AND SHELL QUOTING section below.
+ +
--fwd-regex regex
+
Use the provided expression to construct the name of the forward declaration + file. regex is a Perl-like regular expression in the form + /pattern/replacement/. See + also the REGEX AND SHELL QUOTING section below.
+ +
--hxx-prologue text
+
Insert text at the beginning of the header file.
+ +
--ixx-prologue text
+
Insert text at the beginning of the inline file.
+ +
--cxx-prologue text
+
Insert text at the beginning of the source file.
+ +
--fwd-prologue text
+
Insert text at the beginning of the forward declaration file.
+ +
--prologue text
+
Insert text at the beginning of each generated file for which there + is no file-specific prologue.
+ +
--hxx-epilogue text
+
Insert text at the end of the header file.
+ +
--ixx-epilogue text
+
Insert text at the end of the inline file.
+ +
--cxx-epilogue text
+
Insert text at the end of the source file.
+ +
--fwd-epilogue text
+
Insert text at the end of the forward declaration file.
+ +
--epilogue text
+
Insert text at the end of each generated file for which there is no + file-specific epilogue.
+ +
--hxx-prologue-file file
+
Insert the content of the file at the beginning of the header file.
+ +
--ixx-prologue-file file
+
Insert the content of the file at the beginning of the inline file.
+ +
--cxx-prologue-file file
+
Insert the content of the file at the beginning of the source file.
+ +
--fwd-prologue-file file
+
Insert the content of the file at the beginning of the forward + declaration file.
+ +
--prologue-file file
+
Insert the content of the file at the beginning of each generated + file for which there is no file-specific prologue file.
+ +
--hxx-epilogue-file file
+
Insert the content of the file at the end of the header file.
+ +
--ixx-epilogue-file file
+
Insert the content of the file at the end of the inline file.
+ +
--cxx-epilogue-file file
+
Insert the content of the file at the end of the source file.
+ +
--fwd-epilogue-file file
+
Insert the content of the file at the end of the forward declaration + file.
+ +
--epilogue-file file
+
Insert the content of the file at the end of each generated file for + which there is no file-specific epilogue file.
+ +
--export-symbol symbol
+
Insert symbol in places where DLL export/import control statements + (__declspec(dllexport/dllimport)) are necessary.
+ +
--export-xml-schema
+
Export/import types in the XML Schema namespace using the export symbol + provided with the --export-symbol option. The + XSD_NO_EXPORT macro can be used to omit this code during + C++ compilation, which may be useful if you would like to use the same + generated code across multiple platforms.
+ +
--export-maps
+
Export polymorphism support maps from a Win32 DLL into which this generated + code is placed. This is necessary when your type hierarchy is split across + several DLLs since otherwise each DLL will have its own set of maps. In this + situation the generated code for the DLL which contains base types and/or + substitution group heads should be compiled with this option and the + generated code for all other DLLs should be compiled with + --import-maps. This option is only valid together with + --generate-polymorphic. The + XSD_NO_EXPORT macro can be used to omit this code during + C++ compilation, which may be useful if you would like to use the same + generated code across multiple platforms.
+ +
--import-maps
+
Import polymorphism support maps to a Win32 DLL or executable into which + this generated code is linked. See the --export-maps + option documentation for details. This options is only valid together with + --generate-polymorphic. The + XSD_NO_EXPORT macro can be used to omit this code during + C++ compilation, which may be useful if you would like to use the same + generated code across multiple platforms.
+ +
--generate-dep
+
Generate make dependency information. This option + triggers the creation of the .d file containing the + dependencies of the generated files on the main schema file as well as all + the schema files that it includes/imports, transitively. This dependency + file is then normally included into the main makefile to + implement automatic dependency tracking. + +

Note also that automatic dependency generation is not supported in the + file-per-type mode (--file-per-type). In this case, all + the generated files are produced with a single compiler invocation and + depend on all the schemas. As a result, it is easier to establish such a + dependency manually, perhaps with the help of the + --file-list* options.

+ +
--generate-dep-only
+
Generate make dependency information only.
+ +
--dep-phony
+
Generate phony targets for included/imported schema files, causing each to + depend on nothing. Such dummy rules work around make + errors caused by the removal of schema files without also updating the + dependency file to match.
+ +
--dep-target target
+
Change the target of the dependency rule. By default it contains all the + generated C++ files as well as the dependency file itself, without any + directory prefixes. If you require multiple targets, then you can specify + them as a single, space-separated argument or you can repeat this option + multiple times.
+ +
--dep-suffix suffix
+
Use the provided suffix instead of the default .d + to construct the name of the dependency file.
+ +
--dep-regex regex
+
Use the provided expression to construct the name of the dependency file. + regex is a Perl-like regular expression in the form + /pattern/replacement/. See + also the REGEX AND SHELL QUOTING section below.
+ +
--disable-warning warn
+
Disable printing warning with id warn. If all is + specified for the warning id then all warnings are disabled.
+ +
--options-file file
+
Read additional options from file. Each option should appearing on a + separate line optionally followed by space and an option value. Empty lines + and lines starting with # are ignored. Option values can + be enclosed in double (") or single + (') quotes to preserve leading and trailing whitespaces + as well as to specify empty values. If the value itself contains trailing or + leading quotes, enclose it with an extra pair of quotes, for example + '"x"'. Non-leading and non-trailing quotes are + interpreted as being part of the option value. + +

The semantics of providing options in a file is equivalent to providing + the same set of options in the same order on the command line at the point + where the --options-file option is specified except that + the shell escaping and quoting is not required. You can repeat this option + to specify more than one options file.

+ +
--show-sloc
+
Show the number of generated physical source lines of code (SLOC).
+ +
--sloc-limit num
+
Check that the number of generated physical source lines of code (SLOC) does + not exceed num.
+ +
--proprietary-license
+
Indicate that the generated code is licensed under a proprietary license + instead of the GPL.
+ +
--custom-literals file
+
Load custom XML string to C++ literal mappings from file. This + mechanism can be useful if you are using a custom character encoding and + some of the strings in your schemas, for example element/attribute names or + enumeration values, contain non-ASCII characters. In this case you will need + to provide a custom mapping to C++ literals for such strings. The format of + this file is specified in the custom-literals.xsd XML + Schema file that can be found in the documentation directory.
+ +
--preserve-anonymous
+
Preserve anonymous types. By default anonymous types are automatically named + with names derived from the enclosing elements/attributes. Because mappings + implemented by this compiler require all types to be named, this option is + only useful if you want to make sure your schemas don't have anonymous + types.
+ +
--show-anonymous
+
Show elements and attributes that are of anonymous types. This option only + makes sense together with the --preserve-anonymous + option.
+ +
--anonymous-regex regex
+
Add regex to the list of regular expressions used to derive names for + anonymous types from the enclosing attributes/elements. regex is a + Perl-like regular expression in the form + /pattern/replacement/. Any + character can be used as a delimiter instead of /. + Escaping of the delimiter character in pattern or + replacement is not supported. + +

All the regular expressions are pushed into a stack with the last + specified expression considered first. The first match that succeeds is + used. Regular expressions are applied to a string in the form

+ +

filename namespace xpath

+ +

For instance:

+ +

hello.xsd http://example.com/hello element

+ +

hello.xsd http://example.com/hello type/element

+ +

As an example, the following expression makes all the derived names start + with capital letters. This could be useful when your naming convention + requires type names to start with capital letters:

+ +

%.* .* (.+/)*(.+)%\u$2%

+ +

See also the REGEX AND SHELL QUOTING section below.

+ +
--anonymous-regex-trace
+
Trace the process of applying regular expressions specified with the + --anonymous-regex option. Use this option to find out + why your regular expressions don't do what you expected them to do.
+ +
--location-map ol=nl
+
Map the original schema location ol that is specified in the XML + Schema include or import elements to new schema location nl. Repeat + this option to map more than one schema location. For example, the following + option maps the http://example.com/foo.xsd URL to the + foo.xsd local file. + +

--location-map http://example.com/foo.xsd=foo.xsd

+ +
--location-regex regex
+
Add regex to the list of regular expressions used to map schema + locations that are specified in the XML Schema include or import elements. + regex is a Perl-like regular expression in the form + /pattern/replacement/. Any + character can be used as a delimiter instead of /. + Escaping of the delimiter character in pattern or + replacement is not supported. All the regular + expressions are pushed into a stack with the last specified expression + considered first. The first match that succeeds is used. + +

For example, the following expression maps URL locations in the form + http://example.com/foo/bar.xsd to local files in the + form bar.xsd:

+ +

%http://.+/(.+)%$1%

+ +

See also the REGEX AND SHELL QUOTING section below.

+ +
--location-regex-trace
+
Trace the process of applying regular expressions specified with the + --location-regex option. Use this option to find out why + your regular expressions don't do what you expected them to do.
+ +
--file-per-type
+
Generate a separate set of C++ files for each type defined in XML Schema. + Note that in this mode you only need to compile the root schema(s) and the + code will be generated for all included and imported schemas. This + compilation mode is primarily useful when some of your schemas cannot be + compiled separately or have cyclic dependencies which involve type + inheritance. Other options related to this mode are: + --type-file-regex, + --schema-file-regex, + --fat-type-file, and --file-list.
+ +
--type-file-regex regex
+
Add regex to the list of regular expressions used to translate type + names to file names when the --file-per-type option is + specified. regex is a Perl-like regular expression in the form + /pattern/replacement/. Any + character can be used as a delimiter instead of /. + Escaping of the delimiter character in pattern or + replacement is not supported. All the regular + expressions are pushed into a stack with the last specified expression + considered first. The first match that succeeds is used. Regular expressions + are applied to a string in the form + +

namespace type-name

+ +

For example, the following expression maps type foo + that is defined in the http://example.com/bar namespace + to file name bar-foo:

+ +

%http://example.com/(.+) (.+)%$1-$2%

+ +

See also the REGEX AND SHELL QUOTING section below.

+ +
--type-file-regex-trace
+
Trace the process of applying regular expressions specified with the + --type-file-regex option. Use this option to find out + why your regular expressions don't do what you expected them to do.
+ +
--schema-file-regex regex
+
Add regex to the list of regular expressions used to translate schema + file names when the --file-per-type option is specified. + regex is a Perl-like regular expression in the form + /pattern/replacement/. Any + character can be used as a delimiter instead of /. + Escaping of the delimiter character in pattern or + replacement is not supported. All the regular + expressions are pushed into a stack with the last specified expression + considered first. The first match that succeeds is used. Regular Expressions + are applied to the absolute filesystem path of a schema file and the result, + including the directory part, if any, is used to derive the + #include directive paths as well as the generated C++ + file paths. This option, along with --type-file-regex + are primarily useful to place the generated files into subdirectories or to + resolve file name conflicts. + +

For example, the following expression maps schema files in the + foo/1.0.0/ subdirectory to the files in the + foo/ subdirectory. As a result, the + #include directive paths for such schemas will be in the + foo/schema.hxx form and the generated C++ files will be + placed into the foo/ subdirectory:

+ +

%.*/foo/1.0.0/(.+)%foo/$1%

+ +

See also the REGEX AND SHELL QUOTING section below.

+ +
--schema-file-regex-trace
+
Trace the process of applying regular expressions specified with the + --schema-file-regex option. Use this option to find out + why your regular expressions don't do what you expected them to do.
+ +
--fat-type-file
+
Generate code corresponding to global elements into type files instead of + schema files when the --type-file-regex option is + specified. This option is primarily useful when trying to minimize the + amount of object code that is linked to an executable by packaging compiled + generated code into a static (archive) library.
+ +
--file-list file
+
Write a list of generated C++ files to file. This option is primarily + useful in the file-per-type compilation mode + (--file-per-type) to create a list of generated C++ + files, for example, as a makefile fragment.
+ +
--file-list-prologue text
+
Insert text at the beginning of the file list. As a convenience, all + occurrences of the \n character sequence in text + are replaced with new lines. This option can, for example, be used to assign + the generated file list to a makefile variable.
+ +
--file-list-epilogue text
+
Insert text at the end of the file list. As a convenience, all + occurrences of the \n character sequence in text + are replaced with new lines.
+ +
--file-list-delim text
+
Delimit file names written to the file list with text instead of new + lines. As a convenience, all occurrences of the \n + character sequence in text are replaced with new lines.
+ +
+

CXX-TREE COMMAND OPTIONS

+ + + +
+
--generate-polymorphic
+
Generate polymorphism-aware code. Specify this option if you use + substitution groups or xsi:type. Use the + --polymorphic-type or + --polymorphic-type-all option to specify which type + hierarchies are polymorphic.
+ +
--polymorphic-type type
+
Indicate that type is a root of a polymorphic type hierarchy. The + compiler can often automatically determine which types are polymorphic based + on the substitution group declarations. However, you may need to use this + option if you are not using substitution groups or if substitution groups + are defined in another schema. You need to specify this option when + compiling every schema file that references type. The type + argument is an XML Schema type name that can be optionally qualified with a + namespace in the namespace#name form.
+ +
--polymorphic-type-all
+
Indicate that all types should be treated as polymorphic.
+ +
--polymorphic-plate num
+
Specify the polymorphic map plate the generated code should register on. + This functionality is primarily useful to segregate multiple schemas that + define the same polymorphic types.
+ +
--ordered-type type
+
Indicate that element order in type is significant. An example would + be a complex type with unbounded choice as a content model where the element + order in XML has application-specific semantics. For ordered types the + compiler generates a special container data member and a corresponding set + of accessors and modifiers that are used to capture the order of elements + and, for mixed content, of text. + +

The type argument is an XML Schema type name that can be + optionally qualified with a namespace in the + namespace#name form. Note also that you + will need to specify this option when compiling every schema file that has + other ordered types derived from this type.

+ +
--ordered-type-derived
+
Automatically treat types derived from ordered bases as also ordered. This + is primarily useful if you would like to be able to iterate over the + complete content using the content order container.
+ +
--ordered-type-mixed
+
Automatically treat complex types with mixed content as ordered.
+ +
--ordered-type-all
+
Indicate that element order in all types is significant.
+ +
--order-container type
+
Specify a custom class template that should be used as a container for the + content order in ordered types instead of the default + std::vector. See --ordered-type for + more information on ordered type. This option is primarily useful if you + need to perform more complex lookups in the content order container, for + example by element id. In this case, a container like Boost multi-index may + be more convenient. Note that if using a custom container, you will also + most likely need to include the relevant headers using the + --hxx-prologue* options.
+ +
--generate-serialization
+
Generate serialization functions. Serialization functions convert the object + model back to XML.
+ +
--generate-ostream
+
Generate ostream insertion operators (operator<<) + for generated types. This allows one to easily print a fragment or the whole + object model for debugging or logging.
+ +
--generate-doxygen
+
Generate documentation comments suitable for extraction by the Doxygen + documentation system. Documentation from annotations is added to the + comments if present in the schema.
+ +
--generate-comparison
+
Generate comparison operators (operator== and + operator!=) for complex types. Comparison is performed + member-wise.
+ +
--generate-default-ctor
+
Generate default constructors even for types that have required members. + Required members of an instance constructed using such a constructor are not + initialized and accessing them results in undefined behavior.
+ +
--generate-from-base-ctor
+
Generate constructors that expect an instance of a base type followed by all + required members.
+ +
--suppress-assignment
+
Suppress the generation of copy assignment operators for complex types. If + this option is specified, the copy assignment operators for such types are + declared private and left unimplemented.
+ +
--generate-detach
+
Generate detach functions for required elements and attributes. Detach + functions for optional and sequence cardinalities are provided by the + respective containers. These functions, for example, allow you to move + sub-trees in the object model either within the same tree or between + different trees.
+ +
--generate-wildcard
+
Generate accessors and modifiers as well as parsing and serialization code + for XML Schema wildcards (any and + anyAttribute). XML content matched by wildcards is + presented as DOM fragments. Note that you need to initialize the Xerces-C++ + runtime if you are using this option.
+ +
--generate-any-type
+
Extract and store content of the XML Schema anyType type + as a DOM fragment. Note that you need to initialize the Xerces-C++ runtime + if you are using this option.
+ +
--generate-insertion os
+
Generate data representation stream insertion operators for the os + output stream type. Repeat this option to specify more than one stream type. + The ACE CDR stream (ACE_OutputCDR) and RPC XDR are + recognized by the compiler and the necessary #include + directives are automatically generated. For custom stream types use the + --hxx-prologue* options to provide the necessary + declarations.
+ +
--generate-extraction is
+
Generate data representation stream extraction constructors for the + is input stream type. Repeat this option to specify more than one + stream type. The ACE CDR stream (ACE_InputCDR) and RPC + XDR are recognized by the compiler and the necessary + #include directives are automatically generated. For + custom stream types use the --hxx-prologue* options to + provide the necessary declarations.
+ +
--generate-forward
+
Generate a separate header file with forward declarations for the types + being generated.
+ +
--suppress-parsing
+
Suppress the generation of the parsing functions and constructors. Use this + option to reduce the generated code size when parsing from XML is not + needed.
+ +
--generate-element-type
+
Generate types instead of parsing and serialization functions for root + elements. This is primarily useful to distinguish object models with the + same root type but with different root elements.
+ +
--generate-element-map
+
Generate a root element map that allows uniform parsing and serialization of + multiple root elements. This option is only valid together with + --generate-element-type.
+ +
--generate-intellisense
+
Generate workarounds for IntelliSense bugs in Visual Studio 2005 (8.0). When + this option is used, the resulting code is slightly more verbose. + IntelliSense in Visual Studio 2008 (9.0) and later does not require these + workarounds. Support for IntelliSense in Visual Studio 2003 (7.1) is + improved with this option but is still incomplete.
+ +
--omit-default-attributes
+
Omit attributes with default and fixed values from serialized XML documents.
+ +
--type-naming style
+
Specify the type naming convention that should be used in the generated + code. Valid styles are knr (default), + ucc, and java. See the NAMING + CONVENTION section below for more information.
+ +
--function-naming style
+
Specify the function naming convention that should be used in the generated + code. Valid styles are knr (default), + lcc, and java. See the NAMING + CONVENTION section below for more information.
+ +
--type-regex regex
+
Add regex to the list of regular expressions used to translate XML + Schema type names to C++ type names. See the NAMING CONVENTION section below + for more information.
+ +
--accessor-regex regex
+
Add regex to the list of regular expressions used to translate XML + Schema names of elements/attributes to C++ accessor function names. See the + NAMING CONVENTION section below for more information.
+ +
--one-accessor-regex regex
+
Add regex to the list of regular expressions used to translate XML + Schema names of elements/attributes with cardinality one to C++ accessor + function names. See the NAMING CONVENTION section below for more + information.
+ +
--opt-accessor-regex regex
+
Add regex to the list of regular expressions used to translate XML + Schema names of elements/attributes with cardinality optional to C++ + accessor function names. See the NAMING CONVENTION section below for more + information.
+ +
--seq-accessor-regex regex
+
Add regex to the list of regular expressions used to translate XML + Schema names of elements/attributes with cardinality sequence to C++ + accessor function names. See the NAMING CONVENTION section below for more + information.
+ +
--modifier-regex regex
+
Add regex to the list of regular expressions used to translate XML + Schema names of elements/attributes to C++ modifier function names. See the + NAMING CONVENTION section below for more information.
+ +
--one-modifier-regex regex
+
Add regex to the list of regular expressions used to translate XML + Schema names of elements/attributes with cardinality one to C++ modifier + function names. See the NAMING CONVENTION section below for more + information.
+ +
--opt-modifier-regex regex
+
Add regex to the list of regular expressions used to translate XML + Schema names of elements/attributes with cardinality optional to C++ + modifier function names. See the NAMING CONVENTION section below for more + information.
+ +
--seq-modifier-regex regex
+
Add regex to the list of regular expressions used to translate XML + Schema names of elements/attributes with cardinality sequence to C++ + modifier function names. See the NAMING CONVENTION section below for more + information.
+ +
--parser-regex regex
+
Add regex to the list of regular expressions used to translate XML + Schema element names to C++ parsing function names. See the NAMING + CONVENTION section below for more information.
+ +
--serializer-regex regex
+
Add regex to the list of regular expressions used to translate XML + Schema element names to C++ serialization function names. See the NAMING + CONVENTION section below for more information.
+ +
--const-regex regex
+
Add regex to the list of regular expressions used to translate XML + Schema-derived names to C++ constant names. See the NAMING CONVENTION + section below for more information.
+ +
--enumerator-regex regex
+
Add regex to the list of regular expressions used to translate XML + Schema enumeration values to C++ enumerator names. See the NAMING CONVENTION + section below for more information.
+ +
--element-type-regex regex
+
Add regex to the list of regular expressions used to translate XML + Schema element names to C++ element type names. See the NAMING CONVENTION + section below for more information.
+ +
--name-regex-trace
+
Trace the process of applying regular expressions specified with the name + transformation options. Use this option to find out why your regular + expressions don't do what you expected them to do.
+ +
--root-element-first
+
Treat only the first global element as a document root. By default all + global elements are considered document roots.
+ +
--root-element-last
+
Treat only the last global element as a document root. By default all global + elements are considered document roots.
+ +
--root-element-all
+
Treat all global elements as document roots. This is the default behavior. + By explicitly specifying this option you can suppress the warning that is + issued if more than one global element is defined.
+ +
--root-element-none
+
Do not treat any global elements as document roots. By default all global + elements are considered document roots.
+ +
--root-element element
+
Treat only element as a document root. Repeat this option to specify + more than one root element.
+ +
--custom-type map
+
Use a custom C++ type instead of the generated class. The map + argument is in the form + name[=type[/base]], where + name is a type name as defined in XML Schema and type is a C++ + type name that should be used instead. If type is not present or + empty then the custom type is assumed to have the same name and be defined + in the same namespace as the generated class would have. If base is + specified then the generated class is still generated but with that name.
+ +
--custom-type-regex regex
+
Use custom C++ types instead of the generated classes. The regex + argument is in the form + /name-pat/[type-sub/[base-sub/]], + where name-pat is a regex pattern that will be matched against type + names as defined in XML Schema and type-sub is a C++ type name + substitution that should be used instead. If type-sub is not present + or its substitution results in an empty string then the custom type is + assumed to have the same name and be defined in the same namespace as the + generated class would have. If base-sub is present and its + substitution results in a non-empty string then the generated class is still + generated but with the result of this substitution as its name. The pattern + and substitutions are in the Perl regular expression format. See also the + REGEX AND SHELL QUOTING section below.
+ +
--parts num
+
Split generated source code into num parts. This is useful when + translating large, monolithic schemas and a C++ compiler is not able to + compile the resulting source code at once (usually due to insufficient + memory).
+ +
--parts-suffix suffix
+
Use suffix instead of the default '-' to separate + the file name from the part number.
+ +
+

CXX-PARSER COMMAND OPTIONS

+ + + +
+
--type-map mapfile
+
Read XML Schema to C++ type mapping information from mapfile. Repeat + this option to specify several type maps. Type maps are considered in order + of appearance and the first match is used. By default all user-defined types + are mapped to void. See the TYPE MAP section below for + more information.
+ +
--xml-parser parser
+
Use parser as the underlying XML parser. Valid values are + xerces for Xerces-C++ (default) and + expat for Expat.
+ +
--generate-validation
+
Generate validation code. The validation code ("perfect parser") ensures + that instance documents conform to the schema. Validation code is generated + by default when the selected underlying XML parser is non-validating + (expat).
+ +
--suppress-validation
+
Suppress the generation of validation code. Validation is suppressed by + default when the selected underlying XML parser is validating + (xerces).
+ +
--generate-polymorphic
+
Generate polymorphism-aware code. Specify this option if you use + substitution groups or xsi:type.
+ +
--generate-noop-impl
+
Generate a sample parser implementation that does nothing (no operation). + The sample implementation can then be filled with the application-specific + code. For an input file in the form name.xsd this option + triggers the generation of two additional C++ files in the form: + name-pimpl.hxx (parser implementation header file) and + name-pimpl.cxx (parser implementation source file).
+ +
--generate-print-impl
+
Generate a sample parser implementation that prints the XML data to + STDOUT. For an input file in the form + name.xsd this option triggers the generation of two + additional C++ files in the form: name-pimpl.hxx (parser + implementation header file) and name-pimpl.cxx (parser + implementation source file).
+ +
--generate-test-driver
+
Generate a test driver for the sample parser implementation. For an input + file in the form name.xsd this option triggers the + generation of an additional C++ file in the form + name-driver.cxx.
+ +
--force-overwrite
+
Force overwriting of the existing implementation and test driver files. Use + this option only if you do not mind loosing the changes you have made in the + sample implementation or test driver files.
+ +
--root-element-first
+
Indicate that the first global element is the document root. This + information is used to generate the test driver for the sample + implementation.
+ +
--root-element-last
+
Indicate that the last global element is the document root. This information + is used to generate the test driver for the sample implementation.
+ +
--root-element element
+
Indicate that element is the document root. This information is used + to generate the test driver for the sample implementation.
+ +
--skel-type-suffix suffix
+
Use the provided suffix instead of the default + _pskel to construct the names of the generated parser + skeletons.
+ +
--skel-file-suffix suffix
+
Use the provided suffix instead of the default + -pskel to construct the names of the generated parser + skeleton files.
+ +
--impl-type-suffix suffix
+
Use the provided suffix instead of the default + _pimpl to construct the names of the parser + implementations for the built-in XML Schema types as well as sample parser + implementations.
+ +
--impl-file-suffix suffix
+
Use the provided suffix instead of the default + -pimpl to construct the names of the generated sample + parser implementation files.
+ +
+

NAMING CONVENTION

+ +

The compiler can be instructed to use a particular naming + convention in the generated code. A number of widely-used + conventions can be selected using the --type-naming + and --function-naming options. A custom + naming convention can be achieved using the + --type-regex, + --accessor-regex, + --one-accessor-regex, + --opt-accessor-regex, + --seq-accessor-regex, + --modifier-regex, + --one-modifier-regex, + --opt-modifier-regex, + --seq-modifier-regex, + --parser-regex, + --serializer-regex, + --const-regex, + --enumerator-regex, and + --element-type-regex options. +

+ +

The --type-naming option specifies the + convention that should be used for naming C++ types. Possible + values for this option are knr (default), + ucc, and java. The + knr value (stands for K&R) signifies + the standard, lower-case naming convention with the underscore + used as a word delimiter, for example: foo, + foo_bar. The ucc (stands + for upper-camel-case) and + java values a synonyms for the same + naming convention where the first letter of each word in the + name is capitalized, for example: Foo, + FooBar.

+ +

Similarly, the --function-naming option + specifies the convention that should be used for naming C++ + functions. Possible values for this option are knr + (default), lcc, and java. The + knr value (stands for K&R) signifies + the standard, lower-case naming convention with the underscore + used as a word delimiter, for example: foo(), + foo_bar(). The lcc value + (stands for lower-camel-case) signifies a naming convention + where the first letter of each word except the first is + capitalized, for example: foo(), fooBar(). + The java naming convention is similar to + the lower-camel-case one except that accessor functions are prefixed + with get, modifier functions are prefixed + with set, parsing functions are prefixed + with parse, and serialization functions are + prefixed with serialize, for example: + getFoo(), setFooBar(), + parseRoot(), serializeRoot().

+ +

Note that the naming conventions specified with the + --type-naming and + --function-naming options perform only limited + transformations on the names that come from the schema in the + form of type, attribute, and element names. In other words, to + get consistent results, your schemas should follow a similar + naming convention as the one you would like to have in the + generated code. Alternatively, you can use the + --*-regex options (discussed below) + to perform further transformations on the names that come from + the schema.

+ +

The + --type-regex, + --accessor-regex, + --one-accessor-regex, + --opt-accessor-regex, + --seq-accessor-regex, + --modifier-regex, + --one-modifier-regex, + --opt-modifier-regex, + --seq-modifier-regex, + --parser-regex, + --serializer-regex, + --const-regex, + --enumerator-regex, and + --element-type-regex options allow you to + specify extra regular expressions for each name category in + addition to the predefined set that is added depending on + the --type-naming and + --function-naming options. Expressions + that are provided with the --*-regex + options are evaluated prior to any predefined expressions. + This allows you to selectively override some or all of the + predefined transformations. When debugging your own expressions, + it is often useful to see which expressions match which names. + The --name-regex-trace option allows you + to trace the process of applying regular expressions to + names.

+ +

The value for the --*-regex options should be + a perl-like regular expression in the form + /pattern/replacement/. + Any character can be used as a delimiter instead of /. + Escaping of the delimiter character in pattern or + replacement is not supported. + All the regular expressions for each category are pushed into a + category-specific stack with the last specified expression + considered first. The first match that succeeds is used. For the + --one-accessor-regex (accessors with cardinality one), + --opt-accessor-regex (accessors with cardinality optional), and + --seq-accessor-regex (accessors with cardinality sequence) + categories the --accessor-regex expressions are + used as a fallback. For the + --one-modifier-regex, + --opt-modifier-regex, and + --seq-modifier-regex + categories the --modifier-regex expressions are + used as a fallback. For the --element-type-regex + category the --type-regex expressions are + used as a fallback.

+ +

The type name expressions (--type-regex) + are evaluated on the name string that has the following + format:

+ +

[namespace ]name[,name][,name][,name]

+ +

The element type name expressions + (--element-type-regex), effective only when + the --generate-element-type option is specified, + are evaluated on the name string that has the following + format:

+ +

namespace name

+ +

In the type name format the namespace part + followed by a space is only present for global type names. For + global types and elements defined in schemas without a target + namespace, the namespace part is empty but + the space is still present. In the type name format after the + initial name component, up to three additional + name components can be present, separated + by commas. For example:

+ +

http://example.com/hello type

+

foo

+

foo,iterator

+

foo,const,iterator

+ +

The following set of predefined regular expressions is used to + transform type names when the upper-camel-case naming convention + is selected:

+ +

/(?:[^ ]* )?([^,]+)/\u$1/

+

/(?:[^ ]* )?([^,]+),([^,]+)/\u$1\u$2/

+

/(?:[^ ]* )?([^,]+),([^,]+),([^,]+)/\u$1\u$2\u$3/

+

/(?:[^ ]* )?([^,]+),([^,]+),([^,]+),([^,]+)/\u$1\u$2\u$3\u$4/

+ +

The accessor and modifier expressions + (--*accessor-regex and + --*modifier-regex) are evaluated on the name string + that has the following format:

+ +

name[,name][,name]

+ +

After the initial name component, up to two + additional name components can be present, + separated by commas. For example:

+ +

foo

+

dom,document

+

foo,default,value

+ +

The following set of predefined regular expressions is used to + transform accessor names when the java naming + convention is selected:

+ +

/([^,]+)/get\u$1/

+

/([^,]+),([^,]+)/get\u$1\u$2/

+

/([^,]+),([^,]+),([^,]+)/get\u$1\u$2\u$3/

+ +

For the parser, serializer, and enumerator categories, the + corresponding regular expressions are evaluated on local names of + elements and on enumeration values, respectively. For example, the + following predefined regular expression is used to transform parsing + function names when the java naming convention + is selected:

+ +

/(.+)/parse\u$1/

+ +

The const category is used to create C++ constant names for the + element/wildcard/text content ids in ordered types.

+ +

See also the REGEX AND SHELL QUOTING section below.

+ +

TYPE MAP

+ +

Type map files are used in C++/Parser to define a mapping between + XML Schema and C++ types. The compiler uses this information + to determine the return types of post_* + functions in parser skeletons corresponding to XML Schema + types as well as argument types for callbacks corresponding + to elements and attributes of these types.

+ +

The compiler has a set of predefined mapping rules that map + built-in XML Schema types to suitable C++ types (discussed + below) and all other types to void. + By providing your own type maps you can override these predefined + rules. The format of the type map file is presented below: +

+ +
+namespace <schema-namespace> [<cxx-namespace>]
+{
+  (include <file-name>;)*
+  ([type] <schema-type> <cxx-ret-type> [<cxx-arg-type>];)*
+}
+  
+ +

Both <schema-namespace> and + <schema-type> are regex patterns while + <cxx-namespace>, + <cxx-ret-type>, and + <cxx-arg-type> are regex pattern + substitutions. All names can be optionally enclosed in + " ", for example, to include white-spaces.

+ +

<schema-namespace> determines XML + Schema namespace. Optional <cxx-namespace> + is prefixed to every C++ type name in this namespace declaration. + <cxx-ret-type> is a C++ type name that is + used as a return type for the post_* functions. + Optional <cxx-arg-type> is an argument + type for callback functions corresponding to elements and attributes + of this type. If + <cxx-arg-type> is not specified, it defaults + to <cxx-ret-type> if <cxx-ret-type> + ends with * or & (that is, + it is a pointer or a reference) and + const <cxx-ret-type>& + otherwise. + <file-name> is a file name either in the + " " or < > format + and is added with the #include directive to + the generated code.

+ +

The # character starts a comment that ends + with a new line or end of file. To specify a name that contains + # enclose it in " ". + For example:

+ +
+namespace http://www.example.com/xmlns/my my
+{
+  include "my.hxx";
+
+  # Pass apples by value.
+  #
+  apple apple;
+
+  # Pass oranges as pointers.
+  #
+  orange orange_t*;
+}
+  
+ +

In the example above, for the + http://www.example.com/xmlns/my#orange + XML Schema type, the my::orange_t* C++ type will + be used as both return and argument types.

+ +

Several namespace declarations can be specified in a single + file. The namespace declaration can also be completely + omitted to map types in a schema without a namespace. For + instance:

+ +
+include "my.hxx";
+apple apple;
+
+namespace http://www.example.com/xmlns/my
+{
+  orange "const orange_t*";
+}
+  
+ +

The compiler has a number of predefined mapping rules that can be + presented as the following map files. The string-based XML Schema + built-in types are mapped to either std::string + or std::wstring depending on the character type + selected with the --char-type option + (char by default).

+ +
+namespace http://www.w3.org/2001/XMLSchema
+{
+  boolean bool bool;
+
+  byte "signed char" "signed char";
+  unsignedByte "unsigned char" "unsigned char";
+
+  short short short;
+  unsignedShort "unsigned short" "unsigned short";
+
+  int int int;
+  unsignedInt "unsigned int" "unsigned int";
+
+  long "long long" "long long";
+  unsignedLong "unsigned long long" "unsigned long long";
+
+  integer "long long" "long long";
+
+  negativeInteger "long long" "long long";
+  nonPositiveInteger "long long" "long long";
+
+  positiveInteger "unsigned long long" "unsigned long long";
+  nonNegativeInteger "unsigned long long" "unsigned long long";
+
+  float float float;
+  double double double;
+  decimal double double;
+
+  string std::string;
+  normalizedString std::string;
+  token std::string;
+  Name std::string;
+  NMTOKEN std::string;
+  NCName std::string;
+  ID std::string;
+  IDREF std::string;
+  language std::string;
+  anyURI std::string;
+
+  NMTOKENS xml_schema::string_sequence;
+  IDREFS xml_schema::string_sequence;
+
+  QName xml_schema::qname;
+
+  base64Binary std::auto_ptr<xml_schema::buffer>
+               std::auto_ptr<xml_schema::buffer>;
+  hexBinary std::auto_ptr<xml_schema::buffer>
+            std::auto_ptr<xml_schema::buffer>;
+
+  date xml_schema::date;
+  dateTime xml_schema::date_time;
+  duration xml_schema::duration;
+  gDay xml_schema::gday;
+  gMonth xml_schema::gmonth;
+  gMonthDay xml_schema::gmonth_day;
+  gYear xml_schema::gyear;
+  gYearMonth xml_schema::gyear_month;
+  time xml_schema::time;
+}
+  
+ +

The last predefined rule maps anything that wasn't mapped by + previous rules to void:

+ +
+namespace .*
+{
+  .* void void;
+}
+  
+ + +

When you provide your own type maps with the + --type-map option, they are evaluated first. + This allows you to selectively override predefined rules.

+ +

REGEX AND SHELL QUOTING

+ +

When entering a regular expression argument in the shell + command line it is often necessary to use quoting (enclosing + the argument in " " or + ' ') in order to prevent the shell + from interpreting certain characters, for example, spaces as + argument separators and $ as variable + expansions.

+ +

Unfortunately it is hard to achieve this in a manner that is + portable across POSIX shells, such as those found on + GNU/Linux and UNIX, and Windows shell. For example, if you + use " " for quoting you will get a + wrong result with POSIX shells if your expression contains + $. The standard way of dealing with this + on POSIX systems is to use ' ' instead. + Unfortunately, Windows shell does not remove ' ' + from arguments when they are passed to applications. As a result you + may have to use ' ' for POSIX and + " " for Windows ($ is + not treated as a special character on Windows).

+ +

Alternatively, you can save regular expression options into + a file, one option per line, and use this file with the + --options-file option. With this approach + you don't need to worry about shell quoting.

+ +

DIAGNOSTICS

+ +

If the input file is not a valid W3C XML Schema definition, + xsd will issue diagnostic messages to STDERR + and exit with non-zero exit code.

+ +

BUGS

+ +

Send bug reports to the + xsd-users@codesynthesis.com mailing list.

+ +
+ +
+ + diff --git a/xsd/documentation/custom-literals.xsd b/xsd/documentation/custom-literals.xsd deleted file mode 100644 index ab2d649..0000000 --- a/xsd/documentation/custom-literals.xsd +++ /dev/null @@ -1,49 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/xsd/documentation/cxx/makefile b/xsd/documentation/cxx/makefile deleted file mode 100644 index e039e23..0000000 --- a/xsd/documentation/cxx/makefile +++ /dev/null @@ -1,22 +0,0 @@ -# file : documentation/cxx/makefile -# author : Boris Kolpackov -# copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC -# license : GNU GPL v2 + exceptions; see accompanying LICENSE file - -include $(dir $(lastword $(MAKEFILE_LIST)))../../build/bootstrap.make - -docs := parser tree - -default := $(out_base)/ -install := $(out_base)/.install -dist := $(out_base)/.dist -dist-win := $(out_base)/.dist-win -cleandoc := $(out_base)/.cleandoc - -$(default): $(addprefix $(out_base)/,$(addsuffix /,$(docs))) -$(install): $(addprefix $(out_base)/,$(addsuffix /.install,$(docs))) -$(dist): $(addprefix $(out_base)/,$(addsuffix /.dist,$(docs))) -$(dist-win): $(addprefix $(out_base)/,$(addsuffix /.dist-win,$(docs))) -$(cleandoc): $(addprefix $(out_base)/,$(addsuffix /.cleandoc,$(docs))) - -$(foreach m,$(docs),$(call import,$(src_base)/$m/makefile)) diff --git a/xsd/documentation/cxx/parser/guide/cxx-parser-guide.pdf b/xsd/documentation/cxx/parser/guide/cxx-parser-guide.pdf deleted file mode 100644 index c549f94..0000000 Binary files a/xsd/documentation/cxx/parser/guide/cxx-parser-guide.pdf and /dev/null differ diff --git a/xsd/documentation/cxx/parser/guide/cxx-parser-guide.ps b/xsd/documentation/cxx/parser/guide/cxx-parser-guide.ps deleted file mode 100644 index 0dcd6d7..0000000 --- a/xsd/documentation/cxx/parser/guide/cxx-parser-guide.ps +++ /dev/null @@ -1,20713 +0,0 @@ -%!PS -%%Title: C++/Parser Mapping Getting Started Guide -%%Creator: html2ps version 1.0 beta5 -%%EndComments -save -2000 dict begin -/d {bind def} bind def -/D {def} d -/t true D -/f false D -/FL [/Times-Roman -/Times-Italic -/Times-Bold -/Times-BoldItalic -/Courier -/Courier-Oblique -/Courier-Bold -/Courier-BoldOblique -/Helvetica -/Helvetica-Oblique -/Helvetica-Bold -/Helvetica-BoldOblique] D -/WF t D -/WI 0 D -/F 1 D -/IW 471 F div D -/IL 621 F div D -/PS 791 D -/EF [0 1 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 2 2] D -/EZ [12 10 19 17 15 13 12 11 12 12 12 12 12 12 12 12 12 12 12 12 12 12 8 8] D -/Ey [0 0 2 2 2 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0] D -/EG [-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1] D -/Tm [1 1 0.8 0.8 0.8 0.8 0.8 0.8 0 0 0 0 0 0 0.5 1 1 1 1 0 0 1.3 0 0] D -/Bm [1 1 0.5 0.5 0.5 0.5 0.5 0.5 0 0 0 0 0 0 0.5 1 1 1 1 0 0 1 0 0] D -/Lm [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 2 2 0 0 2 0 0 0] D -/Rm [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0] D -/EU [-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 0 0] D -/NO f D -/YY [[{()}{ h }][{ h }{()}][{()}{()}]] D -/ZZ [[{ (January 2010) }{ Pn }][{ Pn }{ (January 2010) }][{ Ti }{ Ti }]] D -/Ts EZ 0 get D -/TU f D -/Xp t D -/AU f D -/SN 0 D -/Cf t D -/Tp t D -/Fe f D -/TI 2 Ts mul D -/Fm 14 D -/xL 71 D -/xR 71 D -/yL 706 D -/yR 706 D -/Wl 471 F div D -/Wr 471 F div D -/hL 621 F div D -/hR 621 F div D -/FE {newpath Fm neg Fm M CP BB IW Fm add Fm L IW Fm add IL Fm add neg L CP BB - Fm neg IL Fm add neg L closepath} D -/LA {PM 0 eq{/IW Wl D /IL hL D}{/IW Wr D /IL hR D}ie /W IW D /LL W D /LS W D - TU PM 0 eq and{IW 56 F div add SA{Sf div}if 0 translate} - {PM 0 eq{xL yL}{xR yR}ie translate F SA{Sf mul}if dup scale - CS CF FS Cf{CA CL get VC}if /Bb f D}ie 0 0 M - TF not Tc or {Cf{gsave SA{1 Sf div dup scale}if Cb VC FE fill grestore}if}if}D -/Pi 0 Ts mul D -/SG [0.8 1 1] D -/Ab 15 D -/J 0 D -/Tc t D -/NH 6 D -/Nf f D -/Pa f D -/LH 1.2 D -/XR f D -/Xr {/pN E D ( [p ) WB pN WB (] )WB} D -/Db [16#FF 16#FF 16#FF] D -/Dt [16#00 16#00 16#00] D -/eA f D -/Fi f D -/bT f D -/Lc t D -/Dl [16#00 16#00 16#00] D -/LX f D -/Br 0.25 D -/IA ([IMAGE]) D -/DS {/PF f D()WB NL NP()pop RC ZF} D -/Gb f D -/Mb t D -/Hc [16#00 16#00 16#00] D -/Bl 3 D -/MI -15.6 D -/DX (DRAFT) D -/Di 0 D -/Tt 113.385826771654 D -/Th { ( -) 2 Al()BR ( - ) 0 1 -1 H()4 FZ (C++/Parser Mapping) ES()EH ( - ) 0 1 -1 H()4 FZ (Getting Started Guide) ES()EH ( - ) 0 1 -1 H ( ) EH ( - ) 0 1 -1 H ( ) EH ( - ) 0 1 -1 H ( ) EH ( - ) 0 1 -1 H ( ) EH ( - ) 0 1 -1 H ( ) EH ( - ) 0 1 -1 H ( ) EH ( -) Ea()BR ( - ) 0 P (Copyright © 2005-2010 CODE SYNTHESIS TOOLS CC) EP ( - - ) 0 P (Permission is granted to copy, distribute and/or modify this - document under the terms of the - ) R0 2 A (GNU Free - Documentation License, version 1.2) EA (; with no Invariant Sections, - no Front-Cover Texts and no Back-Cover Texts. - ) EP ( - - ) 0 P (This document is available in the following formats: - ) R1 2 A (XHTML) EA (, - ) R2 2 A (PDF) EA (, and - ) R3 2 A (PostScript) EA (.) EP()} D -/tH {()0 1 -1 H (Table of Contents) EH()} D -/FD 2 D -/Dy 2 D -/cD [16#F0 16#F0 16#F0] D -/FW 0.6 D -/FU [16#00 16#00 16#00] D -/ET {/RM f D /A0 3 D /PN SN D /OU t D /Ou t D /W IW D /LL W D D1 - Ms not TP and{Ip}if /TF f D} D - -%-- End of variable part -- -/MySymbol 10 dict dup begin - /FontType 3 D /FontMatrix [.001 0 0 .001 0 0 ] D /FontBBox [25 -10 600 600] D - /Encoding 256 array D 0 1 255{Encoding exch /.notdef put}for - Encoding (e) 0 get /euro put - /Metrics 2 dict D Metrics begin - /.notdef 0 D - /euro 651 D - end - /BBox 2 dict D BBox begin - /.notdef [0 0 0 0] D - /euro [25 -10 600 600] D - end - /CharacterDefs 2 dict D CharacterDefs begin - /.notdef {} D - /euro{newpath 114 600 moveto 631 600 lineto 464 200 lineto 573 200 lineto - 573 0 lineto -94 0 lineto 31 300 lineto -10 300 lineto closepath clip - 50 setlinewidth newpath 656 300 moveto 381 300 275 0 360 arc stroke - -19 350 moveto 600 0 rlineto -19 250 moveto 600 0 rlineto stroke}d - end - /BuildChar{0 begin - /char E D /fontdict E D /charname fontdict /Encoding get char get D - fontdict begin - Metrics charname get 0 BBox charname get aload pop setcachedevice - CharacterDefs charname get exec - end - end}D - /BuildChar load 0 3 dict put /UniqueID 1 D -end -definefont pop - -/Cd {aload length 2 idiv dup dict begin {D} repeat currentdict end} D -/EX {EC cvx exec} D -/DU {} d -/BB {pop pop}d -/ie {ifelse} d -/E {exch} d -/M {moveto} d -/R {rmoveto} d -/L {lineto} d -/RL {rlineto} d -/CP {currentpoint} d -/SW {stringwidth} d -/GI {getinterval} d -/PI {putinterval} d -/Sg {setgray} d -/LW {setlinewidth} d -/S {dup () ne OU and{0 Co R AT 3 eq LB and HF not and A1 0 ne A2 0 ne or and - {A2 0 32 A1 0 6 -1 roll awidthshow}{show}ie 0 Co neg R}{pop}ie - OU PH 3 eq or{/Ms t D}if} D -/U {OU{gsave CP currentfont /FontInfo get /UnderlinePosition get - 0 E currentfont /FontMatrix get dtransform E pop add newpath M dup SW pop - CJ 0 RL stroke grestore}if} D -/B {OU Br 0 gt and{CP Ts neg Ts .33 mul R gsave 0 Sg - CP newpath Ts Br mul 0 360 arc closepath UI 2 mod 0 eq{stroke}{fill}ie - grestore M CP E Ts Br 1 add mul sub E BB /Ms t D}if}D -/NP {Ms TP not or PA and OU and{TP{OR}if f1{mF k2 /mF E D /YC 0 D}if - TP TU not PM 0 eq or and{showpage}if DU Ip TE not{LA}if 0.6 LW - /CI 0 D /TP t D /Hs f D /hl 6 D /Hv 6 D /HI hi D /Ms f D}if Bs XO BO M} D -/Np {LE sub CP E pop gt PL 0 eq and{NP}if}D -/Ip {/PN PN 1 add D /Pn RM{1}{4}ie PN Ns D /PM PN SN sub 2 mod D} D -/GP {E dup 3 -1 roll get PN 1 add 2 mod get dup type /integertype eq - {get 0 get}{E pop}ie}d -/Fc {dup 2 GP exec SW pop /S1 E D dup 1 GP exec SW pop /S2 E D 0 GP exec SW - pop /S3 E D S1 0 gt{S2 2 mul S1 add S3 2 mul S1 add 2 copy lt{E}if pop}{0}ie - S2 S3 add 2 copy lt{E}if pop IW .9 mul div dup 1 gt{1 E div}{pop 1}ie}D -/OR {Df{Sd}if tp not{gsave SA{1 Sf div dup scale}if Fe{Cf{FU VC}if FW LW - 1 setlinejoin FE stroke}if /YO {60 F div dup 40 gt{pop 40}if}D /cs CS D - /cf CF D /CF 0 D /pf PF D /PF f D /Fn FN D /At AT D /AT 0 D /FN EF Hf 1 add - get D Fz Fs FS ZZ Fc Fz mul Fs FS EU Hf 1 add get dup type /arraytype eq - Cf and{VC}{pop 0 Sg}ie IW IL neg YO sub M ZZ 1 GP exec dup SW pop neg 0 R Sh - 0 IL neg YO sub M ZZ 0 GP exec Sh ZZ 2 GP exec dup SW pop IW E sub 2 div - IL neg YO sub M Sh Fz Fs FS NO{/AW IW Pn SW pop sub D AW 2 div IL neg YO sub - S1 0 gt S2 AW .45 mul gt or S3 AW .45 mul gt or{Fz 2 mul sub}if M Pn Sh}if - EU Hf get dup type /arraytype eq Cf and{VC}{pop 0 Sg}ie YY Fc /FN EF Hf get D - Hz mul HS FS IW YO M YY 1 GP exec dup SW pop neg 0 R Sh 0 YO M YY 0 GP exec Sh - YY 2 GP exec dup SW pop IW E sub 2 div YO M Sh /FN Fn D /AT At D t Pb XO SZ - SL get neg R /PF pf D grestore /CF 0 D cs cf FS}if}D -/Sh {dup () ne{CP Hz 4 div sub BB show CP CS add BB}{pop}ie}D -/Pb {/OU E D /Ou OU D /PB t D 0 0 M Ba{/Sa save D /BP t D /Fl t D RC /PL 0 D - /PH 0 D /W IW D /LE IL .7 mul D /EO 0 D SI ZF /YA 0 D /BO 0 D /C1 () D - BA 0 Ts neg R Bb{Xl Yl Xh Yh}if Bb CP Sa restore M - {/Yh E D /Xh E D /Yl E D /Xl E D}if /Fl t D}if - BL /OU t D /HM f D /Ou t D /PB f D} D -/Bs {/BP Ba not D}D -/reencodeISO { - dup dup findfont dup length dict begin{1 index /FID ne{D}{pop pop}ie}forall - /Encoding ISOLatin1Encoding D currentdict end definefont} D -/ISOLatin1Encoding [ -/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef -/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef -/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef -/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef -/space/exclam/quotedbl/numbersign/dollar/percent/ampersand/quoteright -/parenleft/parenright/asterisk/plus/comma/hyphen/period/slash -/zero/one/two/three/four/five/six/seven/eight/nine/colon/semicolon -/less/equal/greater/question/at/A/B/C/D/E/F/G/H/I/J/K/L/M/N -/O/P/Q/R/S/T/U/V/W/X/Y/Z/bracketleft/backslash/bracketright -/asciicircum/underscore/quoteleft/a/b/c/d/e/f/g/h/i/j/k/l/m -/n/o/p/q/r/s/t/u/v/w/x/y/z/braceleft/bar/braceright/asciitilde -/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef -/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef -/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef -/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef -/.notdef/space/exclamdown/cent/sterling/currency/yen/brokenbar -/section/dieresis/copyright/ordfeminine/guillemotleft/logicalnot -/hyphen/registered/macron/degree/plusminus/twosuperior/threesuperior -/acute/mu/paragraph/periodcentered/cedilla/onesuperior/ordmasculine -/guillemotright/onequarter/onehalf/threequarters/questiondown -/Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE/Ccedilla -/Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex -/Idieresis/Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis -/multiply/Oslash/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute -/Thorn/germandbls/agrave/aacute/acircumflex/atilde/adieresis -/aring/ae/ccedilla/egrave/eacute/ecircumflex/edieresis/igrave -/iacute/icircumflex/idieresis/eth/ntilde/ograve/oacute/ocircumflex -/otilde/odieresis/divide/oslash/ugrave/uacute/ucircumflex/udieresis -/yacute/thorn/ydieresis -] D -[128/backslash 129/parenleft 130/parenright 141/circumflex 142/tilde -143/perthousand 144/dagger 145/daggerdbl 146/Ydieresis 147/scaron 148/Scaron -149/oe 150/OE 151/guilsinglleft 152/guilsinglright 153/quotesinglbase -154/quotedblbase 155/quotedblleft 156/quotedblright 157/endash 158/emdash -159/trademark] -aload length 2 idiv 1 1 3 -1 roll{pop ISOLatin1Encoding 3 1 roll put}for -/colorimage where{pop}{ - /colorimage { - pop pop /Pr E D {/Cv Pr D /Gr Cv length 3 idiv string D 0 1 Gr length 1 sub - {Gr E dup /i E 3 mul D Cv i get 0.299 mul Cv i 1 add get 0.587 mul add - Cv i 2 add get 0.114 mul add cvi put}for Gr} image} D -}ie -/pdfmark where{pop}{userdict /pdfmark /cleartomark load put}ie -WF{FL{reencodeISO D}forall}{4 1 FL length 1 sub{FL E get reencodeISO D}for}ie -/Symbol dup dup findfont dup length dict begin - {1 index /FID ne{D}{pop pop}ie}forall /Encoding [Encoding aload pop] - dup 128 /therefore put D currentdict end definefont D - -/SF {/CS E D SZ SL CS put FO SL FN put /YI CS LH neg mul D dup ST cvs ( ) join - CS ST cvs join C1 E join ( NF ) join /C1 E D CS NF /Wf WF FN 0 gt or D - /BW Wf{( ) SW pop}{0}ie D}D -/NF {/cS E D /cF E D cF 0 ge{FL cF get}{cF -1 eq{/Symbol}{/MySymbol}ie}ie - findfont cS scalefont setfont} D -/FS {CF or /CF E D FR SL CF put CF CF 0 ge{FN 4 mul add}if E SF} D -/PC {SH /BP f D fin not GL not and{NL}if /HM t D /LL LS D} D -/BS {/TX E D Wf{/fin f D /CW 0 D /LK 0 D /SC 0 D - /RT TX D {RT ( ) search{/NW E D pop /RT E D /WH NW SW pop D CW WH add LL gt - {TX SC LK SC sub 1 sub NN GI GL{SH cF cS OC - 2 copy cS ne E cF ne or{NF}{pop pop}ie}{PC /CW WH BW add D}ie - /SC LK D} - {GL{JC}if - /CW CW WH add BW add D /HM t D}ie /GL f D /Ph f D - /LK LK NW length 1 add add D}{pop exit}ie}loop - /fin t D TX SC LK SC sub GI SH RT () ne{GL not{CC}if}if - /LC TX length D /WH RT SW pop D CW WH add Hy{HC SW pop add}if LL gt - {RT GL{SH cF cS OC 2 copy cS ne E cF ne or{NF}{pop pop}ie - Hy{/Ph t D}if /LL LS D}{NL /LL LS D SH}ie} - {RT PC Hy{CC}if /Ph Ph Hy or D}ie RT () ne{/GL t D /HM t D}if} - {TX SW pop LL le{TX SH}{/NW () D 0 2 TX length 1 sub - {/CW E D TX 0 CW GI dup SW pop LL gt{pop NW SH /HM t D NL/LL W XO sub MR sub D - /CW CW 2 sub NN D /TX TX CW TX length CW sub GI D TX BS exit} - {/NW E D}ie}for}ie}ie /HM t D}D -/CC {C0 length 0 gt{JC}if /C0 [C1 L1 YA YB Mf NS NB TB AF Bw] D - /C1 () D /L0 L1 D /YA 0 D /YB 0 D /Mf 0 D /NS 0 D /NB 0 D}D -/JC {C0 aload length 0 gt{pop pop pop NB add /NB E D NS add /NS E D - dup Mf gt{/Mf E D}{pop}ie dup YB gt{/YB E D}{pop}ie - dup YA gt{/YA E D}{pop}ie pop C1 join /C1 E D /C0 [] D}if}D -/OC {C0 length 0 gt{C1 L1 L0 sub YA YB Mf NS NB TB AF Bw GL C0 aload pop - /Bw E D /AF E D /TB E D /NB E D /NS E D /Mf E D /YB E D /YA E D /C0 [] D - /L1 E D /C1 E D Ph{HC SH}if NL /GL E D /Bw E D /AF E D /TB E D /NB E D /NS E D - /Mf E D /YB E D /YA E D /L1 E D /LL W L1 sub XO sub MR sub WH sub D /CW 0 D - C1 E join /C1 E D}if}D -/BT {/LB t D dup length string copy RS dup dup () ne E ( ) ne and - {/CI 0 D /LS LL D /LL W L1 sub XO sub MR sub D BS} - {dup ( ) eq{/GL f D}if dup () eq L1 0 eq or{pop}{SH /BP f D /Ph f D}ie}ie - /LB f D} D -/BL {CP E pop XO E M} D -/NL {JC /GL f D /SK W XO sub MR sub L1 sub TB{Bw add}if D - /YA LF{Mf HM Fl not and PF or{LH mul}if}{0 /LF t D}ie YA 2 copy lt{E}if pop D - C1 () ne{/FB YB Mf SA{Sf mul}if 4 div 2 copy lt{E}if pop D}if Fl{/Ya YA D}if - CP E pop YA sub YB sub LE neg lt Fl not and PB not and{NP}if NT TL BL - OU PF not and PB or{/RE L1 TB{Bw sub}if - W XO sub MR sub div YA YB add LE BO add div 2 copy lt{E}if pop D - RE 1 gt{BL 1 RE div dup scale}if}if - AT 2 le{SK AT mul 2 div YA neg R}if - AT 3 eq{0 YA neg R TB{/NB NB 1 sub D /NS NS 1 sub D}if /NB NB 1 sub NN D - /A3 NS 6 mul NB add D NS NB add 0 eq - {/A1 0 D /A2 0 D} - {NS 0 eq{/A1 SK NB div dup J gt{pop 0}if D /A2 0 D}{J A3 mul SK lt - {/A1 J D /A2 SK J NB mul sub NS div dup Ab gt{/A1 0 D pop 0}if D} - {/A1 SK A3 div D /A2 A1 6 mul D}ie}ie}ie /A1 A1 NN D /A2 A2 NN D}if - AT 4 eq{0 YA neg R PH 2 le{PD 0 lt{/PD L1 D}if PD M1 gt{/M1 PD D}if - L1 PD sub M2 gt{/M2 L1 PD sub D}if}{DV ID 1 sub get 0 ge{Lo 0 R}if}ie}if - F0 cF ne Cs cS ne or{F0 Cs NF}if - /ms Ms D /Ms f D CP FB sub - C1 cvx exec XO EO sub L1 add TB{BW sub}if dup LM gt{/LM E D}{pop}ie - PH 0 eq PH 4 eq or Ms and{HF not{/PO t D /AH t D}if - BB CP YA add E AT 3 eq LB and{A1 sub}if TB{BW sub}if E BB} - {pop pop}ie Ms HM PH 3 eq and or{/BP f D /Fl f D}if - /Lo 0 D /L1 0 D /F0 cF D /Cs cS D BP not{0 YB NN neg R}if - OU f1 and mF not and{k2 /f1 f D}if - OU PF not and PB or{RE 1 gt{RE dup scale}if}if /Ms ms Ms or D - /C1 AF{(Cp )}{()}ie D /YA 0 D /YB 0 D BL - AT 4 eq LB not and PH 3 ge and - {ID DV length lt{DV ID get dup 0 ge{DO E sub /Lo E D /L1 Lo D}{pop}ie - /ID ID 1 add D}if}if /T t D CD{/LN LN 1 add D PD}if - /PD -1 D /NS 0 D /NB 0 D /TB f D /Ph f D /Mf 0 D /HM f D} D -/RS {/TM E D /CN 0 D TM{10 eq{TM CN ( ) PI}if /CN CN 1 add D}forall - /CN 0 D /BK HM EN and{0}{1}ie D TM - {dup 32 ne{TM CN 3 2 roll put /CN CN 1 add D /BK 0 D} - {pop BK 0 eq{TM CN 32 put /CN CN 1 add D}if /BK 1 D}ie}forall - TM 0 CN GI dup dup () ne E ( ) ne and - {dup CN 1 sub get 32 eq{/EN f D}{/EN t D}ie}if} D -/join {2 copy length E length add string dup 4 2 roll 2 index 0 3 index - PI E length E PI}d -/WR {(\n) search{dup () ne BP not or - {Li 4 le CP E pop YI Li mul add LE add 0 lt and PL 0 eq and{NP}if - SH NL pop /Li Li 1 sub D WR}{pop pop WR}ie}{SH}ie /CI 0 D /BP f D} D -/SH {dup dup () ne E ( ) ne and PF or CS Mf gt and{/Mf CS D}if - T not Wf and{( ) E join /T t D}if dup BP{/MF CS D}if - AT 3 eq{2 copy length dup 0 gt{/NB E NB add D - {( ) search{/NS NS 1 add D pop pop}{pop exit}ie}loop}{pop pop}ie}if - CD PD 0 lt and{dup DC search{SW pop /PD E L1 add D pop pop}{pop}ie}if - 0 Np dup SW pop L1 add /L1 E D dup () ne - {C1 (\() join E join (\)) join AU AF and UF or Wf and{( U ) join}if - sF{( s ) join}if ( S ) join - /C1 E D dup length 1 sub get 32 eq /TB E D /Bw BW D}{pop pop}ie} D -/BG {AI LG BC add add 0 eq} D -/ON {OU{Ty AR AI NN get dup 1 add Ln Ns Ty 2 mod 0 eq{(. )}{(\) )}ie join - dup SW pop neg 0 R CP E 0 lt{0 E M}{pop}ie CP BB show /Ms t D}if} D -/Ln {AR AI 3 -1 roll put}D -/SP {dup CI lt BP not and{dup CI sub 0 E R /CI E D}{pop}ie} D -/BN {PF{WR /HM f D}{BT NL}ie} D -/NN {dup 0 lt{pop 0}if} D -/h {(h) HI ST cvs join cvx exec dup 1 get E Nf{0 get E join}{pop}ie} D -/H {/fn FN D /Hi E 1 add D 1 sub /HL E D /H2 HL 2 add D /GS EZ H2 get D - E Tm H2 get GS mul BE dup 0 gt{1 sub}{pop EG H2 get dup 0 lt{pop AT}if}ie NA - WW Np /SL SL 1 add D /FN EF H2 get D GS Ey H2 get FS - EU H2 get Sc Hs not HL Hl lt and Hs HL hl lt and or Hi 0 eq or - {/HI Hi D /Hs t D /hl HL D /Hv HL D}if HL Hl lt{/hi Hi D}if - Nf HI 0 gt and{(h) Hi ST cvs join cvx exec 0 get WB}if - /HF t D /AH f D /PO f D} D -/EH {Bm H2 get GS mul BE OA /SL SL 1 sub NN D /CF 0 D /FN fn D - SZ SL get FR SL get FS /HF f D /GS Ts D ()Ec} D -/P {E PF{WR}{PO{EP}{BN}ie Ts 4 mul Np AE not{Tm 0 get Ts mul neg SP}if - dup 0 ge AH and{Pi Pd}if}ie 1 sub dup 0 lt{pop AV AL get}if /AT E D /PO t D} D -/EP {PF{WR}{BN Ts 4 mul Np}ie AE not{Bm 0 get Ts mul neg SP}if - /AT AV AL get D /PO f D} D -/BE {E PO{EP}{BN}ie Ts 4 mul Np neg SP} D -/HR {/Aw W EO sub D /RW E dup 0 gt{Aw mul}{neg}ie dup Aw gt{pop Aw}if D /RZ E D - E BN Ts neg SP 1 sub 2 div Aw RW sub mul EO add CP E pop M PF{0 Ps neg R}if - 0 Np OU{gsave RZ LW Cf{Hc VC}{0 Sg}ie CP BB RW 0 RL CP BB stroke grestore}if - /CI 0 D /BP f D PF not{Ts neg SP}if /Ms t D} D -/AD {I NL EG 14 get dup 0 lt{pop AT}if NA /AE t D Tm 14 get Ts mul neg SP - Cf{EU 14 get dup -1 eq{pop CA CL get}if Sc}if} D -/DA {BN ()ES OA /AE f D ()Ec Bm 14 get Ts mul neg SP} D -/PR {/MW E D /Li E D Tm 1 get Ps mul BE 0 NA /FN Fp D /PF t D SI /SL SL 1 add D - /CF 0 D Ps CS mul Ts div MW WC mul CS mul Ts div dup LL gt PL 0 eq and - {LL div div}{pop}ie Ey 1 get FS CP E pop LE add YI neg div cvi dup Li lt - AH and{4 lt YI Li mul 5 mul LE add 0 gt or PL 0 eq and{NP}if}{pop}ie - EU 1 get Sc /GS Ps D}D -/RP {WR NL () /PF f D SI /FN 0 D ES Bm 1 get Ps mul neg SP OA /GS Ts D} D -/SI {/XO Lm 15 get BC NN mul Lm 16 get AI UI sub NN mul add - Lm 17 get UI NN mul add Lm 20 get LG NN mul add Ts mul - PF{Lm 1 get Ps mul add}if EO add D - /MR Rm 15 get BC NN mul Rm 16 get AI UI sub NN mul add - Rm 17 get UI NN mul add Rm 20 get LG NN mul add Ts mul - PF{Rm 1 get Ps mul add}if D /LL W XO sub MR sub D} D -/DT {/cC E D BN /LG LG 1 sub D SI /LG LG 1 add D WW 2 div Np BL} D -/DD {WB Cc 0 eq cC 0 eq and L1 0 eq or Lm 20 get Ts mul L1 sub TB{BW add}if - Ts 2 div lt or NL /LF E D SI BL /cC 0 D} D -/DL {Dc LG Cc put /Cc E D BG{Tm 18 get Ts mul BE}{BN}ie /LG LG 1 add D BL} D -/LD {BN LG 0 gt{/LG LG 1 sub D}if /Cc Dc LG get D SI - BG{()Bm 18 get Ts mul BE}if BL} D -/UL {BG{Tm 17 get Ts mul BE}{BN}ie NR AI NN 0 put /UI UI 1 add D - /AI AI 1 add D SI BL} D -/LU {BN /UI UI 1 sub D /AI AI 1 sub D SI BG{()Bm 17 get Ts mul BE}if BL} D -/OL {E BG{Tm 16 get Ts mul BE}{BN}ie TR AI NN Ty put /Ty E D NR AI NN 1 put - /AI AI 1 add D SI BL 1 Ln} D -/LO {BN /AI AI 1 sub D /Ty TR AI get D SI BG{()Bm 16 get Ts mul BE}if BL} D -/LI {E BN -1 SP /BP f D /CI 0 D 0 Np NR AI 1 sub NN get 1 eq - {dup dup 0 gt E 4 le and{/Ty E D}{pop}ie - /L1 L1 Ty AR AI NN get Ns SW pop XO sub dup 0 lt{pop 0}if add D ( ON )} - {pop ( B )}ie C1 E join /C1 E D CS Mf gt{/Mf CS D}if BL} D -/BQ {Tm 15 get Ts mul BE /BC BC 1 add D SI BL} D -/QB {Bm 15 get Ts mul BE /BC BC 1 sub D SI BL} D -/Al {E EP 1 sub dup 0 lt{pop AV AL get}if NA} D -/Ea {EP OA} D -/WB {PF{WR}{BT}ie} D -/F1 {WB /FN 0 D CS 0 FS} D -/F2 {WB /FN WI D CS 0 FS} D -/HY {/Hy t D WB /Hy f D} D -/YH {WB} D -/A {/LT E D LT 1 eq{/RN E D}if /Lh E D WB /C1 C1 ( Cp ) join D - Lc AF not and{Cl Sc}if /AF t D} D -/EA {Lc AF and{Ec}{WB}ie TL Pa AF and Lh 0 ne and - {( \() Lh join (\)) join /AF f D WB}if /AF f D} D -/TL {C1 ( Tl ) apa /C1 E D} d -/apa {AF OU and Lh 0 ne LT 1 eq or and{LT 1 eq{RN ( /) E ST cvs join} - {(\() Lh join (\)) join}ie E join join}{pop}ie} d -/Cp {/Xc CP /Yc E D D} D -/SS {Cf{dup 0 ge{EU E get dup -1 eq{pop CA CL get}if}{pop CA CL get}ie Sc} - {pop}ie SZ SL get /SL SL 1 add D} D -/I {WB 8 SS 1 FS} D -/EM {WB 8 SS /CF CF 1 xor D 0 FS} D -/BD {WB 9 SS 2 FS} D -/TT {WB 10 SS /FN Fp D 0 FS} D -/KB {WB 11 SS /FN Fp D 2 FS} D -/CT {WB 12 SS 1 FS} D -/SM {WB 13 SS /FN Fp D 0 FS} D -/Q {/QL QL 1 add D QO QL 2 mod get La get join WB} D -/EQ {QC QL 2 mod get La get join WB /QL QL 1 sub D} D -/RO {WB -1 SS /CF 0 D 0 FS} D -/SY {WB -1 SS -1 FS} D -/MY {WB -1 SS -2 FS} D -/ES {WB /SL SL 1 sub NN D /CF 0 D /FN FO SL get D SZ SL get FR SL get FS ()Ec}D -/FZ {3 sub 1.2 E exp GS mul E WB TL /C1 C1 ( Cp ) join D /SL SL 1 add D 0 FS} D -/Ef {WB TL ()ES /C1 C1 ( Cp ) join D} D -/BZ {dup /Bf E D FZ}D -/Sc {dup -1 ne Cf and{/CL CL 1 add D dup 0 eq{pop [0 0 0]}if - dup CA E CL E put VS ( VC ) join C1 E join /C1 E D}{pop}ie} D -/Ec {WB Cf{/CL CL 1 sub NN D CA CL get VS ( VC ) join C1 E join /C1 E D}if} D -/VS {dup type /arraytype eq{([) E {ST cvs join ( ) join}forall (]) join}if} D -/VC {{255 div}forall setrgbcolor} D -/Sl {dup type /integertype ne{Ds}if /La E D WB}d -/UN {WB /UF t D} D -/NU {WB /UF f D} D -/SE {WB /sF t D} D -/XE {WB /sF f D} D -/sM {/C1 C1 ( k1 ) join D}d -/eM {/C1 C1 ( k2 ) join D}d -/k1 {/YC CP E pop Ts add D /mF t D /f1 t D}d -/k2 {gsave 3 LW -9 CP E pop Ts 0.2 mul sub M -9 YC L stroke grestore /mF f D}d -/Ac {/AC E D WB}d -/Ca {eA{( \()join AC join(\) )join}if WB}d -/s {OU{gsave 0 CS .25 mul R dup SW pop CJ 0 RL stroke grestore}if}D -/CJ {AT 3 eq LB and{E dup dup length 1 sub A1 mul E - {( ) search{pop pop E A2 add E}{pop exit}ie}loop 3 -1 roll add - W CP pop sub 2 copy gt{E}if pop}if}D -/So {/Co E D} D -/SO {C1 Yo ST cvs join ( So ) join /C1 E D (j) SW pop 2 div Pd} D -/Se {E WB CS E div Pd}D -/Pd {dup type /stringtype eq{SW pop}if dup /L1 E L1 add D - ST cvs ( 0 R ) join C1 E join /C1 E D} D -/Sp {0.35 CO} D -/Sb {-0.2 CO} D -/CO {OV Io Yo put /Yo E CS mul Yo add D /Io Io 1 add D -1.5 Io mul 3 add FZ SO - CS Yo add dup YA gt{/YA E D}{pop}ie - Yo neg dup YB gt{/YB E D}{pop}ie} D -/Es {ES /Io Io 1 sub NN D /Yo OV Io get D SO} D -/SB {/N2 0 D 0 1 NI{/N E D{IX N2 get 0 lt{/N2 N2 1 add D}{exit}ie}loop - /K WS N get FC N get mul D /NY AY N2 get D /BV NY array D - 0 1 NY 1 sub{/TM K string D currentfile TM readhexstring pop pop BV E TM put} - for BM N BV put /N2 N2 1 add D}for} D -/IC [{/MA E D /MB 0 D}{2 div /MA E D /MB MA D}{/MB E CS sub D /MA CS D} - {pop /MA YS AB mul D /MB 1 AB sub YS mul D}{pop /MA 0 D /MB 0 D}] D -/IP {BV N get /N N 1 add D} D -/II {/K E D IX K get 0 lt{/EC E D}if /TY E D - TY 4 eq{/Y E D /X E D}if TY 3 eq{/AB E D}if - /XW AX K get D /YW AY K get D /IS SG IT K get get D /XS XW IS mul D - /YS YW IS mul D YS IC TY get exec /MA MA Fl not{3 add}if D} D -/IM {II /ty TY D /xs XS D /ys YS D /ya YA D /yb YB D /ma MA D /mb MB D /k K D - /ec EC D /BP f D /CI 0 D WB TL L1 xs add dup XO add MR add W gt - {pop /ma ma Fl{3 add}if D NL /YA ma D /YB mb D /YS ys D /L1 xs D} - {/L1 E D ma YA gt{/YA ma D}if mb YB gt{/YB mb D}if}ie /TB f D - OU{CP E pop YS sub LE neg lt Fl not and PB not and{NP /YA ma D /YB mb D}if - /BP f D ty ST cvs ( ) join IX k get 0 lt{(\() join ec join (\) ) join}if - k ST cvs join ty 3 eq{AB ST cvs ( ) join E join}if - ty 4 eq{X ST cvs ( ) join Y ST cvs join ( ) join E join}if C1 E join - ( DI ) join FP 2 eq FP 1 eq AF and or{( FM ) join}if - ( Il Cp ) apa /C1 E D /EN f D}if /HM t D /T f D} D -/DI {II /Xc CP /Yc E D D /YN YW neg D /HM t D /CI 0 D /K2 IX K get D gsave - TY 4 eq{OX X IS mul add OY FY add YS sub Y IS mul sub} - {/FY YS D CP MB sub 2 copy /OY E D /OX E D}ie - translate K2 0 ge{/DP AZ K2 get D /BV BM K2 get D XS YS scale /N 0 D XW YW DP - [XW 0 0 YN 0 YW] {IP} FC K2 get 1 eq{image}{f 3 colorimage}ie} - {EX}ie grestore XS 0 R /Ms t D} D -/FM {gsave 0 Sg CP MB sub translate XS neg 0 M 0 YS RL XS 0 RL 0 YS neg RL - XS neg 0 RL stroke grestore} D -/NA {/AT E D /AL AL 1 add D AV AL AT put} D -/OA {AL 0 gt{/AL AL 1 sub D /AT AV AL get D}if} D -/D1 {/BR {CP E pop E BN Mb{CP E pop eq{0 YI R}if}{pop}ie} D - /Sn {OU{C1 E ST cvs join ( Ld ) join /C1 E D}{pop}ie} D} D -/D1 {/BR {BN} D /Sn {OU {C1 E ST cvs join ( Ld ) join /C1 E D} {pop} ie} D} D -/TC {/TF t D /ML 0 D HN{SW pop dup ML gt{/ML E D}{pop}ie}forall NP /RM RM not D - RC /OU Tc D Ep /PN 0 D Ms not TP and{Ip}if /W IW ML sub Ts sub D - /A0 0 D TH{/BR {( ) join BT} D /Sn {pop} D /Au () D}if} D -/TN {0 eq{E EA PF HF or not XR and{HN E get Xr}{pop}ie} - {OU{Tn 0 ge{() BN}if /Tn E D}{pop}ie WB}ie} D -/NT {OU LB not and Tn 0 ge and{PL 0 eq{Ms not{CS CF FS}if CP dup - /y E YA sub D W 9 sub CS -1.8 mul XO L1 add 2 add{y M (.) show}for - HN Tn get dup SW pop IW E sub y M show CP BB M}if /Tn -1 D}if} D -/Ld {/DN E D HN DN Pn put [/View [/XYZ -4 Fl{PS}{CP YA add US E pop}ie null] - /Dest DN ST cvs cvn /DEST pdfmark} D -/C {ND 1 eq{1 sub}if TI mul /XO E D NL Nf not{pop()}if 0 3 -1 roll 1 A} D -/OP {BP not{NP}if PN 2 mod 0 eq{/Ms t D NP}if}D -/Ep {Xp PN 2 mod 0 eq and OU and{/Pn (-) D showpage /PM 1 D LA}if}D -/Dg [73 86 88 76 67 68 77] D -/Rd [0 [1 1 0][2 1 0][3 1 0][2 1 1][1 1 1][2 2 1][3 3 1][4 4 1][2 1 2]] D -/Ns {/m E D /c E 32 mul D /j m 1000 idiv D /p j 12 add string D - c 96 le m 0 gt and{c 32 le {/i 0 D /d 77 D /l 100 D /m m j 1000 mul sub D - j -1 1 {pop p i d c add put /i i 1 add D}for - 4 -2 0 {/j E D /n m l idiv D /m m n l mul sub D /d Dg j get D - n 0 gt {/x Rd n get D x 0 get -1 1 {pop p i d c add put /i i 1 add D}for - p i x 1 get sub Dg x 2 get j add get c add put}if /l l 10 idiv D - }for p 0 i GI} - {/i ST length 1 sub D m {1 sub dup 0 ge{dup 26 mod c add 1 add - ST i 3 -1 roll put 26 idiv dup 0 eq{pop exit}if}if /i i 1 sub D}loop - ST i ST length i sub GI}ie} - {m p cvs}ie} D -/US {matrix currentmatrix matrix defaultmatrix matrix invertmatrix - matrix concatmatrix transform} D -/GB {Gb{US}if}D -/Tl {/Rn E D Xc CP pop ne{ - [/Rect [Xc 1 sub Yc cS 0.25 mul sub GB CP E 1 add E cS 0.85 mul add GB] - /Subtype /Link /Border [0 0 Cf Lc and LX and AU or{0}{1}ie] Rn type - /nametype eq {/Dest Rn}{/Action [/Subtype /URI /URI Rn] Cd}ie - /ANN pdfmark}if} D -/Il {/Rn E D [/Rect [Xc Yc GB Xc XS add Yc YS add GB] /Subtype /Link - /Border [0 0 0] Rn type /nametype eq{/Dest Rn} - {/Action [/Subtype /URI /URI Rn] Cd}ie /ANN pdfmark} D -/XP {[{/Z Bz 2 div D Z 0 R Z Z RL Z neg Z RL Z neg Z neg RL Z Z neg RL - Fi cH 1 eq and{fill}if} {Bz 0 RL 0 Bz RL Bz neg 0 RL 0 Bz neg RL - Fi cH 1 eq and{fill}if} {0 -5 R Bz 0 RL 0 21 RL Bz neg 0 RL 0 -21 RL}]} D -/MS {/Sm E D WB}D -/O {BN()0 Sm BX} D -/BX {/Bt E D Bt 2 lt{/Ch E D CS 0.8 mul}{11 mul}ie W XO sub MR sub - 2 copy gt{E}if pop /HZ E D Bt 2 eq{Fi not{pop()}if ( )E join /Ft E D TT - /PF t D /MW 1 D /Li 1 D /Fw Ft SW pop D Fw HZ gt{/HZ Fw 8 add D}if - HZ ST cvs( )join}{WB Ch ST cvs( )join}ie L1 HZ add XO add MR add W gt{NL}if - Bt 2 eq{Ft ES Fw neg HM{CS sub}if Pd}if Bt ST cvs join( Bx )join - Bt 2 eq HM and{CS Pd}if C1 E join /C1 E D /L1 L1 HZ add D /T f D - ( ) Pd /PF f D Bt 2 lt{YA CS .8 mul lt{/YA CS .8 mul D}if} - {YB 5 lt{/YB 5 D}if YA 21 lt{/YA 21 D}if}ie /CI 0 D} D -/Bx {dup 2 eq{E /Bz E D}{E /cH E D /Bz CS .8 mul D}ie - OU {gsave 0 Sg XP E get exec stroke grestore}{pop}ie Bz 0 R /Ms t D}D -/SD {FD 4 mul Dy add DZ NF newpath 0 0 M DX t charpath pathbbox - 3 -1 roll sub /DY E D E dup /X1 E D sub WM mul WX DY mul add WM DG mul E div - /DF E D /DR WX DF mul DY mul WM div 2 div D} d -/Sd {gsave 0 IL Di mul neg translate IL IW atan Di 0 eq{neg}if rotate - FD 4 mul Dy add DZ NF DR X1 sub DY 2 div neg M cD VC DX show grestore} d -/Pt {/tp t D Tp{NP /Pn (TP) D 0 Tt neg R Th BN NP Ep ET RC ZF}if /tp f D} D -/RC {/AI 0 D /LG 0 D /BC 0 D /UI 0 D /PF f D /Cc 0 D /cC 0 D /Dc 10 array D - /NR [0 1 9{pop 0}for] D /La Ds D /AR 10 array D /TR 10 array D /AV 30 array D - SI /AL -1 D /AT A0 D AT NA /OV 9 array D /Yo 0 D /Co 0 D /Io 0 D /Hy f D - /Ph f D /CL -1 D Ct Sc}D -/ZF {/FR [0 1 30{pop 0}for] D /SZ [0 1 30{pop 0}for] D /FO [0 1 30{pop 0}for] D - /SL 0 D /CF 0 D /FN 0 D 0 Ts SF}D -/QO [[(\234)(\233)(\253\240)(\232)(\273)(\253)][(')(`)(\253\240)(\231)(\273)(\253)]] D -/QC [[(\234)(\234)(\240\273)(\233)(\253)(\273)][(')(')(\240\273)(`)(\253)(\273)]] D -/Hf EF length 2 sub D -/Hz EZ Hf get D -/HS Ey Hf get D -/Fz EZ Hf 1 add get D -/Fs Ey Hf 1 add get D -/LE IL D -/Ps EZ 1 get D -/Fp EF 1 get D -/XO 0 D -/YI 0 D -/CI 0 D -/FP 0 D -/WW Ts 7 mul D -/Mf 0 D -/YA 0 D -/YB 0 D -/Cs Ts D -/GS Ts D -/F0 0 D -/NS 0 D -/NB 0 D -/N 0 D -/C0 [] D -/C1 () D -/Lo 0 D -/L1 0 D -/LM 0 D -/PH 0 D -/EC 0 D -/Lh 0 D -/LT 0 D -/CH 1 string D -/ST 16 string D -/CA 9 array D -/HC (\255) D -/HM f D -/PF f D -/EN f D -/TB f D -/UF f D -/sF f D -/AE f D -/AF f D -/BP t D -/CD f D -/PA t D -/GL f D -/T t D -/HF f D -/AH f D -/SA f D -/PB f D -/f1 f D -/mF f D -/OX 0 D -/OY 0 D -/FY 0 D -/EO 0 D -/FB 0 D -/PL 0 D -/Bw 0 D -/PD -1 D -/TP f D -/tp f D -/TH t D -/Ty 4 D -/Tn -1 D -/Fl t D -/LB t D -/PM 1 D -/Ms f D -/Ba f D -/Bb f D -/Hl 3 D -/hl 6 D -/Hv 6 D -/Hs f D -/HI 0 D -/hi 0 D -/PO t D -/TE f D -/LF t D -/BO 0 D -/Sm 1 D -/Bf 3 D -/A1 0 D -/A2 0 D -/Ds 1 D -/QL -1 D -/Cb Db D -/Ct Dt D -/Cl Dl D -/AX [541] D -/AY [291] D -/IX [0] D -/IT [0] D -/AZ [8] D -/WS [541] D -/FC [3] D -/NI 0 D -/BM 1 array D -SB -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffffffffffffffffffffffffffffffffcfdffe1edfb -c9e0f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c7def8d9e9fa -f8fbfeffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffe4effc -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8dceafbffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -d2e4fac5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c7def8ffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffd0e3f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8ffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffd0e3f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8ffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffd0e3f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8ffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffd0e3f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8ffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffd0e3f9c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8ffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffd0e3f9c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8ffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffd0e3f9c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffd0e3f9c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8ffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffd0e3f9 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8ffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -d0e3f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf88495a77482928798abc5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf88b9caf -b5cbe4c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf894a6baacc1d8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -8393a57482928a9baec5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8ffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffd0e3f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf88ea0b3626e7c2e343ac5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf86c7a898fa1b4c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -3d454d9fb3c9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8525c688b9cafc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf88d9eb15f6a77333a41c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8ffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffd0e3f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c4dcf7afc4dcb9d0e9c5ddf8c5ddf8c5ddf896a9bd2e343ac5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8b3c9e1b3c9e1c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8bdd4eeb0c6dec5ddf8c5ddf8c5ddf8c5ddf8c5ddf8b2c8e0bad0ea -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8b9d0e9b4c9e2c5ddf8c5ddf8c4dcf7bed6f047505a768595bed6f0 -c1d8f3c5ddf8c5ddf8c3dbf6c1d8f3c5ddf8b2c8e0bfd6f1c5ddf8c3dbf6 -bed6f0bed6f0c4dcf7c5ddf8c5ddf8c5ddf8bfd6f1c5ddf8b6cce5c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8b7cde6c4dcf7c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c4dcf7c0d7f2c4dcf7b7cde6c5ddf8 -c5ddf8c5ddf8c4dcf7bed6f0bed6f0c3dbf6c5ddf8c5ddf8c3dbf6c1d9f4 -b4c9e2c5ddf8b8cfe8c4dcf7c5ddf8c3dbf6c1d8f3c1d9f4b9d0e9c5ddf8 -c5ddf8c5ddf8c5ddf891a2b6333a41c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8ffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffd0e3f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf895a7bb131518252a2f2024288494a6c5ddf8c5ddf896a9bd2e343a -c5ddf8c5ddf8c5ddf8c5ddf82d33392d3339282d3325292eaec3dbc5ddf8 -c5ddf847505a2f343b373e463d454dc5ddf8c5ddf8a9bdd4282d33373e46 -282d337d8d9ec5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c2daf5363c44323940323940525c68c5ddf8a5b9d030363d1214171e2125 -30363d687583c5ddf8c5ddf87b8a9b4149522c3137212529262b30c5ddf8 -96a9bd30363d0a0b0c9aadc2c5ddf8c5ddf8c5ddf8050606454e57272c31 -22272bafc4dcc5ddf8b7cee7464e5821252925292e181b1fa6bbd2c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8a5b9d014171a252a2f22272b -48515bb8cfe8c5ddf8a8bcd430363d1012148393a5c5ddf8c5ddf87f8fa0 -1d202420242832383f292e34353b43c5ddf88b9cb021262a1e2125212529 -545f6ac1d9f4c5ddf8c5ddf891a2b6333a41c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8ffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffd0e3f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c0d7f214171a8797aac5ddf8c4dcf7b3c9e1c5ddf8c5ddf896a9bd -2e343ac5ddf8c5ddf8c5ddf8c5ddf8b7cde6c5ddf8c5ddf85a65715c6874 -c5ddf8a6bbd21e2125c5ddf8c5ddf8bfd6f1c5ddf8c5ddf85c6874687583 -c5ddf8c5ddf8bfd6f1c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf88d9eb1373e46c5ddf8c5ddf8bfd6f1c5ddf8c5ddf8c5ddf84a535d -7a899ac5ddf8c5ddf8c5ddf8c5ddf87b8a9b0303039cafc4c5ddf8bcd3ed -c5ddf8c5ddf8c5ddf82a2f359aadc2c5ddf8c5ddf8c5ddf80000008b9cb0 -c5ddf8505a65778696c5ddf8798898454e57c4dcf7a0b4ca000000a6bbd2 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8a5b9d0000000a0b4ca -c5ddf847505a7d8c9dc5ddf8c5ddf8c5ddf84149528393a5c5ddf8c5ddf8 -7f8fa049525ca2b6cc0b0d0ec5ddf8212529c0d7f28b9cb0040505b5cbe4 -c1d9f430363d96a9bdc5ddf8c5ddf891a2b6333a41c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8ffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffd0e3f9c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8a4b8cf0d0f11c2daf5c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -96a9bd2e343ac5ddf8c5ddf8c5ddf8c5ddf890a2b5505a652b30361b1e22 -4a535dc5ddf8c0d7f21e22263d454d768494bcd3edc5ddf8c5ddf88c9db1 -171a1e535d6992a3b7c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8b2c8e0171a1e454e577e8e9fc1d8f3c5ddf8c5ddf8c5ddf8 -4a535d7a899ac5ddf8c5ddf8c5ddf8c5ddf87b8a9b2b3036c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf82a2f359aadc2c5ddf8c5ddf8c5ddf8020202 -bfd6f1c5ddf8738190525c68c5ddf8424a537a899ac5ddf8c5ddf8101315 -a6bbd2c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8a5b9d00d0e10 -c5ddf8c5ddf879889847505ac5ddf8c5ddf8c5ddf84149528393a5c5ddf8 -c5ddf87f8fa05b6672b4c9e21d2024c5ddf82c3238abc0d78b9cb0252a2f -c5ddf8c5ddf85f6a77626e7bc5ddf8c5ddf891a2b6333a41c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8ffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffd0e3f9c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8a4b8cf0d0f11c2daf5c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf897a9be2d3339c5ddf8c5ddf8c5ddf8b9d0e916191ca0b4cac4dcf7 -69768547505ac5ddf8c5ddf8c2daf58a9bae1e222621262ac5ddf8c5ddf8 -c5ddf8b4cae36774820506066c7988c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8bfd6f17f8fa01416193b424ac5ddf8c5ddf8 -c5ddf84a535d7a899ac5ddf8c5ddf8c5ddf8c5ddf87b8a9b49525cc5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf82a2f359aadc2c5ddf8c5ddf8c5ddf8 -060607c5ddf8c5ddf8748292505a65c5ddf849525c758393c5ddf8c4dcf7 -0c0d0fa6bbd2c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8a5b9d0 -0c0d0fc5ddf8c5ddf8788797454e57c5ddf8c5ddf8c5ddf84149528393a5 -c5ddf8c5ddf87f8fa05e6976b7cde6202428c5ddf82f343ba8bcd48b9cb0 -252a2fc5ddf8c5ddf85f6a775f6a77c5ddf8c5ddf892a4b8323940c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8ffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffd0e3f9c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c0d7f214171a8797aac5ddf8c4dcf7b4c9e2 -c5ddf8c5ddf8bad1eb131518bdd4eec5ddf8c5ddf89cafc4272c31c5ddf8 -bed6f02a2f3547505ac5ddf8bad1ebc1d8f3c5ddf8b4c9e20e1012c0d7f2 -c5ddf8b6cce5c5ddf8c5ddf86c7988505a65c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8b7cee7c3dbf6c5ddf89cafc51f2327c5ddf8 -c5ddf8c5ddf86673815f6b78c5ddf8c5ddf8c5ddf8c5ddf87b8a9b49525c -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf82a2f359aadc2c5ddf8c5ddf8 -c5ddf8060607c5ddf8c5ddf8748292505a65c5ddf8808fa1394047bed6f0 -90a2b5000000a6bbd2c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -a5b9d00000009db0c6c4dcf7454e577b8a9bc5ddf8c5ddf8c5ddf8414952 -8393a5c5ddf8c5ddf87f8fa05e6976b7cde6202428c5ddf82f343ba8bcd4 -8b9cb0030404b2c8e0c1d8f32f343b95a7bbc5ddf8c5ddf8b7cee715181b -bed6f0c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffd0e3f9c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf895a8bc171a1d262b3022272b -8495a7c5ddf8c5ddf8c5ddf86976851d202431373ec5ddf8c5ddf83d444c -2a2f351b1e2247505a47505ac5ddf899acc1181b1f394047282d326d7b8a -c5ddf8c5ddf856616c24282d363d452b3036a5b9d0c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf88393a51b1e22394047272c318191a3 -c5ddf8c5ddf8c5ddf8a9bed5323940272c3164707ec5ddf8c5ddf87b8a9b -49525cc5ddf8c5ddf8c5ddf8c5ddf856616c2a2f35090a0b2125292a2f35 -a8bcd4c5ddf8060607c5ddf8c5ddf8748292505a65c5ddf8bdd4ee5f6a77 -1d20243e464e1d2024abc0d7c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8a5b9d014171a22272b21252948515bb8cfe8c5ddf86875832a2f35 -0d0f111c20232a2f3596a9bd7f8fa05e6976b7cde6202428c5ddf82f343b -a8bcd48b9cb021262a1b1e22202428545f6ac1d8f3c5ddf8c5ddf8c5ddf8 -6572801c2023353b43c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8ffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffd0e3f9 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8b0c6de -bcd3edc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8b7cde6c1d9f4c5ddf8c5ddf8c5ddf8c5ddf8c1d8f3adc3dac3dbf6 -c5ddf8c5ddf8c5ddf8c5ddf8b9d0e9b4c9e2c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8bed6f0aec3dbc5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8bcd3ed1b1f23c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8a5b9d01f2327c4dcf7b7cde6c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf88b9cb0394047c1d9f4b9d0e9c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8ffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -d0e3f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -b4c9e240485165717f31373e697584c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8a5b9d01f2327c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf88b9cb0394047c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8ffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffd0e3f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c4dcf79cafc48494a6b6cce5c5ddf8c5ddf87e8e9f6e7b8b6e7b8b -6e7b8b6e7b8b8a9baec5ddf8bcd3ed96a9bdc5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8b4cae39eb1c7c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8ffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffd0e3f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8ffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffd0e3f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8ffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffd0e3f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c4dcf78494a658626eb4c9e2c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8ffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffd0e3f9c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf89eb1c721262a97a9bec1d8f3c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8ffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffd0e3f9c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf86f7c8c55606bc5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8ffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffd0e3f9c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf86875835b6672c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffd0e3f9c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8bdd4ee3940477a8899c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8ffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffd0e3f9 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8b4c9e2131518212529bcd3ed -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8ffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -d0e3f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c3dbf63f474f -738190c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8ffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffd0e3f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -6976855a6571c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8ffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffd0e3f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8707e8d545e6ac5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8ffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffd0e3f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8a2b6cc1d20248b9cafbfd6f1c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8ffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffd0e3f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf892a3b7697685b7cde6c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8ffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffd0e3f9c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8ffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffff9fcfee6f0fce2eefbe2eefbe2eefbe2eefbe2eefbe2eefb -e2eefbe2eefbe2eefbe2eefbe2eefbe2eefbe2eefbe2eefbe2eefbe2eefb -e2eefbe2eefbe2eefbe2eefbe2eefbe2eefbe2eefbe2eefbe2eefbe2eefb -e2eefbe2eefbe2eefbe2eefbe2eefbe2eefbe2eefbe2eefbe2eefbe2eefb -e2eefbe2eefbe2eefbe2eefbe2eefbe2eefbe2eefbe2eefbe2eefbe2eefb -e2eefbe2eefbe2eefbe2eefbe2eefbe2eefbe2eefbe2eefbe2eefbe2eefb -e2eefbe2eefbe2eefbe2eefbe2eefbe2eefbe2eefbe2eefbe2eefbe2eefb -e2eefbe2eefbe2eefbe2eefbe2eefbe2eefbe2eefbe2eefbe2eefbe2eefb -e2eefbe2eefbe2eefbe2eefbe2eefbe2eefbe2eefbe2eefbe2eefbe2eefb -e2eefbe2eefbe2eefbe2eefbe2eefbe2eefbe2eefbe2eefbe2eefbe2eefb -e2eefbe2eefbe2eefbe2eefbe2eefbe2eefbe2eefbe2eefbe2eefbe2eefb -e2eefbe2eefbe2eefbe2eefbe2eefbe2eefbe2eefbe2eefbe2eefbe2eefb -e2eefbe2eefbe2eefbe2eefbe2eefbe2eefbe2eefbe2eefbe2eefbe2eefb -e2eefbe2eefbe2eefbe2eefbe2eefbe2eefbe2eefbe2eefbe2eefbe2eefb -e2eefbe2eefbe2eefbe2eefbe2eefbe2eefbe2eefbe2eefbe2eefbe2eefb -e2eefbe2eefbe2eefbe2eefbe2eefbe2eefbe8f2fcfdfeffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffd0e3f9c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8ffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffbfcfed6e7fac6ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8cae0f9e6f0fc -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffd0e3f9c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffe1eefbc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8f3f8feffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffd0e3f9c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c0d7f29fb2c8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -95a8bc47505ac5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8ffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffcfdffc9dff8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8ddebfbffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffd0e3f9 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8aec3db16191cc5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8b0c6de8fa1b4c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8ffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffeff6fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8cae0f9ffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -d0e3f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8b6cce57482924b545f636f7dbad0eac5ddf87a899a515b670a0b0c -5b67735b6773b7cde6c5ddf8c5ddf86a7786a8bcd465717f505a65a6bbd2 -c5ddf8707e8d5b6773798898c5ddf8c5ddf8c5ddf891a2b690a2b5697685 -5c6874acc1d8c5ddf8c5ddf8c1d9f478879758626e92a4b88494a6c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8ffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffd0e3f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf84e57625e69769db0c67a899ab0c6dec5ddf8a2b6cc8292a4 -10131593a5b993a5b9bed6f0c5ddf8c5ddf81a1d2132383f6673818191a3 -93a5b9c5ddf89db0c66b7887363c44c5ddf8c5ddf8c5ddf8636f7d191c20 -7988986572802c3238c5ddf8c5ddf83940474e58637f8fa01c2023434b54 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8ffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffd0e3f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf830363d707e8dbed5efc5ddf8c5ddf8c5ddf8c5ddf8 -aec3db16191cc5ddf8c5ddf8c5ddf8c5ddf8c5ddf81a1d216f7c8cc5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf88ea0b3363c44c5ddf8c5ddf8c5ddf8636f7d -48515bc5ddf8c2daf50b0d0ebdd4eebcd3ed0a0c0dc0d7f2c5ddf85f6a77 -434b54c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8ffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffeff5fdc5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffd0e3f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8a3b7ce434c550c0d0f454e57b9d0e9c5ddf8 -c5ddf8aec3db16191cc5ddf8c5ddf8c5ddf8c5ddf8c5ddf81a1d21a3b7ce -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf88ea0b3363c44c5ddf8c5ddf8c5ddf8 -636f7d677482c5ddf8c5ddf8131518b1c7df9cafc41e2226c5ddf8c5ddf8 -7d8c9d434b54c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8ffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffeff5fdc5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffd0e3f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8a6bbd22024287c8b9c -c5ddf8c5ddf8b4cae3101315c5ddf8c5ddf8c5ddf8c5ddf8c5ddf81a1d21 -aabfd6c5ddf8c5ddf8c5ddf8c5ddf8c5ddf88ea0b3363c44c5ddf8c5ddf8 -c5ddf8636f7d677482c5ddf8c5ddf8131518b1c7dfc0d7f20b0d0ebed5ef -c5ddf8596470434b54c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8ffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffeff5fdc5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffd0e3f9c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8616d7a92a3b790a2b51e2226 -a6bbd2c5ddf8c5ddf8c5ddf823272c6774828d9eb1bed5efc5ddf8c5ddf8 -1a1d21aabfd6c5ddf8c5ddf8c5ddf8b9d0e98d9eb1667381262b308d9eb1 -9fb2c8c5ddf8636f7d677482c5ddf8c5ddf8131518b1c7dfc5ddf84a535d -3941486c7988202428434b54c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8ffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffeff5fd -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffd0e3f9c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf87e8e9f4f59645b6672 -95a8bcc5ddf8c5ddf8c5ddf8c5ddf8b1c7df7a8899626e7bb7cee7c5ddf8 -c5ddf8707d8db7cee7c5ddf8c5ddf8c5ddf8b0c5dd626e7b626e7b626e7b -626e7b8190a2c5ddf894a6ba96a9bdc5ddf8c5ddf86c7988bbd2ecc5ddf8 -c5ddf891a2b6738190707d8d5a6571c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8ffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -eff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c8dff8ffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffd0e3f9c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8a3b7cebdd4eeb4c9e2343a4296a9bdc5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c8dff8ffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffd0e3f9c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf87a899a282d33363c447d8d9ec3dbf6c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8ffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c8dff8ffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffd0e3f9 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8ffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c8dff8ffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -d0e3f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8ffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -b4cae3a6bad1a6bad1c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8bbd2ecb6cce5 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8b4c9e2a6bad1a6bbd2c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffd0e3f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c1d8f3b0c6dec5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8b8cfe8c2daf5c5ddf8c5ddf8c4dcf7b6cce5 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8ffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf88595a84f5964010101c1d8f3c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8758393 -4f5964c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf88292a44f5964000000 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffd0e3f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8748292b9d0e9c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8697584c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8a6bad11e2226c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8bdd4ee24282dc1d8f3c5ddf8c5ddf8c5ddf8 -2b3036b1c7dfc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8ffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffeff5fdc5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8030404c1d8f3c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -bbd2ecb6cce5c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c4dcf7 -000000c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffd0e3f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8191c20abc0d7c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8000000c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c1d8f3b0c6de -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf86c798865717fc5ddf8c5ddf8c5ddf8 -c5ddf87a899a57616dc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8ffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffeff5fdc5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c0d7f25b677321262a -202428768494c5ddf8c5ddf8c5ddf8030404c1d8f3c5ddf8c5ddf8c5ddf8 -7a899a262b301e21253d454dadc2d9c5ddf8c5ddf893a5b93c434b23272c -373e46bfd6f1c5ddf8c5ddf86673812c323824282d6d7b8ac5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf89cafc44c5560444d562c3137 -8494a6c5ddf8c5ddf8bed5ef59647021262a4b545fa3b7cec5ddf8c5ddf8 -b3c9e13d444c8190a2262b302a2f35b2c8e0c5ddf875839330363d23272c -5b6773c5ddf8c5ddf8b1c7df3e464e1c20233d444cb0c5ddc5ddf8b3c9e1 -424a53626e7b22272b5c6874c2daf5c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf839414866738123272c606c79b7cee7c5ddf8c5ddf8 -343a422a2f35697685c5ddf8c5ddf8b6cce53d444c2c32384d5661434c55 -3e464ebad1ebc0d7f22f353c626e7b24282d6d7b8abed5efc5ddf8c5ddf8 -c4dcf7000000c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffd0e3f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf88fa1b44b555f444d568190a2c4dcf7 -c5ddf8c5ddf8c5ddf8c5ddf8c1d9f42d333964707e24282d6c7988bdd4ee -c5ddf8c4dcf7657280212529272c318696a9c5ddf8c5ddf8b7cee7505a65 -262b30292e3492a4b8c5ddf87d8d9e2a2f3505060625292e2a2f358a9bae -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8acc1d849525c -25292e2d3339a3b7cec5ddf86976852a2f350000002a2f352a2f359eb1c7 -c5ddf8c5ddf8515b668696a93941481b1f238190a2c5ddf85b66722a2f35 -434b54c5ddf8c5ddf8c5ddf88b9caf606c79434b54272c317d8c9dc5ddf8 -c5ddf8b0c5dd525c6824282d697584515b67c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8171a1dafc4dcc5ddf8c5ddf8 -c5ddf8c5ddf8bfd6f10c0d0fc0d7f2c5ddf8c5ddf8c5ddf8c5ddf88495a7 -899aadc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8ffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffeff5fdc5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf85c6874373e46 -a8bcd4bdd4ee92a3b7c5ddf8c5ddf8c5ddf8030404c1d8f3c5ddf8c5ddf8 -c5ddf898aabfb7cee7c1d9f46c7988363d45c5ddf8c5ddf82125299fb3c9 -c5ddf8a3b7cec1d9f4c5ddf89cafc52b3036bfd6f1c2daf5a3b6cdc5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf890a2b50000008b9caf -abc0d721262a9fb2c8c5ddf8545e6a434b54b5cbe496a9bd24282dc5ddf8 -c5ddf8aec3db0607084a545eaabfd6a4b8cfb7cde6b0c5dd1b1e22bbd2ec -c4dcf7a1b5cbc5ddf8c5ddf83a414955606bb7cee75b6773373e46c5ddf8 -adc3da0000007a8899b7cde6252a2f9baec3c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf81214174b545fb6cce556616c57616dc5ddf8 -c5ddf8c5ddf87583934f5964c5ddf8c5ddf8b2c8e00e1012b7cde60a0b0c -8ea0b3464e5896a9bdbed6f0000000616d7ab5cbe4424a53707e8dc5ddf8 -c5ddf8c4dcf7000000c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffd0e3f9c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8454e580c0d0f0000000000000b0c0e -2d3238c1d9f4c5ddf8c5ddf8c5ddf8c1d8f30000005e6976b6cce5434c55 -6d7b8ac5ddf88495a71f2327a9bdd496a9bd0d0f11adc3dac5ddf8697584 -596470c4dcf7bad0eaabc0d7c5ddf8c5ddf8c5ddf8191c20abc0d7c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf84f5964 -72808fc5ddf8b3c9e1b2c8e0c5ddf8c5ddf8c5ddf8000000c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf830363d282d328ea0b3b7cee7a3b6cdc5ddf8c5ddf8 -a6bad11e2226c5ddf8c5ddf8c5ddf87a899a0d0e109fb3c9a8bcd40f1113 -c2daf5c5ddf83c434b677482b4cae33941482c3137c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8b7cde6090a0bc5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf81e2125a1b5cbc5ddf8c5ddf8c5ddf8c5ddf8 -3b424a454e57c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8ffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffeff5fd -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8191c20 -8fa1b4c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8030404c1d8f3c5ddf8 -c5ddf8c5ddf8bed5ef8ea0b35f6a774a535d191c20c5ddf8c5ddf8292e34 -545f6a98aabfc4dcf7c5ddf8c5ddf8a5b9d0121417768494adc3dac5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf890a2b5171a1d -c5ddf8c5ddf85a6571697685c5ddf8101315707e8d8b9caf899aad1c2023 -a9bed5c5ddf8aec3db000000aec3dbc5ddf8c5ddf8c5ddf8b7cde60d0f11 -6f7c8ca7bcd3c5ddf8c5ddf8c5ddf8060607a7bcd3c5ddf8adc2d9030303 -c1d9f4adc3da0d0e10c3dbf6c5ddf856616c6e7b8bc5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf812141795a7bbc5ddf8a2b6cc21262a -c5ddf8c5ddf8c5ddf87583934f5964c5ddf8c5ddf8b2c8e024282dc5ddf8 -1e2125acc1d85d68757d8c9dbed6f0000000afc4dcc5ddf88899ac3c434b -c5ddf8c5ddf8c4dcf7000000c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffd0e3f9c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf88595a80c0d0f000000000000000000 -000000090a0c63707dc5ddf8c5ddf8c5ddf8c1d8f3000000acc1d8c5ddf8 -8b9cb0394047c5ddf8505a655c6874c5ddf8c5ddf832383f7a899ac5ddf8 -72808f2a2f358495a7b8cfe8c5ddf8c5ddf8c5ddf8c5ddf8191c20abc0d7 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -58636f3940478b9cb0bdd4eec5ddf8c5ddf8c5ddf8c5ddf8000000c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf830363d677482c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8a6bad11e2226c5ddf8c5ddf8c5ddf87a899a3d454dc5ddf8c5ddf8 -23272ca2b6ccc1d8f30a0c0db9d0e9c5ddf88190a22c3137c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf897a9be23272cc5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8383f468191a3c5ddf8c5ddf8c5ddf8 -c5ddf8b0c5ddb1c7dfc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8ffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -eff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -0d0e10a8bcd4c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8030404c1d8f3 -c5ddf8c5ddf8c5ddf8454e57515b6790a2b5808fa114171ac5ddf8c5ddf8 -b8cfe86c7a89171a1d212529bad1ebc5ddf8c5ddf89fb3c94e5863040505 -5f6a77c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf890a2b5 -282d32c5ddf8c5ddf86b7887515b66c5ddf80506065f6a77687583687583 -687583a9bed5c5ddf8aec3db14171ac5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -a9bdd458636f0607084a535dc5ddf8c0d7f2000000bad1ebc5ddf8bed5ef -000000bad0eaadc3da1d2024c5ddf8c5ddf85d6875677482c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8121417a6bad1c5ddf8b3c9e1 -0a0b0cc4dcf7c5ddf8c5ddf87583934f5964c5ddf8c5ddf8b2c8e02b3036 -c5ddf824282db3c9e1626e7b758393bed6f0000000bed6f0c5ddf899acc1 -22272bc5ddf8c5ddf8c4dcf7000000c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c8dff8ffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffffffffffffffffffffffffffffffff9f9f9e7e7e7 -e6e6e6e5e5e5e4e4e4e2e2e2e1e1e1e0e0e0dfdfdfdedededddddddbdbdb -dadadad9d9d9d8d8d8d7d7d7d5d5d5d4d4d4d3d3d3d2d2d2d1d1d1d0d0d0 -cecececdcdcdcccccccbcbcbcacacac9c9c9c7c7c7a1b0c198aabf97a9be -96a9bd95a7bb94a6ba93a5b992a4b892a3b72b3036000000000000000000 -0000000000000000001f2327c5ddf8c5ddf8c5ddf8c1d8f3000000bcd3ed -c5ddf89cafc41f2327c5ddf8464e58707e8dc5ddf8c5ddf8444d566f7c8c -c5ddf8c4dcf7899aad363d450a0b0c8a9baec5ddf8c5ddf8c5ddf8191c20 -abc0d7c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c1d8f37e8e9f2b30361013159cafc5c5ddf8c5ddf8c5ddf8000000 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf830363d92a3b7c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8a6bad11e2226c5ddf8c5ddf8c5ddf87a899a505a65c5ddf8 -c5ddf82a2f359aadc2b7cde608090ac2daf5c5ddf88fa1b42c3137c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8a3b7ce181b1f -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf82d33398ea0b3c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf82f353c72808fc5ddf8c5ddf8c4dcf7c5ddf8c5ddf8c5ddf81e2226 -abc0d7c5ddf8c5ddf8c2daf50a0c0dbdd4eec5ddf8717f8e14171ac5ddf8 -c5ddf8c5ddf8c5ddf8b8cfe81f232791a2b6c5ddf8c5ddf8c5ddf8c5ddf8 -8e9fb216191cc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -90a2b5060607c1d9f4c5ddf8464e588393a5c5ddf8272c317e8e9fc5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8aec3db16191cc5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8a2b6cc060708c0d7f2c5ddf8171a1e8fa1b4c5ddf8 -96a9bd141619c5ddf8adc3da1d2024c5ddf8c5ddf85d6875677482c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf81214178190a2c5ddf8 -8e9fb23b424ac5ddf8c5ddf8c5ddf87583934f5964c5ddf8c5ddf8b2c8e0 -2b3036c5ddf824282db3c9e1626e7b758393bed6f00000009aadc2c5ddf8 -748292545f6ac5ddf8c5ddf8c5ddf8191c20b0c5ddc5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c8dff8ffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffc0c0c0 -1a1a1a4141414242424343434444444545454747474848484949494a4a4a -4b4b4b4c4c4c4e4e4e4f4f4f505050515151525252545454555555565656 -5757575858585a5a5a5b5b5b5c5c5c5d5d5d5e5e5e5f5f5f4e565e4b545f -4c55604d56614e57624f5964505a65515b66515b67131518000000000000 -00000000000000000000000016191cc5ddf8c5ddf8c5ddf8c1d8f3000000 -97a9bec5ddf8768595515b67c5ddf8626e7b444d56c5ddf8c5ddf81b1f23 -8ea0b3c5ddf8c5ddf8c5ddf8c5ddf85b667249525cc5ddf8c5ddf8c5ddf8 -282d339db0c6c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c2daf5434c55626e7cc5ddf8c5ddf8c5ddf8 -0f1113b7cde6c5ddf8c5ddf8c5ddf8c5ddf830363d94a6bac5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8a6bad11e2226c5ddf8c5ddf8c5ddf87a899a505a65 -c5ddf8c5ddf82a2f359aadc2c5ddf8282d329cafc5c5ddf8636f7d2c3137 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c1d8f3 -050606c0d7f2c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8111316afc4dcc5ddf8 -c5ddf8c5ddf8c5ddf895a8bc8ea0b3c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8ffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf89aadc2131518474f595c6874515b67c5ddf8c5ddf8c5ddf8 -6c7a8925292e4f5964b4c9e2c5ddf8404851404851525c6830363d14171a -c5ddf8c2daf5292e3465717f5964701c2023c1d8f3c5ddf87e8e9f454e57 -6a7786363d455d6875c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf890a2b51214172c313748515b25292eb7cee7c5ddf894a6ba16191c -4b545f5f6a77272c31b7cee7c5ddf8aec3db16191cc5ddf8c5ddf8c5ddf8 -c5ddf892a4b83d454d6a7786424a53464e58c5ddf8c5ddf8788797101315 -545f6a131518768494c5ddf8adc3da1d2024c5ddf8c5ddf85d6875677482 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf812141723272c -545e6a1c20238797aac5ddf8a1b5cb5b6773363d4525292e5b67738a9bae -b2c8e02b3036c5ddf824282db3c9e1626e7b758393bed6f0030303282d32 -525c681c202399acc1c5ddf8c5ddf8c5ddf8687583262b304f5964b7cde6 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c8dff8ffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -c1c1c1676767ffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffd0e3f9 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8667281060708 -00000000000000000000000002030349525cc5ddf8c5ddf8c5ddf8c1d8f3 -010101282d33535d691b1f2398aabfc5ddf8b1c7df14171a454e5730363d -2e343ac4dcf7c5ddf856616c545f6a6774822125298ea0b3c5ddf8c5ddf8 -c5ddf86c7a89252a2f5a65719db0c6c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8434c555b6672636f7d191c20a6bad1c5ddf8c5ddf8 -c5ddf8545e6a2e343a5b6773aabfd6c5ddf8c5ddf830363d94a6bac5ddf8 -c5ddf8c5ddf8bbd2ec5b67734e57620d0f115b6773707d8dc5ddf87a899a -505a65c5ddf8c5ddf82a2f359aadc2c5ddf88393a51d20243f474f2f343b -2c3137c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8333a4196a9bdc5ddf8c5ddf8c5ddf8c5ddf8a9bed51e2226c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8454e57373e46c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8ffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8b5cbe48696a98495a7bad0eac5ddf8c5ddf8 -c5ddf8c5ddf8b0c6de93a5b9bed5efc5ddf8c4dcf793a5b98c9db1bad0ea -98abc0c5ddf8c5ddf8a4b8cf7e8e9f93a5b9c1d8f3c5ddf8c5ddf8bed6f0 -92a3b77d8c9da8bcd4c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf890a2b5343a42a1b5cb8d9eb1c4dcf7c5ddf8c5ddf8c5ddf8 -b4cae38595a88191a3adc3dac5ddf8c5ddf8bfd6f199acc1c5ddf8c5ddf8 -c5ddf8c5ddf8c1d9f497a9be7c8b9ca1b5cbc5ddf8c5ddf8c5ddf8c5ddf8 -9fb3c97d8c9d9fb2c8c5ddf8c5ddf8bfd6f19baec3c5ddf8c5ddf8abc0d7 -adc3dac5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8121417 -a3b6cd8494a6b8cfe8c5ddf8c5ddf8b4cae393a5b993a5b993a5b993a5b9 -a9bdd4c0d7f29fb2c8c5ddf89cafc5c1d8f3acc1d8b1c7dfbed6f0060607 -afc4dc8595a8bed5efc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8b0c5dd93a5b9 -bfd6f1c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c8dff8ffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffc2c2c2656565ffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -d0e3f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8bfd6f1 -1c2024040505000000000000020202121416b6cce5c5ddf8c5ddf8c5ddf8 -c1d8f3030404b0c5dd8495a7bdd4eec5ddf8c5ddf8c5ddf8b5cbe48292a4 -8a9baec0d7f2c5ddf8c5ddf8b6cce58899ac8292a4b4cae3c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8b6cce594a6bab2c8e0c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8b0c6de8494a68798abbad0eac5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8b0c6de94a6bab8cfe8c5ddf8c5ddf89fb3c9b9d0e9 -c5ddf8c5ddf8c5ddf8c0d7f293a5b993a5b993a5b993a5b99db0c6c5ddf8 -b2c8e0a8bcd4c5ddf8c5ddf89eb1c7bad1ebc5ddf8c5ddf8bdd4eea0b4ca -8292a4515b67c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf893a5b9424a53c5ddf8c5ddf8c5ddf8c5ddf856616c7e8e9f -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf81f23278292a4c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8ffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf890a2b5343a42c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -121417b2c8e0c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8bed6f0 -060607c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffc4c4c4646464ffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffd0e3f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8bad0ea49525c131618111416404851b3c9e1c5ddf8c5ddf8c5ddf8 -c5ddf8c1d8f3030404c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf890a2b58899ac -8b9cb02a2f3590a2b5c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf857616dbed5efc5ddf8c5ddf8c4dcf7535d69 -c2daf5c5ddf8c5ddf8c5ddf8c5ddf8bad1eb3f474fc4dcf7c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8ffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8bfd6f1bbd2ec -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8a9bdd4788797c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf895a7bb6e7b8b6e7b8b6e7b8b6e7b8b738291c5ddf8 -c5ddf8657280bbd2ecc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c1d9f45f6b78c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffc5c5c5636363ffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffd0e3f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c3dbf65e6976c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf895a7bb6e7b8b -6e7b8b6e7b8b6e7b8b738291c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8a2b6cc -5c68745e6976a6bad1c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8ffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffeff5fdc5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8434b542e343a -92a3b7c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffc6c6c6616161ffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffd0e3f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8ffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffeff5fdc5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8b3c9e1141619 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffc8c8c8606060ffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffd0e3f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8ffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffeff5fdc5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf89eb1c7 -262b30c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffc9c9c95f5f5fffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffd0e3f9c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8bdd4ee8899acb4c9e2c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8ffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffeff5fd -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -8d9eb1323940c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffcacaca5d5d5dffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffd0e3f9c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8bcd3ed677482141619a9bdd4c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8ffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -eff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -7482922c31377d8d9ec5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c8dff8ffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffcbcbcb5c5c5c -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffd0e3f9c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8545f6a768595c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf88393a530363d717f8ec5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c8dff8ffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffcdcdcd -5b5b5bffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffd0e3f9c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf85f6a776c7988c5ddf8 -c5ddf8c5ddf8c5ddf8bed5ef363d459baec3c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8ffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf88fa1b42f353cc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c8dff8ffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -cecece5a5a5affffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffd0e3f9 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf87482924b545f -c5ddf8c5ddf8c5ddf8c5ddf8bcd3ed11131690a2b5c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8ffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf89eb1c7262b30c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c8dff8ffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffcfcfcf585858ffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -d0e3f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8b6cce5 -282d322c3137b2c8e0c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8ffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8b6cce5121417c4dcf7c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffd1d1d1575757ffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffd0e3f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -8e9fb2272c319fb3c9c2daf5c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8ffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf84f59642d33398c9db1 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffd2d2d2565656ffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffd0e3f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8636f7d64707ec5ddf8c5ddf8c5ddf8c5ddf8c5ddf84b545f95a7bb -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8ffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffeff5fdc5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8b5cbe4bcd3edc5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8bed5efb4cae3c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffd3d3d3545454ffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffd0e3f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf85e69766c7a89c5ddf8c5ddf8c5ddf8c5ddf8bfd6f1000000 -8797aac5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8ffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffeff5fdc5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8474f597d8d9ec5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf88a9bae404851c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffd4d4d4535353ffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffd0e3f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8bbd2ec333a4191a2b6c5ddf8c5ddf8c5ddf8c5ddf893a5b9 -1e2125c2daf5c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8ffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffeff5fdc5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8b5cbe4bcd3edc5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf88a9bae404851c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffd6d6d6525252ffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffd0e3f9c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8b4cae33940475f6b78bfd6f1c5ddf8c5ddf8c5ddf8c5ddf8 -95a8bc95a7bbc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8ffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffeff5fd -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8b2c8e0394148c5ddf8c5ddf8c5ddf83f474facc1d8c5ddf88a9bae -282d32202428626e7cc4dcf7c5ddf8aabfd62a2f352a2f358e9fb2c5ddf8 -c5ddf8c5ddf8a9bdd44a535d262b3057616d404851c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffd7d7d7505050ffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffd0e3f9c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8ffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -eff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8262b309baec3c5ddf8a3b6cd1e2226c5ddf8b1c7df -0a0c0d92a3b7abc0d7262b307f8fa0c5ddf8c5ddf8c5ddf8474f597d8d9e -c5ddf8c5ddf8c5ddf8282d327f8fa0afc4dc2a2f35404851c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c8dff8ffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffd8d8d84f4f4f -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffd0e3f9c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf86c7a8957616dc5ddf85f6a7765717fc5ddf8 -8393a5292e34c5ddf8c5ddf865717f47505ac5ddf8c5ddf8c5ddf8474f59 -7d8d9ec5ddf8c5ddf8b6cce50d0e10c4dcf7c5ddf86a7786404851c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c8dff8ffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffdadada -4e4e4effffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffd0e3f9c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8ffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8b1c7df16191cc3dbf61b1f23abc0d7 -c5ddf87988983d454dc5ddf8c5ddf87786963c434bc5ddf8c5ddf8c5ddf8 -474f597d8d9ec5ddf8c5ddf8a2b6cc1b1f23c5ddf8c5ddf87d8c9d404851 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c8dff8ffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -dbdbdb4d4d4dffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffd0e3f9 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8ffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8343a426a77862c3238 -c5ddf8c5ddf895a7bb121417c5ddf8c5ddf84e58635b6773c5ddf8c5ddf8 -c5ddf8474f597d8d9ec5ddf8c5ddf8c4dcf7101315bad1ebc5ddf8545e6a -404851c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c8dff8ffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffdcdcdc4b4b4bffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -d0e3f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8ffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf87b8a9b050606 -738291c5ddf8c5ddf8c5ddf83239402c313748515b141619adc3dac5ddf8 -8899ac5b67732125293a41495b6773a3b6cdc5ddf8616d7a25292e4c5560 -1c2023404851c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffdedede4a4a4affffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffd0e3f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8ffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8bed5ef -93a5b9bbd2ecc5ddf8c5ddf8c5ddf8c1d8f38b9caf8191a3b4c9e2c5ddf8 -c5ddf8a9bdd493a5b993a5b993a5b993a5b9b4cae3c5ddf8c5ddf8a9bed5 -8899acb2c8e0a4b8cfc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffdfdfdf494949ffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffd0e3f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8ffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffeff5fdc5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffe0e0e0474747ffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffd0e3f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8ffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffeff5fdc5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8bad0eaaec3dbc5ddf8c5ddf8c5ddf8bed6f0b3c9e1 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c4dcf7b6cce5c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8b7cee7bad0eac5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -b8cfe8c1d9f4c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffe1e1e1464646ffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffd1e4f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c6ddf8ffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffeff5fdc5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf84e5762282d32414952c5ddf8c5ddf8c5ddf891a2b6 -333a41c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8697685 -c4dcf7c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf88595a857616dc5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8a2b6cc8b9cb0 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf85b6672697685c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf86e7b8b6e7b8bc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffff -fffffffffffffffffffffffffffffffffffff6f6f6f1f1f1ffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffd7d7d7353535ffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffe3effcc5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8d6e7faffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffeff5fd -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8bad0ea131518c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -bed6f0b3c9e1c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -020202c2daf5c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c4dcf7262b30abc0d7c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf87a899a -4a535dc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8b7cee7bad0eac5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8bad0ea1e2125bed6f0c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8 -ffffffffffffffffffffffffe7e7e7999999404040646464fcfcfcffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffc3c3c3151515ffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffffffffffffffffffffbfdffd6e7fac5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8d3e5faf4f8feffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -eff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8545e6a25292e0506062a2f35363c44c5ddf8c5ddf8 -4a545e2a2f35535d69c5ddf8c5ddf8c5ddf8c5ddf86774827d8d9e434c55 -1b1e226a7786c5ddf8adc2d94a535d25292e2c3238a2b6ccc5ddf86b7887 -2a2f350000002a2f352a2f359cafc5c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf82f353c74829223272c515b66bad0eac5ddf8a8bcd4 -363c441d20242b30368494a6c5ddf8a4b8cf424a53252a2f596470363c44 -4a545ec3dbf6c5ddf895a8bc32383f292e34768595c1d8f3c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf894a6ba31373ec5ddf8 -c5ddf8c5ddf8c5ddf88393a5363c4423272c49525cc5ddf8c5ddf82f343b -1a1d211012142a2f353e464ec5ddf8c5ddf8b1c7df3e464e7f8fa0252a2f -2a2f35b4c9e2bad1eb2a2f352a2f357d8d9ec5ddf8c5ddf8c5ddf8505a65 -7482922b30363d444ca6bad1c5ddf8c5ddf890a2b531373e363d455f6a77 -8a9baec5ddf8c5ddf8c5ddf848515b7d8c9dc5ddf8c5ddf8c5ddf8c5ddf8 -a7bcd3687583c3dbf6c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c8dff8ffffffd2d2d27c7c7c242424121212030303434343fcfcfcffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffc6c6c6131313 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffffffffffffffffffffffffffffffffffffffafcfe -f6fafef6fafef6fafef6fafef6fafef6fafef6fafef6fafef6fafef6fafe -f6fafef6fafef6fafef6fafef6fafef6fafef6fafef6fafef6fafef6fafe -f6fafef6fafef6fafef6fafef6fafef6fafef6fafef6fafef6fafef6fafe -f6fafef6fafef6fafef6fafef6fafef6fafef6fafef6fafef6fafef6fafe -f6fafef6fafef6fafef6fafef6fafef6fafef6fafef6fafef6fafef6fafe -f6fafef6fafef6fafef6fafef6fafef6fafef6fafef6fafef6fafef6fafe -f6fafef6fafef6fafef6fafef6fafef6fafef6fafef6fafef6fafef6fafe -f6fafef6fafef6fafef6fafef6fafef6fafef6fafef6fafef6fafef6fafe -f6fafef6fafef6fafef6fafef6fafef6fafef6fafef6fafef6fafef6fafe -f6fafef6fafef6fafef6fafef6fafef6fafef6fafef6fafef6fafef6fafe -f6fafef6fafef6fafef6fafef6fafef6fafef6fafef6fafef6fafef6fafe -f6fafef6fafef6fafef6fafef6fafef6fafef6fafef6fafef6fafef6fafe -f6fafef6fafef6fafef6fafef6fafef6fafef6fafef8fbfeffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8a9bed51b1e22c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf891a2b6333a41c5ddf8c5ddf8c5ddf8c5ddf84d56611a1d21 -8292a4b9d0e99eb1c7c5ddf8515b67707d8dc5ddf8b4c9e2b1c7dfc5ddf8 -c5ddf8c5ddf8020202c2daf5c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf802020264707ebad0ea3a41498191a3c5ddf8 -adc3daa3b6cdc5ddf8a8bcd40a0b0cb1c7df9baec321262aaec3db000000 -a5b9d02f353cadc3daadc3da0d0e1092a4b8b8cfe84048518595a8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf86e7b8b515b66 -c5ddf8c5ddf8c5ddf8bdd4ee16191cb3c9e1c5ddf8a0b4cac5ddf8c5ddf8 -c5ddf87a899a4a535dc5ddf8c5ddf8c5ddf8c5ddf8acc1d80708094b545f -abc0d7a3b7ceb8cfe8c5ddf8c5ddf85b6672697685c5ddf8c5ddf8c5ddf8 -2f353c3f474fb7cde6626e7c535d69c5ddf8b5cbe41013159fb2c89cafc4 -0a0c0d768595c5ddf8c5ddf8c5ddf868758357616dc5ddf8c5ddf8c5ddf8 -c5ddf88595a8000000c1d8f3c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c1d8f3 -91a2b64b545d1717171313130303030000000808083a3a3af9f9f9ffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffc9c9c9 -131313ffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8a9bed51b1e22c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf891a2b6333a41c5ddf8c5ddf8c5ddf8c5ddf84d5661 -4a545ec5ddf8c5ddf8c5ddf8c5ddf85b6672373e468b9cafbdd4eec5ddf8 -c5ddf8c5ddf8c5ddf8020202c2daf5c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8020202b6cce5c5ddf8707e8d545f6a -c5ddf8c5ddf8a2b6cc6d7b8a55606b13151897a9be9baec33b424ac5ddf8 -08090ac1d9f4464e5893a5b972808f2b30368b9cb08a9bae5f6b7848515b -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf84e5863 -6b7887c5ddf8c5ddf8c5ddf8c1d9f4121417657280a0b4cac5ddf8c5ddf8 -c5ddf8c5ddf87a899a4a535dc5ddf8c5ddf8c5ddf8c5ddf8acc1d8000000 -b0c6dec5ddf8c5ddf8c5ddf8c5ddf8c5ddf85b6672697685c5ddf8c5ddf8 -c5ddf82f353c8899acc5ddf89fb2c8262b30c5ddf8808fa13f474fc5ddf8 -c5ddf8363c44768595c5ddf8c5ddf8c5ddf88292a4373e46c5ddf8c5ddf8 -c5ddf8c5ddf8bbd2eca6bad1c5ddf8c5ddf8c5ddf8b8cfe8667381282d32 -0a0b0c090a0b0000000000000000000000000404041e1e1e909090909090 -8b8b8b8686868282827d7d7d7878787373736e6e6e6969696464645f5f5f -5a5a5a5555555151514c4c4c4747474242423d3d3d3838383333332e2e2e -222222121212ffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8a9bed51b1e22c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf891a2b6333a41c5ddf8c5ddf8c5ddf8c5ddf8 -4d5661768494c5ddf8c5ddf8c5ddf8c5ddf8c1d9f47f8fa02c3137101214 -9baec3c5ddf8c5ddf8c5ddf8020202c2daf5c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8050606c5ddf8c5ddf8768595 -4e5762c5ddf88d9eb1272c318292a499acc11e212592a3b79baec3424a53 -c5ddf8111316c5ddf84a545e8c9db16572802b3036687583687583687583 -7c8b9cc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -5b6773606c79c5ddf8c5ddf8c5ddf8c5ddf8b0c6de626e7b0d0e10333a41 -c5ddf8c5ddf8c5ddf87a899a4a535dc5ddf8c5ddf8c5ddf8c5ddf8acc1d8 -171a1dc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf85b6672697685c5ddf8 -c5ddf8c5ddf82f353c9baec3c5ddf8a5b9d01f2327c5ddf86d7b8a4e5863 -c5ddf8c5ddf8454e57768595c5ddf8c5ddf8c5ddf8778696444d56c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8bed6f072808f171a1d -0202030506060000000000000000000000000000000505051e1e1e8c8c8c -9696969b9b9ba0a0a0a5a5a5a9a9a9aeaeaeb3b3b3b8b8b8bdbdbdc2c2c2 -c6c6c6cbcbcbd0d0d0d5d5d5dadadadfdfdfe3e3e3e8e8e8edededf2f2f2 -f7f7f7e0e0e0444444ffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8a9bed51b1e22 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf891a2b6333a41c5ddf8c5ddf8c5ddf8 -c5ddf84d5661778696c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c3dbf6 -454e57606c79c5ddf8c5ddf8c5ddf8111316b4cae3c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8050606c5ddf8c5ddf8 -7685954e5762c5ddf84d5661778696c5ddf8b7cde602020292a3b79baec3 -424a53c5ddf8111316c5ddf84a545e8c9db1899aad1d2024c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf87c8b9c454e57c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8aec3db -0d0e10adc3dac5ddf8c5ddf88a9bae3c434bc5ddf8c5ddf8c5ddf8c5ddf8 -acc1d8181b1fc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf85b6672697685 -c5ddf8c5ddf8c5ddf82f353c9baec3c5ddf8a5b9d01f2327c5ddf8a3b6cd -22272bc4dcf7c4dcf71a1d21768595c5ddf8c5ddf8c5ddf85b677365717f -c5ddf8c5ddf8c5ddf8c5ddf8b1c7df7a899abdd4eec5ddf8c5ddf8c5ddf8 -c5ddf8c1d8f396a9bd5964701d21251313130e0e0e000000000000080808 -323232f3f3f3ffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffe5e5e5424242ffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8a9bed5 -1b1e22c5ddf8c5ddf8c5ddf8b0c5dd5b6773434c55171a1e5b67737b8a9b -c5ddf8c5ddf84d5661778696c5ddf8c5ddf8c5ddf8c5ddf8454e575a6571 -64707e191c20a4b8cfc5ddf8c5ddf8c5ddf856616c2d33395b6773a9bed5 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8050606c5ddf8 -c5ddf87685954e5762c5ddf88798ab1e2226616d7a2a2f351a1d2192a3b7 -9baec3424a53c5ddf8111316c5ddf84a545e8c9db1c4dcf73d454d272c31 -626e7b48515b5f6b78c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8adc3da1e2125c4dcf7c5ddf8c5ddf8a7bcd3343a42687583 -4e58632f343bc5ddf8c5ddf8c5ddf8bdd4ee181b1f4a535d697685c5ddf8 -c5ddf8acc1d8181b1fc5ddf8c5ddf8c5ddf8c5ddf893a5b95b67732a2f35 -31373e5b677398aabfc5ddf82f353c9baec3c5ddf8a5b9d01f2327c5ddf8 -c5ddf847505a282d332c3137282d32768595c5ddf8c5ddf8c5ddf82e343a -99acc1c5ddf8c5ddf8c5ddf8c5ddf88fa1b4000000b2c8e0c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8f1f1f1b0b0b05d5d5d1b1b1b -1515150404042b2b2bf1f1f1ffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffe8e8e83f3f3fffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffeff5fdc5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -bed6f09aadc2c5ddf8c5ddf8c5ddf8bbd2ec93a5b993a5b993a5b993a5b9 -a2b6ccc5ddf8c5ddf8a7bcd3b1c7dfc5ddf8c5ddf8c5ddf8c5ddf8b0c6de -8495a78797aab9d0e9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8b1c7df94a6ba -b8cfe8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf895a7bb -c5ddf8c5ddf8b1c7dfa7bcd3c5ddf8c5ddf8acc1d88292a4afc4dca0b4ca -b8cfe8bad1eba4b8cfc5ddf898aabfc5ddf8a6bbd2b7cde6c5ddf8c5ddf8 -98abc07c8b9c93a5b9c1d8f3c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf84b545f8b9cafc5ddf8c5ddf8c3dbf69cafc5 -7d8c9d9baec3c3dbf6c5ddf8c5ddf8c5ddf8c5ddf8c3dbf69fb3c99aadc2 -c5ddf8c5ddf8bed6f09aadc2c5ddf8c5ddf8c5ddf8c5ddf8adc3da93a5b9 -93a5b993a5b993a5b9b0c5ddc5ddf89fb3c9bad1ebc5ddf8bdd4ee9cafc4 -c5ddf8c5ddf8c5ddf8aabfd6b1c7df3941489cafc5c5ddf8c5ddf8a0b4ca -343a42c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8697685383f46c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffffffffffffffff -ffffffe3e3e39d9d9d4a4a4a4c4c4cedededffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffeaeaea3d3d3dffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffeff5fdc5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8a9bed56b7887c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf873829196a9bd7381901e2226c4dcf7c5ddf8c5ddf8 -7a899a9aadc2c5ddf8c5ddf8c5ddf8c5ddf8c5ddf85a65719eb1c7c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffffffffff -fffffffffffffffffffffffffffffffffffff3f3f3ffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffededed3b3b3bffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffeff5fdc5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf88b9caf6e7b8b6e7b8b6e7b8b6e7b8b7d8d9ec5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf87e8e9f525c68778696bad1ebc5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffefefef383838ffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffeff5fd -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffffffffffffffffffffffffff1f1f1363636ffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffffffffffffffffffffffffffffffffffffff9fcfe -e0edfbcde2f9cce1f9cce1f9cce1f9cce1f9cce1f9cce1f9cce1f9cce1f9 -cce1f9cce1f9cce1f9cce1f9cce1f9cce1f9cce1f9cce1f9cce1f9cce1f9 -cce1f9cce1f9cce1f9cce1f9cce1f9cce1f9cce1f9cce1f9cce1f9cce1f9 -cce1f9cce1f9cce1f9cce1f9cce1f9cce1f9cce1f9cce1f9cce1f9cce1f9 -cce1f9cce1f9cce1f9cce1f9cce1f9cce1f9cce1f9cce1f9cce1f9cce1f9 -cce1f9cce1f9cce1f9cce1f9cce1f9cce1f9cce1f9cce1f9cce1f9cce1f9 -cce1f9cce1f9cce1f9cce1f9cce1f9cce1f9cce1f9cce1f9cce1f9cce1f9 -cce1f9cce1f9cce1f9cce1f9cce1f9cce1f9cce1f9cce1f9cce1f9cce1f9 -cce1f9cce1f9cce1f9cce1f9cce1f9cce1f9cce1f9cce1f9cce1f9cce1f9 -cce1f9cce1f9cce1f9cce1f9cce1f9cce1f9cce1f9cce1f9cce1f9cce1f9 -cce1f9cce1f9cce1f9cce1f9cce1f9cce1f9cce1f9cce1f9cce1f9cce1f9 -cce1f9cce1f9cce1f9cce1f9cce1f9cce1f9cce1f9cce1f9cce1f9cce1f9 -cce1f9cce1f9cce1f9cce1f9cce1f9cce1f9cce1f9cce1f9d7e8faf2f7fd -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -eff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c8dff8ffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffffffffffffffffffffffffffffffff4f4f4333333 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -d8e8fac5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -cce1f9feffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c8dff8ffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffffffffffffffffffffffffffffffffffffff6f6f6 -313131ffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fafcfefafcfefafcfefafcfefafcfefafcfefafcfefafcfefafcfefafcfe -fafcfefafcfefafcfefafcfefafcfefafcfefafcfefafcfefafcfefafcfe -fafcfefafcfefafcfefafcfefafcfefafcfefafcfefafcfefafcfefafcfe -fafcfefafcfefafcfefafcfefafcfefafcfefafcfefafcfefafcfefafcfe -fafcfefafcfefafcfefafcfefafcfefafcfefafcfefafcfefafcfefafcfe -fafcfefafcfefafcfefafcfefafcfefafcfefafcfefafcfefafcfefafcfe -fafcfefafcfefafcfefafcfefafcfefafcfefafcfefafcfefafcfefafcfe -fafcfefafcfefafcfefafcfefafcfefafcfefafcfefafcfefafcfefafcfe -fafcfefafcfefafcfefafcfefafcfefafcfefafcfefafcfefafcfefafcfe -fafcfefafcfefafcfefafcfefafcfefafcfefafcfefafcfefafcfefafcfe -fafcfefafcfefafcfefafcfefafcfefafcfefafcfefafcfefafcfefafcfe -fafcfefafcfefafcfefafcfefafcfefafcfefafcfefafcfefafcfefafcfe -fafcfefafcfefafcfefafcfefafcfefafcfefafcfefafcfefefeffffffff -ffffffc6def8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8f1f7fdffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c8dff8ffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -f9f9f92f2f2fffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffeff5fd -d1e4f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c9e0f9 -e2eefbffffffc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8eff5fdffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c8dff8ffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffbfbfb2c2c2cffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffffffffffffffffffffffffffffffffffffffefeff -cae0f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8f3f8fec5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8eff5fdffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffdfdfd2a2a2affffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -f2f7fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8e0edfbc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8eff5fdffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffff282828ffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffff0f6fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8deecfbc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8eff5fdffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffeff5fdc5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffff282828ffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffff0f6fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8deecfbc5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8eff5fdffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffeff5fdc5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffff282828ffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffff0f6fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8deecfbc5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8eff5fdffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffeff5fdc5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffff282828ffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffffffff0f6fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8deecfbc5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8eff5fd -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffeff5fd -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8b5cbe4bcd3edc5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8bed5efb4cae3c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff282828ffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffffffffffffff0f6fdc5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8deecfbc5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -eff5fdffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -eff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8474f597d8d9e -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf88a9bae404851c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c8dff8ffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffff282828 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffffffffffffffffffff0f6fdc5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8deecfb -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8eff5fdffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8b5cbe4 -bcd3edc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf88a9bae404851c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c8dff8ffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -282828ffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffffffffffffffffffffffffff0f6fdc5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -deecfbc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8eff5fdffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8b2c8e0394148c5ddf8c5ddf8c5ddf83f474f -acc1d8c5ddf88a9bae282d32202428626e7cc4dcf7c5ddf8aabfd62a2f35 -2a2f358e9fb2c5ddf8c5ddf8c5ddf8a9bdd44a535d262b3057616d404851 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c8dff8ffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffff282828ffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffffffffffffffffffffffffffffffff0f6fdc5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8bed5efa6bad1a6bad1bad1ebc5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8b9d0e9 -b9d0e9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c3dbf6aec3dbc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8bdd4eea6bad1 -a6bad1bbd2ecc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8deecfbc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8eff5fdffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8262b309baec3c5ddf8a3b6cd -1e2226c5ddf8b1c7df0a0c0d92a3b7abc0d7262b307f8fa0c5ddf8c5ddf8 -c5ddf8474f597d8d9ec5ddf8c5ddf8c5ddf8282d327f8fa0afc4dc2a2f35 -404851c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c8dff8ffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffff282828ffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffffffffffffffffffffffffffffffffffffff0f6fd -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8aabfd64f59641a1d218393a5c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -64707e667381c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8b3c9e1111316c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8a7bcd3 -4f5964181b1f8798abc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8deecfbc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8eff5fdffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf86c7a8957616dc5ddf8 -5f6a7765717fc5ddf88393a5292e34c5ddf8c5ddf865717f47505ac5ddf8 -c5ddf8c5ddf8474f597d8d9ec5ddf8c5ddf8b6cce50d0e10c4dcf7c5ddf8 -6a7786404851c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffff282828ffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -f0f6fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf84149528393a5c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf864707e667381c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c3dbf6aec3dbc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf83d444c8798abc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8deecfbc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf88899ac7482928494a6 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8bad0ea748292748292a3b7ce -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf897a9bea9bdd4c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf88797aa7482928696a9c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8eff5fdffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8b1c7df16191c -c3dbf61b1f23abc0d7c5ddf87988983d454dc5ddf8c5ddf87786963c434b -c5ddf8c5ddf8c5ddf8474f597d8d9ec5ddf8c5ddf8a2b6cc1b1f23c5ddf8 -c5ddf87d8c9d404851c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffff282828ffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffff0f6fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -8494a62a2f351b1f23444d56c5ddf8c5ddf8c5ddf84149528393a5c5ddf8 -c5ddf8c5ddf8a2b6cc333a411d20242c32388b9cafc5ddf8c5ddf8b3c9e1 -4d5661252a2f2b303698abc0c5ddf8c5ddf88c9db139404723272c3c434b -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8a3b7ce -414952292e346774826b7887c5ddf8c5ddf87f8fa02a2f35333a418797aa -c5ddf8c5ddf85c687472808f2e343a363d459eb1c7c5ddf8c5ddf898abc0 -383f4630363d49525c667381c5ddf8c4dcf76e7b8b262b303d444c93a5b9 -c5ddf8c5ddf8c5ddf8353b438d9eb12f353c2125299baec3c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8697685626e7b2b3036424a53a3b6cd -c5ddf8c5ddf865717f2a2f35394047c5ddf8c5ddf8c5ddf84c5560454e57 -282d33626e7b2c32389cafc4c5ddf855606b64707e252a2f4e5863adc2d9 -c5ddf8c5ddf8c5ddf83d444c8798abc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8deecfbc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf892a3b7697584 -25292ec5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8bbd2ec8190a2363d45 -717f8ec5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf85b66728292a4c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf890a2b5657280292e34c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8eff5fdffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffeff5fdc5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -343a426a77862c3238c5ddf8c5ddf895a7bb121417c5ddf8c5ddf84e5863 -5b6773c5ddf8c5ddf8c5ddf8474f597d8d9ec5ddf8c5ddf8c4dcf7101315 -bad1ebc5ddf8545e6a404851c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffff282828ffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffff0f6fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -99acc11416198fa1b4c2daf58b9cafc5ddf8c5ddf8c5ddf84149528393a5 -c5ddf8c5ddf8c5ddf8a9bed5a6bad1c5ddf8a2b6cc090a0bb8cfe8c5ddf8 -5f6a77626e7cc4dcf7b7cee7adc3dac5ddf8c2daf5191c20a9bed5c5ddf8 -9fb3c9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -1b1e228595a8adc2d922272b4d5661c5ddf892a3b7181b1fa2b6ccb0c5dd -262b30a9bdd4c5ddf83f474f333a41b4c9e2717f8e434c55c5ddf8bfd6f1 -1113169aadc2a1b5cb131518667381c5ddf8788797282d33abc0d7a7bcd3 -1b1f23bcd3edc5ddf8c5ddf80d0e103b424a9db0c6b0c5ddabc0d7c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8505a651f2327aabfd68d9eb1 -191c20c5ddf8c5ddf8c5ddf8b3c9e1111316c5ddf8c5ddf8c5ddf82a2f35 -8fa1b4414952515b668494a658626ec5ddf8363d4530363db1c7df768494 -323940c5ddf8c5ddf8c5ddf83d444c8798abc5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8deecfbc5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c4dcf7b0c5ddb8cfe8c5ddf8c5ddf8c5ddf8 -9fb3c925292ec5ddf8c5ddf8c5ddf8c5ddf8c5ddf8b4cae3b1c7dfc5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8bed5efafc4dcc4dcf7c5ddf8c5ddf8c5ddf8 -c5ddf8b4c9e2b9d0e9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c2daf5c1d9f4bed5efbdd4eec5ddf8c5ddf8c5ddf8c5ddf8 -c4dcf7b4c9e2c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8b8cfe8b5cbe4c5ddf8 -c5ddf8c5ddf8c1d9f4c2daf5bad1ebc1d8f3c5ddf8c5ddf8c5ddf8c5ddf8 -535d69717f8ec5ddf8c5ddf8c5ddf8c5ddf8c5ddf8bbd2ecbcd3edc5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8bfd6f1 -c4dcf7b7cde6c5ddf8c5ddf8c5ddf8c4dcf7bed6f0bed6f0c2daf5c5ddf8 -c5ddf8c3dbf6c1d9f4b4cae3c4dcf7b9d0e9c3dbf6c5ddf8c4dcf7c0d7f2 -c2daf5b8cfe8c5ddf8c5ddf8c5ddf8c5ddf89baec3292e34c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8eff5fdffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffeff5fdc5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf87b8a9b050606738291c5ddf8c5ddf8c5ddf83239402c313748515b -141619adc3dac5ddf88899ac5b67732125293a41495b6773a3b6cdc5ddf8 -616d7a25292e4c55601c2023404851c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffff282828ffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffff0f6fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf857616d515b66c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8414952 -8393a5c5ddf8c5ddf8c5ddf8c4dcf79fb2c86b788755606b0e1012a1b5cb -c5ddf86875832f353c8798abbad1ebc5ddf8c5ddf8c5ddf81e21255c6874 -9baec3c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -a9bed516191cc5ddf8c5ddf85f6b784d5661c5ddf84e5863444d568b9cb0 -899aad474f596c7988c5ddf83f474f788797c5ddf8aec3db171a1dc5ddf8 -91a2b630363dc5ddf8c5ddf8444d56667381c5ddf8353b4357616d8b9caf -899aad353b438595a8c5ddf8c5ddf80d0e108b9cafc5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8505a6557616dc5ddf8 -c5ddf81b1e22a9bed5c5ddf8c5ddf8b3c9e1111316c5ddf8c5ddf8c5ddf8 -2a2f35acc1d85b67736e7b8b9baec33e464ec5ddf8363d45707e8dc5ddf8 -c1d8f30a0c0dbed5efc5ddf8c5ddf83d444c8798abc5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8deecfbc5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf89baec3171a1d23272c21262a7b8a9bc5ddf8 -c5ddf89fb3c925292ec5ddf8c5ddf8c5ddf8c5ddf8363c442c31372b3036 -212529a9bdd4c5ddf8c5ddf8505a652d3339383f46363c44c5ddf8c5ddf8 -b0c5dd2a2f35363d452b3036758393c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf86673812f343b1b1f231f23276c7a89c5ddf8c5ddf8 -96a9bd171a1d282d3331373e99acc1c5ddf8c5ddf84e576210121416191c -3d444cc1d9f4c5ddf84d5661333a411e21252024287e8e9fc5ddf8c5ddf8 -c5ddf8535d69717f8ec5ddf8c5ddf8c5ddf8c1d9f44a535d14171a282d32 -58636fc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8aec3db -0f11132a2f3522272b434c55b4cae3c5ddf8afc4dc30363d121417798898 -c5ddf8c5ddf8899aad1b1e2221262a2f353c2b30362c3137c5ddf895a7bb -1d202420242821262a505a65bed5efc5ddf8c5ddf89baec3292e34c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8eff5fdffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffeff5fdc5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8bed5ef93a5b9bbd2ecc5ddf8c5ddf8c5ddf8c1d8f38b9caf -8191a3b4c9e2c5ddf8c5ddf8a9bdd493a5b993a5b993a5b993a5b9b4cae3 -c5ddf8c5ddf8a9bed58899acb2c8e0a4b8cfc5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffff282828ffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffffffff0f6fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf84a545e6a7786c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -4149528393a5c5ddf8c5ddf8c5ddf88494a62c32388495a799acc116191c -9cafc4c5ddf8c3dbf68495a732383f0c0d0f92a3b7c5ddf8c5ddf8b5cbe4 -687583111316282d32c0d7f2c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf897a9be25292ec5ddf8c5ddf86e7b8b4d5661c5ddf8424a533d454d -6875836875836875838d9eb1c5ddf83f474f8b9cb0c5ddf8b4cae3101214 -c5ddf87b8a9b414952c5ddf8c5ddf857616d667381c5ddf8282d334b545f -68758368758368758398abc0c5ddf8c5ddf80d0e10b5cbe4c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8505a65687583 -c5ddf8c5ddf82b303690a2b5c5ddf8c5ddf8b3c9e1111316c5ddf8c5ddf8 -c5ddf82a2f35b2c8e0626e7b7482929fb3c9363d45c5ddf8363d458191a3 -c5ddf8c5ddf8111316aabfd6c5ddf8c5ddf83d444c8798abc5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8deecfbc5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c4dcf71b1f237d8c9dc5ddf8c5ddf8b3c9e1 -c5ddf8c5ddf89fb3c925292ec5ddf8c5ddf8c5ddf8c5ddf8b7cde6c5ddf8 -c5ddf864707e535d69c5ddf8afc4dc15181bc5ddf8c5ddf8bfd6f1c5ddf8 -c5ddf86572805f6a77c5ddf8c5ddf8bfd6f1c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf86673811e2226bed6f0bbd2ec14171ab8cfe8 -c1d8f316191c8ea0b3c5ddf89baec33b424ac5ddf891a2b6171a1ebcd3ed -c1d8f32c31377d8c9dc5ddf84d5661353b43c2daf5b2c8e0121417c4dcf7 -c5ddf8c5ddf8535d69717f8ec5ddf8c5ddf8c5ddf873819030363dc1d9f4 -c4dcf7373e469fb3c9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -aec3db00000096a9bdc5ddf8515b66738190c5ddf8c5ddf8c5ddf84b545f -798898c5ddf8c5ddf8899aad3f474facc1d8030303c3dbf6282d32b9d0e9 -95a7bb000000afc4dcc3dbf63940478c9db1c5ddf8c5ddf89baec3292e34 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8eff5fd -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffeff5fd -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff282828ffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffffffffffffff0f6fdc5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf86d7b8a343a42c5ddf8c5ddf8c4dcf7c5ddf8c5ddf8 -c5ddf85c68746d7b8ac5ddf8c5ddf8c5ddf8434b548191a3c5ddf8afc4dc -0000009cafc4c5ddf8c5ddf8c5ddf8c4dcf7515b67535d69c5ddf8c5ddf8 -c5ddf8c5ddf8b4cae3171a1d9db0c6c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c1d9f40d0f11bad1ebc5ddf8424a534d5661c5ddf8657280 -404750c5ddf8c5ddf8c5ddf8c5ddf8c5ddf83f474f8b9cb0c5ddf8b4cae3 -101214c5ddf8adc3da1c2023c5ddf8c5ddf82e343a667381c5ddf84b545f -5a6571c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf80d0e10b7cee7c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8505a65 -424a53c5ddf8c3dbf60d0f11bdd4eec5ddf8c5ddf8b3c9e1111316c5ddf8 -c5ddf8c5ddf82a2f35b2c8e0626e7b7482929fb3c9363d45c5ddf8363d45 -5c6874c5ddf8b2c8e0171a1dc5ddf8c5ddf8c5ddf857616d72808fc5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8deecfbc5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8aec3db070809bed6f0c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf89fb3c925292ec5ddf8c5ddf8c5ddf8c5ddf895a7bb -525c682c31371d2024404750c5ddf8c3dbf624282d3a4149738190bad1eb -c5ddf8c5ddf895a7bb171a1d515b668d9eb1c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf86673814a545ec5ddf8c5ddf83a4149 -8696a9a6bad10606075b667258636f57616d0a0c0dbed6f06b788747505a -c5ddf8c5ddf85d6875535d69c5ddf84d566164707ec5ddf8c5ddf8212529 -9fb3c9c5ddf8c5ddf8535d69717f8ec5ddf8c5ddf8c5ddf8424a53343a42 -5a657158626e2e343a64707ec5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8aec3db060607c1d9f4c5ddf88292a43e464ec5ddf8c5ddf8c5ddf8 -4b545f798898c5ddf8c5ddf8899aad515b66bed5ef131518c5ddf8363c44 -a2b6cc95a7bb1c2023c5ddf8c5ddf869758458626ec5ddf8c5ddf89baec3 -292e34c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -eff5fdffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -eff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8a9bdd4a6bad1b1c7dfc5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8b8cfe8c1d9f4c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c1d8f3b0c6dec5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8bfd6f1bad1ebc5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c8dff8ffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffff282828 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffffffffffffffffffff0f6fdc5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8bdd4ee282d332c3238626e7c2d3339c5ddf8 -c5ddf8c5ddf89fb2c81b1f234b545f8fa1b4c5ddf87e8e9f22272b606c79 -2b303616191c9cafc4c5ddf84e586357616d6572801e212598aabfc5ddf8 -b6cce52e343a66738155606b22272bc4dcf7c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf86a77861e2226373e462c32384d5661c5ddf8 -bad0ea252a2f343a42636f7d3d454d7d8d9ec5ddf83f474f8b9cb0c5ddf8 -b4cae3101214c5ddf8c5ddf83e464e353b433d444c181b1f667381c5ddf8 -acc1d81c20233e464e626e7c343a4295a7bbc5ddf8c5ddf80d0e10b7cee7 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -505a65171a1e474f592a2f35535d69c5ddf8c1d9f45b6773535d6908090a -5b6773697584c5ddf82a2f35b2c8e0626e7b7482929fb3c9363d45c5ddf8 -363d451b1f234e586322272b697685c5ddf8c5ddf8c5ddf89baec31b1f23 -4c556092a3b7c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8deecfb -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8aec3db070809bed6f0c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8a1b5cb23272cc5ddf8c5ddf8c5ddf8bed5ef -171a1d9cafc5c3dbf67382913d454dc5ddf8c5ddf8c3dbf68ea0b323272c -191c20c4dcf7c5ddf8c5ddf8b7cde66c7a89070809626e7cc5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf86673814a535dc5ddf8c5ddf8 -3a41498494a6a6bad10b0d0e98abc099acc199acc199acc1c1d9f46b7887 -474f59c5ddf8c5ddf85d6875535d69c5ddf84d5661636f7dc5ddf8c5ddf8 -2125299db0c6c5ddf8c5ddf8545e6a707e8dc5ddf8c5ddf8c5ddf8424a53 -58636f99acc199acc199acc1acc1d8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8aec3db060607c1d9f4c5ddf88292a43b424ac5ddf8c5ddf8 -c5ddf84b545f798898c5ddf8c5ddf8899aad545e6ac1d8f316191cc5ddf8 -3940479eb1c795a7bb1b1f23c5ddf8c5ddf869758455606bc5ddf8c5ddf8 -9cafc4282d33c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8eff5fdffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8596470333a41464e58c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf88c9db1a1b5cbc5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8bed5ef24282dc0d7f2c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8697584c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8a6bad11e2226 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8b4c9e22a2f35c4dcf7 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c8dff8fffffff5f5f5ffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -282828ffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffffffffffffffffffffffffff0f6fdc5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c1d9f491a2b67d8d9ea9bdd4 -c5ddf8c5ddf8c5ddf8c5ddf8bed6f095a8bcaec3dbc5ddf8c5ddf8a9bdd4 -8393a5b1c7df9eb1c7bad1ebc5ddf8b4c9e28797aa8495a7b7cde6c5ddf8 -c5ddf8c5ddf8a0b4ca7d8c9d96a9bdc1d9f4c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8b4cae3a7bcd3626e7c738190 -c5ddf8c5ddf8c1d8f390a2b57c8b9c9cafc4c4dcf7c5ddf8a3b7ceb7cde6 -c5ddf8c1d8f398aabfc5ddf8c5ddf8c5ddf89baec393a5b9adc2d9adc3da -c5ddf8c5ddf8bcd3ed8b9cb07d8d9ea3b6cdc5ddf8c5ddf8c5ddf897a9be -c1d9f4c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8505a6572808f8b9cb0a3b7cec5ddf8c5ddf8c4dcf793a5b993a5b9 -93a5b993a5b999acc1c5ddf89eb1c7c0d7f2acc1d8b0c6debbd2eca1b5cb -c5ddf8363d458797aa8797aaadc3dac5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -bed5ef95a7bbb0c5ddc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -deecfbc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c4dcf71b1f237d8c9d -c5ddf8c5ddf8b3c9e1c5ddf8c5ddf8bfd6f1111316bad0eac5ddf8c5ddf8 -a5b9d01e2125c5ddf8c0d7f232383f3d454dc5ddf8bcd3edbfd6f1c5ddf8 -bad0ea0d0f11bad1ebc5ddf8b6cce5c5ddf8c5ddf8768494474f59c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf86673811e2125bdd4ee -bad0ea141619b7cee7c1d8f316191c8b9cb0c5ddf8c5ddf8b1c7dfc5ddf8 -92a4b816191cbad0eabfd6f12a2f357e8e9fc5ddf84d5661323940c1d9f4 -b0c5dd111316c4dcf7c5ddf8c5ddf87d8c9d49525cc5ddf8c5ddf8c5ddf8 -73819030363dbed6f0c5ddf8c0d7f2b6cce5c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8aec3db00000093a5b9c5ddf84e586372808fc5ddf8 -c5ddf8c5ddf84b545f798898c5ddf8c5ddf8899aad545e6ac1d8f316191c -c5ddf83940479eb1c795a7bb000000acc1d8c2daf5363d458b9cb0c5ddf8 -c5ddf8bdd4ee111316bcd3edc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8eff5fdffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf87e8e9f464e58c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf84c5560788797c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf86e7b8b626e7cc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8000000c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c1d8f3 -b0c6dec5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf849525c -8798abc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -bed5ef8b9caf485059555555f0f0f0ffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffff292929ffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffffffffffffffffffffffffffffffff0f6fdc5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf88292a48fa1b48292a41c2023 -afc4dcc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8505a65748292c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8363d458e9fb2c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8deecfbc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf89cafc4 -1b1e2223272c24282d7c8b9cc5ddf8c5ddf8c5ddf8707e8d1e2226282d33 -c5ddf8c5ddf8454e57282d321b1f234a535d3d454dc5ddf8a1b5cb171a1e -383f46282d33657280c5ddf8c5ddf85f6b7821262a373e46292e349eb1c7 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf86673812d3339 -191c201e22266c7a89c5ddf8c5ddf897a9be191c20262b30252a2f394148 -c5ddf8c5ddf84e57620f111315181b3d444cc1d9f4c5ddf84d566131373e -1c20231f23277e8e9fc5ddf8c5ddf8c5ddf8b8cfe84047501b1e22697685 -c5ddf8c1d9f44e57620e101232383f1b1f2390a2b5c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8aec3db0e1012272c3121262a434c55b4cae3 -c5ddf8707d8d2a2f351012141a1d212a2f358ea0b3899aad545e6ac1d8f3 -16191cc5ddf83940479eb1c795a7bb1d20241d2024202428505a65bed5ef -c5ddf8c5ddf8c5ddf86c7a891e21252d3339c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8eff5fdffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf87e8e9f464e58c5ddf8 -c5ddf8c5ddf8c4dcf7444d561e222624282d616d7ac2daf5c5ddf8c5ddf8 -6673812c323824282d6d7b8ac5ddf8a6bad12a2f351012141a1d212a2f35 -626e7cc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8667381 -707d8d32383f32383f98aabfc5ddf8c5ddf855606b20242821262a545f6a -bed6f0c5ddf8434c55444d562c32385f6a772f343ba1b5cbc5ddf8b7cde6 -4d566121252956616cadc3dac5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8191c20adc2d9c5ddf8c5ddf8c5ddf8acc1d8 -49525c25292e2d3339a3b7cec5ddf86976852a2f350000002a2f352a2f35 -9eb1c7c5ddf8c5ddf8515b668696a93941481b1f238190a2c5ddf85a6571 -2a2f35434b54c5ddf8c5ddf8c5ddf88b9caf606c79434b54272c317d8c9d -c5ddf8c5ddf8b0c5dd525c6824282d697584525c68c5ddf8c5ddf8c5ddf8 -93a5b9323940c5ddf8c5ddf8c5ddf8c5ddf8c5ddf86d7b8aa0b4cac5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8adc2d9707d8d -292f340c0e0f0304041e2225f0f0f0ffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffff2b2b2bfdfdfdffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffffffffffffffffffffffffffffffffffffff0f6fd -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf893a5b957616d687583 -b0c6dec5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8b0c5dd6e7b8b6e7b8b6e7b8b6e7b8b -6e7b8bafc4dcc5ddf88797aa9aadc2c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf87a8899a7bcd3c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8deecfbc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8b1c7dfbbd2ecc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8b7cee7c1d8f3c5ddf8c5ddf8c5ddf8c5ddf8 -c1d9f4adc3dac2daf5c5ddf8c5ddf8c5ddf8c5ddf8bad0eab2c8e0c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8667381 -5e6976bed5efbdd4eec5ddf8c5ddf8c5ddf8c5ddf8c5ddf8b1c7dfb8cfe8 -c5ddf8c5ddf8c5ddf8c5ddf8b8cfe8b5cbe4c5ddf8c5ddf8c5ddf84d5661 -778696bad0eac1d8f3c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8bed6f0aec3dbc2daf5c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8aec3db16191cc4dcf7b7cde6c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf895a7bb2f353cc2daf5b8cfe8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8eff5fdffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf87e8e9f464e58 -c5ddf8c5ddf8c5ddf8c4dcf78ea0b3c2daf5b6cce52c32388190a2c5ddf8 -9cafc52b3036bfd6f1c2daf5a3b6cdc5ddf8c5ddf8c5ddf84c5560788797 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -4b545f2a2f35b0c6de7d8c9d373e46c5ddf8c5ddf88fa1b4c0d7f2bad1eb -3f474f697685c5ddf820242899acc1363d455b6773798898626e7cc5ddf8 -3a414956616cbad0ea8190a23a4149c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8b8cfe8070809c4dcf7c5ddf8c5ddf8c5ddf8 -4f596472808fc5ddf8b3c9e1b2c8e0c5ddf8c5ddf8c5ddf8000000c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf830363d282d328ea0b3b7cee7a3b6cdc5ddf8 -c5ddf8a6bad11e2226c5ddf8c5ddf8c5ddf87a88990d0e109fb3c9a7bcd3 -0f1113c2daf5c5ddf83c434b677482b4cae33941482c3137c5ddf8c5ddf8 -c5ddf8b2c8e00d0e10c5ddf8c5ddf8c5ddf8c5ddf8c5ddf80a0b0c768595 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c2daf595a8bc535d6815181b0e1011 -0505060000000202021f2327bcd2e9ffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffff2d2d2dfbfbfbffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -f0f6fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8deecfbc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -6673815e6976c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -4d5661778696c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8aec3db16191cc5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf895a7bb2f353cc5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8eff5fdffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf87e8e9f -464e58c5ddf8c5ddf8c5ddf8c5ddf8b0c5dd7a899a57616d292e3464707e -c5ddf8a5b9d0121417768494adc3dac5ddf8c5ddf8c5ddf8c5ddf84c5560 -788797c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf84b545f6c7988c5ddf8bad1eb0a0c0dc5ddf8c5ddf8b4cae38190a2 -58636f333a414d5661c5ddf8202428b7cde6515b6679889890a2b549525c -bcd3ed0202028190a28b9caf8899ac111316bdd4eec5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf899acc1212529c5ddf8c5ddf8c5ddf8 -c5ddf858626e3940478b9cb0bdd4eec5ddf8c5ddf8c5ddf8c5ddf8000000 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf830363d677482c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8a6bad11e2226c5ddf8c5ddf8c5ddf87a88993d454dc5ddf8 -c5ddf823272ca2b6ccc1d8f30a0c0db9d0e9c5ddf88190a22c3137c5ddf8 -c5ddf8c5ddf8c5ddf8070809b3c9e1c5ddf8c5ddf8c5ddf8c5ddf8a8bcd4 -b9d0e9c5ddf8c5ddf8b5cbe4616d7a252a2f090a0b090a0b000000000000 -000000000000010101141619778696808f9fa1a1a1a0a0a09e9e9e9c9c9c -9a9a9a9898989797979595959393939191918f8f8f8e8e8e8c8c8c8a8a8a -8888888686868585858383838181817f7f7f7d7d7d7c7c7c7a7a7a787878 -767676747474737373717171141414f8f8f8ffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffff0f6fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8deecfbc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8aabfd6a8bcd4c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8a3b7ceafc4dcc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -8292a46e7b8b6e7b8b6e7b8b6e7b8b8696a9c5ddf8bed6f094a6bac5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8b7cee79baec3c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8eff5fdffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffeff5fdc5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -7e8e9f464e58c5ddf8c5ddf8c5ddf8b8cfe816191c76849498aabf464e58 -5f6a77c5ddf8c5ddf89fb3c94e58630405055f6a77c5ddf8c5ddf8c5ddf8 -4c5560788797c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf84b545f7f8fa0c5ddf8c1d8f3030404c5ddf8c1d9f4191c20 -6f7c8c96a9bd58626e47505ac5ddf8202428bdd4ee58626e7f8fa095a8bc -414952b0c6de040505677482687583687583687583b6cce5c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8a6bad116191cc5ddf8c5ddf8 -c5ddf8c5ddf8c1d8f37d8d9e2a2f351013159cafc5c5ddf8c5ddf8c5ddf8 -000000c5ddf8c5ddf8c5ddf8c5ddf8c5ddf830363d92a3b7c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8a6bad11e2226c5ddf8c5ddf8c5ddf87a8899515b66 -c5ddf8c5ddf8292e349baec3b7cde608090ac2daf5c5ddf88fa1b42c3137 -c5ddf8c5ddf8c5ddf8c0d7f2030404bed5efc5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8bfd6f17a899a1f2328030304060708000000000000 -000000000000000000020303171a1d616d7b677480858585878787898989 -8b8b8b8c8c8c8e8e8e9090909292929494949595959797979999999b9b9b -9d9d9d9e9e9ea0a0a0a2a2a2a4a4a4a5a5a5a7a7a7a9a9a9abababadadad -aeaeaeb0b0b0b2b2b2b4b4b4b5b5b5b7b7b7fdfdfdffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffff0f6fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c3dbf6a2b6cc93a5b9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8deecfbc5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8eff5fdffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffeff5fdc5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf899acc12f353cc5ddf8c5ddf8c5ddf8808fa1444d56c5ddf8c5ddf8 -262b305f6a77c5ddf8c5ddf8c5ddf8c5ddf88e9fb216191cc5ddf8c5ddf8 -c5ddf85b67736a7786c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf84b545f7f8fa0c5ddf8c1d8f3030404c5ddf897a9be -2d3339c5ddf8c5ddf83d454d47505ac5ddf8202428bdd4ee58626e7f8fa0 -95a8bc414952c4dcf70f111398aabfc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c1d9f4060607bed6f0 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c2daf5434b54626e7cc5ddf8c5ddf8 -c5ddf80f1113b7cde6c5ddf8c5ddf8c5ddf8c5ddf830363d94a6bac5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8a6bad11e2226c5ddf8c5ddf8c5ddf87a8899 -515b66c5ddf8c5ddf8292e349baec3c5ddf8272c319cafc5c5ddf8626e7c -2c3137c5ddf8c5ddf8c5ddf8a6bad11b1e22c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf88494a6a0b4cac5ddf8c5ddf8c5ddf8c5ddf8c2daf59aadc25c6874 -1e22260e10120a0b0d0000000000000607082d3339c3d8f1ffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffff0f6fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf858636f373e46899aadc5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8deecfbc5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8eff5fdffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffeff5fdc5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c4dcf7282d333d454d6b7887c5ddf8b4c9e21214175e6976 -323940272c315f6a77c5ddf87e8e9f454e576a7786363d455d6875c5ddf8 -c5ddf8c5ddf899acc1191c20545e6a8292a4c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf84b545f7f8fa0c5ddf8c1d8f3030404c5ddf8 -c0d7f2171a1d5964703d444c292e3447505ac5ddf8202428bdd4ee58626e -7f8fa095a8bc414952c5ddf88190a215181b545e6a5a6571292e34c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8363c44 -94a6bac5ddf8c5ddf8c5ddf8434c555b6672636f7d191c20a6bad1c5ddf8 -c5ddf8c5ddf8545e6a2f343b5b6773aabfd6c5ddf8c5ddf830363d94a6ba -c5ddf8c5ddf8c5ddf8bad1eb5b67734d56610e10125b6773707d8dc5ddf8 -7a8899515b66c5ddf8c5ddf8292e349baec3c5ddf88393a51d20243f474f -2f343b2c3238c5ddf8c5ddf8c5ddf87988984f5964c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8141619687583c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8b8cfe88595a8424a531113150f11130202032c3036f8f8f8 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffffffff0f6fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf821262aa3b7cec5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8deecfbc5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf88798ab596470adc3da -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8eff5fd -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffeff5fd -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf89fb2c89fb2c8c5ddf8c5ddf8b9d0e9 -8494a6a0b4caadc3daabc0d7c5ddf8bed6f092a3b77d8c9da8bcd4c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8bfd6f198abc0a6bad1c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8a6bbd2b4c9e2c5ddf8c4dcf795a7bb -c5ddf8c5ddf8bed5ef8797aa99acc1b3c9e1a6bad1c5ddf89cafc4c3dbf6 -a9bed5b4c9e2b9d0e9a4b8cfc5ddf8c5ddf8aec3db8191a38595a8b4c9e2 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -95a8bc404750c5ddf8c5ddf8c5ddf8b0c6de8494a68798abbad0eac5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8b0c6de94a6bab8cfe8c5ddf8c5ddf89fb3c9 -b9d0e9c5ddf8c5ddf8c5ddf8c0d7f293a5b993a5b993a5b993a5b99db0c6 -c5ddf8b2c8e0a8bcd4c5ddf8c5ddf89eb1c7bad1ebc5ddf8c5ddf8bdd4ee -a0b4ca8292a4515b67c5ddf8c5ddf8c5ddf8282d33acc1d8c5ddf8c5ddf8 -c5ddf8c5ddf8b4c9e2060607aec3dbc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8a6bbd26d7a892e3339 -515151f5f5f5ffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffffffffffffff0f6fdc5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf816191cadc3dac5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8deecfbc5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8a8bcd41b1f2395a8bc -bfd6f1c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -eff5fdffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -eff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf858626ebdd4eec5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf890a2b5 -8899ac8b9cb02a2f3590a2b5c5ddf8c5ddf8adc3da677482c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf894a6ba64707ec5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c8dff8f9f9f9ecececffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffffffffffffffffffff0f6fdc5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8bbd2ec070809bfd6f1c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8deecfb -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf87988984c5560 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8eff5fdffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8abc0d7 -6e7b8b6e7b8b6e7b8b6e7b8b6e7b8bb4c9e2c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -a2b6cc5c68745e6976a6bad1c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c8dff8ffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffffffffffffffffffffffffff0f6fdc5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf87a899a171a1e64707ec5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -deecfbc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf872808f -515b66c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8eff5fdffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c8dff8ffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffffffffffffffffffffffffffffffff0f6fdc5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8bad0ea7f8fa0141619c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8deecfbc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8bed6f0 -414952707d8dc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8eff5fdffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c8dff8ffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffffffffffffffffffffffffffffffffffffff0f6fd -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8101214 -b1c7dfc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8deecfbc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8bbd2ec -14171a1b1e22b8cfe8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8eff5fdffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -f0f6fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -171a1eadc2d9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8deecfbc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c4dcf748515b697584c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8eff5fdffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffff0f6fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf83e464e7a899ac4dcf7c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8deecfbc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8738190505a65c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8eff5fdffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffeff5fdc5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffff0f6fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf89cafc44e58635c6874c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8deecfbc5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf87a899a4a535dc5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8eff5fdffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffeff5fdc5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffff0f6fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8deecfbc5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8abc0d7171a1e899aadbdd4eec5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8eff5fdffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffeff5fdc5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffffffff0f6fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8deecfbc5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf895a8bc6b7887b1c7df -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8eff5fd -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffeff5fd -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffffffffffffff0f6fdc5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8deecfbc5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -eff5fdffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -eff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c8dff8ffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffffffffffffffffffff0f6fdc5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf89cafc572808fc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf84d5661c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8deecfb -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8eff5fdffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c8dff8ffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffffffffffffffffffffffffff0f6fdc5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf89cafc572808fc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8050606c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -deecfbc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8eff5fdffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -b5cbe4bcd3edc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8bed5efb4cae3 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c8dff8ffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffffffffffffffffffffffffffffffff0f6fdc5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf893a5b9 -bed5efc5ddf8c5ddf8abc0d7a6bad1c5ddf8c5ddf89cafc57d8d9ea2b6cc -c5ddf8c5ddf8c5ddf895a8bc8d9eb19fb3c9c5ddf8c5ddf8c5ddf8c5ddf8 -bcd3ed8495a7b1c7df050606c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8deecfbc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf832383fabc0d7c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf86d7b8a758393c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8eff5fdffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8474f597d8d9ec5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf88a9bae -404851c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c8dff8ffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffffffffffffffffffffffffffffffffffffff0f6fd -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -4048517f8fa0c5ddf8c5ddf83d454d8393a5c5ddf86f7c8c16191c56616c -1416197e8e9fc5ddf8c5ddf8707e8d424a53404750c5ddf8c5ddf8c5ddf8 -92a4b81e2125545f6a2a2f35030404c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8deecfbc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf88696a9bad0ea -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8616d7a697685c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8eff5fdffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8b5cbe4bcd3edc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -8a9bae404851c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -f0f6fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf88798ab3b424ac5ddf8b9d0e9101214bed6f0c5ddf80d0e109aadc2 -c5ddf88e9fb21c2023c5ddf8c5ddf8c5ddf88495a7404750c5ddf8c5ddf8 -c5ddf84a545e7f8fa0c5ddf893a5b9020202c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8deecfbc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf89db0c68190a2c5ddf8c5ddf8c1d8f35f6b78c2daf5 -c5ddf899acc1525c6856616ca6bbd2c5ddf8c5ddf89db0c65b67735b6773 -b5cbe4c5ddf8c5ddf8c5ddf8bad1eb687583626e7b5a6571697685c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8eff5fdffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8b2c8e0394148c5ddf8 -c5ddf8c5ddf83f474facc1d8c5ddf88a9bae282d32202428626e7cc4dcf7 -c5ddf8aabfd62a2f352a2f358e9fb2c5ddf8c5ddf8c5ddf8a9bdd44a535d -262b3057616d404851c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffff0f6fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c0d7f2121417b7cee77a899a4a545ec5ddf8b7cee7030404 -c1d8f3c5ddf8b5cbe4010101c1d9f4c5ddf8c5ddf88495a7404750c5ddf8 -c5ddf8c5ddf8181b1fa3b7cec5ddf8bad1eb030303c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8deecfbc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8afc4dc141619c3dbf6c5ddf88b9caf363c44 -c5ddf8a5b9d0101214748292697685121417b7cde6c5ddf8b2c8e093a5b9 -15181ba7bcd3c5ddf8c5ddf8c3dbf6191c206a7786707d8d0d0e10697685 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8eff5fdffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffeff5fdc5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8262b30 -9baec3c5ddf8a3b6cd1e2226c5ddf8b1c7df0a0c0d92a3b7abc0d7262b30 -7f8fa0c5ddf8c5ddf8c5ddf8474f597d8d9ec5ddf8c5ddf8c5ddf8282d32 -7f8fa0afc4dc2a2f35404851c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffff0f6fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf84f5964788797363c4491a2b6c5ddf8c0d7f2 -000000b0c6dec5ddf8a3b6cd0a0c0dc5ddf8c5ddf8c5ddf88495a7404750 -c5ddf8c5ddf8c5ddf832383f92a3b7c5ddf8a8bcd4020202c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8deecfbc5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf832383f91a2b6c5ddf8464e58 -7d8c9dc5ddf85f6b7847505ac5ddf8c5ddf831373e788797c5ddf8c5ddf8 -c5ddf81d2024a7bcd3c5ddf8c5ddf89cafc42a2f35c5ddf8c5ddf8363d45 -697685c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8eff5fdffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffeff5fdc5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -6c7a8957616dc5ddf85f6a7765717fc5ddf88393a5292e34c5ddf8c5ddf8 -65717f47505ac5ddf8c5ddf8c5ddf8474f597d8d9ec5ddf8c5ddf8b6cce5 -0d0e10c4dcf7c5ddf86a7786404851c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffff0f6fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf895a8bc262b30171a1dc3dbf6c5ddf8 -c5ddf832383f596470b6cce5505a65434b54c5ddf8c3dbf6bed6f08190a2 -3d454dbed6f0c1d8f3c5ddf8667381464e58b5cbe455606b020202c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8deecfbc5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf87887974d5661bed5ef -111316bbd2ecc5ddf84e5863697685c5ddf8c5ddf8515b66636f7dc5ddf8 -c5ddf8c5ddf81d2024a7bcd3c5ddf8c5ddf874829247505ac5ddf8c5ddf8 -56616c697685c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8eff5fdffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffeff5fdc5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8b1c7df16191cc3dbf61b1f23abc0d7c5ddf87988983d454dc5ddf8 -c5ddf87786963c434bc5ddf8c5ddf8c5ddf8474f597d8d9ec5ddf8c5ddf8 -a2b6cc1b1f23c5ddf8c5ddf87d8c9d404851c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffffffff0f6fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c4dcf73d444c6d7b8ac5ddf8 -c5ddf8c5ddf8adc2d93a41491b1f23414952b4c9e2c5ddf89eb1c730363d -30363d30363d30363d657280c5ddf8bbd2ec68758323272c677482353b43 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8deecfbc5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8b9d0e9131518 -7e8e9f444d56c5ddf8c5ddf8616d7a474f59c5ddf8c5ddf830363d798898 -c5ddf8c5ddf8c5ddf81d2024a7bcd3c5ddf8c5ddf89db0c6292e34c5ddf8 -c5ddf8363c44697685c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8eff5fd -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffeff5fd -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8343a426a77862c3238c5ddf8c5ddf895a7bb121417 -c5ddf8c5ddf84e58635b6773c5ddf8c5ddf8c5ddf8474f597d8d9ec5ddf8 -c5ddf8c4dcf7101315bad1ebc5ddf8545e6a404851c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffffffffffffff0f6fdc5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8deecfbc5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -4047501214178b9cafc5ddf8c5ddf8a6bbd20e101272808f667381111316 -b7cee7c5ddf899acc18d9eb114171a7887978d9eb1bed6f0c3dbf6181b1f -6875836c7a890c0d0f697685c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -eff5fdffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -eff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf87b8a9b050606738291c5ddf8c5ddf8c5ddf8 -3239402c313748515b141619adc3dac5ddf88899ac5b67732125293a4149 -5b6773a3b6cdc5ddf8616d7a25292e4c55601c2023404851c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c8dff8ffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffffffffffffffffffff0f6fdc5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8deecfb -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf89db0c6636f7dc1d9f4c5ddf8c5ddf8c5ddf899acc1525c6856616c -a6bbd2c5ddf8c5ddf8778696626e7b626e7b626e7b626e7bb9d0e9c5ddf8 -bad1eb687583636f7d8d9eb197a9bec5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8eff5fdffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8bed5ef93a5b9bbd2ecc5ddf8c5ddf8 -c5ddf8c1d8f38b9caf8191a3b4c9e2c5ddf8c5ddf8a9bdd493a5b993a5b9 -93a5b993a5b9b4cae3c5ddf8c5ddf8a9bed58899acb2c8e0a4b8cfc5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c8dff8ffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffffffffffffffffffffffffff0f6fdc5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -deecfbc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8eff5fdffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c8dff8ffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffffffffffffffffffffffffffffffff0f6fdc5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8deecfbc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8eff5fdffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8bed5ef -b4cae3c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8bad1ebbfd6f1c5ddf8c5ddf8c5ddf8 -b5cbe4c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c8dff8ffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffffffffffffffffffffffffffffffffffffff0f6fd -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8deecfbc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8eff5fdffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -8a9bae404851c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c4dcf72a2f35b4c9e2c5ddf8c5ddf8 -c5ddf84048519cafc4c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -f0f6fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8b8cfe8a6bbd2c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf82f343bb4c9e2 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf893a5b9667381c5ddf8c5ddf8c5ddf890a2b5697584 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8deecfbc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8eff5fdffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf88a9bae404851c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf88798ab49525cc5ddf8c5ddf8 -c5ddf8c5ddf896a9bd3a4149c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8a2b6ccafc4dcc5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffff0f6fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c3dbf6c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf88b9caf394148c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf81a1d21 -b0c6dec5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf830363da3b7cec5ddf8c5ddf8c5ddf8c1d8f3 -1f2327b8cfe8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8deecfbc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8b7cde6c3dbf6c5ddf8c5ddf8c3dbf6b7cee7 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8eff5fdffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffeff5fdc5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8b1c7df -545f6a23272c6975844e5863c5ddf8c5ddf897a9be323940282d33768494 -c0d7f2c5ddf87a899a6975843a41492b3036899aadc5ddf8c5ddf8a9bdd4 -4a535d262b3057616d404851c5ddf8c5ddf88798ab2c32382f353c8190a2 -c4dcf7c5ddf8c5ddf8535d698595a83a41491b1f237f8fa0c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf832394093a5b9c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf81b1e22abc0d7c5ddf8c5ddf8c5ddf8c5ddf8 -92a3b77c8b9cc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8b9d0e98495a73f474f0d0f11515b66c4dcf7 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffff0f6fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8a5b9d0262b300d0f110d0e10383f46b4cae3c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf896a9bd8797aa65717f677482bad0eac5ddf8c5ddf8 -c1d8f36c79884c5560738190c3dbf6c5ddf8c5ddf8abc0d76a77864a545e -6c7a89c5ddf8c5ddf86774824048511b1e225b6773616d7ac5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8adc2d958636f778696 -7c8b9caec3dbc5ddf8c5ddf88495a7515b668292a4c1d9f4c5ddf8bfd6f1 -65717f95a8bc525c688798abc4dcf7c5ddf8c5ddf8a3b7ce55606b8495a7 -1a1d21b0c6dec5ddf8c3dbf6798898515b668d9eb1c4dcf7c5ddf8c5ddf8 -a5b9d07c8b9c92a4b8515b66697584c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf898abc02f353cc5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8626e7b667381c5ddf8c5ddf8c5ddf8c5ddf8bfd6f199acc1bbd2ec -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8deecfbc5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8b6cce5272c31c4dcf7c5ddf8c5ddf8c3dbf6 -252a2fb9d0e9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8bdd4ee899aad6a7786bed6f0 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8eff5fdffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffeff5fdc5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -404851626e7cb4cae33d444c272c31c5ddf8afc4dc0d0e1091a2b6b8cfe8 -434b548393a5c5ddf8657280191c20a8bcd496a9bd1d2024c5ddf8c5ddf8 -282d327f8fa0afc4dc2a2f35404851c5ddf89cafc51214179db0c6b3c9e1 -2f353c9cafc5c5ddf8c5ddf8323940262b308d9eb1b7cee7a2b6ccc5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf80d0e10b2c8e0 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf83941488595a8c5ddf8c5ddf8c5ddf8 -c5ddf857616d292e34c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf89fb3c9626e7b2125290e10120a0b0c04050549525cc4dcf7 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffff0f6fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8aabfd60e101200000000000000000002020216191cbdd4ee -c5ddf8c5ddf8c5ddf8c5ddf86c7a890c0d0f6e7b8b6c7988171a1ec2daf5 -c5ddf84a545e383f468798ab31373e5c6874c5ddf8c5ddf82a2f35798898 -9db0c66f7c8cc5ddf8c5ddf899acc16875832b303693a5b995a8bcc5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8a6bad116191c7c8b9c -56616c06070897a9bec5ddf86875832c31378899ac5b6773404750c5ddf8 -bad1eb0506064c5560899aad1d20249aadc2c5ddf88fa1b42125298494a6 -444d56040505b0c6dec5ddf84e58633941488b9cb04a545e596470c5ddf8 -c5ddf88899ac1b1f233941488292a4687583c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf86a778656616cc5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf88798ab394047c5ddf8c5ddf8c5ddf8c5ddf8acc1d8000000 -9aadc2c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8deecfbc5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf85f6a77738190c5ddf8c5ddf8c5ddf8 -c5ddf86d7b8a64707ec5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8a9bdd46c7a89272c31030303101315acc1d8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8eff5fdffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffeff5fdc5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c2daf50d0e10b5cbe4c5ddf88595a8272c31c5ddf8748292292e348b9cb0 -8a9bae616d7a454e57c5ddf8657280525c68c5ddf8c5ddf80f1113b6cce5 -b6cce50d0e10c4dcf7c5ddf86a7786404851c5ddf85b66723c434b8b9cb0 -899aad4f59645f6b78c5ddf8c5ddf832394065717fc5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8b3c9e1070809 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8545e6a657280c5ddf8c5ddf8 -c5ddf8c5ddf8b4c9e2adc2d9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8b8cfe8 -8393a53d454d0f11130f11130202020000000000000a0c0d4a545ec5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffffffff0f6fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8394148000000000000000000000000000000050606 -677482c5ddf8c5ddf8c5ddf8c5ddf86c7a8931373ec5ddf8c5ddf82d3339 -9baec3c3dbf6030404a6bad1c5ddf898abc0101315c5ddf8c2daf5101315 -8e9fb2c2daf5c5ddf8c5ddf8c5ddf8c5ddf88b9caf394148c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf86c7a8955606b -c5ddf8c4dcf70b0d0e97a9bec5ddf80d0e109aadc2bcd3edb9d0e91b1f23 -bed5efbad1eb000000b5cbe4c5ddf85c6874697685c5ddf8545e6a717f8e -c5ddf8b4cae3000000b0c6deb7cee7060607adc3dabbd2ecb0c5dd1e2226 -c5ddf8c5ddf88899ac070809bed6f0c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf849525c72808fc5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8a3b7ce171a1dc5ddf8c5ddf8c5ddf8c5ddf8bad1eb -748292b4c9e2c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8deecfbc5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf82f343b677482 -23272c677482bbd2ecc5ddf8c5ddf87d8c9d292e34353b438899acc5ddf8 -c5ddf8c5ddf8474f59899aad363d451d20248b9cafc5ddf898aabf3e464e -23272c363c44bbd2ecc5ddf8c1d9f45b67731f23272a2f3591a2b6c5ddf8 -c5ddf8464e58758393282d32434b54acc1d8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c3dbf60d0e10bad1ebc5ddf8c5ddf8 -c5ddf8c5ddf8b7cde6101214c5ddf8c5ddf8c5ddf8c5ddf8c5ddf87e8e9f -8fa1b4c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c0d7f28fa1b44c55601315180e101203040400000014171aacc1d8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8eff5fd -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffeff5fd -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8bad1eb060708c0d7f2c5ddf895a7bb272c31c5ddf8687583292e34 -6875836875836875837b8a9bc5ddf865728065717fc5ddf8c5ddf815181b -afc4dca2b6cc1b1f23c5ddf8c5ddf87d8c9d404851c5ddf84e5863373e46 -6875836875836875838797aac5ddf8c5ddf83239408fa1b4c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8bed5ef -030404c0d7f2c5ddf8c5ddf8c5ddf8c5ddf8c5ddf849525c72808fc5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8bfd6f1707d8d131518 -00000003030300000000000000000000000000000002020216191c434b54 -434b54434b54434b54434b54434b54434b54434b54434b54434b54434b54 -434b54434b54434b54434b54434b54434b54434b54434b54434b54434b54 -434b54434b54434b54434b54434b54434b54434b54434b54434b54434b54 -434b54434b54434b54434b54434b54434b54434b54434b54434b54434b54 -434b54434b54434b54434b54434b54434b54434b54434b54434b54434b54 -434b54434b54434b54434b54434b54434b54434b54434b54434b54444c54 -575757575757575757575757575757575757575757575757575757575757 -575757575757575757575757575757575757575757575757575757575757 -575757575757575757575757575757575757575757575757575757575757 -575757575757575757575757575757575757575757575757575757575757 -575757575757575757575757575757575757575757575757575757575757 -575757575757575757575757575757515456434b54434b54434b54434b54 -434b54434b54434b54434b54060607000000000000000000000000000000 -000000323940c5ddf8c5ddf8c5ddf8c5ddf86c7a894e5762c5ddf8c5ddf8 -4a535d717f8eb6cce5040505c4dcf7c5ddf8b8cfe8000000c1d9f4c5ddf8 -92a4b8363d450c0d0f58636fc5ddf8c5ddf8c5ddf88b9caf394148c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf847505a -738291c5ddf8c5ddf8282d3297a9bebcd3ed000000363d45363d45363d45 -363d45a6bbd2bad1eb101214c5ddf8c5ddf86a77865a6571c5ddf82d3339 -8ea0b3c5ddf8c5ddf80f1113b0c6dea2b6cc070809363d45363d45363d45 -363d45b9d0e9c5ddf88899ac353b43c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8474f59738291c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8a6bad115181bc5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8deecfbc5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8050606 -56616cb6cce54b545f64707ec5ddf88ea0b31a1d21a3b7ceaec3db25292e -acc1d8c5ddf8c5ddf823272c2f343b94a6bab5cbe4a5b9d0c5ddf8282d33 -98abc0c5ddf8a6bbd2bed6f0c5ddf87583932a2f35aec3db8e9fb20d0e10 -b7cee7c5ddf822272b49525cb9d0e956616c606c79c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8a9bdd416191cc5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8101214afc4dcc5ddf8c5ddf8c5ddf8c5ddf8 -2d3339535d69c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8afc4dc -7482922d33390d0e100c0d0f00000000000000000000000014171aacc1d8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c4dcf7c3dbf6 -c2daf5c1d9f4c1d8f3c0d7f2bfd6f1bed6f0bed5efbed5efbdd4eebcd3ed -bbd2ecbad1ebbad0eab9d0e9b8cfe8b7cee7b7cde6b6cce5b6cce5b5cbe4 -dbe1e8e9e9e9e8e8e8e7e7e7e6e6e6e5e5e5e4e4e4e3e3e3e2e2e2e2e2e2 -e1e1e1e0e0e0dfdfdfdedededddddddcdcdcdbdbdbdadadad9d9d9d8d8d8 -d8d8d8d7d7d7d6d6d6d5d5d5d4d4d4d3d3d3d2d2d2d1d1d1d0d0d0dbdbdb -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -eff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf82c323898aabfc5ddf8687583272c31c5ddf88b9cb0 -1b1e22c5ddf8c5ddf8c5ddf8c5ddf8c5ddf865728065717fc5ddf8c5ddf8 -15181bafc4dcc4dcf7101315bad1ebc5ddf8545e6a404851c5ddf872808f -333a41c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf832394092a3b7c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf81b1e22a6bbd2c5ddf8c5ddf8c5ddf8c5ddf8c5ddf82d333993a5b9 -c5ddf8c5ddf8c5ddf8c5ddf8a0b4ca8494a6c5ddf8c5ddf8c5ddf8c0d7f2 -7c8b9c3f474f1013150c0d0f0405050000000000000000000000000d0e10 -8797aa9fb3c99fb3c99fb3c99fb3c99fb3c99fb3c99fb3c99fb3c99fb3c9 -9fb3c99fb3c99fb3c99fb3c99fb3c99fb3c99fb3c99fb3c99fb3c99fb3c9 -9fb3c99fb3c99fb3c99fb3c99fb3c99fb3c99fb3c99fb3c99fb3c99fb3c9 -9fb3c99fb3c99fb3c99fb3c99fb3c99fb3c99fb3c99fb3c99fb3c99fb3c9 -9fb3c99fb3c99fb3c99fb3c99fb3c99fb3c99fb3c99fb3c99fb3c99fb3c9 -9fb3c99fb3c99fb3c99fb3c99fb3c99fb3c99fb3c99fb3c99fb3c99fb3c9 -a3b5c9cfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcf -cfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcf -cfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcf -cfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcf -cfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcf -cfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfc3c8cd9fb3c99fb3c99fb3c9 -9fb3c99fb3c99fb3c99fb3c99fb3c9181b1f000000000000000000000000 -00000000000047505ac5ddf8c5ddf8c5ddf8c5ddf86c7a8930363dc5ddf8 -c5ddf82c323898abc0c3dbf6040505a5b9d0c5ddf898aabf111316c5ddf8 -c5ddf8c5ddf8c5ddf893a5b90f11139fb3c9c5ddf8c5ddf891a2b6343a42 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -738291505a65c5ddf8c1d9f407080997a9bec5ddf80d0e109cafc4c5ddf8 -c5ddf8c5ddf8c5ddf8bad1eb101214c5ddf8c5ddf86a77865a6571c5ddf8 -56616c707e8dc5ddf8b4c9e2000000b0c6deb7cee7030303b3c9e1c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf88899ac3c434bc5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf868758358636f -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8899aad363c44c5ddf8c5ddf8c5ddf8 -c5ddf8c3dbf6acc1d8bed5efc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8deecfb -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -050606a2b6ccc5ddf895a7bb2f343bc5ddf84b545f474f598b9cb0899aad -444d566f7c8cc5ddf8c5ddf823272c748292c5ddf8c5ddf8c5ddf8c5ddf8 -31373e505a6595a8bcc3dbf6c5ddf8c5ddf84047506c7a89c5ddf8c5ddf8 -21262a8b9cafc5ddf822272b95a8bcc5ddf892a3b7333a41c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8899aad30363dc5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf82b30368fa1b4c5ddf8c5ddf8c5ddf8 -c5ddf8adc3dab3c9e1c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8b5cbe4515b67 -000000000000000000000000000000000000000000000000010101141719 -1e22261e22261e22261e22261e22261e22261e22261e22261e22261f2327 -20242821252921262a22272b23272c24282d25292e252a2f262b30272c31 -272c31282d32282d33292e342a2f352b30362c31372c32382d33392e343a -2f343b393b3d3e3e3e3f3f3f404040414141424242434343444444454545 -4646464747474848484848484949494a4a4a4b4b4b4c4c4c4d4d4d4e4e4e -4f4f4f5050505151515252525353535353535454545555555656564c4c4c -484848ffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf88797aa1d20244047502f353c272c31c5ddf8 -c5ddf8404750262b30626e7b49525c5d6875c5ddf865728065717fc5ddf8 -c5ddf815181bafc4dcc5ddf8616d7a25292e4c55601c2023404851c5ddf8 -bed6f02c32382f353c636f7d414952738190c5ddf8c5ddf832394092a3b7 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf84f59647a899ac5ddf8c5ddf8c5ddf8c5ddf8bbd2ec171a1d -bbd2ecc5ddf8c5ddf8c5ddf8c5ddf8616d7a1b1e22c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8acc1d8707e8d2b30360d0f110d0e10000000 -000000101214a6bad1c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c8dff8ffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffffffffffffffffffffffffff0f6fdc5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf86a77860a0b0c000000000000 -0000000000000d0e1094a6bac5ddf8c5ddf8c5ddf8c5ddf86c7a890b0d0e -6b7887697685171a1dc2daf5c5ddf84c5560353b438696a92e343a5d6875 -c5ddf8bad0ea5f6b7898aabf8797aa171a1ebdd4eec5ddf8c5ddf8bed5ef -10121477869690a2b5c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8adc2d9181b1f657280454e5710121497a9bec5ddf8687583282d33 -8191a38e9fb2535d69c3dbf6bad1eb101214c5ddf8c5ddf86a77865a6571 -c5ddf88fa1b41e21258292a4414952040505b0c6dec5ddf84e5863363c44 -8899ac899aad5b6773c5ddf8c5ddf88899ac3c434bc5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf892a3b7 -363c44c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8657280606c79c5ddf8c5ddf8 -c5ddf8c5ddf8b8cfe80000008798abc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -deecfbc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8050606b3c9e1c5ddf8a6bad116191cc5ddf83f474f3f474f687583 -6875836875838ea0b3c5ddf8c5ddf823272c9fb2c8c5ddf8c5ddf8c5ddf8 -c5ddf8bad0ea6f7c8c1a1d211e2125b6cce5c5ddf8363d458190a2c5ddf8 -c5ddf8343a427f8fa0c5ddf822272ba8bcd4c5ddf898aabf2c3238c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf896a9bd252a2f -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf82024289cafc4c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8b9d0e98595a8414952101315101214030303000000000000000000 -0d0f119cafc5c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8eff5fdffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -dfdfdf494949ffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8bed5ef9fb3c98797aa4d5661 -c5ddf8c5ddf8c5ddf899acc17c8b9c92a4b8c1d8f3c5ddf8adc3daadc2d9 -c5ddf8c5ddf899acc1bfd6f1c5ddf8c5ddf8a9bed58899acb2c8e0a4b8cf -c5ddf8c5ddf8c3dbf693a5b97c8b9c98abc0c3dbf6c5ddf8c5ddf8a0b4ca -b8cfe8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8acc1d82a2f35c5ddf8c5ddf8c5ddf8c5ddf872808f -626e7cc5ddf8c5ddf8c5ddf8c5ddf8c5ddf83b424a667381c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8bfd6f18ea0b3 -4b545f1416190506060a0c0da6bad1c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c8dff8ffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffffffffffffffffffffffffffffffff0f6fdc5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c3dbf63a41490d0e10 -0000000101010e10125e6976c5ddf8c5ddf8c5ddf8c5ddf8c5ddf86c7a89 -525c68626e7c677482bad0eac5ddf8c5ddf8c1d8f36c79884c5560738190 -c3dbf6c5ddf8c1d8f36f7c8c4b545f65717fa3b6cdc5ddf8c5ddf8c5ddf8 -c5ddf8a8bcd4717f8e667381c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8bad1eb72808f93a5b925292eaec3dbc5ddf8c5ddf8 -899aad515b67515b67808fa1c5ddf8c0d7f26a7786c5ddf8c5ddf898aabf -8fa1b4c5ddf8c5ddf8a3b7ce55606b8797aa707d8dbad1ebc5ddf8c4dcf7 -7d8d9e4e586355606b8c9db1c5ddf8c5ddf8a6bbd28190a2c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8282d33aabfd6c5ddf8c5ddf8c5ddf8c3dbf6202428b3c9e1c5ddf8 -c5ddf8c5ddf8c5ddf89db0c6090a0bb4cae3c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8deecfbc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf80506068e9fb2c5ddf88190a247505ac5ddf8626e7b434c55 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf823272ca1b5cbc5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8bad1eb25292e899aadc5ddf8525c68545f6a -c5ddf8c4dcf70d0e109fb2c8c5ddf822272ba8bcd4c5ddf898aabf2c3238 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8b7cde6 -0a0c0dc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c4dcf7060708bbd2ecc5ddf8 -c5ddf8c5ddf8c5ddf891a2b693a5b9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8a3b7ce68758325292e0e1012 -0c0d0f0000000a0b0c9cafc4c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8eff5fdffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffdddddd4a4a4affffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf892a4b88797aa8c9db12d3339 -8b9cb0c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8677482adc3dac5ddf8c5ddf8c5ddf8 -5c6874b8cfe8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf83d444cbbd2ecc5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8a9bed56e7b8b4c5560aec3dbc5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c8dff8ffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffffffffffffffffffffffffffffffffffffff0f6fd -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -90a2b55b667264707e9fb2c8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -6c7a8958626ec5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c4dcf79db0c6c4dcf794a6ba262b30c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8899aad5f6b78c5ddf8c5ddf8c5ddf88e9fb25a6571c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf86a77865e6976c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8deecfbc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8050606272c31545e6a1b1f2391a2b6c5ddf8b8cfe8 -24282d363c44636f7d3c434b808fa1c5ddf8c5ddf823272ca1b5cbc5ddf8 -c5ddf8c5ddf8c5ddf82b3036636f7d5b66721a1d21bed5efc5ddf8a6bbd2 -1013154a545e282d333d444cc5ddf8c5ddf822272ba8bcd4c5ddf898aabf -2c3238c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8262b30a4b8cfc5ddf8c5ddf8c5ddf8c5ddf89cafc52c3137c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8383f46444d56c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -bdd4ee8b9caf48515b10121408090a9aadc2c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8eff5fdffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffdcdcdc4b4b4bffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8a4b8cf5d68755d6875 -a4b8cfc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -f0f6fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8808fa1707d8dc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf88292a48190a28190a2 -8190a28190a2a2b6ccc5ddf8c3dbf63d444c25292e525c68a3b7cec5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c1d9f4c3dbf6c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8deecfbc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8050606adc2d98495a7bbd2ecc5ddf8c5ddf8 -c5ddf8c1d8f38fa1b47d8c9d9cafc5c4dcf7c5ddf8c5ddf89cafc5bcd3ed -c5ddf8c5ddf8c5ddf8c5ddf8a6bad17f8fa091a2b6c0d7f2c5ddf8c5ddf8 -c5ddf8b0c6de8190a28d9eb1c2daf5c5ddf8c5ddf89cafc5bed5efc5ddf8 -bad0ea9fb2c8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf88696a94f5964c5ddf8c5ddf8c5ddf8c5ddf849525c8b9cb0 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf812141790a2b5c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8a9bed57d8c9dbdd4eec5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8eff5fdffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffdbdbdb4c4c4cffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffff0f6fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8deecfbc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8050606bfd6f1c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c4dcf7535d69c2daf5c5ddf8c5ddf8c1d8f3545e6a -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8b0c6de48515bc5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8eff5fdffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffdadada4e4e4effffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffeff5fdc5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffff0f6fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8deecfbc5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf85f6a77c2daf5c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8eff5fdffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffd9d9d94f4f4fffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffeff5fdc5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffff0f6fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8b8cfe8c2daf5c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8deecfbc5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8eff5fdffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffd8d8d8505050ffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffeff5fdc5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffffffff0f6fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf87e8e9f282d335b6773c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8deecfbc5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8eff5fd -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffd7d7d7515151ffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffeff5fd -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffffffffffffff0f6fdc5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8bad0ea131518c4dcf7c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8deecfbc5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c1d8f38797aab1c7dfc5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -eff5fdffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffd5d5d5525252 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -eff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c8dff8ffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffffffffffffffffffff0f6fdc5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf80a0c0dc0d7f2c5ddf8c5ddf8 -c5ddf8c5ddf898abc0758393c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8deecfb -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c0d7f2697584171a1e9fb3c9 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8eff5fdffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffd4d4d4 -535353ffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c8dff8ffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffffffffffffffffffffffffff0f6fdc5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8171a1dadc2d9c5ddf8 -c5ddf8c5ddf8c5ddf86673811a1d21c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -deecfbc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf85f6a77 -6c7a89c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8eff5fdffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -d3d3d3545454ffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c8dff8ffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffffffffffffffffffffffffffffffff0f6fdc5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8657280333a41 -8494a6c5ddf8c5ddf8c5ddf8b6cce5aabfd6c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8deecfbc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -697584626e7bc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8363d4594a6bac5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8eff5fdffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffd2d2d2555555ffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c8dff8ffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffffffffffffffffffffffffffffffffffffff0f6fd -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf85c6874 -3d454d91a2b6c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8deecfbc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf87e8e9f414952c5ddf8c5ddf8c5ddf8c5ddf8c5ddf81113168798ab -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8eff5fdffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffd1d1d1575757ffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -f0f6fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -14171ab0c5ddc5ddf8c5ddf8c5ddf8c5ddf8a6bbd27d8d9ec5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8deecfbc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8b9d0e92d33392a2f35abc0d7c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8eff5fdffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffd0d0d0585858ffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8b5cbe4bcd3edc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8bed5efb4cae3c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffff0f6fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf80a0c0dc0d7f2c5ddf8c5ddf8c5ddf8c5ddf8717f8e0b0d0ec5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8deecfbc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf896a9bd21262a9db0c6c1d9f4c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8eff5fdffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffcfcfcf595959ffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffeff5fdc5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8474f597d8d9ec5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf88a9bae404851c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffff0f6fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8b7cee714171ac5ddf8c5ddf8c5ddf8c5ddf8c5ddf84b545f57616d -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8deecfbc5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf86d7b8a5a6571c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8515b668fa1b4c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8eff5fdffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffcdcdcd5a5a5affffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffeff5fdc5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8b5cbe4bcd3edc5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf88a9bae404851c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffff0f6fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf87887972c3137667381c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8444d56 -b4c9e2c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8deecfbc5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8677482626e7cc5ddf8c5ddf8c5ddf8 -c5ddf8c3dbf60607087d8c9dc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8eff5fdffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffcccccc5b5b5bffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffeff5fdc5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -b2c8e0394148c5ddf8c5ddf8c5ddf83f474facc1d8c5ddf88a9bae282d32 -202428626e7cc4dcf7c5ddf8aabfd62a2f352a2f358e9fb2c5ddf8c5ddf8 -c5ddf8a9bdd44a535d262b3057616d404851c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffffffff0f6fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8deecfbc5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8bdd4ee3c434b8798abc5ddf8c5ddf8 -c5ddf8c5ddf89cafc5171a1dc0d7f2c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8eff5fd -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffcbcbcb5c5c5cffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffeff5fd -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8262b309baec3c5ddf8a3b6cd1e2226c5ddf8b1c7df0a0c0d -92a3b7abc0d7262b307f8fa0c5ddf8c5ddf8c5ddf8474f597d8d9ec5ddf8 -c5ddf8c5ddf8282d327f8fa0afc4dc2a2f35404851c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffffffffffffff0f6fdc5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8deecfbc5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8bcd3ed373e465d6875bbd2ecc5ddf8 -c5ddf8c5ddf8c5ddf89baec38fa1b4c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -eff5fdffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffcacaca5d5d5d -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -eff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf86c7a8957616dc5ddf85f6a7765717fc5ddf88393a5 -292e34c5ddf8c5ddf865717f47505ac5ddf8c5ddf8c5ddf8474f597d8d9e -c5ddf8c5ddf8b6cce50d0e10c4dcf7c5ddf86a7786404851c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c8dff8ffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffffffffffffffffffff0f6fdc5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8deecfb -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8eff5fdffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffc9c9c9 -5f5f5fffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8b1c7df16191cc3dbf61b1f23abc0d7c5ddf8 -7988983d454dc5ddf8c5ddf87786963c434bc5ddf8c5ddf8c5ddf8474f59 -7d8d9ec5ddf8c5ddf8a2b6cc1b1f23c5ddf8c5ddf87d8c9d404851c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c8dff8ffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffffffffffffffffffffffffff0f6fdc5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -deecfbc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8eff5fdffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -c8c8c8606060ffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8343a426a77862c3238c5ddf8 -c5ddf895a7bb121417c5ddf8c5ddf84e58635b6773c5ddf8c5ddf8c5ddf8 -474f597d8d9ec5ddf8c5ddf8c4dcf7101315bad1ebc5ddf8545e6a404851 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c8dff8ffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffffffffffffffffffffffffffffffff0f6fdc5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8deecfbc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8eff5fdffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffc7c7c7616161ffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf87b8a9b050606738291 -c5ddf8c5ddf8c5ddf83239402c313748515b141619adc3dac5ddf88899ac -5b67732125293a41495b6773a3b6cdc5ddf8616d7a25292e4c55601c2023 -404851c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c8dff8ffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffffffffffffffffffffffffffffffffffffff0f6fd -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8deecfbc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8eff5fdffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffc5c5c5626262ffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8bed5ef93a5b9 -bbd2ecc5ddf8c5ddf8c5ddf8c1d8f38b9caf8191a3b4c9e2c5ddf8c5ddf8 -a9bdd493a5b993a5b993a5b993a5b9b4cae3c5ddf8c5ddf8a9bed58899ac -b2c8e0a4b8cfc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -f0f6fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8deecfbc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8eff5fdffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffc4c4c4636363ffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffff0f6fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8deecfbc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8eff5fdffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffc3c3c3646464ffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffeff5fdc5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8bed5efbdd4ee -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8adc2d9 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8b9d0e9c1d9f4c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffff0f6fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8deecfbc5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8eff5fdffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffc2c2c2656565ffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffeff5fdc5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf83d454d -9fb2c8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -050606c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8748292b9d0e9c5ddf8c5ddf8c5ddf8c5ddf8717f8e6c7988c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffff0f6fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8deecfbc5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8eff5fdffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffc1c1c1676767ffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffeff5fdc5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8a0b4ca -30363dc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8050606c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8191c20abc0d7c5ddf8c5ddf8c5ddf8c5ddf8bbd2ec1d2024 -bed5efc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8a0b4ca64707e56616cbbd2ecc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffffffff2f7fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8e0edfbc5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8eff5fd -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffc0c0c0686868ffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffeff5fd -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf87a899a262b301e21253d454dadc2d9c5ddf8c5ddf893a5b9 -323940343a42606c798696a9c5ddf8c2daf568758325292e40485198abc0 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -4c5560798898c5ddf8c5ddf8c5ddf8c1d9f458636f292e34262b308190a2 -c5ddf8c5ddf805060674829223272c515b66bad0eac5ddf8c4dcf7657280 -212529272c318797aac5ddf8c5ddf8c5ddf83f474f8b9caf333a411e2226 -92a4b87d8d9e2a2f3505060625292e2a2f358a9baec5ddf8c5ddf8c5ddf8 -4b545f7a899ac5ddf8c5ddf8c5ddf8c5ddf8a8bcd4687583c2daf5c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8bad0ea8495a7 -3e464f1012140304041b1f22b7cde6c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffcde1f9c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8f1f7fdc5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -eff5fdffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffbfbfbf696969 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -eff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf898aabfb7cee7c1d9f46c7988363d45c5ddf8b9d0e9 -1012149cafc59eb1c70d0e10717f8ec5ddf86d7b8a30363daec3dba3b7ce -1b1e22c1d8f3c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8262b3098abc0c5ddf8c5ddf8c5ddf88292a4414952c1d9f4bed6f0 -a6bbd2c5ddf8c5ddf802020264707ebad0ea3a41498191a3c5ddf88495a7 -202428a9bdd496a9bd0d0f11adc3dac5ddf8c5ddf8191c20343a4298aabf -b3c9e1a7bcd3c5ddf8c5ddf8191c20abc0d7c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf86a7786545f6ac5ddf8c5ddf8c5ddf8c5ddf88798ab000000bed6f0 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8a2b6cc63707d21252a0e0f11 -090a0c0000000203031d2125b7cde6c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c8dff8ffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffeef5fdd0e3f9c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8cbe1f9e4effcffffff -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8eff5fdffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffbebebe -6a6a6affffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8bed5ef8ea0b35f6a774a535d191c20c5ddf8 -8595a83a4149c5ddf8c5ddf83b424a717f8ec5ddf82a2f355f6a778b9caf -899aad2d333990a2b5c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8070809b3c9e1c5ddf8c5ddf8c5ddf88b9cb01e21257d8d9e -b3c9e1c5ddf8c5ddf8c5ddf8020202b6cce5c5ddf8707e8d545f6ac5ddf8 -4f59645d6875c5ddf8c5ddf831373e7b8a9bc5ddf8c5ddf8191c207e8e9f -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8191c20abc0d7c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf88495a7353b43c5ddf8c5ddf8c5ddf8c5ddf8bbd2eca6bad1 -c4dcf7c5ddf8c5ddf8bbd2ec728090373d450d0f110c0e0f010202000000 -000000000000020202171a1e95a8bca0b4caa0b4ca9fb3c99fb2c89fb2c8 -9eb1c79db0c69db0c69cafc59cafc49cafc49baec39aadc29aadc299acc1 -98abc098abc098aabf98aabf97a9be96a9bd96a9bd95a8bc95a7bb95a7bb -94a6ba93a5b993a5b992a4b892a3b792a3b791a2b691a2b690a2b58fa1b4 -8fa1b48ea0b38e9fb28e9fb28d9eb18c9db18c9db18b9cb08b9caf8b9caf -8a9bae8c9caeb2b2b2b1b1b1b1b1b1b0b0b0afafafafafafaeaeaeadadad -adadadacacacababababababaaaaaaaaaaaaa9a9a9a8a8a8a8a8a8a7a7a7 -a6a6a6a6a6a6a5a5a5a4a4a4a4a4a4a3a3a3a2a2a2a2a2a2a1a1a1a1a1a1 -a0a0a0cdcdcdffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fcfdfffbfdfffbfdfffbfdfffbfdfffbfdfffbfdfffbfdfffbfdfffbfdff -fbfdfffbfdfffbfdfffbfdfffbfdfffbfdfffbfdfffbfdfffbfdfffbfdff -fbfdfffbfdfffbfdfffbfdfffbfdfffbfdfffbfdfffbfdfffbfdfffbfdff -fbfdfffbfdfffbfdfffbfdfffbfdfffbfdfffbfdfffbfdfffbfdfffbfdff -fbfdfffbfdfffbfdfffbfdfffbfdfffbfdfffbfdfffbfdfffbfdfffbfdff -fbfdfffbfdfffbfdfffbfdfffbfdfffbfdfffbfdfffbfdfffbfdfffbfdff -fbfdfffbfdfffbfdfffbfdfffbfdfffbfdfffbfdfffbfdfffbfdfffbfdff -fbfdfffbfdfffbfdfffbfdfffbfdfffbfdfffbfdfffbfdfffbfdfffbfdff -fbfdfffbfdfffbfdfffbfdfffbfdfffbfdfffbfdfffbfdfffbfdfffbfdff -fbfdfffbfdfffbfdfffbfdfffbfdfffbfdfffbfdfffbfdfffbfdfffbfdff -fbfdfffbfdfffbfdfffbfdfffbfdfffbfdfffbfdfffbfdfffbfdfffbfdff -fbfdfffbfdfffbfdfffbfdfffbfdfffbfdfffbfdfffbfdfffbfdfffbfdff -fbfdfffbfdfffbfdfffbfdfffbfdfffbfdfffbfdfffbfdfffeffffffffff -ffffffcae0f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8f4f8feffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -bcbcbc6b6b6bffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8454e57515b6790a2b5808fa114171a -c5ddf873819049525cc5ddf8c5ddf84a535d717f8ec5ddf81e2125515b66 -6875836875836875839eb1c7c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8141619a9bdd4c5ddf8c5ddf8c5ddf8c5ddf895a7bb -434b54050606758393c5ddf8c5ddf8050606c5ddf8c5ddf87685954e5762 -c5ddf8464e58717f8ec5ddf8c5ddf8434c55707d8dc5ddf8c5ddf8191c20 -a9bdd4c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8191c20abc0d7c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf87a8899414952c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8b8cfe8616d7a090b0c010101010102000000000000 -000000000000000000030304202428424a53434b54434c55434c55444d56 -444d56454e57464e58464e58474f5947505a47505a48515b49525c49525c -4a535d4a545e4a545e4b545f4c55604c55604d56614d56614e57624e5863 -4e58634f5964505a65505a65515b66515b67515b67525c68535d69535d69 -545e6a545f6a545f6a55606b55606b56616c57616d57616d58626e58636f -58636f5964705c6672757575767676777777777777787878797979797979 -7a7a7a7a7a7a7b7b7b7c7c7c7c7c7c7d7d7d7e7e7e7e7e7e7f7f7f808080 -808080818181828282828282838383838383848484858585858585868686 -8787875d5d5d787878ffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffe3effcc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8d0e4f9ffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffbbbbbb6c6c6cffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c2daf50a0c0dbdd4eec5ddf8717f8e -14171ac5ddf8a7bcd31e2125c4dcf7c4dcf71e2226717f8ec5ddf8404851 -65717fc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8343a428d9eb1c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf87382912f353cc5ddf8c5ddf8050606c5ddf8c5ddf8768595 -4e5762c5ddf8626e7b454e57c5ddf8c5ddf81b1f238fa1b4c5ddf8c5ddf8 -191c20abc0d7c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8282d339db0c6c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf85e6976626e7cc5ddf8c5ddf8c5ddf8c5ddf8 -b3c9e17a899abbd2ecc5ddf8c5ddf8c5ddf8c5ddf8b2c8e0798899333a41 -0e10120e10120000000000000000000c0e106c7988c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c8dff8ffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffafafaf787878ffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffeffffeef5fdddebfbdcebfbdcebfbdcebfbdcebfb -dcebfbdcebfbdcebfbdcebfbdcebfbdcebfbdcebfbdcebfbdcebfbdcebfb -dcebfbdcebfbdcebfbdcebfbdcebfbdcebfbdcebfbdcebfbdcebfbdcebfb -dcebfbdcebfbdcebfbdcebfbdcebfbdcebfbdcebfbdcebfbdcebfbdcebfb -dcebfbdcebfbdcebfbdcebfbdcebfbdcebfbdcebfbdcebfbdcebfbdcebfb -dcebfbdcebfbdcebfbdcebfbdcebfbdcebfbdcebfbdcebfbdcebfbdcebfb -dcebfbdcebfbdcebfbdcebfbdcebfbdcebfbdcebfbdcebfbdcebfbdcebfb -dcebfbdcebfbdcebfbdcebfbdcebfbdcebfbdcebfbdcebfbdcebfbdcebfb -dcebfbdcebfbdcebfbdcebfbdcebfbdcebfbdcebfbdcebfbdcebfbdcebfb -dcebfbdcebfbdcebfbdcebfbdcebfbdcebfbdcebfbdcebfbdcebfbdcebfb -dcebfbdcebfbdcebfbdcebfbdcebfbdcebfbdcebfbdcebfbdcebfbdcebfb -dcebfbdcebfbdcebfbdcebfbdcebfbdcebfbdcebfbdcebfbdcebfbdcebfb -dcebfbdcebfbdcebfbdcebfbdcebfbdcebfbdcebfbdcebfbdcebfbdcebfb -dcebfbdcebfbe9f2fcfefeffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffbababa6d6d6dffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8404851404851525c68 -30363d14171ac5ddf8c5ddf84c5560272c312c3238282d3372808fc5ddf8 -a6bad11a1d21424a53626e7b30363d9fb2c8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8697584616d7ac5ddf8c5ddf8c5ddf8 -6976854d56616976852b3036768494c5ddf8c5ddf8050606c5ddf8c5ddf8 -7685954e5762c5ddf8b0c6de14171a454e572f353c2e343ac4dcf7c5ddf8 -c5ddf8191c20abc0d7c5ddf8c5ddf8c5ddf8c5ddf8c5ddf86c7988252a2f -5a65719db0c6c5ddf8c5ddf8c5ddf831373e97a9bec5ddf8c5ddf8c5ddf8 -c5ddf892a3b7000000b0c5ddc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c2daf598aabf57616d191d200f11130607080404056a7786c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffaeaeae797979ffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffb9b9b96f6f6fffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c4dcf793a5b9 -8c9db1bad0ea98abc0c5ddf8c5ddf8c5ddf8abc0d7b0c6de3e464e97a9be -c5ddf8c5ddf8bad0ea8a9bae7e8e9fa6bad1c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8bad1eb202428c0d7f2c5ddf8 -c5ddf8bad1eb8d9eb17f8fa0afc4dcc5ddf8c5ddf8c5ddf895a7bbc5ddf8 -c5ddf8b1c7dfa7bcd3c5ddf8c5ddf8b5cbe48292a48a9baec0d7f2c5ddf8 -c5ddf8c5ddf89aadc2bed6f0c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -b6cce594a6bab2c8e0c5ddf8c5ddf8a3b6cd32383fc5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf86c7988363c44c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8b3c9e17a899a343b420a0b0c -6e7b8bc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffadadad7a7a7affffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffb8b8b8707070ffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffeff5fdc5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf875839395a8bc7583931c2023 -c3dbf6c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf87887979cafc5 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf87c8b9c98abc0c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf85c68749cafc4c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c2daf59aadc2b9d0e9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffadadad7b7b7bffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffb7b7b7717171ffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffeff5fdc5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf88191a3535d69758393 -b9d0e9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffacacac7b7b7bffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffb6b6b6727272ffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffeff5fdc5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffababab7c7c7cffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffb4b4b4737373ffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffeff5fd -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffababab7d7d7d -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffb3b3b3747474 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -eff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c8dff8ffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffaaaaaa -7d7d7dffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffb2b2b2 -757575ffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c8dff8ffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -a9a9a97e7e7effffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -b1b1b1767676ffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c8dff8ffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffa9a9a97f7f7fffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffafcfef6fafef6fafef6fafef6fafef6fafef6fafef6fafef6fafe -f6fafef6fafef6fafef6fafef6fafef6fafef6fafef6fafef6fafef6fafe -f6fafef6fafef6fafef6fafef6fafef6fafef6fafef6fafef6fafef6fafe -f6fafef6fafef6fafef6fafef6fafef6fafef6fafef6fafef6fafef6fafe -f6fafef6fafef6fafef6fafef6fafef6fafef6fafef6fafef6fafef6fafe -f6fafef6fafef6fafef6fafef6fafef6fafef6fafef6fafef6fafef6fafe -f6fafef6fafef6fafef6fafef6fafef6fafef6fafef6fafef6fafef6fafe -f6fafef6fafef6fafef6fafef6fafef6fafef6fafef6fafef6fafef6fafe -f6fafef6fafef6fafef6fafef6fafef6fafef6fafef6fafef6fafef6fafe -f6fafef6fafef6fafef6fafef6fafef6fafef6fafef6fafef6fafef6fafe -f6fafef6fafef6fafef6fafef6fafef6fafef6fafef6fafef6fafef6fafe -f6fafef6fafef6fafef6fafef6fafef6fafef6fafef6fafef6fafef6fafe -f6fafef6fafef6fafef6fafef6fafef6fafef6fafef6fafef6fafef8fbfe -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffb0b0b0787878ffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c8dff8ffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffa8a8a87f7f7fffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -f9fcfed8e8fac6ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8d1e4f9f5f9feffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffafafaf797979ffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffa7a7a7808080ffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffe1edfbc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8d8e8faffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffaeaeae7a7a7affffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffa7a7a7818181ffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffd1e4f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c6ddf8ffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffacacac7b7b7bffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffeff5fdc5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffa6a6a6818181ffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffd0e3f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8ffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffababab7c7c7cffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffeff5fdc5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffa5a5a5828282ffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffd0e3f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8ffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffaaaaaa7d7d7dffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffeff5fdc5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8b5cbe4bcd3edc5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8bed5efb4cae3c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffa5a5a5838383ffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffd0e3f9c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8ffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffa9a9a97e7e7effffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffeff5fd -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8474f597d8d9ec5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf88a9bae404851c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffa4a4a4838383 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffd0e3f9c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8ffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffa8a8a8808080 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -eff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8b5cbe4bcd3ed -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf88a9bae404851c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c8dff8ffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffa3a3a3 -848484ffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffd0e3f9c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffa7a7a7 -818181ffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8b2c8e0394148c5ddf8c5ddf8c5ddf83f474facc1d8 -c5ddf88a9bae282d32202428626e7cc4dcf7c5ddf8aabfd62a2f352a2f35 -8e9fb2c5ddf8c5ddf8c5ddf8a9bdd44a535d262b3057616d404851c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c8dff8ffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -a3a3a3858585ffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffd0e3f9c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8ffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -a6a6a6828282ffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8262b309baec3c5ddf8a3b6cd1e2226 -c5ddf8b1c7df0a0c0d92a3b7abc0d7262b307f8fa0c5ddf8c5ddf8c5ddf8 -474f597d8d9ec5ddf8c5ddf8c5ddf8282d327f8fa0afc4dc2a2f35404851 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c8dff8ffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffa2a2a2858585ffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffd0e3f9 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8ffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffa4a4a4838383ffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf86c7a8957616dc5ddf85f6a77 -65717fc5ddf88393a5292e34c5ddf8c5ddf865717f47505ac5ddf8c5ddf8 -c5ddf8474f597d8d9ec5ddf8c5ddf8b6cce50d0e10c4dcf7c5ddf86a7786 -404851c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c8dff8ffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffa1a1a1868686ffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -d0e3f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8ffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffa3a3a3848484ffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8b1c7df16191cc3dbf6 -1b1f23abc0d7c5ddf87988983d454dc5ddf8c5ddf87786963c434bc5ddf8 -c5ddf8c5ddf8474f597d8d9ec5ddf8c5ddf8a2b6cc1b1f23c5ddf8c5ddf8 -7d8c9d404851c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffa0a0a0878787ffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffd0e3f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8ffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffa2a2a2858585ffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8343a42 -6a77862c3238c5ddf8c5ddf895a7bb121417c5ddf8c5ddf84e58635b6773 -c5ddf8c5ddf8c5ddf8474f597d8d9ec5ddf8c5ddf8c4dcf7101315bad1eb -c5ddf8545e6a404851c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffa0a0a0878787ffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffd0e3f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf88495a77482928798abc5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf88495a7bed5efc5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8b0c5dd90a2b5c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8a1b5cb748292748292bcd3edc5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8ffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffa1a1a1868686ffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffeff5fdc5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -7b8a9b050606738291c5ddf8c5ddf8c5ddf83239402c313748515b141619 -adc3dac5ddf88899ac5b67732125293a41495b6773a3b6cdc5ddf8616d7a -25292e4c55601c2023404851c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffff9f9f9f888888ffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffd0e3f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf88ea0b3626e7c2e343a -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8181b1fb2c8e0c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf85a6571a2b6cc -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf893a5b94a535d -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8a6bbd28190a20e1012aec3db -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8ffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffa0a0a0888888ffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffeff5fdc5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8bed5ef93a5b9bbd2ecc5ddf8c5ddf8c5ddf8c1d8f38b9caf8191a3 -b4c9e2c5ddf8c5ddf8a9bdd493a5b993a5b993a5b993a5b9b4cae3c5ddf8 -c5ddf8a9bed58899acb2c8e0a4b8cfc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffff9e9e9e898989ffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffd0e3f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c4dcf7afc4dcb9d0e9c5ddf8c5ddf8c5ddf896a9bd -2e343ac5ddf8c5ddf8c5ddf8c5ddf8c5ddf8b3c9e1b3c9e1c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8bdd4eeb0c6dec5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -b2c8e0bad0eac5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8b9d0e9b4c9e2c5ddf8c5ddf8c5ddf8181b1fb2c8e0 -b7cee7c2daf5c5ddf8c5ddf8c5ddf8c5ddf8b7cde6b7cde6c5ddf8c5ddf8 -c5ddf8c5ddf8c0d7f2c4dcf7c1d9f4b0c5ddc5ddf8c3dbf6bed6f02f343b -8fa1b4bed6f0c2daf5c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c0d7f2c4dcf7b7cde6c5ddf8c5ddf8c5ddf8c5ddf8c0d7f2bed6f0 -c1d8f3c5ddf8c5ddf8c5ddf8bfd6f1bad1ebbed5efc1d9f4bbd2ecc5ddf8 -c5ddf8bfd6f1c5ddf8b6cce5c5ddf8c5ddf8c5ddf8c5ddf8c5ddf816191c -aec3dbc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8ffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffff9f9f9f898989ffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffeff5fdc5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffff9e9e9e8a8a8affffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffd0e3f9c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf895a7bb131518252a2f2024288494a6c5ddf8c5ddf8 -96a9bd2e343ac5ddf8c5ddf8c5ddf8c5ddf82d33392d3339282d3325292e -aec3dbc5ddf8c5ddf847505a2f343b373e463d454dc5ddf8c5ddf8a9bdd4 -282d33373e46282d337d8d9ec5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c2daf5363c44323940323940525c68c5ddf8c5ddf8181b1f -47505a282d321b1f239eb1c7c5ddf8c4dcf7454e57131518131518444d56 -c4dcf7c5ddf8c5ddf830363d616d7a14161923272c67748292a3b730363d -0b0d0e25292e30363d7b8a9bc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8292e34353b4321262a282d3295a7bbc5ddf8c5ddf84b545f -22272b383f46c5ddf8c5ddf8c5ddf80d0e1032383f15181b3941481e2125 -a1b5cbc5ddf8101214363c4424282d31373ea3b6cdc5ddf8c5ddf8c5ddf8 -16191caec3dbc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8ffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffff9e9e9e8a8a8affffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffeff5fd -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8bdd4eebdd4eec5ddf8c5ddf8c5ddf8b6cce5 -c4dcf7c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff9d9d9d8a8a8a -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffd0e3f9c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c0d7f214171a8797aac5ddf8c4dcf7b3c9e1c5ddf8 -c5ddf896a9bd2e343ac5ddf8c5ddf8c5ddf8c5ddf8b7cde6c5ddf8c5ddf8 -5a65715c6874c5ddf8a6bbd21e2125c5ddf8c5ddf8bfd6f1c5ddf8c5ddf8 -5c6874687583c5ddf8c5ddf8bfd6f1c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf88d9eb1373e46c5ddf8c5ddf8bfd6f1c5ddf8c5ddf8 -181b1f72808fc5ddf86976855e6976c5ddf88798ab1f2327bed5efbfd6f1 -24282d8696a9c5ddf8c5ddf830363d31373eb7cee7c5ddf8bcd3edc5ddf8 -c5ddf830363d94a6bac5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8292e3455606bc5ddf892a3b732383fc5ddf8c5ddf8 -c5ddf88c9db1383f46c5ddf8c5ddf8c5ddf8060607c2daf5272c318696a9 -697584788797c5ddf8101214707d8dc5ddf87887974c5560c5ddf8c5ddf8 -c5ddf816191caec3dbc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8ffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff9c9c9c8b8b8b -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -eff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf88c9db1a1b5cbc5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf83b424aa1b5cbc5ddf8c5ddf8c5ddf8 -57616d8595a8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c8dff8ffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffff9c9c9c -8b8b8bffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffd0e3f9c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8a4b8cf0d0f11c2daf5c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf896a9bd2e343ac5ddf8c5ddf8c5ddf8c5ddf890a2b5505a65 -2b30361b1e224a535dc5ddf8c0d7f21e22263d454d768494bcd3edc5ddf8 -c5ddf88c9db1171a1e535d6992a3b7c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8b2c8e0171a1e454e577e8e9fc1d8f3c5ddf8 -c5ddf8181b1fa9bdd4c5ddf88c9db1383f46c5ddf8616d7a515b66c5ddf8 -c5ddf8535d695d6875c5ddf8c5ddf830363d768494c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf830363d94a6bac5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8292e348798abc5ddf8bfd6f1090a0bbed5ef -c5ddf8c5ddf88c9db1383f46c5ddf8c5ddf8c5ddf814171ac5ddf8383f46 -98abc0768595616d7ac5ddf8101214a1b5cbc5ddf8a9bed5171a1dc5ddf8 -c5ddf8c5ddf816191caec3dbc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffff9b9b9b -8c8c8cffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf88899ac4e576258636f9baec3c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf84c5560788797c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf89eb1c7323940c5ddf8c5ddf8c5ddf8 -c5ddf8abc0d7262b30c4dcf7c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c8dff8ffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -9c9c9c8c8c8cffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffd0e3f9c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8a4b8cf0d0f11c2daf5c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf897a9be2d3339c5ddf8c5ddf8c5ddf8b9d0e916191c -a0b4cac4dcf769768547505ac5ddf8c5ddf8c2daf58a9bae1e222621262a -c5ddf8c5ddf8c5ddf8b4cae36774820506066c7988c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8bfd6f17f8fa01416193b424a -c5ddf8c5ddf8181b1fb2c8e0c5ddf88e9fb2363d45c5ddf8626e7b515b66 -c5ddf8c5ddf8535d695d6875c5ddf8c5ddf830363d94a6bac5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf830363d94a6bac5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8292e348797aac5ddf8bfd6f108090a -bcd3edc5ddf8c5ddf88c9db1383f46c5ddf8c5ddf8c5ddf8171a1ec5ddf8 -3b424a9cafc47988985e6976c5ddf8101214a0b4cac5ddf8a9bdd414171a -c5ddf8c5ddf8c5ddf8171a1dadc3dac5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8ffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -9a9a9a8d8d8dffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c1d8f32d33390b0d0e0000000000000b0d0e -5b6672c5ddf8c5ddf8c5ddf8c5ddf84f596465717f25292e525c68afc4dc -c5ddf8c5ddf88a9bae282d32202428626e7cc4dcf7c5ddf8c5ddf8667381 -2c323824282d6d7b8ac5ddf8a6bad12a2f351012141a1d212a2f35626e7c -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8626e7b636f7d -282d3347505aa7bcd3c5ddf8c5ddf8a3b7ce39414825292e6c7988bbd2ec -c5ddf8c5ddf87988987381904f59641b1f2357616dc5ddf8b7cee7505a65 -262b30292e3492a4b8c5ddf8c5ddf88899ac272c3121252964707ec4dcf7 -c5ddf87887976976853941482b30368b9cafc5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf84a535d7c8b9cc5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf831373e94a6bac5ddf8c5ddf8c5ddf8c5ddf89cafc5 -717f8ec5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c8dff8ffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffff9b9b9b8c8c8cffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffd0e3f9 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c0d7f214171a8797aac5ddf8 -c4dcf7b4c9e2c5ddf8c5ddf8bad1eb131518bdd4eec5ddf8c5ddf89cafc4 -272c31c5ddf8bed6f02a2f3547505ac5ddf8bad1ebc1d8f3c5ddf8b4c9e2 -0e1012c0d7f2c5ddf8b6cce5c5ddf8c5ddf86c7988505a65c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8b7cee7c3dbf6c5ddf89cafc5 -1f2327c5ddf8c5ddf8181b1fb2c8e0c5ddf88e9fb2363d45c5ddf8899aad -1e2125bcd3edbed5ef22272b8899acc5ddf8c5ddf830363d94a6bac5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf84d5661798898c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8292e34535d69c5ddf88ea0b3 -31373ec5ddf8c5ddf8c5ddf88c9db1383f46c5ddf8c5ddf8c5ddf8171a1e -c5ddf83b424a9cafc47988985e6976c5ddf81012146c7a89c5ddf8758393 -4a545ec5ddf8c5ddf8c5ddf84047508696a9c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8ffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffff9999998e8e8effffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf85c6874070809000000000000000000 -0000000d0f1197a9bec5ddf8c5ddf8c5ddf82e343a363d45b4c9e26e7b8b -3a4149c5ddf8b1c7df0a0c0d92a3b7abc0d7262b307f8fa0c5ddf89cafc5 -2b3036bfd6f1c2daf5a3b6cdc5ddf8c5ddf8c5ddf84c5560788797c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8454e57 -262b30adc3da8494a623272cc5ddf8bbd2ec141619808fa1bbd2ec55606b -6c7988c5ddf8c5ddf864707e101214798898b8cfe89cafc4c5ddf8697584 -596470c4dcf7bad0eaabc0d7c5ddf8b0c5dd0a0c0d93a5b9aabfd625292e -8292a4c5ddf8626e7c1b1f23a9bdd494a6ba202428c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf824282d9baec3c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8515b666e7b8bc5ddf8c5ddf8c5ddf8c5ddf8 -6e7b8b121417c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c8dff8ffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffff9a9a9a8d8d8dffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -d0e3f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf895a8bc171a1d -262b3022272b8495a7c5ddf8c5ddf8c5ddf86976851d202431373ec5ddf8 -c5ddf83d444c2a2f351b1e2247505a47505ac5ddf899acc1181b1f394047 -282d326d7b8ac5ddf8c5ddf856616c24282d363d452b3036a5b9d0c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf88393a51b1e22394047 -272c318191a3c5ddf8c5ddf8181b1fb2c8e0c5ddf88e9fb2363d45c5ddf8 -c4dcf7454e57111316121417444d56c4dcf7c5ddf8c5ddf830363d94a6ba -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf899acc12d3339282d33788797c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8292e34323940202428 -272c3195a7bbc5ddf8a2b6cc2a2f351e21250c0d0f2a2f355b6773c5ddf8 -171a1ec5ddf83b424a9cafc47988985e6976c5ddf8101214333a4122272b -30363da2b6ccc5ddf8c5ddf8c5ddf898aabf292e341e21259db0c6c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8ffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffff9898984343437979797b7b7b7c7c7c7e7e7e7f7f7f818181 -8282828484848686868787878989898a8a8a8c8c8c8d8d8d8f8f8f909090 -9292929494949595959797979898989a9a9a9b9b9b9d9d9d9e9e9ea0a0a0 -a1a1a1a3a3a3a5a5a5a6a6a69da1a78292a48494a68495a78696a98797aa -8899ac8a9bae8b9caf8c9db18d9eb18ea0b3101215000000000000000000 -0000000000000000004e5762c5ddf8c5ddf8c5ddf82e343a798898c5ddf8 -bcd3ed0b0d0ec1d9f48393a5292e34c5ddf8c5ddf865717f47505ac5ddf8 -a5b9d0121417768494adc3dac5ddf8c5ddf8c5ddf8c5ddf84c5560788797 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -454e57626e7bc5ddf8c5ddf8101315b4c9e28b9cb0181b1f8b9cb08a9bae -717f8e2f343bc5ddf8c5ddf864707e333a41c5ddf8c5ddf8c5ddf8c5ddf8 -72808f2b30368495a7b8cfe8c5ddf8c5ddf88190a22c3238c5ddf8c5ddf8 -626e7c4a535dc5ddf8626e7c545f6ac5ddf8c5ddf80d0e10b8cfe8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c4dcf7050606b6cce5 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf86b78874e5863c5ddf8c5ddf8c5ddf8 -c5ddf8b7cee7a9bdd4c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffff9a9a9a8e8e8effffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffd0e3f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8b0c6debcd3edc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8b7cde6c1d9f4c5ddf8c5ddf8c5ddf8c5ddf8c1d8f3 -adc3dac3dbf6c5ddf8c5ddf8c5ddf8c5ddf8b9d0e9b4c9e2c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8bed6f0 -aec3dbc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8b7cde6b7cde6c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8292e349baec3 -b6cce5c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8101214b4cae3 -b5cbe4c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8ffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffdfdfdfafafafadadadabababaaaaaaa8a8a8a6a6a6 -a4a4a4a3a3a3a1a1a19f9f9f9e9e9e9c9c9c9a9a9a989898979797959595 -9393939292929090908e8e8e8c8c8c8b8b8b898989878787868686848484 -8282828181817f7f7f7d7d7d7b7b7b7275795c68745b66725a657158636f -57616d55606b545f6a535d69515b67515b664f5964060607000000000000 -0000000000000000000000003a4149c5ddf8c5ddf8c5ddf82e343a8a9bae -c5ddf8c5ddf80a0c0db2c8e07988983d454dc5ddf8c5ddf87786963c434b -c5ddf8c5ddf89fb3c94e58630405055f6a77c5ddf8c5ddf8c5ddf84c5560 -788797c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8454e57738190c5ddf8c5ddf82024289baec37f8fa01d2024687583 -687583687583707e8dc5ddf8c5ddf864707e5f6a77c5ddf8c5ddf8c5ddf8 -c5ddf8c4dcf7899aad363d450a0b0c8a9baec5ddf8768595404750c5ddf8 -c5ddf87482923e464ec5ddf8626e7c687583c5ddf8c5ddf8121417b2c8e0 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8101315 -abc0d7c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8606c795b6773c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffff9999998e8e8effffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffd0e3f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8292e34 -9baec3c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8101214 -b4cae3c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8ffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffeff5fdc5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8343a42000000 -000000000000000000000000060708707e8dc5ddf8c5ddf8c5ddf82e343a -64707ec5ddf8a9bed51e2226c5ddf895a7bb121417c5ddf8c5ddf84e5863 -5b6773c5ddf8c5ddf8c5ddf8c5ddf88e9fb216191cc5ddf8c5ddf8c5ddf8 -5b67736a7786c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8454e574d5661c5ddf8bed5ef0d0f11c1d9f4a2b6cc0a0c0d -bed6f0c5ddf8c5ddf8c5ddf8c5ddf8c5ddf864707e606c79c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf85b667249525cc5ddf892a4b814171a -c5ddf8c5ddf84c55605e6976c5ddf8626e7c687583c5ddf8c5ddf8121417 -b2c8e0c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -32383f8fa1b4c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8444d567c8b9cc5ddf8 -c5ddf8c5ddf8c5ddf8a9bdd47b8a9bc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffff9898988f8f8fffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffd0e3f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf89fb2c86e7b8b6e7b8b6e7b8b6e7b8b6e7b8bc0d7f2c5ddf8 -99acc1b9d0e9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -92a4b8c0d7f2c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8ffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffeff5fdc5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8a8bcd4 -0f11130000000000000000000506061d2024c0d7f2c5ddf8c5ddf8c5ddf8 -2e343a1d2024505a65202428707e8dc5ddf8c5ddf83239402c313748515b -141619adc3dac5ddf87e8e9f454e576a7786363d455d6875c5ddf8c5ddf8 -c5ddf899acc1191c20545e6a8292a4c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8454e57191c204a545e262b305c6874c5ddf8c5ddf8 -56616c1e21255f6a774f59644b545fc5ddf8c5ddf864707e606c79c5ddf8 -c5ddf8c5ddf8c5ddf855606b545f6a6774822125298ea0b3c5ddf8c4dcf7 -30363d2d333947505a14171aafc4dcc5ddf8626e7c687583c5ddf8c5ddf8 -121417b2c8e0c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8667381636f7dc5ddf8c5ddf8c5ddf8c5ddf8c3dbf61d2024adc3da -c5ddf8c5ddf8c5ddf8c5ddf8788797030404c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffff989898909090ffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffd0e3f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8ffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffeff5fdc5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8a8bcd42c32380b0d0e10131549525cbad1ebc5ddf8c5ddf8c5ddf8 -c5ddf82e343a8d9eb18595a8b0c5ddc5ddf8c5ddf8c5ddf8c1d8f38b9caf -8191a3b4c9e2c5ddf8c5ddf8bed6f092a3b77d8c9da8bcd4c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8bfd6f198abc0a6bad1c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8454e577b8a9b899aada8bcd4c5ddf8c5ddf8 -c5ddf8c5ddf8a0b4ca7d8c9d8e9fb2bed5efc5ddf8c5ddf8adc2d9acc1d8 -c5ddf8c5ddf8c5ddf8c5ddf8b6cce58899ac8393a5b4cae3c5ddf8c5ddf8 -c5ddf8c0d7f28a9bae8191a3b4cae3c5ddf8c5ddf8adc2d9adc3dac5ddf8 -c5ddf898abc0c0d7f2c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8bad0ea202428c1d8f3c5ddf8c5ddf8c5ddf8899aad4b545f -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8525c684f5964c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffff979797909090ffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffd0e3f9c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8ffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffeff5fd -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf82e343a96a9bdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8454e577f8fa0c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf87685959eb1c7c5ddf8c5ddf8c5ddf86a7786 -a9bed5c5ddf8c5ddf8c5ddf8c5ddf8c5ddf849525cafc4dcc5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff969696919191 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffd0e3f9c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c4dcf78494a658626eb4c9e2c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8ffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -eff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -b6cce5c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8758393acc1d8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8abc0d76e7b8b -6e7b8b6e7b8b6e7b8b6e7b8bb4c9e2c5ddf88191a39fb3c9c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c8dff8ffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffff969696 -929292ffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffd0e3f9c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf89eb1c721262a97a9bec1d8f3 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8515b6623272c8ea0b3c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c8dff8ffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -959595929292ffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffd0e3f9c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf86f7c8c55606bc5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8ffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf87e8e9f4e5762c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c8dff8ffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffff949494939393ffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffd0e3f9 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf86875835b6672 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8ffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf892a3b7394047c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf87c8b9c92a3b7c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c8dff8ffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffff949494949494ffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -d0e3f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8bdd4ee394047 -7a8899c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8ffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf89eb1c725292ec5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8282d3358626ec5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffff939393949494ffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffd0e3f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8b4c9e2131518 -212529bcd3edc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8ffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c1d8f32f343b515b66a3b6cd -c5ddf8c5ddf8c5ddf8adc2d9b4c9e2c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffff929292959595ffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffd0e3f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c3dbf63f474f738190c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8ffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffeff5fdc5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8bfd6f1262b305f6b78 -a9bed5c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffff919191969696ffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffd0e3f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf86976855a6571c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8ffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffeff5fdc5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf89cafc5282d32 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf88fa1b495a7bbc5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffff919191979797ffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffd0e3f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8707e8d545e6ac5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8ffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffeff5fdc5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf892a3b7 -394047c5ddf8c5ddf8c5ddf8c5ddf8c5ddf832394049525cc5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffff909090979797ffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffd0e3f9c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8a2b6cc1d20248b9cafbfd6f1c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8ffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffeff5fd -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -7a899a515b66c5ddf8c5ddf8c5ddf8c5ddf8c4dcf70e101295a7bbc5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff8f8f8f989898 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffd0e3f9c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf892a3b7697685b7cde6c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8ffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -eff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -49525c2c323895a7bbc5ddf8c5ddf8c5ddf8c5ddf8adc2d94c5560c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c8dff8ffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffff8f8f8f -999999ffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffd0e3f9c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c2daf5c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c8dff8ffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -8e8e8e999999ffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffd0e3f9c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8ffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c8dff8ffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffff8d8d8d9a9a9affffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffd0e3f9 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8ffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c8dff8ffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffff8d8d8d9b9b9bffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -d0e3f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf88696a95c6874c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8bad1eba4b8cf -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8ffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffff8c8c8c9b9b9bffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffd0e3f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf87d8c9d4e5762 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf895a7bb -2f353cc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8ffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffff8b8b8b9c9c9cffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffd0e3f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8b6cce57482924b545f636f7dbad0eac5ddf87d8c9d -4e576275839357616da3b6cdc5ddf8c5ddf8c2daf5707d8d4b545f6e7b8b -c1d9f4c5ddf8c5ddf8abc0d776849498abc0535d69626e7cc3dbf66c7a89 -454e5716191c5b67735b6773c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8ffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffeff5fdc5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffff8b8b8b9d9d9dffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffd0e3f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf84e57625e69769db0c67a899ab0c6dec5ddf8 -7d8c9d1012146d7b8a798898141619c5ddf8c5ddf855606b32383f8798ab -363d45515b67c5ddf8c5ddf895a7bb171a1e373e467f8fa0697685c0d7f2 -9cafc46f7c8c24282d93a5b993a5b9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8ffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffeff5fdc5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffff8a8a8a9d9d9dffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffd0e3f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf830363d707e8dbed5efc5ddf8c5ddf8 -c5ddf87d8c9d2f343bc5ddf8c5ddf81e2226a7bcd3c5ddf80b0d0e9cafc4 -c5ddf8a3b6cd070809c4dcf7c5ddf895a7bb020202b7cde6c5ddf8c5ddf8 -c5ddf8c5ddf895a7bb2f353cc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8ffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffeff5fdc5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffff8989899e9e9effffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffd0e3f9c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8a3b7ce434c550c0d0f454e57 -b9d0e9c5ddf87d8c9d4e5762c5ddf8c5ddf82c323898aabfc0d7f2000000 -bed5efc5ddf8c1d8f3000000b7cee7c5ddf895a7bb282d32c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf895a7bb2f353cc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8ffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffeff5fd -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff8989899f9f9f -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffd0e3f9c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8a6bbd2 -2024287c8b9cc5ddf87d8c9d4e5762c5ddf8c5ddf82c323898aabfc5ddf8 -0c0d0f9baec3c5ddf8a2b6cc08090ac5ddf8c5ddf895a7bb2f353cc5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf89baec32a2f35c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8ffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -eff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c8dff8ffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffff888888 -9f9f9fffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffd0e3f9c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8616d7a92a3b7 -90a2b51e2226a6bbd2c5ddf87d8c9d4e5762c5ddf8c5ddf82c323898aabf -c5ddf856616c2f343b8696a9333a41535d69c5ddf8c5ddf895a7bb2f353c -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c1d9f41113167583938d9eb1c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffff3f8fec5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8cbe0f9ffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -878787a0a0a0ffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffd0e3f9c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf87e8e9f -4f59645b667295a8bcc5ddf8c5ddf8a1b5cb899aadc5ddf8c5ddf8798898 -aec3dbc5ddf8c2daf5707d8d4b545f6e7b8bc1d9f4c5ddf8c5ddf8adc2d9 -7a899ac5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8aabfd6738291626e7b -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8ffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffcfe3f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8e2eefbffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffff878787a1a1a1ffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffd0e3f9 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8ffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffe6f0fcc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c8dff8fbfdffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffff868686a1a1a1ffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -d0e3f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8ffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffebf3fdcfe3f9c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c6def8d8e8faf1f7fdffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffff858585a2a2a2ffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffd0e3f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8ffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffffffffffffffffffffffffffffffffffffff3f8fe -f2f8fdf2f8fdf2f8fdf2f8fdf2f8fdf2f8fdf2f8fdf2f8fdf2f8fdf2f8fd -f2f8fdf2f8fdf2f8fdf2f8fdf2f8fdf2f8fdf2f8fdf2f8fdf2f8fdf2f8fd -f2f8fdf2f8fdf2f8fdf2f8fdf2f8fdf2f8fdf2f8fdf2f8fdf2f8fdf2f8fd -f2f8fdf2f8fdf2f8fdf2f8fdf2f8fdf2f8fdf2f8fdf2f8fdf2f8fdf2f8fd -f2f8fdf2f8fdf2f8fdf2f8fdf2f8fdf2f8fdf2f8fdf2f8fdf2f8fdf2f8fd -f2f8fdf2f8fdf2f8fdf2f8fdf2f8fdf2f8fdf2f8fdf2f8fdf2f8fdf2f8fd -f2f8fdf2f8fdf2f8fdf2f8fdf2f8fdf2f8fdf2f8fdf2f8fdf2f8fdf2f8fd -f2f8fdf2f8fdf2f8fdf2f8fdf2f8fdf2f8fdf2f8fdf2f8fdf2f8fdf2f8fd -f2f8fdf2f8fdf2f8fdf2f8fdf2f8fdf2f8fdf2f8fdf2f8fdf2f8fdf2f8fd -f2f8fdf2f8fdf2f8fdf2f8fdf2f8fdf2f8fdf2f8fdf2f8fdf2f8fdf2f8fd -f2f8fdf2f8fdf2f8fdf2f8fdf2f8fdf2f8fdf2f8fdf2f8fdf2f8fdf2f8fd -f2f8fdf2f8fdf2f8fdf2f8fdf2f8fdf2f8fdf2f8fdf2f8fdf2f8fdf2f8fd -f2f8fdf2f8fdf2f8fdf2f8fdf2f8fdf2f8fdf2f8fdf2f8fdf2f8fdf2f8fd -f2f8fdf2f8fdf2f8fdf2f8fdf2f8fdf2f8fdf2f8fdf2f8fdf2f8fdf2f8fd -f2f8fdf2f8fdf2f8fdf2f8fdf2f8fdf2f8fdf2f8fdf2f8fdf2f8fdf2f8fd -f2f8fdf2f8fdfbfcfeffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffff848484a3a3a3ffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffd0e3f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8ffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffff848484a3a3a3ffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffd0e3f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8bfd6f1b3c9e1c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8bfd6f1 -bbd2ecc5ddf8c5ddf8c5ddf8b8cfe8c1d9f4c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8ffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffff838383a4a4a4ffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffd0e3f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8748292b9d0e9c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf894a6ba363d45c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8b9d0e9748292c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -525c688a9baec5ddf8c5ddf8c5ddf86f7c8c6e7b8bc5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8ffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffff828282a5a5a5ffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffd0e3f9c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8a6bbd27d8c9d8ea0b3bbd2ec -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8191c20abc0d7c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf894a6ba363d45c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8acc1d8181b1fc5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -b0c6de22272bc4dcf7c5ddf8c5ddf8c5ddf8bad0ea1e2125bed6f0c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8ffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff828282a6a6a6 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffd0e3f9c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c1d9f4444c560d0f110606070c0d0f -12151792a4b9c5ddf8c5ddf8c5ddf8c5ddf8c1d9f42d333964707e24282d -6c7988bdd4eec5ddf8c4dcf7657280212529272c318696a9c5ddf8c5ddf8 -b7cee7505a65262b30292e3492a4b8c5ddf87d8d9e2a2f3505060625292e -2a2f358a9baec5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -acc1d849525c25292e2d3339a3b7cec5ddf894a6ba333a41515b6624282d -6c7988c5ddf8c5ddf8b9d0e948515b1c2023343a42a5b9d0c5ddf8c5ddf8 -b1c7df3e464e7f8fa0262b302a2f35b4c9e255606b25292e0506062a2f35 -2a2f35b2c8e0c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8616d7a64707ec5ddf8c5ddf8c5ddf8c5ddf8c5ddf849525c7d8c9d -c5ddf8c5ddf8c5ddf8c5ddf8a7bcd3687583c3dbf6c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8ffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffff818181 -a6a6a6ffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffd0e3f9c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8606b7808090a000000000000 -0000000000000f1113b4cae3c5ddf8c5ddf8c5ddf8c1d8f30000005e6976 -b6cce5434c556d7b8ac5ddf88495a71f2327a9bdd496a9bd0d0f11adc3da -c5ddf8697584596470c4dcf7bad0eaabc0d7c5ddf8c5ddf8c5ddf8191c20 -abc0d7c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf84f596472808fc5ddf8b3c9e1b2c8e0c5ddf894a6ba02020291a2b6 -b1c7df141619b4c9e2c5ddf8515b67434b54b6cce56f7c8c212529c4dcf7 -c5ddf8acc1d80708094b545fabc0d7a3b7ceb8cfe8c5ddf8acc1d8181b1f -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf83b424a8494a6c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8687583 -57616dc5ddf8c5ddf8c5ddf8c5ddf88595a8000000c1d8f3c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -808080a7a7a7ffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffd0e3f9c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8121517000000000000 -000000000000000000030404738292c5ddf8c5ddf8c5ddf8c1d8f3000000 -acc1d8c5ddf88b9cb0394047c5ddf8505a655c6874c5ddf8c5ddf832383f -7a899ac5ddf872808f2a2f358495a7b8cfe8c5ddf8c5ddf8c5ddf8c5ddf8 -191c20abc0d7c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf858636f3940478b9cb0bdd4eec5ddf8c5ddf894a6ba24282d -c5ddf8c5ddf83d454d8798abc5ddf81c202390a2b5c5ddf8bfd6f1040505 -aec3dbc5ddf8acc1d8000000b0c6dec5ddf8c5ddf8c5ddf8c5ddf8acc1d8 -181b1fc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf81b1f239eb1c7c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -8393a5373e46c5ddf8c5ddf8c5ddf8c5ddf8bbd2eca6bad1c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8ffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffff7f7f7f4343436464646161615f5f5f5c5c5c595959565656535353 -5050504d4d4d4b4b4b4848484545454242423f3f3f3c3c3c3a3a3a373737 -3434343131312e2e2e2b2b2b2929292828282828282828282828281f2326 -1e22261e22261e22261e22261e22261e22261e22261d2125010202000000 -000000000000000000000000000000525d68c5ddf8c5ddf8c5ddf8c1d8f3 -000000bcd3edc5ddf89cafc41f2327c5ddf8464e58707e8dc5ddf8c5ddf8 -444d566f7c8cc5ddf8c4dcf7899aad363d450a0b0c8a9baec5ddf8c5ddf8 -c5ddf8191c20abc0d7c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c1d8f37e8e9f2b30361013159cafc5c5ddf894a6ba -363d45c5ddf8c5ddf8434c558190a2c5ddf8131518a4b8cfc5ddf8c5ddf8 -101315a3b6cdc5ddf8acc1d8171a1dc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -acc1d8181b1fc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8282d3394a6bac5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8778696434c55c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8ffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffdededec1c1c1c4c4c4c7c7c7cacacacccccccfcfcfd2d2d2 -d5d5d5d8d8d8dbdbdbdddddde0e0e0e3e3e3e6e6e6e9e9e9ebebebeeeeee -f1f1f1f4f4f4f7f7f7f9f9f9fcfcfcffffffffffffffffffffffffffffff -d0e3f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8171a1d -0000000000000000000000000000000608097f8fa0c5ddf8c5ddf8c5ddf8 -c1d8f300000097a9bec5ddf8768595515b67c5ddf8626e7b444d56c5ddf8 -c5ddf81b1f238ea0b3c5ddf8c5ddf8c5ddf8c5ddf85b667249525cc5ddf8 -c5ddf8c5ddf8282d339db0c6c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c2daf5434c55626e7cc5ddf8 -94a6ba363d45c5ddf8c5ddf8434c558190a2c5ddf82f343b788797c5ddf8 -adc3da050606bcd3edc5ddf8acc1d8181b1fc5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8b8cfe80f1113c3dbf6c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf849525c788797c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf85b677365717fc5ddf8c5ddf8c5ddf8c5ddf8b2c8e07a899a -bcd3edc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8ffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffd0e3f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -7f8fa10a0c0d000000000000000000000000171a1ec0d7f2c5ddf8c5ddf8 -c5ddf8c1d8f3010101282d33535d691b1f2398aabfc5ddf8b1c7df14171a -454e5730363d2e343ac4dcf7c5ddf856616c545f6a6774822125298ea0b3 -c5ddf8c5ddf8c5ddf86c7a89252a2f5a65719db0c6c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8434c555b6672636f7d191c20a6bad1 -c5ddf894a6ba363d45c5ddf8c5ddf8434c558190a2c5ddf88c9db10e1012 -535d691a1d215f6b78c5ddf8c5ddf8acc1d8181b1fc5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf83b424a3941485b6773b8cfe8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf87d8d9e4c5560c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf82f343b99acc1c5ddf8c5ddf8c5ddf8c5ddf88fa1b4 -000000b2c8e0c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8ffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffd0e3f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf87583940d0f110f11130f11132b3036b0c6dec5ddf8c5ddf8 -c5ddf8c5ddf8c1d8f3030404b0c5dd8495a7bdd4eec5ddf8c5ddf8c5ddf8 -b5cbe48292a48a9baec0d7f2c5ddf8c5ddf8b6cce58899ac8292a4b4cae3 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8b6cce594a6bab2c8e0c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8b0c6de8494a68798abbad0ea -c5ddf8c5ddf8b9d0e9a1b5cbc5ddf8c5ddf8a5b9d0b4c9e2c5ddf8c5ddf8 -a6bbd27d8d9e97a9bec5ddf8c5ddf8c5ddf8bed6f09aadc2c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8aabfd693a5b9bfd6f1c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c2daf522272bb6cce5 -c5ddf8c5ddf8c5ddf8a0b4ca343a42c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -697685383f46c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8ffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffd0e3f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c4dcf7a9bed5b9d0e9c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c1d8f3030404c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf88797aa -8e9fb2c5ddf8c5ddf8c5ddf87a899a9aadc2c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf85a65719eb1c7c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8ffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffd0e3f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c3dbf65e6976c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -95a7bb6e7b8b6e7b8b6e7b8b6e7b8b738291c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8ffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffd0e3f9c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8ffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffd0e3f9c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8ffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffd0e3f9c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8bdd4ee8899acb4c9e2c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffd0e3f9c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8bcd3ed677482141619a9bdd4c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8ffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffd0e3f9 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8545f6a768595 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8ffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -d0e3f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf85f6a77 -6c7988c5ddf8c5ddf8c5ddf8c5ddf8bed5ef363d459baec3c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8ffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffd0e3f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -7482924b545fc5ddf8c5ddf8c5ddf8c5ddf8bcd3ed11131690a2b5c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8ffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffd0e3f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8b6cce5282d322c3137b2c8e0c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8ffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffd0e3f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf88e9fb2272c319fb3c9c2daf5c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8ffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffd0e3f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8636f7d64707ec5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -4b545f95a7bbc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8ffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffd0e3f9c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf85e69766c7a89c5ddf8c5ddf8c5ddf8c5ddf8 -bfd6f10000008797aac5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8ffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffd0e3f9c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8bbd2ec333a4191a2b6c5ddf8c5ddf8c5ddf8 -c5ddf893a5b91e2125c2daf5c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8ffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffd0e3f9c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8b4cae33940475f6b78bfd6f1c5ddf8c5ddf8 -c5ddf8c5ddf895a8bc95a7bbc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffd0e3f9c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8ffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffd0e3f9 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8ffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -d0e3f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8ffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffd0e3f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8ffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffd0e3f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8ffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffd0e3f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8ffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffd0e3f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8ffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffd0e3f9c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8ffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffd2e5fac5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c7def8ffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffe7f1fcc5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8d9e9fa -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffffffffffffffffffffffffffffffffdfeffddebfb -c9dff8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 -c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c7def8dceafb -f8fbfe - -[/Creator (html2ps version 1.0 beta5) /Author () /Keywords (xsd, xml, schema, c++, mapping, data, binding, parser, validation) /Subject () - /Title (C++/Parser Mapping Getting Started Guide) /DOCINFO pdfmark -/ND 1 D -/HN [(1) (1) (1) (1) (1) (1) (1) (1) (2) (3) (3) (4) (6) (8) (8) (9) (12) (13) -(14) (18) (18) (21) (24) (27) (27) (28) (28) (28) (35) (??) (37) (38) (39) -(40) (41) (42) (43) (45) (45) (46) (47) (47) (48) (49) (49) (55) (58) (63) -(??) (1) (1) (1) (1) (1) (2) (3) (3) (4) (6) (8) (8) (9) (12) (13) (14) -(18) (18) (21) (24) (27) (27) (28) (28) (28) (35) (37) (38) (39) (40) (41) -(42) (43) (45) (45) (46) (47) (47) (48) (49) (49) (55) (58) (63)] D -/h0 [()(Table of Contents)] D -/h1 [(1\240\240)(Preface)] D -/h2 [(1.1\240\240)(About This Document)] D -/h3 [(1.2\240\240)(More Information)] D -/h4 [(2\240\240)(1 Introduction)] D -/h5 [(2.1\240\240)(1.1 Mapping Overview)] D -/h6 [(2.2\240\240)(1.2 Benefits)] D -/h7 [(3\240\240)(2 Hello World Example)] D -/h8 [(3.1\240\240)(2.1 Writing XML Document and Schema)] D -/h9 [(3.2\240\240)(2.2 Translating Schema to C++)] D -/h10 [(3.3\240\240)(2.3 Implementing Application Logic)] D -/h11 [(3.4\240\240)(2.4 Compiling and Running)] D -/h12 [(4\240\240)(3 Parser Skeletons)] D -/h13 [(4.1\240\240)(3.1 Implementing the Gender Parser)] D -/h14 [(4.2\240\240)(3.2 Implementing the Person Parser)] D -/h15 [(4.3\240\240)(3.3 Implementing the People Parser)] D -/h16 [(4.4\240\240)(3.4 Connecting the Parsers Together)] D -/h17 [(5\240\240)(4 Type Maps)] D -/h18 [(5.1\240\240)(4.1 Object Model)] D -/h19 [(5.2\240\240)(4.2 Type Map File Format)] D -/h20 [(5.3\240\240)(4.3 Parser Implementations)] D -/h21 [(6\240\240)(5 Mapping Configuration)] D -/h22 [(6.1\240\240)(5.1 Character Type and Encoding)] D -/h23 [(6.2\240\240)(5.2 Underlying XML Parser)] D -/h24 [(6.3\240\240)(5.3 XML Schema Validation)] D -/h25 [(6.4\240\240)(5.4 Support for Polymorphism)] D -/h26 [(7\240\240)(6 Built-In XML Schema Type Parsers)] D -/h27 [(7.1\240\240)(6.1 QName Parser)] D -/h28 [(7.2\240\240)(6.2 NMTOKENS and IDREFS Parsers)] D -/h29 [(7.3\240\240)(6.3 base64Binary and hexBinary Parsers)] D -/h30 [(7.4\240\240)(6.4 Time Zone Representation)] D -/h31 [(7.5\240\240)(6.5 date Parser)] D -/h32 [(7.6\240\240)(6.6 dateTime Parser)] D -/h33 [(7.7\240\240)(6.7 duration Parser)] D -/h34 [(7.8\240\240)(6.8 gDay Parser)] D -/h35 [(7.9\240\240)(6.9 gMonth Parser)] D -/h36 [(7.10\240\240)(6.10 gMonthDay Parser)] D -/h37 [(7.11\240\240)(6.11 gYear Parser)] D -/h38 [(7.12\240\240)(6.12 gYearMonth Parser)] D -/h39 [(7.13\240\240)(6.13 time Parser)] D -/h40 [(8\240\240)(7 Document Parser and Error Handling)] D -/h41 [(8.1\240\240)(7.1 Xerces-C++ Document Parser)] D -/h42 [(8.2\240\240)(7.2 Expat Document Parser)] D -/h43 [(8.3\240\240)(7.3 Error Handling)] D -/h44 [(9\240\240)(Appendix A \236 Supported XML Schema Constructs)] D -/Hr [49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 -71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92]D -/HV [1 2 2 1 2 2 1 2 2 2 2 1 2 2 2 2 1 2 2 2 1 2 2 2 2 1 2 2 2 2 2 2 2 -2 2 2 2 2 2 1 2 2 2 1]D -/Cn [2 0 0 2 0 0 4 0 0 0 0 4 0 0 0 0 3 0 0 0 4 0 0 0 0 13 0 0 0 0 0 0 0 -0 0 0 0 0 0 3 0 0 0 0]D -Hr length 0 gt{[/PageMode /UseOutlines /DOCVIEW pdfmark}if -/Hn 1 D -0 1 Hr length 1 sub{ - /Bn E D [Cn Bn get dup 0 gt{/Count E HV Bn get Bl ge{neg}if}{pop}ie - /Dest Hr Bn get dup abs ST cvs cvn E 0 ge{(h)Hn ST cvs join cvx exec - dup 1 get E Nf{0 get E join}{pop}ie /Hn Hn 1 add D}{()}ie - /Title E dup length 255 gt{0 255 getinterval}if /OUT pdfmark}for -ZF /FN Fp D Ps 0 FS /WC Wf{( )}{}ie SW pop D -ET RC ZF -/Df f D -/R0 (http://www.codesynthesis.com/licenses/fdl-1.2.txt) D -/R1 (http://www.codesynthesis.com/projects/xsd/documentation/cxx/parser/guide/index.xhtml) D -/R2 (http://www.codesynthesis.com/projects/xsd/documentation/cxx/parser/guide/cxx-parser-guide.pdf) D -/R3 (http://www.codesynthesis.com/projects/xsd/documentation/cxx/parser/guide/cxx-parser-guide.ps) D -/R1 (http://www.codesynthesis.com/projects/xsd/documentation/xsd.xhtml) D -/R2 (http://www.codesynthesis.com/mailman/listinfo/xsd-users) D -/R3 (http://www.codesynthesis.com/pipermail/xsd-users/) D -/R4 (http://www.w3.org/TR/xmlschema-0/) D -/TS { - tables E get /table E D - table aload pop /rdesc E D /cdesc E D /tdesc E D - tdesc aload pop /capalg E D /caption E D /rules E D /frame E D /nfoot E D - /nhead E D /ncol E D /nrow E D /border E D /twid E D /units E D /talign E D - /flow E D /clear E D /tclass E D pop pop - /w W D /eps 0.1 D /OU f D /PL 1 D - /FN EF 21 get D EZ 21 get Ey 21 get FS - 0 1 1{ - /pass E D - 0 1 nrow{ - /irow E D - /cells rdesc irow get 6 get D - 0 1 ncol{ - /icol E D - /cell cells icol get D - cell 0 ne{ - cell aload pop /ang E D /CB E D pop pop pop - /DV E D /bot E D /top E D /right E D /left E D /nowrap E D /valign E D - /dp E D /align E D /rspan E D /cspan E D /cclass E D /ctype E D /cmax E D - /cmin E D /proc E D - rspan 0 eq{/rspan nrow irow sub 1 add D}if - cspan 0 eq{/cspan ncol icol sub 1 add D}if - pass 0 eq cspan 1 eq and pass 1 eq cspan 1 gt and or{ - /W 1e5 D /LL W D /PH 1 D - ctype 1 eq{() BD}if - RC align NA - AT 4 eq{/CD t D /DC dp D /LN 0 D /M1 0 D /M2 0 D}{/CD f D}ie - 0 0 M /LM 0 D proc exec BN - AT 4 eq{ - LN array astore cell 15 3 -1 roll put - cdesc icol get dup dup 5 get M1 lt{5 M1 put}{5 get /M1 E D}ie - dup 6 get M2 lt{6 M2 put}{6 get /M2 E D}ie - /LM M1 M2 add D - }if - /CD f D - ang 0 ne{/LM CP E pop neg D}if - /thiswid LM left add right add eps add D - /oldmin 0 D /oldmax 0 D - 0 1 cspan 1 sub{ - icol add cdesc E get dup 2 get /oldmax E oldmax add D - 1 get /oldmin E oldmin add D - }for - thiswid oldmax ge{ - 0 1 cspan 1 sub{ - icol add cdesc E get dup 2 E 2 get oldmax 0 eq - {pop thiswid cspan div}{thiswid mul oldmax div}ie - put - }for - }if - nowrap 1 eq{ - thiswid oldmin ge{ - 0 1 cspan 1 sub{ - icol add cdesc E get dup 1 E 1 get oldmin 0 eq - {pop thiswid cspan div}{thiswid mul oldmin div}ie - put - }for - }if - }{ - /W 0 D /LL W D /PH 2 D - ctype 1 eq{() ES () BD}if - 0 0 M /LM 0 D RC proc exec BN - /thiswid LM left add right add eps add D - thiswid oldmin ge{ - 0 1 cspan 1 sub{ - icol add cdesc E get dup 1 E 1 get oldmin 0 eq - {pop thiswid cspan div}{thiswid mul oldmin div}ie - put - }for - }if - }ie - ctype 1 eq{() ES}if - }if - }if - }for - }for - }for - /tmin 0 D /tmax 0 D - 0 1 ncol{ - cdesc E get dup 1 get E 2 get 2 copy gt{pop dup}if - tmax add /tmax E D tmin add /tmin E D - }for - twid 0 lt{twid neg IW gt{IW neg}{twid}ie /twid E D}if - tdesc 0 twid neg tmin 2 copy lt{E}if pop put - tdesc 1 twid neg tmax 2 copy lt{E}if pop put - /W w D /LL W D /OU t D /PH 0 D /PL 0 D -} D -/PT { - /PL PL 1 add D - tables E get /table E D Tm 21 get Ts mul BE - PL 2 ge{save}if - /SL SL 1 add D /FN EF 21 get D EZ 21 get Ey 21 get FS - table aload pop /rdesc E D /cdesc E D /tdesc E D - tdesc aload pop /capalg E D /caption E D /rules E D /frame E D /nfoot E D - /nhead E D /ncol E D /nrow E D /border E D /twid E D /units E D /talign E D - /flow E D /clear E D /tclass E D /tmax E D /tmin E D - /w W D /xo XO D /mr MR D /ll LL D /lg LG D /ai AI D /bc BC D /nr NR D /ar AR D - /tr TR D /ui UI D /ph PH D /a0 A0 D /pf PF D /at AT D /av AV D /al AL D - /Le LE D /la La D - talign 0 lt{/talign AL 0 gt{AV AL get}{A0 2 le{A0}{0}ie}ie D}if - ph 1 eq ph 2 eq or{ - NL ph 1 eq{tmax}{tmin}ie dup XO add LM gt{/LM E XO add D}{pop}ie LM E - }{ - /PH 3 D /LE 1e5 D RC %ZF - border 0 gt{/border 1 D}if - /twidth 0 D /avail W xo sub D - twid 0 eq{0 1 ncol{cdesc E get dup 2 get E 3 get dup 0 gt{div neg dup twid lt - {/twid E D}{pop}ie}{pop pop}ie}for}if - /twid twid dup 0 lt{neg avail 2 copy gt{E}if pop}{avail mul}ie D - /OK t D 0 1 ncol{cdesc E get dup 1 get E 3 get twid mul gt{/OK f D}if}for - 0 1 ncol{ - cdesc E get dup 1 get /colmin E D dup 3 get /cwid E twid mul D dup - tmax avail le{2 get}if - tmin avail le tmax avail gt and{ - dup 2 get E 1 get dup 3 1 roll sub avail tmin sub mul tmax tmin sub div add - }if - tmin avail gt{1 get}if - 0 E colmin cwid lt OK and{pop cwid}if dup /twidth E twidth add D put - }for - /OU f D CP - tmin twid le{ - 0 1 ncol{cdesc E get dup 0 get twidth div twid mul 0 E put}for - /twidth twid D - }if - CP printcap CP E pop sub /caphig E D pop - 0 1 1{ - /pass E D - 0 1 nrow{ - /irow E D - /cells rdesc irow get 6 get D - 0 1 ncol{ - /icol E D - /cell cells icol get D - cell 0 ne{ - cell aload pop /ang E D /CB E D pop pop pop - /DV E D /bot E D /top E D /right E D /left E D /nowrap E D /valign E D - /dp E D /align E D /rspan E D /cspan E D /cclass E D /ctype E D /cmax E D - /cmin E D /proc E D - rspan 0 eq{/rspan nrow irow sub 1 add D}if - cspan 0 eq{/cspan ncol icol sub 1 add D}if - /W 0 D - 0 1 cspan 1 sub{icol add cdesc E get 0 get /W E W add D}for - pass 0 eq rspan 1 eq and pass 1 eq rspan 1 gt and or{ - ctype 1 eq{() BD}if - /W W left sub right sub D /XO 0 D /EO 0 D SI - /A0 align D RC align NA - AT 4 eq{ - /DC dp D /DO 0 D /ID 1 D - 0 1 DV length 1 sub{DV E get dup DO gt{/DO E D}{pop}ie}for - /Lo DO DV 0 get sub D /L1 Lo D - }if - 0 0 M /BP t D /Fl t D /MF 0 D /FB 0 D - proc exec T not{/CI 0 D}if BN 0 FB neg R MF 0 eq{/MF CS D}if - CP /thishig E neg bot add top add CI add D pop - ang 0 ne{/thishig LM bot add top add D}if - cell 16 MF put cell 17 Ya put cell 18 thishig put - valign 4 eq{ - /below thishig Ya sub D - rdesc irow get dup dup 4 get Ya lt - {4 Ya put}{4 get /Ya E D}ie - dup 5 get below lt{5 below put}{5 get /below E D}ie - /thishig Ya below add D - }if - ctype 1 eq{()ES}if - /oldhig 0 D - 0 1 rspan 1 sub{ - irow add rdesc E get 0 get /oldhig E oldhig add D - }for - thishig oldhig ge{ - 0 1 rspan 1 sub{ - irow add rdesc E get dup 0 E 0 get oldhig 0 eq - {pop thishig rspan div}{thishig mul oldhig div}ie - put - }for - }if - }if - }if - }for - }for - }for M RC %ZF - /thight 0 D /racc 0 D /maxh 0 D /brk 0 D /rbeg nhead nfoot add D - 0 1 nrow{ - rdesc E get dup 0 get dup /thight E thight add D - brk 0 eq{/racc E D}{/racc E racc add D}ie - racc maxh gt{/maxh racc D}if 2 get /brk E D - }for - ph 3 ge{thight caphig add E}if - ph 0 eq ph 4 eq or{ - /PH 4 D /LE Le D /OU Ou D /yoff 0 D /headsz 0 D - 0 1 nhead 1 sub{rdesc E get 0 get headsz add /headsz E D}for - /footsz 0 D - 0 1 nfoot 1 sub{rdesc E nhead add get 0 get footsz add /footsz E D}for - /ahig LE BO add MI add D /maxh maxh headsz add footsz add D - /thight thight headsz add footsz add D - tmin avail gt maxh ahig gt or - {/Sf avail tmin div dup ahig maxh div gt{pop ahig maxh div}if D /SA t D} - {/Sf 1 D}ie - tclass 1 eq thight LE 15 sub gt and - {/SA t D LE 15 sub thight div dup Sf lt{/Sf E D}{pop}ie}if - SA{Sf Sf scale /ll ll Sf div D /xo xo Sf div D /LE LE Sf div D - /mr mr Sf div D /BO BO Sf div D /ahig ahig Sf div D}if - nhead nfoot add getwid - LE CP E pop add capalg 0 eq{caphig sub}if - bT{f}{dup thight lt thight ahig lt and}ie - E headsz sub footsz sub rwid lt or{NP}if - capalg 0 eq{printcap -8 SP}if - CP /ycur E D pop - printhead - rbeg 1 nrow{/row E D row - getwid - ycur yoff add rwid sub footsz sub LE add 0 lt - {nfoot 0 gt{printfoot}if Tf NP /rbeg irow1 D - Ba{MI /MI MI SA{Sf div}if D MI SP /MI E D}if - CP /ycur E D pop /yoff 0 D printhead}if - irow1 printrow - }for - printfoot /row row 1 add D Tf - 0 ycur yoff add M - capalg 1 eq{/EO 0 D SI -3 SP printcap}if - Sf 1 lt{1 Sf div dup scale /ll ll Sf mul D /xo xo Sf mul D /LE LE Sf mul D - /mr mr Sf mul D /BO BO Sf mul D /SA f D}if - /EO 0 D - }if - }ie - /W w D /XO xo D /MR mr D /LL ll D /LG lg D /AI ai D /BC bc D /NR nr D /AR ar D - /TR tr D /UI ui D /PH ph D /A0 a0 D /PF pf D /AT at D /AV av D /AL al D - /La la D - /SL SL 1 sub NN D /CF 0 D /FN 0 D SZ SL get FR SL get FS Wf not{()F2}if - PL 2 ge{Ms E restore Ms or /Ms E D PH 1 eq PH 2 eq or - {/LM E D}if PH 3 ge{/CI 0 D NL 0 E neg R}if - }if - /PL PL 1 sub D /CI 0 D /BP f D /PO f D () Bm 21 get Ts mul BE BL %CF CS SF -} D -/printcap{ - capalg 0 ge{ - SA{/W w Sf div D} - {talign 1 eq{/XO xo ll twidth sub 2 div add D}if - talign 2 eq{/XO xo ll twidth sub add D}if - /W XO twidth add D - }ie /XO xo D /LL W XO sub MR sub D - /PA f D /Fl capalg 0 eq D - 1 NA BL caption exec BN OA /PA t D - }if -} D -/getwid{ - /irow1 E D - /irow2 irow1 D - /rwid 0 D - {rdesc irow2 get dup 0 get rwid add /rwid E D 2 get 0 eq - {exit}{/irow2 irow2 1 add D}ie - }loop -} D -/printrow{ - /xoff ll twidth PL 2 ge{Sf div}if sub talign mul 2 div D - /xleft xoff xo add D - /irow E D - /cells rdesc irow get 6 get D - 0 1 ncol{ - /icol E D - /cell cells icol get D - cell 0 ne{ - cell aload pop /ang E D /CB E D /cvsize E D /above E D /fontsz E D - /DV E D /bot E D /top E D /right E D /left E D /nowrap E D /valign E D - /dp E D /align E D /rspan E D /cspan E D /cclass E D /ctype E D /cmax E D - /cmin E D /proc E D - rspan 0 eq{/rspan nrow irow sub 1 add D}if - cspan 0 eq{/cspan ncol icol sub 1 add D}if - /width 0 D - 0 1 cspan 1 sub{icol add cdesc E get 0 get /width E width add D}for - /rhight rdesc irow get 0 get D - /hight rhight D - 1 1 rspan 1 sub{irow add rdesc E get 0 get /hight E hight add D}for - /W xo xoff add width add right sub D - ang 0 ne{/W xo xoff add hight add right sub D}if - /EO xo xoff add left add D SI - Cf{ - gsave CB VC xo xoff add ycur yoff add M - 0 hight neg RL width 0 RL 0 hight RL width neg 0 RL fill - grestore - }if - ctype 1 eq{() BD}if - /A0 align D RC - AT 4 eq{ - /DC dp D /ID 1 D /DO cdesc icol get 5 get D /Lo DO DV 0 get sub D /L1 Lo D - }if - ang 0 ne{ - gsave ang 90 eq - {xoff ycur add hight cvsize sub 2 div sub ycur hight sub xoff sub} - {xoff ycur sub width add hight cvsize sub 2 div add ycur xoff add}ie - translate ang rotate - }if - valign 3 le{0 ycur yoff add top sub - hight cvsize sub valign 1 sub mul 2 div sub M} - {0 ycur yoff add top sub above add rdesc irow get 4 get sub M}ie - /PA f D /BP t D /Fl t D - BL proc exec BN - ang 0 ne{grestore}if - /PA t D - ctype 1 eq{() ES}if - }if - /xoff xoff cdesc icol get 0 get add D - }for - /yoff yoff rhight sub D -} D -/printhead {0 1 nhead 1 sub{printrow}for} D -/printfoot {nhead 1 nhead nfoot add 1 sub{printrow}for} D -/Tf { - OU{rules 2 ge{/yoff 0 D - gsave 0 Sg - [0 1 nhead 1 sub{}for rbeg 1 row 1 sub{}for nhead 1 nhead nfoot add 1 sub{}for]{ - /irow E D - /xoff ll twidth PL 2 ge{Sf div}if sub talign mul 2 div D - /cells rdesc irow get 6 get D - 0 1 ncol{ - /icol E D - /cell cells icol get D - cell 0 ne{ - /rspan cell 6 get D - /cspan cell 5 get D - rspan 0 eq{/rspan nrow irow sub 1 add D}if - cspan 0 eq{/cspan ncol icol sub 1 add D}if - /width 0 D - 0 1 cspan 1 sub{icol add cdesc E get 0 get /width E width add D}for - /rhight rdesc irow get 0 get D - /hight rhight D - 1 1 rspan 1 sub{irow add rdesc E get 0 get /hight E hight add D}for - xo xoff add width add ycur yoff add M - 0 hight neg icol cspan add 1 sub ncol lt - {cdesc icol 1 add get 4 get dup rules 3 le{1 eq}{pop t}ie - {1 eq{0.8}{0.3}ie - LW RL CP stroke M}{pop R}ie}{R}ie - irow nhead nfoot add 1 sub ne nfoot 0 eq or - {irow rspan add 1 sub nrow lt - {rdesc irow rspan add get 3 get}{nfoot 0 eq{0}{1}ie}ie - dup rules 2 mod 0 eq{1 eq}{pop t}ie - {1 eq irow rspan add nhead eq or irow rspan add row eq nfoot 0 gt and or - {0.8}{0.3}ie LW width neg 0 RL CP stroke M}{pop}ie}if - }if - /xoff xoff cdesc icol get 0 get add D - }for - /yoff yoff rhight sub D - }forall - grestore - /Ms t D - }if - frame 1 gt{ - gsave - 1 LW 0 Sg - xleft ycur M CP BB - 0 yoff frame 5 eq frame 7 ge or{RL}{R}ie - twidth 0 frame 3 eq frame 4 eq or frame 8 ge or{RL}{R}ie CP BB - 0 yoff neg frame 6 ge{RL}{R}ie - twidth neg 0 frame 2 eq frame 4 eq or frame 8 ge or{RL}{R}ie - closepath stroke - grestore - /Ms t D - }if - }if -} D -/tables [[[0 0 0 0 0 -1 0 0 1 56 2 0 0 9 5 {()} -1] - [[0 0 0 0 0 0 0][0 0 0 0 0 0 0][0 0 0 0 0 0 0]] - [[0 0 0 0 0 0 [[{()1 Sl()WB(XML Schema type)} 0 0 1 0 1 1 1 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB(Parser imple)HY(men)HY(ta)HY(tion)YH( in the )SM(xml_schema)ES( names)HY(pace)YH()} 0 0 1 0 1 1 1 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB(Parser return type - )} 0 0 1 0 1 1 1 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -]] -[0 0 0 0 0 0 [[{()1 Sl()WB(anyType and anySim)HY(ple)HY(Type)YH( types - )} 0 0 1 0 3 1 1 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -0 -0 -]] -[0 0 0 0 0 0 [[{()1 Sl()WB()SM(anyType)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()SM(any_type_pimpl)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()SM(void)ES( - )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -]] -[0 0 0 0 0 0 [[{()1 Sl()WB()SM(anySim)HY(ple)HY(Type)YH()ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()SM(any_simple_type_pimpl)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()SM(void)ES( - )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -]] -[0 0 0 0 0 0 [[{()1 Sl()WB(fixed-length inte)HY(gral)YH( types - )} 0 0 1 0 3 1 1 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -0 -0 -]] -[0 0 0 0 0 0 [[{()1 Sl()WB()SM(byte)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()SM(byte_pimpl)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()SM(signed\240char)ES( - )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -]] -[0 0 0 0 0 0 [[{()1 Sl()WB()SM(unsigned)HY(Byte)YH()ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()SM(unsigned_byte_pimpl)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()SM(unsigned\240char)ES( - )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -]] -[0 0 0 0 0 0 [[{()1 Sl()WB()SM(short)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()SM(short_pimpl)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()SM(short)ES( - )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -]] -[0 0 0 0 0 0 [[{()1 Sl()WB()SM(unsigned)HY(Short)YH()ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()SM(unsigned_short_pimpl)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()SM(unsigned\240short)ES( - )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -]] -[0 0 0 0 0 0 [[{()1 Sl()WB()SM(int)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()SM(int_pimpl)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()SM(int)ES( - )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -]] -[0 0 0 0 0 0 [[{()1 Sl()WB()SM(unsignedInt)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()SM(unsigned_int_pimpl)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()SM(unsigned\240int)ES( - )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -]] -[0 0 0 0 0 0 [[{()1 Sl()WB()SM(long)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()SM(long_pimpl)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()SM(long\240long)ES( - )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -]] -[0 0 0 0 0 0 [[{()1 Sl()WB()SM(unsigned)HY(Long)YH()ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()SM(unsigned_long_pimpl)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()SM(unsigned\240long\240long)ES( - )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -]] -[0 0 0 0 0 0 [[{()1 Sl()WB(arbi)HY(trary)YH(-length inte)HY(gral)YH( types - )} 0 0 1 0 3 1 1 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -0 -0 -]] -[0 0 0 0 0 0 [[{()1 Sl()WB()SM(integer)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()SM(integer_pimpl)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()SM(long\240long)ES( - )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -]] -[0 0 0 0 0 0 [[{()1 Sl()WB()SM(nonPos)HY(i)HY(tiveIn)HY(te)HY(ger)YH()ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()SM(non_posi)HY(tive)YH(_integer_pimpl)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()SM(long\240long)ES( - )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -]] -[0 0 0 0 0 0 [[{()1 Sl()WB()SM(nonNeg)HY(a)HY(tiveIn)HY(te)HY(ger)YH()ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()SM(non_nega)HY(tive)YH(_integer_pimpl)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()SM(unsigned long\240long)ES( - )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -]] -[0 0 0 0 0 0 [[{()1 Sl()WB()SM(posi)HY(tiveIn)HY(te)HY(ger)YH()ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()SM(posi)HY(tive)YH(_integer_pimpl)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()SM(unsigned long\240long)ES( - )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -]] -[0 0 0 0 0 0 [[{()1 Sl()WB()SM(nega)HY(tiveIn)HY(te)HY(ger)YH()ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()SM(nega)HY(tive)YH(_integer_pimpl)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()SM(long\240long)ES( - )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -]] -[0 0 0 0 0 0 [[{()1 Sl()WB(boolean types - )} 0 0 1 0 3 1 1 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -0 -0 -]] -[0 0 0 0 0 0 [[{()1 Sl()WB()SM(boolean)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()SM(boolean_pimpl)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()SM(bool)ES( - )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -]] -[0 0 0 0 0 0 [[{()1 Sl()WB(fixed-preci)HY(sion)YH( float)HY(ing)YH(-point types - )} 0 0 1 0 3 1 1 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -0 -0 -]] -[0 0 0 0 0 0 [[{()1 Sl()WB()SM(float)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()SM(float_pimpl)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()SM(float)ES( - )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -]] -[0 0 0 0 0 0 [[{()1 Sl()WB()SM(double)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()SM(double_pimpl)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()SM(double)ES( - )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -]] -[0 0 0 0 0 0 [[{()1 Sl()WB(arbi)HY(trary)YH(-preci)HY(sion)YH( float)HY(ing)YH(-point types - )} 0 0 1 0 3 1 1 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -0 -0 -]] -[0 0 0 0 0 0 [[{()1 Sl()WB()SM(decimal)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()SM(decimal_pimpl)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()SM(double)ES( - )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -]] -[0 0 0 0 0 0 [[{()1 Sl()WB(string-based types - )} 0 0 1 0 3 1 1 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -0 -0 -]] -[0 0 0 0 0 0 [[{()1 Sl()WB()SM(string)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()SM(string_pimpl)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()SM(std::string)ES( or )SM(std::wstring)ES( - )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -]] -[0 0 0 0 0 0 [[{()1 Sl()WB()SM(normal)HY(ized)HY(String)YH()ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()SM(normal)HY(ized)YH(_string_pimpl)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()SM(std::string)ES( or )SM(std::wstring)ES( - )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -]] -[0 0 0 0 0 0 [[{()1 Sl()WB()SM(token)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()SM(token_pimpl)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()SM(std::string)ES( or )SM(std::wstring)ES( - )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -]] -[0 0 0 0 0 0 [[{()1 Sl()WB()SM(Name)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()SM(name_pimpl)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()SM(std::string)ES( or )SM(std::wstring)ES( - )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -]] -[0 0 0 0 0 0 [[{()1 Sl()WB()SM(NMTOKEN)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()SM(nmtoken_pimpl)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()SM(std::string)ES( or )SM(std::wstring)ES( - )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -]] -[0 0 0 0 0 0 [[{()1 Sl()WB()SM(NCName)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()SM(ncname_pimpl)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()SM(std::string)ES( or )SM(std::wstring)ES( - )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -]] -[0 0 0 0 0 0 [[{()1 Sl()WB()SM(language)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()SM(language_pimpl)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()SM(std::string)ES( or )SM(std::wstring)ES( - )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -]] -[0 0 0 0 0 0 [[{()1 Sl()WB(qual)HY(i)HY(fied)YH( name - )} 0 0 1 0 3 1 1 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -0 -0 -]] -[0 0 0 0 0 0 [[{()1 Sl()WB()SM(QName)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()SM(qname_pimpl)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()SM(xml_schema::qname)ES()BR()0 30 1 A(Section 6.1, - ")SM(QName)ES( Parser")30 0 TN TL()Ec /AF f D( - )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -]] -[0 0 0 0 0 0 [[{()1 Sl()WB(ID/IDREF types - )} 0 0 1 0 3 1 1 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -0 -0 -]] -[0 0 0 0 0 0 [[{()1 Sl()WB()SM(ID)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()SM(id_pimpl)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()SM(std::string)ES( or )SM(std::wstring)ES( - )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -]] -[0 0 0 0 0 0 [[{()1 Sl()WB()SM(IDREF)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()SM(idref_pimpl)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()SM(std::string)ES( or )SM(std::wstring)ES( - )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -]] -[0 0 0 0 0 0 [[{()1 Sl()WB(list types - )} 0 0 1 0 3 1 1 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -0 -0 -]] -[0 0 0 0 0 0 [[{()1 Sl()WB()SM(NMTO)HY(KENS)YH()ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()SM(nmto)HY(kens)YH(_pimpl)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()SM(xml_schema::string_sequence)ES()BR()0 31 1 A(Section - 6.2, ")SM(NMTO)HY(KENS)YH()ES( and )SM(IDREFS)ES( Parsers")31 0 TN TL()Ec /AF f D( - )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -]] -[0 0 0 0 0 0 [[{()1 Sl()WB()SM(IDREFS)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()SM(idrefs_pimpl)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()SM(xml_schema::string_sequence)ES()BR()0 31 1 A(Section - 6.2, ")SM(NMTO)HY(KENS)YH()ES( and )SM(IDREFS)ES( Parsers")31 0 TN TL()Ec /AF f D( - )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -]] -[0 0 0 0 0 0 [[{()1 Sl()WB(URI types - )} 0 0 1 0 3 1 1 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -0 -0 -]] -[0 0 0 0 0 0 [[{()1 Sl()WB()SM(anyURI)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()SM(uri_pimpl)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()SM(std::string)ES( or )SM(std::wstring)ES( - )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -]] -[0 0 0 0 0 0 [[{()1 Sl()WB(binary types - )} 0 0 1 0 3 1 1 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -0 -0 -]] -[0 0 0 0 0 0 [[{()1 Sl()WB()SM(base64Binary)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()SM(base64_binary_pimpl)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()SM(std::auto_ptr)ES()BR( )0 32 1 A(Section 6.3, ")SM(base64Binary)ES( and - )SM(hexBi)HY(nary)YH()ES( Parsers")32 0 TN TL()Ec /AF f D( - )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -]] -[0 0 0 0 0 0 [[{()1 Sl()WB()SM(hexBi)HY(nary)YH()ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()SM(hex_binary_pimpl)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()SM(std::auto_ptr)ES()BR( )0 32 1 A(Section 6.3, ")SM(base64Binary)ES( and - )SM(hexBi)HY(nary)YH()ES( Parsers")32 0 TN TL()Ec /AF f D( - )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -]] -[0 0 0 0 0 0 [[{()1 Sl()WB(date/time types - )} 0 0 1 0 3 1 1 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -0 -0 -]] -[0 0 0 0 0 0 [[{()1 Sl()WB()SM(date)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()SM(date_pimpl)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()SM(xml_schema::date)ES()BR()0 34 1 A(Section 6.5, - ")SM(date)ES( Parser")34 0 TN TL()Ec /AF f D( - )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -]] -[0 0 0 0 0 0 [[{()1 Sl()WB()SM(date)HY(Time)YH()ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()SM(date_time_pimpl)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()SM(xml_schema::date_time)ES()BR()0 35 1 A(Section 6.6, - ")SM(date)HY(Time)YH()ES( Parser")35 0 TN TL()Ec /AF f D( - )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -]] -[0 0 0 0 0 0 [[{()1 Sl()WB()SM(dura)HY(tion)YH()ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()SM(dura)HY(tion)YH(_pimpl)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()SM(xml_schema::dura)HY(tion)YH()ES()BR()0 36 1 A(Section 6.7, - ")SM(dura)HY(tion)YH()ES( Parser")36 0 TN TL()Ec /AF f D( - )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -]] -[0 0 0 0 0 0 [[{()1 Sl()WB()SM(gDay)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()SM(gday_pimpl)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()SM(xml_schema::gday)ES()BR()0 37 1 A(Section 6.8, - ")SM(gDay)ES( Parser")37 0 TN TL()Ec /AF f D( - )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -]] -[0 0 0 0 0 0 [[{()1 Sl()WB()SM(gMonth)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()SM(gmonth_pimpl)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()SM(xml_schema::gmonth)ES()BR()0 38 1 A(Section 6.9, - ")SM(gMonth)ES( Parser")38 0 TN TL()Ec /AF f D( - )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -]] -[0 0 0 0 0 0 [[{()1 Sl()WB()SM(gMon)HY(th)HY(Day)YH()ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()SM(gmonth_day_pimpl)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()SM(xml_schema::gmonth_day)ES()BR()0 39 1 A(Section 6.10, - ")SM(gMon)HY(th)HY(Day)YH()ES( Parser")39 0 TN TL()Ec /AF f D( - )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -]] -[0 0 0 0 0 0 [[{()1 Sl()WB()SM(gYear)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()SM(gyear_pimpl)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()SM(xml_schema::gyear)ES()BR()0 40 1 A(Section 6.11, - ")SM(gYear)ES( Parser")40 0 TN TL()Ec /AF f D( - )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -]] -[0 0 0 0 0 0 [[{()1 Sl()WB()SM(gYear)HY(Month)YH()ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()SM(gyear_month_pimpl)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()SM(xml_schema::gyear_month)ES()BR()0 41 1 A(Section - 6.12, ")SM(gYear)HY(Month)YH()ES( Parser")41 0 TN TL()Ec /AF f D( - )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -]] -[0 0 0 0 0 0 [[{()1 Sl()WB()SM(time)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()SM(time_pimpl)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()SM(xml_schema::time)ES()BR()0 42 1 A(Section 6.13, - ")SM(time)ES( Parser")42 0 TN TL()Ec /AF f D( - )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -]] -]] -[[0 0 0 0 0 -1 0 0 1 57 1 0 0 9 5 {()} -1] - [[0 0 0 0 0 0 0][0 0 0 0 0 0 0]] - [[0 0 0 0 0 0 [[{()1 Sl()WB(Construct)} 0 0 1 0 1 1 1 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB(Notes)} 0 0 1 0 1 1 1 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -]] -[0 0 0 0 0 0 [[{()1 Sl()WB(Struc)HY(ture)YH()} 0 0 1 0 2 1 1 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -0 -]] -[0 0 0 0 0 0 [[{()1 Sl()WB(element)} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -]] -[0 0 0 0 0 0 [[{()1 Sl()WB(attribute)} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -]] -[0 0 0 0 0 0 [[{()1 Sl()WB(any)} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -]] -[0 0 0 0 0 0 [[{()1 Sl()WB(anyAt)HY(tribute)YH()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -]] -[0 0 0 0 0 0 [[{()1 Sl()WB(all)} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -]] -[0 0 0 0 0 0 [[{()1 Sl()WB(sequence)} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -]] -[0 0 0 0 0 0 [[{()1 Sl()WB(choice)} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -]] -[0 0 0 0 0 0 [[{()1 Sl()WB(complex type, empty content)} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -]] -[0 0 0 0 0 0 [[{()1 Sl()WB(complex type, mixed content)} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -]] -[0 0 0 0 0 0 [[{()1 Sl()WB(complex type, simple content exten)HY(sion)YH()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -]] -[0 0 0 0 0 0 [[{()1 Sl()WB(complex type, simple content restric)HY(tion)YH()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB(Simple type facets are not vali)HY(dated)YH(.)} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -]] -[0 0 0 0 0 0 [[{()1 Sl()WB(complex type, complex content exten)HY(sion)YH()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -]] -[0 0 0 0 0 0 [[{()1 Sl()WB(complex type, complex content restric)HY(tion)YH()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -]] -[0 0 0 0 0 0 [[{()1 Sl()WB(list)} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -]] -[0 0 0 0 0 0 [[{()1 Sl()WB(Datatypes)} 0 0 1 0 2 1 1 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -0 -]] -[0 0 0 0 0 0 [[{()1 Sl()WB(byte)} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -]] -[0 0 0 0 0 0 [[{()1 Sl()WB(unsigned)HY(Byte)YH()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -]] -[0 0 0 0 0 0 [[{()1 Sl()WB(short)} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -]] -[0 0 0 0 0 0 [[{()1 Sl()WB(unsigned)HY(Short)YH()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -]] -[0 0 0 0 0 0 [[{()1 Sl()WB(int)} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -]] -[0 0 0 0 0 0 [[{()1 Sl()WB(unsignedInt)} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -]] -[0 0 0 0 0 0 [[{()1 Sl()WB(long)} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -]] -[0 0 0 0 0 0 [[{()1 Sl()WB(unsigned)HY(Long)YH()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -]] -[0 0 0 0 0 0 [[{()1 Sl()WB(integer)} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -]] -[0 0 0 0 0 0 [[{()1 Sl()WB(nonPos)HY(i)HY(tiveIn)HY(te)HY(ger)YH()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -]] -[0 0 0 0 0 0 [[{()1 Sl()WB(nonNeg)HY(a)HY(tiveIn)HY(te)HY(ger)YH()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -]] -[0 0 0 0 0 0 [[{()1 Sl()WB(posi)HY(tiveIn)HY(te)HY(ger)YH()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -]] -[0 0 0 0 0 0 [[{()1 Sl()WB(nega)HY(tiveIn)HY(te)HY(ger)YH()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -]] -[0 0 0 0 0 0 [[{()1 Sl()WB(boolean)} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -]] -[0 0 0 0 0 0 [[{()1 Sl()WB(float)} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -]] -[0 0 0 0 0 0 [[{()1 Sl()WB(double)} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -]] -[0 0 0 0 0 0 [[{()1 Sl()WB(decimal)} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -]] -[0 0 0 0 0 0 [[{()1 Sl()WB(string)} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -]] -[0 0 0 0 0 0 [[{()1 Sl()WB(normal)HY(ized)HY(String)YH()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -]] -[0 0 0 0 0 0 [[{()1 Sl()WB(token)} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -]] -[0 0 0 0 0 0 [[{()1 Sl()WB(Name)} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -]] -[0 0 0 0 0 0 [[{()1 Sl()WB(NMTOKEN)} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -]] -[0 0 0 0 0 0 [[{()1 Sl()WB(NCName)} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -]] -[0 0 0 0 0 0 [[{()1 Sl()WB(language)} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -]] -[0 0 0 0 0 0 [[{()1 Sl()WB(anyURI)} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -]] -[0 0 0 0 0 0 [[{()1 Sl()WB(ID)} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB(Iden)HY(tity)YH( constraint is not enforced.)} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -]] -[0 0 0 0 0 0 [[{()1 Sl()WB(IDREF)} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB(Iden)HY(tity)YH( constraint is not enforced.)} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -]] -[0 0 0 0 0 0 [[{()1 Sl()WB(NMTO)HY(KENS)YH()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -]] -[0 0 0 0 0 0 [[{()1 Sl()WB(IDREFS)} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB(Iden)HY(tity)YH( constraint is not enforced.)} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -]] -[0 0 0 0 0 0 [[{()1 Sl()WB(QName)} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -]] -[0 0 0 0 0 0 [[{()1 Sl()WB(base64Binary)} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -]] -[0 0 0 0 0 0 [[{()1 Sl()WB(hexBi)HY(nary)YH()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -]] -[0 0 0 0 0 0 [[{()1 Sl()WB(date)} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -]] -[0 0 0 0 0 0 [[{()1 Sl()WB(date)HY(Time)YH()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -]] -[0 0 0 0 0 0 [[{()1 Sl()WB(dura)HY(tion)YH()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -]] -[0 0 0 0 0 0 [[{()1 Sl()WB(gDay)} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -]] -[0 0 0 0 0 0 [[{()1 Sl()WB(gMonth)} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -]] -[0 0 0 0 0 0 [[{()1 Sl()WB(gMon)HY(th)HY(Day)YH()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -]] -[0 0 0 0 0 0 [[{()1 Sl()WB(gYear)} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -]] -[0 0 0 0 0 0 [[{()1 Sl()WB(gYear)HY(Month)YH()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -]] -[0 0 0 0 0 0 [[{()1 Sl()WB(time)} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -]] -]] -] D -0 1 1{TS}for RC ZF -/Ba f D /BO 0 D Bs -/UR (/home/boris/work/xsd/xsd/documentation/cxx/parser/guide/index.xhtml) D -/Ti (C++/Parser Mapping Getting Started Guide) D -/Au () D -/Df f D -/ME [] D -Pt -/BO 0 D TC /Ba f D Bs /AU f D /UR () D RC ZF - tH WB -ND 1 gt{Ts 3 mul Np 0()0 C()BD(C++/Parser Mapping Getting Started Guide)ES()0 1 TN()EA()BN}if -1 NH le{49(1\240\240)1 C(Preface)WB 3 Sn()49 1 TN()EA()BN}if -2 NH le{50(1.1\240\240)2 C(About)WB 4 Sn( This Docu)HY(ment)YH()50 1 TN()EA()BN}if -2 NH le{51(1.2\240\240)2 C(More)WB 5 Sn( Infor)HY(ma)HY(tion)YH()51 1 TN()EA()BN}if -1 NH le{52(2\240\240)1 C(1)WB 6 Sn( Intro)HY(duc)HY(tion)YH()52 1 TN()EA()BN}if -2 NH le{53(2.1\240\240)2 C(1.1)WB 7 Sn( Mapping Overview)53 1 TN()EA()BN}if -2 NH le{54(2.2\240\240)2 C(1.2)WB 8 Sn( Bene)HY(fits)YH()54 1 TN()EA()BN}if -1 NH le{55(3\240\240)1 C(2)WB 9 Sn( Hello World Example)55 1 TN()EA()BN}if -2 NH le{56(3.1\240\240)2 C(2.1)WB 10 Sn( Writing XML Docu)HY(ment)YH( and Schema)56 1 TN()EA()BN}if -2 NH le{57(3.2\240\240)2 C(2.2)WB 11 Sn( Trans)HY(lat)HY(ing)YH( Schema to C++)57 1 TN()EA()BN}if -2 NH le{58(3.3\240\240)2 C(2.3)WB 12 Sn( Imple)HY(ment)HY(ing)YH( Appli)HY(ca)HY(tion)YH( Logic)58 1 TN()EA()BN}if -2 NH le{59(3.4\240\240)2 C(2.4)WB 13 Sn( Compil)HY(ing)YH( and Running)59 1 TN()EA()BN}if -1 NH le{60(4\240\240)1 C(3)WB 14 Sn( Parser Skele)HY(tons)YH()60 1 TN()EA()BN}if -2 NH le{61(4.1\240\240)2 C(3.1)WB 15 Sn( Imple)HY(ment)HY(ing)YH( the Gender Parser)61 1 TN()EA()BN}if -2 NH le{62(4.2\240\240)2 C(3.2)WB 16 Sn( Imple)HY(ment)HY(ing)YH( the Person Parser)62 1 TN()EA()BN}if -2 NH le{63(4.3\240\240)2 C(3.3)WB 17 Sn( Imple)HY(ment)HY(ing)YH( the People Parser)63 1 TN()EA()BN}if -2 NH le{64(4.4\240\240)2 C(3.4)WB 18 Sn( Connect)HY(ing)YH( the Parsers Together)64 1 TN()EA()BN}if -1 NH le{65(5\240\240)1 C(4)WB 19 Sn( Type Maps)65 1 TN()EA()BN}if -2 NH le{66(5.1\240\240)2 C(4.1)WB 20 Sn( Object Model)66 1 TN()EA()BN}if -2 NH le{67(5.2\240\240)2 C(4.2)WB 21 Sn( Type Map File Format)67 1 TN()EA()BN}if -2 NH le{68(5.3\240\240)2 C(4.3)WB 22 Sn( Parser Imple)HY(men)HY(ta)HY(tions)YH()68 1 TN()EA()BN}if -1 NH le{69(6\240\240)1 C(5)WB 23 Sn( Mapping Config)HY(u)HY(ra)HY(tion)YH()69 1 TN()EA()BN}if -2 NH le{70(6.1\240\240)2 C(5.1)WB 24 Sn( Char)HY(ac)HY(ter)YH( Type and Encod)HY(ing)YH()70 1 TN()EA()BN}if -2 NH le{71(6.2\240\240)2 C(5.2)WB 25 Sn( Under)HY(ly)HY(ing)YH( XML Parser)71 1 TN()EA()BN}if -2 NH le{72(6.3\240\240)2 C(5.3)WB 26 Sn( XML Schema Vali)HY(da)HY(tion)YH()72 1 TN()EA()BN}if -2 NH le{73(6.4\240\240)2 C(5.4)WB 27 Sn( Support for Poly)HY(mor)HY(phism)YH()73 1 TN()EA()BN}if -1 NH le{74(7\240\240)1 C(6)WB 28 Sn( Built-In XML Schema Type Parsers)74 1 TN()EA()BN}if -2 NH le{75(7.1\240\240)2 C(6.1)WB 30 Sn( )SM(QName)ES( Parser)75 1 TN()EA()BN}if -2 NH le{76(7.2\240\240)2 C(6.2)WB 31 Sn( )SM(NMTO)HY(KENS)YH()ES( and )SM(IDREFS)ES( Parsers)76 1 TN()EA()BN}if -2 NH le{77(7.3\240\240)2 C(6.3)WB 32 Sn( )SM(base64Binary)ES( and )SM(hexBi)HY(nary)YH()ES( Parsers)77 1 TN()EA()BN}if -2 NH le{78(7.4\240\240)2 C(6.4)WB 33 Sn( Time Zone Repre)HY(sen)HY(ta)HY(tion)YH()78 1 TN()EA()BN}if -2 NH le{79(7.5\240\240)2 C(6.5)WB 34 Sn( )SM(date)ES( Parser)79 1 TN()EA()BN}if -2 NH le{80(7.6\240\240)2 C(6.6)WB 35 Sn( )SM(date)HY(Time)YH()ES( Parser)80 1 TN()EA()BN}if -2 NH le{81(7.7\240\240)2 C(6.7)WB 36 Sn( )SM(dura)HY(tion)YH()ES( Parser)81 1 TN()EA()BN}if -2 NH le{82(7.8\240\240)2 C(6.8)WB 37 Sn( )SM(gDay)ES( Parser)82 1 TN()EA()BN}if -2 NH le{83(7.9\240\240)2 C(6.9)WB 38 Sn( )SM(gMonth)ES( Parser)83 1 TN()EA()BN}if -2 NH le{84(7.10\240\240)2 C(6.10)WB 39 Sn( )SM(gMon)HY(th)HY(Day)YH()ES( Parser)84 1 TN()EA()BN}if -2 NH le{85(7.11\240\240)2 C(6.11)WB 40 Sn( )SM(gYear)ES( Parser)85 1 TN()EA()BN}if -2 NH le{86(7.12\240\240)2 C(6.12)WB 41 Sn( )SM(gYear)HY(Month)YH()ES( Parser)86 1 TN()EA()BN}if -2 NH le{87(7.13\240\240)2 C(6.13)WB 42 Sn( )SM(time)ES( Parser)87 1 TN()EA()BN}if -1 NH le{88(8\240\240)1 C(7)WB 43 Sn( Docu)HY(ment)YH( Parser and Error Handling)88 1 TN()EA()BN}if -2 NH le{89(8.1\240\240)2 C(7.1)WB 44 Sn( Xerces-C++ Docu)HY(ment)YH( Parser)89 1 TN()EA()BN}if -2 NH le{90(8.2\240\240)2 C(7.2)WB 45 Sn( Expat Docu)HY(ment)YH( Parser)90 1 TN()EA()BN}if -2 NH le{91(8.3\240\240)2 C(7.3)WB 46 Sn( Error Handling)91 1 TN()EA()BN}if -1 NH le{92(9\240\240)1 C(Appendix)WB 47 Sn( A \236 Supported XML Schema Constructs)92 1 TN()EA()BN}if -/OU t D /Cb Db D NP Ep ET -/Cb Db D /Ct [16#00 16#00 16#00] D /Cl [16#00 16#00 16#00] D /CL -1 D Ct Sc - -/Ba f D /BO 0 D Bs -/UR (/home/boris/work/xsd/xsd/documentation/cxx/parser/guide/index.xhtml) D -/Ti (C++/Parser Mapping Getting Started Guide) D -/Au () D -/Df f D -/ME [] D - -NP RC ZF -()1 Sl()WB 0 Sn( - -)BR()WB 1 Sn( )BR()WB 2 Sn( - - - )0 1 0 H(Preface)WB 49 Sn()WB 3 Sn()EA()EH( - - )0 2 1 H(About)WB 50 Sn()WB 4 Sn( This Docu)HY(ment)YH()EA()EH( - - )0 P(The goal of this docu)HY(ment)YH( is to provide you with an under)HY(stand)HY(ing)YH( of - the C++/Parser program)HY(ming)YH( model and allow you to effi)HY(ciently)YH( eval)HY(u)HY(ate)YH( - XSD against your project's tech)HY(ni)HY(cal)YH( require)HY(ments)YH(. As such, this - docu)HY(ment)YH( is intended for C++ devel)HY(op)HY(ers)YH( and soft)HY(ware)YH( archi)HY(tects)YH( - who are looking for an XML process)HY(ing)YH( solu)HY(tion)YH(. Prior expe)HY(ri)HY(ence)YH( - with XML and C++ is required to under)HY(stand)YH( this docu)HY(ment)YH(. Basic - under)HY(stand)HY(ing)YH( of XML Schema is advan)HY(ta)HY(geous)YH( but not expected - or required. - )EP( - - - )0 2 2 H(More)WB 51 Sn()WB 5 Sn( Infor)HY(ma)HY(tion)YH()EA()EH( - - )0 P(Beyond this guide, you may also find the follow)HY(ing)YH( sources of - infor)HY(ma)HY(tion)YH( useful:)EP( - - )UL( )-1 LI()R1 2 A(XSD - Compiler Command Line Manual)EA( - - )-1 LI(The )SM(exam)HY(ples)YH(/cxx/parser/)ES( direc)HY(tory)YH( in the XSD - distri)HY(bu)HY(tion)YH( contains a collec)HY(tion)YH( of exam)HY(ples)YH( and a README - file with an overview of each example. - - )-1 LI(The )SM(README)ES( file in the XSD distri)HY(bu)HY(tion)YH( explains - how to compile the exam)HY(ples)YH( on various plat)HY(forms)YH(. - - )-1 LI(The )R2 2 A(xsd-users)EA( - mailing list is the place to ask tech)HY(ni)HY(cal)YH( ques)HY(tions)YH( about XSD and the C++/Parser mapping. - Further)HY(more)YH(, the )R3 2 A(archives)EA( - may already have answers to some of your ques)HY(tions)YH(. - - )LU( - - - - )0 1 3 H(1)WB 52 Sn()WB 6 Sn( Intro)HY(duc)HY(tion)YH()EA()EH( - - )0 P(Welcome to CodeSyn)HY(the)HY(sis)YH( XSD and the C++/Parser mapping. XSD is a - cross-plat)HY(form)YH( W3C XML Schema to C++ data binding compiler. C++/Parser - is a W3C XML Schema to C++ mapping that repre)HY(sents)YH( an XML vocab)HY(u)HY(lary)YH( - as a set of parser skele)HY(tons)YH( which you can imple)HY(ment)YH( to perform XML - process)HY(ing)YH( as required by your appli)HY(ca)HY(tion)YH( logic. - )EP( - - )0 2 4 H(1.1)WB 53 Sn()WB 7 Sn( Mapping Overview)EA()EH( - - )0 P(The C++/Parser mapping provides event-driven, stream-oriented - XML parsing, XML Schema vali)HY(da)HY(tion)YH(, and C++ data binding. It was - specif)HY(i)HY(cally)YH( designed and opti)HY(mized)YH( for high perfor)HY(mance)YH( and - small foot)HY(print)YH(. Based on the static anal)HY(y)HY(sis)YH( of the schemas, XSD - gener)HY(ates)YH( compact, highly-opti)HY(mized)YH( hier)HY(ar)HY(chi)HY(cal)YH( state machines - that combine data extrac)HY(tion)YH(, vali)HY(da)HY(tion)YH(, and even dispatch)HY(ing)YH( - in a single step. As a result, the gener)HY(ated)YH( code is typi)HY(cally)YH( - 2-10 times faster than general-purpose vali)HY(dat)HY(ing)YH( XML parsers - while main)HY(tain)HY(ing)YH( the lowest static and dynamic memory foot)HY(prints)YH(. - )EP( - - )0 P(To speed up appli)HY(ca)HY(tion)YH( devel)HY(op)HY(ment)YH(, the C++/Parser mapping - can be instructed to gener)HY(ate)YH( sample parser imple)HY(men)HY(ta)HY(tions)YH( - and a test driver which can then be filled with the appli)HY(ca)HY(tion)YH( - logic code. The mapping also provides a wide range of - mech)HY(a)HY(nisms)YH( for control)HY(ling)YH( and customiz)HY(ing)YH( the gener)HY(ated)YH( code.)EP( - - )0 P(The next chapter shows how to create a simple appli)HY(ca)HY(tion)YH( that uses - the C++/Parser mapping to parse, vali)HY(date)YH(, and extract data from a - simple XML docu)HY(ment)YH(. The follow)HY(ing)YH( chap)HY(ters)YH( show how to - use the C++/Parser mapping in more detail.)EP( - - )0 2 5 H(1.2)WB 54 Sn()WB 8 Sn( Bene)HY(fits)YH()EA()EH( - - )0 P(Tradi)HY(tional)YH( XML access APIs such as Docu)HY(ment)YH( Object Model \201DOM\202 - or Simple API for XML \201SAX\202 have a number of draw)HY(backs)YH( that - make them less suit)HY(able)YH( for creat)HY(ing)YH( robust and main)HY(tain)HY(able)YH( - XML process)HY(ing)YH( appli)HY(ca)HY(tions)YH(. These draw)HY(backs)YH( include: - )EP( - - )UL( )-1 LI(Generic repre)HY(sen)HY(ta)HY(tion)YH( of XML in terms of elements, attributes, - and text forces an appli)HY(ca)HY(tion)YH( devel)HY(oper)YH( to write a substan)HY(tial)YH( - amount of bridg)HY(ing)YH( code that iden)HY(ti)HY(fies)YH( and trans)HY(forms)YH( pieces - of infor)HY(ma)HY(tion)YH( encoded in XML to a repre)HY(sen)HY(ta)HY(tion)YH( more suit)HY(able)YH( - for consump)HY(tion)YH( by the appli)HY(ca)HY(tion)YH( logic. - - )-1 LI(String-based flow control defers error detec)HY(tion)YH( to runtime. - It also reduces code read)HY(abil)HY(ity)YH( and main)HY(tain)HY(abil)HY(ity)YH(. - - )-1 LI(Lack of type safety because the data is repre)HY(sented)YH( - as text. - - )-1 LI(Result)HY(ing)YH( appli)HY(ca)HY(tions)YH( are hard to debug, change, and - main)HY(tain)YH(. - )LU( - - )0 P(In contrast, stat)HY(i)HY(cally)YH(-typed, vocab)HY(u)HY(lary)YH(-specific parser - skele)HY(tons)YH( produced by the C++/Parser mapping allow you to - operate in your domain terms instead of the generic elements, - attributes, and text. Static typing helps catch errors at - compile-time rather than at run-time. Auto)HY(matic)YH( code gener)HY(a)HY(tion)YH( - frees you for more inter)HY(est)HY(ing)YH( tasks \201such as doing some)HY(thing)YH( - useful with the infor)HY(ma)HY(tion)YH( stored in the XML docu)HY(ments)YH(\202 and - mini)HY(mizes)YH( the effort needed to adapt your appli)HY(ca)HY(tions)YH( to - changes in the docu)HY(ment)YH( struc)HY(ture)YH(. To summa)HY(rize)YH(, the C++/Parser - mapping has the follow)HY(ing)YH( key advan)HY(tages)YH( over generic XML - access APIs:)EP( - - )UL( )-1 LI()BD(Ease of use.)ES( The gener)HY(ated)YH( code hides all the complex)HY(ity)YH( - asso)HY(ci)HY(ated)YH( with recre)HY(at)HY(ing)YH( the docu)HY(ment)YH( struc)HY(ture)YH(, main)HY(tain)HY(ing)YH( the - dispatch state, and convert)HY(ing)YH( the data from the text repre)HY(sen)HY(ta)HY(tion)YH( - to data types suit)HY(able)YH( for manip)HY(u)HY(la)HY(tion)YH( by the appli)HY(ca)HY(tion)YH( logic. - Parser skele)HY(tons)YH( also provide a conve)HY(nient)YH( mech)HY(a)HY(nism)YH( for build)HY(ing)YH( - custom in-memory repre)HY(sen)HY(ta)HY(tions)YH(. - - )-1 LI()BD(Natural repre)HY(sen)HY(ta)HY(tion)YH(.)ES( The gener)HY(ated)YH( parser skele)HY(tons)YH( - imple)HY(ment)YH( parser call)HY(backs)YH( as virtual func)HY(tions)YH( with names - corre)HY(spond)HY(ing)YH( to elements and attributes in XML. As a result, - you process the XML data using your domain vocab)HY(u)HY(lary)YH( instead - of generic elements, attributes, and text. - - - )-1 LI()BD(Concise code.)ES( With a sepa)HY(rate)YH( parser skele)HY(ton)YH( for each - XML Schema type, the appli)HY(ca)HY(tion)YH( imple)HY(men)HY(ta)HY(tion)YH( is - simpler and thus easier to read and under)HY(stand)YH(. - - )-1 LI()BD(Safety.)ES( The XML data is deliv)HY(ered)YH( to parser call)HY(backs)YH( as - stat)HY(i)HY(cally)YH( typed objects. The parser call)HY(backs)YH( them)HY(selves)YH( are virtual - func)HY(tions)YH(. This helps catch program)HY(ming)YH( errors at compile-time - rather than at runtime. - - )-1 LI()BD(Main)HY(tain)HY(abil)HY(ity)YH(.)ES( Auto)HY(matic)YH( code gener)HY(a)HY(tion)YH( mini)HY(mizes)YH( the - effort needed to adapt the appli)HY(ca)HY(tion)YH( to changes in the - docu)HY(ment)YH( struc)HY(ture)YH(. With static typing, the C++ compiler - can pin-point the places in the appli)HY(ca)HY(tion)YH( code that need to be - changed. - - )-1 LI()BD(Effi)HY(ciency)YH(.)ES( The gener)HY(ated)YH( parser skele)HY(tons)YH( combine - data extrac)HY(tion)YH(, vali)HY(da)HY(tion)YH(, and even dispatch)HY(ing)YH( in a single - step. This makes them much more effi)HY(cient)YH( than tradi)HY(tional)YH( - archi)HY(tec)HY(tures)YH( with sepa)HY(rate)YH( stages for vali)HY(da)HY(tion)YH( and data - extrac)HY(tion)YH(/dispatch. - )LU( - - - - - )0 1 6 H(2)WB 55 Sn()WB 9 Sn( Hello World Example)EA()EH( - - )0 P(In this chapter we will examine how to parse a very simple XML - docu)HY(ment)YH( using the XSD-gener)HY(ated)YH( C++/Parser skele)HY(tons)YH(. - The code presented in this chapter is based on the )SM(hello)ES( - example which can be found in the )SM(exam)HY(ples)YH(/cxx/parser/)ES( - direc)HY(tory)YH( of the XSD distri)HY(bu)HY(tion)YH(.)EP( - - )0 2 7 H(2.1)WB 56 Sn()WB 10 Sn( Writing XML Docu)HY(ment)YH( and Schema)EA()EH( - - )0 P(First, we need to get an idea about the struc)HY(ture)YH( - of the XML docu)HY(ments)YH( we are going to process. Our - )SM(hello.xml)ES(, for example, could look like this:)EP( - - ) 10 28 PR( - - - Hello - - sun - moon - world - -)RP( - - )0 P(Then we can write a descrip)HY(tion)YH( of the above XML in the - XML Schema language and save it into )SM(hello.xsd)ES(:)EP( - - ) 13 70 PR( - - - - - - - - - - - -)RP( - - )0 P(Even if you are not famil)HY(iar)YH( with XML Schema, it - should be easy to connect decla)HY(ra)HY(tions)YH( in )SM(hello.xsd)ES( - to elements in )SM(hello.xml)ES(. The )SM(hello)ES( type - is defined as a sequence of the nested )SM(greet)HY(ing)YH()ES( and - )SM(name)ES( elements. Note that the term sequence in XML - Schema means that elements should appear in a partic)HY(u)HY(lar)YH( order - as opposed to appear)HY(ing)YH( multi)HY(ple)YH( times. The )SM(name)ES( - element has its )SM(maxOc)HY(curs)YH()ES( prop)HY(erty)YH( set to - )SM(unbounded)ES( which means it can appear multi)HY(ple)YH( times - in an XML docu)HY(ment)YH(. Finally, the glob)HY(ally)YH(-defined )SM(hello)ES( - element prescribes the root element for our vocab)HY(u)HY(lary)YH(. For an - easily-approach)HY(able)YH( intro)HY(duc)HY(tion)YH( to XML Schema refer to - )R4 2 A(XML Schema Part 0: - Primer)EA(.)EP( - - )0 P(The above schema is a spec)HY(i)HY(fi)HY(ca)HY(tion)YH( of our XML vocab)HY(u)HY(lary)YH(; it tells - every)HY(body)YH( what valid docu)HY(ments)YH( of our XML-based language should look - like. The next step is to compile this schema to gener)HY(ate)YH( - the object model and parsing func)HY(tions)YH(.)EP( - - )0 2 8 H(2.2)WB 57 Sn()WB 11 Sn( Trans)HY(lat)HY(ing)YH( Schema to C++)EA()EH( - - )0 P(Now we are ready to trans)HY(late)YH( our )SM(hello.xsd)ES( to C++ parser - skele)HY(tons)YH(. To do this we invoke the XSD compiler from a termi)HY(nal)YH( - \201UNIX\202 or a command prompt \201Windows\202: - )EP( - - ) 1 45 PR($ xsd cxx-parser --xml-parser expat hello.xsd)RP( - - )0 P(The )SM(--xml-parser)ES( option indi)HY(cates)YH( that we want to - use Expat as the under)HY(ly)HY(ing)YH( XML parser \201see )0 25 1 A(Section - 5.2, "Under)HY(ly)HY(ing)YH( XML Parser")25 0 TN TL()Ec /AF f D(\202. The XSD compiler produces two - C++ files: )SM(hello-pskel.hxx)ES( and )SM(hello-pskel.cxx)ES(. - The follow)HY(ing)YH( code frag)HY(ment)YH( is taken from )SM(hello-pskel.hxx)ES(; - it should give you an idea about what gets gener)HY(ated)YH(: - )EP( - - ) 32 60 PR(class hello_pskel -{ -public: - // Parser callbacks. Override them in your implementation. - // - virtual void - pre \201\202; - - virtual void - greeting \201const std::string&\202; - - virtual void - name \201const std::string&\202; - - virtual void - post_hello \201\202; - - // Parser construction API. - // - void - greeting_parser \201xml_schema::string_pskel&\202; - - void - name_parser \201xml_schema::string_pskel&\202; - - void - parsers \201xml_schema::string_pskel& /* greeting */, - xml_schema::string_pskel& /* name */\202; - -private: - ...)WR( -};)RP( - - )0 P(The first four member func)HY(tions)YH( shown above are called parser - call)HY(backs)YH(. You would normally over)HY(ride)YH( them in your imple)HY(men)HY(ta)HY(tion)YH( - of the parser to do some)HY(thing)YH( useful. Let's go through all of - them one by one.)EP( - - )0 P(The )SM(pre\201\202)ES( func)HY(tion)YH( is an initial)HY(iza)HY(tion)YH( call)HY(back)YH(. It is - called when a new element of type )SM(hello)ES( is about - to be parsed. You would normally use this func)HY(tion)YH( to allo)HY(cate)YH( a new - instance of the result)HY(ing)YH( type or clear accu)HY(mu)HY(la)HY(tors)YH( that are used - to gather infor)HY(ma)HY(tion)YH( during parsing. The default imple)HY(men)HY(ta)HY(tion)YH( - of this func)HY(tion)YH( does nothing.)EP( - - )0 P(The )SM(post_hello\201\202)ES( func)HY(tion)YH( is a final)HY(iza)HY(tion)YH( call)HY(back)YH(. Its - name is constructed by adding the parser skele)HY(ton)YH( name to the - )SM(post_)ES( prefix. The final)HY(iza)HY(tion)YH( call)HY(back)YH( is called when - parsing of the element is complete and the result, if any, should - be returned. Note that in our case the return type of - )SM(post_hello\201\202)ES( is )SM(void)ES( which means there - is nothing to return. More on parser return types later. - )EP( - - )0 P(You may be wonder)HY(ing)YH( why the final)HY(iza)HY(tion)YH( call)HY(back)YH( is called - )SM(post_hello\201\202)ES( instead of )SM(post\201\202)ES( just - like )SM(pre\201\202)ES(. The reason for this is that - final)HY(iza)HY(tion)YH( call)HY(backs)YH( can have differ)HY(ent)YH( return types and - result in func)HY(tion)YH( signa)HY(ture)YH( clashes across inher)HY(i)HY(tance)YH( - hier)HY(ar)HY(chies)YH(. To prevent this the signa)HY(tures)YH( of final)HY(iza)HY(tion)YH( - call)HY(backs)YH( are made unique by adding the type name to their names.)EP( - - )0 P(The )SM(greet)HY(ing)YH(\201\202)ES( and )SM(name\201\202)ES( func)HY(tions)YH( are - called when the )SM(greet)HY(ing)YH()ES( and )SM(name)ES( elements - have been parsed, respec)HY(tively)YH(. Their argu)HY(ments)YH( are of type - )SM(std::string)ES( and contain the data extracted from XML.)EP( - - )0 P(The last three func)HY(tions)YH( are for connect)HY(ing)YH( parsers to each other. - For example, there is a prede)HY(fined)YH( parser for built-in XML Schema type - )SM(string)ES( in the XSD runtime. We will be using - it to parse the contents of )SM(greet)HY(ing)YH()ES( and - )SM(name)ES( elements, as shown in the next section.)EP( - - )0 2 9 H(2.3)WB 58 Sn()WB 12 Sn( Imple)HY(ment)HY(ing)YH( Appli)HY(ca)HY(tion)YH( Logic)EA()EH( - - )0 P(At this point we have all the parts we need to do some)HY(thing)YH( useful - with the infor)HY(ma)HY(tion)YH( stored in our XML docu)HY(ment)YH(. The first step is - to imple)HY(ment)YH( the parser: - )EP( - - ) 21 60 PR(#include -#include "hello-pskel.hxx" - -class hello_pimpl: public hello_pskel -{ -public: - virtual void - greeting \201const std::string& g\202 - { - greeting_ = g; - } - - virtual void - name \201const std::string& n\202 - { - std::cout << greeting_ << ", " << n << "!" << std::endl; - } - -private: - std::string greeting_; -};)RP( - - )0 P(We left both )SM(pre\201\202)ES( and )SM(post_hello\201\202)ES( with the - default imple)HY(men)HY(ta)HY(tions)YH(; we don't have anything to initial)HY(ize)YH( or - return. The rest is pretty straight)HY(for)HY(ward)YH(: we store the greet)HY(ing)YH( - in a member vari)HY(able)YH( and later, when parsing names, use it to - say hello.)EP( - - )0 P(An obser)HY(vant)YH( reader my ask what happens if the )SM(name)ES( - element comes before )SM(greet)HY(ing)YH()ES(? Don't we need to - make sure )SM(greet)HY(ing)YH(_)ES( was initial)HY(ized)YH( and report - an error other)HY(wise)YH(? The answer is no, we don't have to do - any of this. The )SM(hello_pskel)ES( parser skele)HY(ton)YH( - performs vali)HY(da)HY(tion)YH( of XML accord)HY(ing)YH( to the schema from which - it was gener)HY(ated)YH(. As a result, it will check the order - of the )SM(greet)HY(ing)YH()ES( and )SM(name)ES( elements - and report an error if it is violated.)EP( - - )0 P(Now it is time to put this parser imple)HY(men)HY(ta)HY(tion)YH( to work:)EP( - - ) 29 50 PR(using namespace std; - -int -main \201int argc, char* argv[]\202 -{ - try - { - // Construct the parser. - // - xml_schema::string_pimpl string_p; - hello_pimpl hello_p; - - hello_p.greeting_parser \201string_p\202; - hello_p.name_parser \201string_p\202; - - // Parse the XML instance. - // - xml_schema::document doc_p \201hello_p, "hello"\202; - - hello_p.pre \201\202; - doc_p.parse \201argv[1]\202; - hello_p.post_hello \201\202; - } - catch \201const xml_schema::exception& e\202 - { - cerr << e << endl; - return 1; - } -})RP( - - )0 P(The first part of this code snippet instan)HY(ti)HY(ates)YH( indi)HY(vid)HY(ual)YH( parsers - and assem)HY(bles)YH( them into a complete vocab)HY(u)HY(lary)YH( parser. - )SM(xml_schema::string_pimpl)ES( is an imple)HY(men)HY(ta)HY(tion)YH( of a parser - for built-in XML Schema type )SM(string)ES(. It is provided by - the XSD runtime along with parsers for other built-in types \201for - more infor)HY(ma)HY(tion)YH( on the built-in parsers see )0 28 1 A(Chapter 6, - "Built-In XML Schema Type Parsers")28 0 TN TL()Ec /AF f D(\202. We use )SM(string_pimpl)ES( - to parse the )SM(greet)HY(ing)YH()ES( and )SM(name)ES( elements as - indi)HY(cated)YH( by the calls to )SM(greet)HY(ing)YH(_parser\201\202)ES( and - )SM(name_parser\201\202)ES(. - )EP( - - )0 P(Then we instan)HY(ti)HY(ate)YH( a docu)HY(ment)YH( parser \201)SM(doc_p)ES(\202. The - first argu)HY(ment)YH( to its construc)HY(tor)YH( is the parser for - the root element \201)SM(hello_p)ES( in our case\202. The - second argu)HY(ment)YH( is the root element name. - )EP( - - )0 P(The final piece is the calls to )SM(pre\201\202)ES(, )SM(parse\201\202)ES(, - and )SM(post_hello\201\202)ES(. The call to )SM(parse\201\202)ES( - perform the actual XML parsing while the calls to )SM(pre\201\202)ES( and - )SM(post_hello\201\202)ES( make sure that the parser for the root - element can perform proper initial)HY(iza)HY(tion)YH( and cleanup.)EP( - - )0 P(While our parser imple)HY(men)HY(ta)HY(tion)YH( and test driver are pretty small and - easy to write by hand, for bigger XML vocab)HY(u)HY(lar)HY(ies)YH( it can be a - substan)HY(tial)YH( effort. To help with this task XSD can auto)HY(mat)HY(i)HY(cally)YH( - gener)HY(ate)YH( sample parser imple)HY(men)HY(ta)HY(tions)YH( and a test driver from your - schemas. You can request the gener)HY(a)HY(tion)YH( of a sample imple)HY(men)HY(ta)HY(tion)YH( with - empty func)HY(tion)YH( bodies by spec)HY(i)HY(fy)HY(ing)YH( the )SM(--gener)HY(ate)YH(-noop-impl)ES( - option. Or you can gener)HY(ate)YH( a sample imple)HY(men)HY(ta)HY(tion)YH( that prints the - data store in XML by using the )SM(--gener)HY(ate)YH(-print-impl)ES( - option. To request the gener)HY(a)HY(tion)YH( of a test driver you can use the - )SM(--gener)HY(ate)YH(-test-driver)ES( option. For more infor)HY(ma)HY(tion)YH( - on these options refer to the - )R1 2 A(XSD - Compiler Command Line Manual)EA(. The )SM('gener)HY(ated)YH(')ES( example - in the XSD distri)HY(bu)HY(tion)YH( shows the sample imple)HY(men)HY(ta)HY(tion)YH( gener)HY(a)HY(tion)YH( - feature in action.)EP( - - - )0 2 10 H(2.4)WB 59 Sn()WB 13 Sn( Compil)HY(ing)YH( and Running)EA()EH( - - )0 P(After saving all the parts from the previ)HY(ous)YH( section in - )SM(driver.cxx)ES(, we are ready to compile our first - appli)HY(ca)HY(tion)YH( and run it on the test XML docu)HY(ment)YH(. On a UNIX - system this can be done with the follow)HY(ing)YH( commands: - )EP( - - ) 6 48 PR($ c++ -I.../libxsd -c driver.cxx hello-pskel.cxx -$ c++ -o driver driver.o hello-pskel.o -lexpat -$ ./driver hello.xml -Hello, sun! -Hello, moon! -Hello, world!)RP( - - )0 P(Here )SM(.../libxsd)ES( repre)HY(sents)YH( the path to the - )SM(libxsd)ES( direc)HY(tory)YH( in the XSD distri)HY(bu)HY(tion)YH(. - We can also test the error handling. To test XML well-formed)HY(ness)YH( - check)HY(ing)YH(, we can try to parse )SM(hello-pskel.hxx)ES(:)EP( - - ) 2 52 PR($ ./driver hello-pskel.hxx -hello-pskel.hxx:1:0: not well-formed \201invalid token\202)RP( - - )0 P(We can also try to parse a valid XML but not from our - vocab)HY(u)HY(lary)YH(, for example )SM(hello.xsd)ES(:)EP( - - ) 3 50 PR($ ./driver hello.xsd -hello.xsd:2:0: expected element 'hello' instead of -'http://www.w3.org/2001/XMLSchema#schema')RP( - - - - - - )0 1 11 H(3)WB 60 Sn()WB 14 Sn( Parser Skele)HY(tons)YH()EA()EH( - - )0 P(As we have seen in the previ)HY(ous)YH( chapter, the XSD compiler gener)HY(ates)YH( - a parser skele)HY(ton)YH( class for each type defined in XML Schema. In - this chapter we will take a closer look at differ)HY(ent)YH( func)HY(tions)YH( - that comprise a parser skele)HY(ton)YH( as well as the way to connect - our imple)HY(men)HY(ta)HY(tions)YH( of these parser skele)HY(tons)YH( to create a complete - parser.)EP( - - )0 P(In this and subse)HY(quent)YH( chap)HY(ters)YH( we will use the follow)HY(ing)YH( schema - that describes a collec)HY(tion)YH( of person records. We save it in - )SM(people.xsd)ES(:)EP( - - ) 28 69 PR( - - - - - - - - - - - - - - - - - - - - - - - - - - -)RP( - - )0 P(A sample XML instance to go along with this schema is saved - in )SM(people.xml)ES(:)EP( - - ) 15 33 PR( - - - John - Doe - male - 32 - - - Jane - Doe - female - 28 - -)RP( - - )0 P(Compil)HY(ing)YH( )SM(people.xsd)ES( with the XSD compiler results - in three parser skele)HY(tons)YH( being gener)HY(ated)YH(: )SM(gender_pskel)ES(, - )SM(person_pskel)ES(, and )SM(people_pskel)ES(. We are going - to examine and imple)HY(ment)YH( each of them in the subse)HY(quent)YH( sections.)EP( - - )0 2 12 H(3.1)WB 61 Sn()WB 15 Sn( Imple)HY(ment)HY(ing)YH( the Gender Parser)EA()EH( - - )0 P(The gener)HY(ated)YH( )SM(gender_pskel)ES( parser skele)HY(ton)YH( looks like - this:)EP( - - ) 11 60 PR(class gender_pskel: public virtual xml_schema::string_pskel -{ -public: - // Parser callbacks. Override them in your implementation. - // - virtual void - pre \201\202; - - virtual void - post_gender \201\202; -};)RP( - - )0 P(Notice that )SM(gender_pskel)ES( inher)HY(its)YH( from - )SM(xml_schema::string_skel)ES( which is a parser skele)HY(ton)YH( - for built-in XML Schema type )SM(string)ES( and is - prede)HY(fined)YH( in the XSD runtime library. This is an example - of the general rule that parser skele)HY(tons)YH( follow: if a type - in XML Schema inher)HY(its)YH( from another then there will be an - equiv)HY(a)HY(lent)YH( inher)HY(i)HY(tance)YH( between the corre)HY(spond)HY(ing)YH( parser - skele)HY(ton)YH( classes.)EP( - - )0 P(The )SM(pre\201\202)ES( and )SM(post_gender\201\202)ES( call)HY(backs)YH( - should look famil)HY(iar)YH( from the previ)HY(ous)YH( chapter. Let's now - imple)HY(ment)YH( the parser. Our imple)HY(men)HY(ta)HY(tion)YH( will simply print - the gender to )SM(cout)ES(:)EP( - - - ) 11 51 PR(class gender_pimpl: public gender_pskel, - public xml_schema::string_pimpl -{ -public: - virtual void - post_gender \201\202 - { - std::string s = post_string \201\202; - cout << "gender: " << s << endl; - } -};)RP( - - )0 P(While the code is quite short, there is a lot going on. First, - notice that we are inher)HY(it)HY(ing)YH( from )SM(gender_pskel)ES( )EM(and)ES( - from )SM(xml_schema::string_pimpl)ES(. We've encoun)HY(tered)YH( - )SM(xml_schema::string_pimpl)ES( already; it is an - imple)HY(men)HY(ta)HY(tion)YH( of the )SM(xml_schema::string_pskel)ES( parser - skele)HY(ton)YH( for built-in XML Schema type )SM(string)ES(.)EP( - - )0 P(This is another common theme in the C++/Parser program)HY(ming)YH( model: - reusing imple)HY(men)HY(ta)HY(tions)YH( of the base parsers in the derived ones with - the C++ mixin idiom. In our case, )SM(string_pimpl)ES( will - do all the dirty work of extract)HY(ing)YH( the data and we can just get - it at the end with the call to )SM(post_string\201\202)ES(.)EP( - - )0 P(In case you are curious, here is what - )SM(xml_schema::string_pskel)ES( and - )SM(xml_schema::string_pimpl)ES( look like:)EP( - - ) 25 49 PR(namespace xml_schema -{ - class string_pskel: public simple_content - { - public: - virtual std::string - post_string \201\202 = 0; - }; - - class string_pimpl: public virtual string_pskel - { - public: - virtual void - _pre \201\202; - - virtual void - _characters \201const xml_schema::ro_string&\202; - - virtual std::string - post_string \201\202; - - protected: - std::string str_; - }; -})RP( - - )0 P(There are three new pieces in this code that we haven't seen yet. - They are the )SM(simple_content)ES( class as well as - the )SM(_pre\201\202)ES( and )SM(_char)HY(ac)HY(ters)YH(\201\202)ES( func)HY(tions)YH(. - The )SM(simple_content)ES( class is defined in the XSD - runtime and is a base class for all parser skele)HY(tons)YH( that conform - to the simple content model in XML Schema. Types with the - simple content model cannot have nested elements\236only text - and attributes. There is also the )SM(complex_content)ES( - class which corre)HY(sponds)YH( to the complex content mode \201types with - nested elements, for example, )SM(person)ES( from - )SM(people.xsd)ES(\202.)EP( - - )0 P(The )SM(_pre\201\202)ES( func)HY(tion)YH( is a parser call)HY(back)YH(. Remem)HY(ber)YH( we - talked about the )SM(pre\201\202)ES( and )SM(post_*\201\202)ES( call)HY(backs)YH( - in the previ)HY(ous)YH( chapter? There are actu)HY(ally)YH( two more call)HY(backs)YH( - with similar roles: )SM(_pre\201\202)ES( and )SM(_post \201\202)ES(. - As a result, each parser skele)HY(ton)YH( has four special call)HY(backs)YH(:)EP( - - ) 11 15 PR( virtual void - pre \201\202; - - virtual void - _pre \201\202; - - virtual void - _post \201\202; - - virtual void - post_name \201\202;)RP( - - )0 P()SM(pre\201\202)ES( and )SM(_pre\201\202)ES( are initial)HY(iza)HY(tion)YH( - call)HY(backs)YH(. They get called in that order before a new instance of the type - is about to be parsed. The differ)HY(ence)YH( between )SM(pre\201\202)ES( and - )SM(_pre\201\202)ES( is conven)HY(tional)YH(: )SM(pre\201\202)ES( can - be completely over)HY(rid)HY(den)YH( by a derived parser. The derived - parser can also over)HY(ride)YH( )SM(_pre\201\202)ES( but has to always call - the orig)HY(i)HY(nal)YH( version. This allows you to parti)HY(tion)YH( initial)HY(iza)HY(tion)YH( - into customiz)HY(able)YH( and required parts.)EP( - - )0 P(Simi)HY(larly)YH(, )SM(_post\201\202)ES( and )SM(post_name\201\202)ES( are - final)HY(iza)HY(tion)YH( call)HY(backs)YH( with exactly the same seman)HY(tics)YH(: - )SM(post_name\201\202)ES( can be completely over)HY(rid)HY(den)YH( by the derived - parser while the orig)HY(i)HY(nal)YH( )SM(_post\201\202)ES( should always be called. - )EP( - - )0 P(The final bit we need to discuss in this section is the - )SM(_char)HY(ac)HY(ters)YH(\201\202)ES( func)HY(tion)YH(. As you might have guessed, it - is also a call)HY(back)YH(. A low-level one that deliv)HY(ers)YH( raw char)HY(ac)HY(ter)YH( content - for the type being parsed. You will seldom need to use this call)HY(back)YH( - directly. Using imple)HY(men)HY(ta)HY(tions)YH( for the built-in parsers provided by - the XSD runtime is usually a simpler and more conve)HY(nient)YH( - alter)HY(na)HY(tive)YH(.)EP( - - )0 P(At this point you might be wonder)HY(ing)YH( why some )SM(post_*\201\202)ES( - call)HY(backs)YH(, for example )SM(post_string\201\202)ES(, return some data - while others, for example )SM(post_gender\201\202)ES(, have - )SM(void)ES( as a return type. This is a valid concern - and it will be addressed in the next chapter.)EP( - - )0 2 13 H(3.2)WB 62 Sn()WB 16 Sn( Imple)HY(ment)HY(ing)YH( the Person Parser)EA()EH( - - )0 P(The gener)HY(ated)YH( )SM(person_pskel)ES( parser skele)HY(ton)YH( looks like - this:)EP( - - ) 43 60 PR(class person_pskel: public xml_schema::complex_content -{ -public: - // Parser callbacks. Override them in your implementation. - // - virtual void - pre \201\202; - - virtual void - first_name \201const std::string&\202; - - virtual void - last_name \201const std::string&\202; - - virtual void - gender \201\202; - - virtual void - age \201short\202; - - virtual void - post_person \201\202; - - // Parser construction API. - // - void - first_name_parser \201xml_schema::string_pskel&\202; - - void - last_name_parser \201xml_schema::string_pskel&\202; -)WR( - void - gender_parser \201gender_pskel&\202; - - void - age_parser \201xml_schema::short_pskel&\202; - - void - parsers \201xml_schema::string_pskel& /* first-name */, - xml_schema::string_pskel& /* last-name */, - gender_pskel& /* gender */, - xml_schema::short_pskel& /* age */\202; -};)RP( - - - )0 P(As you can see, we have a parser call)HY(back)YH( for each of the nested - elements found in the )SM(person)ES( XML Schema type. - The imple)HY(men)HY(ta)HY(tion)YH( of this parser is straight)HY(for)HY(ward)YH(:)EP( - - ) 21 39 PR(class person_pimpl: public person_pskel -{ -public: - virtual void - first_name \201const std::string& n\202 - { - cout << "first: " << f << endl; - } - - virtual void - last_name \201const std::string& l\202 - { - cout << "last: " << l << endl; - } - - virtual void - age \201short a\202 - { - cout << "age: " << a << endl; - } -};)RP( - - )0 P(Notice that we didn't over)HY(ride)YH( the )SM(gender\201\202)ES( call)HY(back)YH( - because all the print)HY(ing)YH( is done by )SM(gender_pimpl)ES(.)EP( - - - )0 2 14 H(3.3)WB 63 Sn()WB 17 Sn( Imple)HY(ment)HY(ing)YH( the People Parser)EA()EH( - - )0 P(The gener)HY(ated)YH( )SM(people_pskel)ES( parser skele)HY(ton)YH( looks like - this:)EP( - - ) 22 60 PR(class people_pskel: public xml_schema::complex_content -{ -public: - // Parser callbacks. Override them in your implementation. - // - virtual void - pre \201\202; - - virtual void - person \201\202; - - virtual void - post_people \201\202; - - // Parser construction API. - // - void - person_parser \201person_pskel&\202; - - void - parsers \201person_pskel& /* person */\202; -};)RP( - - )0 P(The )SM(person\201\202)ES( call)HY(back)YH( will be called after parsing each - )SM(person)ES( element. While )SM(person_pimpl)ES( does - all the print)HY(ing)YH(, one useful thing we can do in this call)HY(back)YH( is to - print an extra newline after each person record so that our - output is more read)HY(able)YH(:)EP( - - ) 9 39 PR(class people_pimpl: public people_pskel -{ -public: - virtual void - person \201\202 - { - cout << endl; - } -};)RP( - - )0 P(Now it is time to put every)HY(thing)YH( together.)EP( - - - )0 2 15 H(3.4)WB 64 Sn()WB 18 Sn( Connect)HY(ing)YH( the Parsers Together)EA()EH( - - )0 P(At this point we have all the indi)HY(vid)HY(ual)YH( parsers imple)HY(mented)YH( - and can proceed to assem)HY(ble)YH( them into a complete parser - for our XML vocab)HY(u)HY(lary)YH(. The first step is to instan)HY(ti)HY(ate)YH( - all the indi)HY(vid)HY(ual)YH( parsers that we will need:)EP( - - ) 6 34 PR(xml_schema::short_pimpl short_p; -xml_schema::string_pimpl string_p; - -gender_pimpl gender_p; -person_pimpl person_p; -people_pimpl people_p;)RP( - - )0 P(Notice that our schema uses two built-in XML Schema types: - )SM(string)ES( for the )SM(first-name)ES( and - )SM(last-name)ES( elements as well as )SM(short)ES( - for )SM(age)ES(. We will use prede)HY(fined)YH( parsers that - come with the XSD runtime to handle these types. The next - step is to connect all the indi)HY(vid)HY(ual)YH( parsers. We do this - with the help of func)HY(tions)YH( defined in the parser - skele)HY(tons)YH( and marked with the "Parser Construc)HY(tion)YH( API" - comment. One way to do it is to connect each indi)HY(vid)HY(ual)YH( - parser by calling the )SM(*_parser\201\202)ES( func)HY(tions)YH(:)EP( - - ) 6 38 PR(person_p.first_name_parser \201string_p\202; -person_p.last_name_parser \201string_p\202; -person_p.gender_parser \201gender_p\202; -person_p.age_parser \201short_p\202; - -people_p.person_parser \201person_p\202;)RP( - - )0 P(You might be wonder)HY(ing)YH( what happens if you do not provide - a parser by not calling one of the )SM(*_parser\201\202)ES( func)HY(tions)YH(. - In that case the corre)HY(spond)HY(ing)YH( XML content will be skipped, - includ)HY(ing)YH( vali)HY(da)HY(tion)YH(. This is an effi)HY(cient)YH( way to ignore parts - of the docu)HY(ment)YH( that you are not inter)HY(ested)YH( in.)EP( - - - )0 P(An alter)HY(na)HY(tive)YH(, shorter, way to connect the parsers is by using - the )SM(parsers\201\202)ES( func)HY(tions)YH( which connects all the parsers - for a given type at once:)EP( - - ) 2 57 PR(person_p.parsers \201string_p, string_p, gender_p, short_p\202; -people_p.parsers \201person_p\202;)RP( - - )0 P(The follow)HY(ing)YH( figure illus)HY(trates)YH( the result)HY(ing)YH( connec)HY(tions)YH(. Notice - the corre)HY(spon)HY(dence)YH( between return types of the )SM(post_*\201\202)ES( - func)HY(tions)YH( and argu)HY(ment)YH( types of element call)HY(backs)YH( that are connected - by the arrows.)EP( - - - )2 Al()BR()0 0 IM()Ea()BR( - - )0 P(The last step is the construc)HY(tion)YH( of the docu)HY(ment)YH( parser and - invo)HY(ca)HY(tion)YH( of the complete parser on our sample XML instance:)EP( - - ) 5 48 PR(xml_schema::document doc_p \201people_p, "people"\202; - -people_p.pre \201\202; -doc_p.parse \201"people.xml"\202; -people_p.post_people \201\202;)RP( - - )0 P(Let's consider )SM(xml_schema::docu)HY(ment)YH()ES( in - more detail. While the exact defi)HY(ni)HY(tion)YH( of this class - varies depend)HY(ing)YH( on the under)HY(ly)HY(ing)YH( parser selected, - here is the common part:)EP( - - ) 24 56 PR(namespace xml_schema -{ - class document - { - public: - document \201xml_schema::parser_base&, - const std::string& root_element_name, - bool polymorphic = false\202; - - document \201xml_schema::parser_base&, - const std::string& root_element_namespace, - const std::string& root_element_name, - bool polymorphic = false\202; - - void - parse \201const std::string& file\202; - - void - parse \201std::istream&\202; - - ... - - }; -})RP( - - )0 P()SM(xml_schema::docu)HY(ment)YH()ES( is a root parser for - the vocab)HY(u)HY(lary)YH(. The first argu)HY(ment)YH( to its construc)HY(tors)YH( is the - parser for the type of the root element \201)SM(people_impl)ES( - in our case\202. Because a type parser is only concerned with - the element's content and not with the element's name, we need - to specify the root element's name some)HY(where)YH(. That's - what is passed as the second and third argu)HY(ments)YH( to the - )SM(docu)HY(ment)YH()ES('s construc)HY(tors)YH(.)EP( - - )0 P(There are also two over)HY(loaded)YH( )SM(parse\201\202)ES( func)HY(tions)YH( - defined in the )SM(docu)HY(ment)YH()ES( class \201there are actu)HY(ally)YH( - more but the others are specific to the under)HY(ly)HY(ing)YH( XML parser\202. - The first version parses a local file iden)HY(ti)HY(fied)YH( by a name. The - second version reads the data from an input stream. For more - infor)HY(ma)HY(tion)YH( on the )SM(xml_schema::docu)HY(ment)YH()ES( class - refer to )0 43 1 A(Chapter 7, "Docu)HY(ment)YH( Parser and Error - Handling")43 0 TN TL()Ec /AF f D(.)EP( - - )0 P(Let's now consider a step-by-step list of actions that happen - as we parse through )SM(people.xml)ES(. The content of - )SM(people.xml)ES( is repeated below for conve)HY(nience)YH(.)EP( - - ) 15 33 PR( - - - John - Doe - male - 32 - - - Jane - Doe - female - 28 - -)RP( - - - )4 OL( )-1 LI()SM(people_p.pre\201\202)ES( is called from - )SM(main\201\202)ES(. We did not provide any imple)HY(men)HY(ta)HY(tion)YH( - for this call)HY(back)YH( so this call is a no-op. - - )-1 LI()SM(doc_p.parse\201"people.xml"\202)ES( is called from - )SM(main\201\202)ES(. The parser opens the file and starts - parsing its content. - - )-1 LI(The parser encoun)HY(ters)YH( the root element. )SM(doc_p)ES( - veri)HY(fies)YH( that the root element is correct and calls - )SM(_pre\201\202)ES( on )SM(people_p)ES( which is also - a no-op. Parsing is now dele)HY(gated)YH( to )SM(people_p)ES(. - - )-1 LI(The parser encoun)HY(ters)YH( the )SM(person)ES( element. - )SM(people_p)ES( deter)HY(mines)YH( that )SM(person_p)ES( - is respon)HY(si)HY(ble)YH( for parsing this element. )SM(pre\201\202)ES( - and )SM(_pre\201\202)ES( call)HY(backs)YH( are called on )SM(person_p)ES(. - Parsing is now dele)HY(gated)YH( to )SM(person_p)ES(. - - )-1 LI(The parser encoun)HY(ters)YH( the )SM(first-name)ES( element. - )SM(person_p)ES( deter)HY(mines)YH( that )SM(string_p)ES( - is respon)HY(si)HY(ble)YH( for parsing this element. )SM(pre\201\202)ES( - and )SM(_pre\201\202)ES( call)HY(backs)YH( are called on )SM(string_p)ES(. - Parsing is now dele)HY(gated)YH( to )SM(string_p)ES(. - - )-1 LI(The parser encoun)HY(ters)YH( char)HY(ac)HY(ter)YH( content consist)HY(ing)YH( of - )SM("John")ES(. The )SM(_char)HY(ac)HY(ters)YH(\201\202)ES( call)HY(back)YH( is - called on )SM(string_p)ES(. - - )-1 LI(The parser encoun)HY(ters)YH( the end of )SM(first-name)ES( - element. The )SM(_post\201\202)ES( and )SM(post_string\201\202)ES( - call)HY(backs)YH( are called on )SM(string_p)ES(. The - )SM(first_name\201\202)ES( call)HY(back)YH( is called on )SM(person_p)ES( - with the return value of )SM(post_string\201\202)ES(. The - )SM(first_name\201\202)ES( imple)HY(men)HY(ta)HY(tion)YH( prints - )SM("first: John")ES( to )SM(cout)ES(. - Parsing is now returned to )SM(person_p)ES(. - - )-1 LI(Steps anal)HY(o)HY(gous)YH( to 5-7 are performed for the )SM(last-name)ES(, - )SM(gender)ES(, and )SM(age)ES( elements. - - )-1 LI(The parser encoun)HY(ters)YH( the end of )SM(person)ES( - element. The )SM(_post\201\202)ES( and )SM(post_person\201\202)ES( - call)HY(backs)YH( are called on )SM(person_p)ES(. The - )SM(person\201\202)ES( call)HY(back)YH( is called on )SM(people_p)ES(. - The )SM(person\201\202)ES( imple)HY(men)HY(ta)HY(tion)YH( prints a new line - to )SM(cout)ES(. Parsing is now returned to - )SM(people_p)ES(. - - )-1 LI(Steps 4-9 are performed for the second )SM(person)ES( - element. - - )-1 LI(The parser encoun)HY(ters)YH( the end of )SM(people)ES( - element. The )SM(_post\201\202)ES( call)HY(back)YH( is called on - )SM(people_p)ES(. The )SM(doc_p.parse\201"people.xml"\202)ES( - call returns to )SM(main\201\202)ES(. - - )-1 LI()SM(people_p.post_people\201\202)ES( is called from - )SM(main\201\202)ES( which is a no-op. - - )LO( - - - - - - )0 1 16 H(4)WB 65 Sn()WB 19 Sn( Type Maps)EA()EH( - - )0 P(There are many useful things you can do inside parser call)HY(backs)YH( as they - are right now. There are, however, times when you want to prop)HY(a)HY(gate)YH( - some infor)HY(ma)HY(tion)YH( from one parser to another or to the caller of the - parser. One common task that would greatly benefit from such a - possi)HY(bil)HY(ity)YH( is build)HY(ing)YH( a tree-like in-memory object model of the - data stored in XML. During execu)HY(tion)YH(, each indi)HY(vid)HY(ual)YH( sub-parser - would create a sub-tree and return it to its )EM(parent)ES( parser - which can then incor)HY(po)HY(rate)YH( this sub-tree into the whole tree.)EP( - - )0 P(In this chapter we will discuss the mech)HY(a)HY(nisms)YH( offered by the - C++/Parser mapping for return)HY(ing)YH( infor)HY(ma)HY(tion)YH( from indi)HY(vid)HY(ual)YH( - parsers and see how to use them to build an object model - of our people vocab)HY(u)HY(lary)YH(.)EP( - - )0 2 17 H(4.1)WB 66 Sn()WB 20 Sn( Object Model)EA()EH( - - )0 P(An object model for our person record example could - look like this \201saved in the )SM(people.hxx)ES( file\202:)EP( - - ) 53 35 PR(#include -#include - -enum gender -{ - male, - female -}; - -class person -{ -public: - person \201const std::string& first, - const std::string& last, - ::gender gender, - short age\202 - : first_ \201first\202, last_ \201last\202, - gender_ \201gender\202, age_ \201age\202 - { - } - - const std::string& - first \201\202 const - { - return first_; - } - - const std::string& - last \201\202 const - { - return last_;)WR( - } - - ::gender - gender \201\202 const - { - return gender_; - } - - short - age \201\202 const - { - return age_; - } - -private: - std::string first_; - std::string last_; - ::gender gender_; - short age_; -}; - -typedef std::vector people;)RP( - - )0 P(While it is clear which parser is respon)HY(si)HY(ble)YH( for which part of - the object model, it is not exactly clear how, for - example, )SM(gender_pimpl)ES( will deliver )SM(gender)ES( - to )SM(person_pimpl)ES(. You might have noticed that - )SM(string_pimpl)ES( manages to deliver its value to the - )SM(first_name\201\202)ES( call)HY(back)YH( of )SM(person_pimpl)ES(. Let's - see how we can utilize the same mech)HY(a)HY(nism)YH( to prop)HY(a)HY(gate)YH( our - own data.)EP( - - )0 P(There is a way to tell the XSD compiler that you want to - exchange data between parsers. More precisely, for each - type defined in XML Schema, you can tell the compiler two things. - First, the return type of the )SM(post_*\201\202)ES( call)HY(back)YH( - in the parser skele)HY(ton)YH( gener)HY(ated)YH( for this type. And, second, - the argu)HY(ment)YH( type for call)HY(backs)YH( corre)HY(spond)HY(ing)YH( to elements and - attributes of this type. For example, for XML Schema type - )SM(gender)ES( we can specify the return type for - )SM(post_gender\201\202)ES( in the )SM(gender_pskel)ES( - skele)HY(ton)YH( and the argu)HY(ment)YH( type for the )SM(gender\201\202)ES( call)HY(back)YH( - in the )SM(person_pskel)ES( skele)HY(ton)YH(. As you might have guessed, - the gener)HY(ated)YH( code will then pass the return value from the - )SM(post_*\201\202)ES( call)HY(back)YH( as an argu)HY(ment)YH( to the element or - attribute call)HY(back)YH(.)EP( - - )0 P(The way to tell the XSD compiler about these XML Schema to - C++ mappings is with type map files. Here is a simple type - map for the )SM(gender)ES( type from the previ)HY(ous)YH( para)HY(graph)YH(:)EP( - - ) 2 25 PR(include "people.hxx"; -gender ::gender ::gender;)RP( - - )0 P(The first line indi)HY(cates)YH( that the gener)HY(ated)YH( code must include - )SM(people.hxx)ES( in order to get the defi)HY(ni)HY(tion)YH( for the - )SM(gender)ES( type. The second line spec)HY(i)HY(fies)YH( that both - argu)HY(ment)YH( and return types for the )SM(gender)ES( - XML Schema type should be the )SM(::gender)ES( C++ enum - \201we use fully-qual)HY(i)HY(fied)YH( C++ names to avoid name clashes\202. - The next section will describe the type map format in detail. - We save this type map in )SM(people.map)ES( and - then trans)HY(late)YH( our schemas with the )SM(--type-map)ES( - option to let the XSD compiler know about our type map:)EP( - - ) 1 49 PR($ xsd cxx-parser --type-map people.map people.xsd)RP( - - )0 P(If we now look at the gener)HY(ated)YH( )SM(people-pskel.hxx)ES(, - we will see the follow)HY(ing)YH( changes in the )SM(gender_pskel)ES( and - )SM(person_pskel)ES( skele)HY(tons)YH(:)EP( - - ) 17 59 PR(#include "people.hxx" - -class gender_pskel: public virtual xml_schema::string_pskel -{ - virtual ::gender - post_gender \201\202 = 0; - - ... -}; - -class person_pskel: public xml_schema::complex_content -{ - virtual void - gender \201::gender\202; - - ... -};)RP( - - )0 P(Notice that )SM(#include "people.hxx")ES( was added to - the gener)HY(ated)YH( header file from the type map to provide the - defi)HY(ni)HY(tion)YH( for the )SM(gender)ES( enum.)EP( - - )0 2 18 H(4.2)WB 67 Sn()WB 21 Sn( Type Map File Format)EA()EH( - - )0 P(Type map files are used to define a mapping between XML Schema - and C++ types. The compiler uses this infor)HY(ma)HY(tion)YH( - to deter)HY(mine)YH( return types of )SM(post_*\201\202)ES( - call)HY(backs)YH( in parser skele)HY(tons)YH( corre)HY(spond)HY(ing)YH( to XML Schema - types as well as argu)HY(ment)YH( types for call)HY(backs)YH( corre)HY(spond)HY(ing)YH( - to elements and attributes of these types.)EP( - - )0 P(The compiler has a set of prede)HY(fined)YH( mapping rules that map - the built-in XML Schema types to suit)HY(able)YH( C++ types \201discussed - below\202 and all other types to )SM(void)ES(. - By provid)HY(ing)YH( your own type maps you can over)HY(ride)YH( these prede)HY(fined)YH( - rules. The format of the type map file is presented below: - )EP( - - ) 5 58 PR(namespace [] -{ - \201include ;\202* - \201[type] [];\202* -})RP( - - )0 P(Both )SM()I()ES()ES( and - )SM()I()ES()ES( are regex patterns while - )SM()I()ES()ES(, - )SM()I()ES()ES(, and - )SM()I()ES()ES( are regex pattern - substi)HY(tu)HY(tions)YH(. All names can be option)HY(ally)YH( enclosed in - )SM(" ")ES(, for example, to include white-spaces.)EP( - - )0 P()SM()I()ES()ES( deter)HY(mines)YH( XML - Schema names)HY(pace)YH(. Optional )SM()I()ES()ES( - is prefixed to every C++ type name in this names)HY(pace)YH( decla)HY(ra)HY(tion)YH(. - )SM()I()ES()ES( is a C++ type name that is - used as a return type for the )SM(post_*\201\202)ES( call)HY(back)YH(. - Optional )SM()I()ES()ES( is an argu)HY(ment)YH( - type for call)HY(backs)YH( corre)HY(spond)HY(ing)YH( to elements and attributes - of this type. If )SM()I()ES()ES( is not - spec)HY(i)HY(fied)YH(, it defaults to )SM()I()ES()ES( - if )SM()I()ES()ES( ends with )SM(*)ES( or - )SM(&)ES( \201that is, it is a pointer or a refer)HY(ence)YH(\202 and - )SM(const\240)I()ES(&)ES( - other)HY(wise)YH(. - )SM()I()ES()ES( is a file name either in the - )SM(" ")ES( or )SM(< >)ES( format - and is added with the )SM(#include)ES( direc)HY(tive)YH( to - the gener)HY(ated)YH( code.)EP( - - )0 P(The )SM()BD(#)ES()ES( char)HY(ac)HY(ter)YH( starts a comment that ends - with a new line or end of file. To specify a name that contains - )SM()BD(#)ES()ES( enclose it in )SM()BD(" ")ES()ES(. - For example:)EP( - - ) 12 44 PR(namespace http://www.example.com/xmlns/my my -{ - include "my.hxx"; - - # Pass apples by value. - # - apple apple; - - # Pass oranges as pointers. - # - orange orange_t*; -})RP( - - )0 P(In the example above, for the - )SM(http://www.example.com/xmlns/my#orange)ES( - XML Schema type, the )SM(my::orange_t*)ES( C++ type will - be used as both return and argu)HY(ment)YH( types.)EP( - - )0 P(Several names)HY(pace)YH( decla)HY(ra)HY(tions)YH( can be spec)HY(i)HY(fied)YH( in a single - file. The names)HY(pace)YH( decla)HY(ra)HY(tion)YH( can also be completely - omitted to map types in a schema without a names)HY(pace)YH(. For - instance:)EP( - - ) 7 41 PR(include "my.hxx"; -apple apple; - -namespace http://www.example.com/xmlns/my -{ - orange "const orange_t*"; -})RP( - - )0 P(The compiler has a number of prede)HY(fined)YH( mapping rules for - the built-in XML Schema types which can be presented as the - follow)HY(ing)YH( map files. The string-based XML Schema types are - mapped to either )SM(std::string)ES( or - )SM(std::wstring)ES( depend)HY(ing)YH( on the char)HY(ac)HY(ter)YH( type - selected \201see )0 24 1 A( Section 5.1, "Char)HY(ac)HY(ter)YH( Type and - Encod)HY(ing)YH(")24 0 TN TL()Ec /AF f D( for more infor)HY(ma)HY(tion)YH(\202.)EP( - - ) 59 63 PR(namespace http://www.w3.org/2001/XMLSchema -{ - boolean bool bool; - - byte "signed char" "signed char"; - unsignedByte "unsigned char" "unsigned char"; - - short short short; - unsignedShort "unsigned short" "unsigned short"; - - int int int; - unsignedInt "unsigned int" "unsigned int"; - - long "long long" "long long"; - unsignedLong "unsigned long long" "unsigned long long"; - - integer "long long" "long long"; - - negativeInteger "long long" "long long"; - nonPositiveInteger "long long" "long long"; - - positiveInteger "unsigned long long" "unsigned long long"; - nonNegativeInteger "unsigned long long" "unsigned long long"; - - float float float; - double double double; - decimal double double; - - string std::string; - normalizedString std::string; - token std::string;)WR( - Name std::string; - NMTOKEN std::string; - NCName std::string; - ID std::string; - IDREF std::string; - language std::string; - anyURI std::string; - - NMTOKENS xml_schema::string_sequence; - IDREFS xml_schema::string_sequence; - - QName xml_schema::qname; - - base64Binary std::auto_ptr - std::auto_ptr; - hexBinary std::auto_ptr - std::auto_ptr; - - date xml_schema::date; - dateTime xml_schema::date_time; - duration xml_schema::duration; - gDay xml_schema::gday; - gMonth xml_schema::gmonth; - gMonthDay xml_schema::gmonth_day; - gYear xml_schema::gyear; - gYearMonth xml_schema::gyear_month; - time xml_schema::time; -})RP( - - )0 P(For more infor)HY(ma)HY(tion)YH( about the mapping of the built-in XML Schema types - to C++ types refer to )0 28 1 A(Chapter 6, "Built-In XML Schema Type - Parsers")28 0 TN TL()Ec /AF f D(. The last prede)HY(fined)YH( rule maps anything that wasn't - mapped by previ)HY(ous)YH( rules to )SM(void)ES(:)EP( - - ) 4 15 PR(namespace .* -{ - .* void void; -})RP( - - - )0 P(When you provide your own type maps with the - )SM(--type-map)ES( option, they are eval)HY(u)HY(ated)YH( first. This - allows you to selec)HY(tively)YH( over)HY(ride)YH( any of the prede)HY(fined)YH( rules. - Note also that if you change the mapping - of a built-in XML Schema type then it becomes your respon)HY(si)HY(bil)HY(ity)YH( - to provide the corre)HY(spond)HY(ing)YH( parser skele)HY(ton)YH( and imple)HY(men)HY(ta)HY(tion)YH( - in the )SM(xml_schema)ES( names)HY(pace)YH(. You can include the - custom defi)HY(ni)HY(tions)YH( into the gener)HY(ated)YH( header file using the - )SM(--hxx-prologue-*)ES( options.)EP( - - )0 2 19 H(4.3)WB 68 Sn()WB 22 Sn( Parser Imple)HY(men)HY(ta)HY(tions)YH()EA()EH( - - )0 P(With the knowl)HY(edge)YH( from the previ)HY(ous)YH( section, we can proceed - with creat)HY(ing)YH( a type map that maps types in the )SM(people.xsd)ES( - schema to our object model classes in - )SM(people.hxx)ES(. In fact, we already have the begin)HY(ning)YH( - of our type map file in )SM(people.map)ES(. Let's extend - it with the rest of the types:)EP( - - ) 5 25 PR(include "people.hxx"; - -gender ::gender ::gender; -person ::person; -people ::people;)RP( - - )0 P(There are a few things to note about this type map. We did not - provide the argu)HY(ment)YH( types for )SM(person)ES( and - )SM(people)ES( because the default constant refer)HY(ence)YH( is - exactly what we need. We also did not provide any mappings - for built-in XML Schema types )SM(string)ES( and - )SM(short)ES( because they are handled by the prede)HY(fined)YH( - rules and we are happy with the result. Note also that - all C++ types are fully qual)HY(i)HY(fied)YH(. This is done to avoid - poten)HY(tial)YH( name conflicts in the gener)HY(ated)YH( code. Now we can - recom)HY(pile)YH( our schema and move on to imple)HY(ment)HY(ing)YH( the parsers:)EP( - - ) 1 68 PR($ xsd cxx-parser --xml-parser expat --type-map people.map people.xsd)RP( - - )0 P(Here is the imple)HY(men)HY(ta)HY(tion)YH( of our three parsers in full. One - way to save typing when imple)HY(ment)HY(ing)YH( your own parsers is - to open the gener)HY(ated)YH( code and copy the signa)HY(tures)YH( of parser - call)HY(backs)YH( into your code. Or you could always auto gener)HY(ate)YH( the - sample imple)HY(men)HY(ta)HY(tions)YH( and fill them with your code.)EP( - - - ) 73 52 PR(#include "people-pskel.hxx" - -class gender_pimpl: public gender_pskel, - public xml_schema::string_pimpl -{ -public: - virtual ::gender - post_gender \201\202 - { - return post_string \201\202 == "male" ? male : female; - } -}; - -class person_pimpl: public person_pskel -{ -public: - virtual void - first_name \201const std::string& f\202 - { - first_ = f; - } - - virtual void - last_name \201const std::string& l\202 - { - last_ = l; - } - - virtual void - gender \201::gender g\202 - {)WR( - gender_ = g; - } - - virtual void - age \201short a\202 - { - age_ = a; - } - - virtual ::person - post_person \201\202 - { - return ::person \201first_, last_, gender_, age_\202; - } - -private: - std::string first_; - std::string last_; - ::gender gender_; - short age_; -}; - -class people_pimpl: public people_pskel -{ -public: - virtual void - person \201const ::person& p\202 - { - people_.push_back \201p\202; - })WR( - - virtual ::people - post_people \201\202 - { - ::people r; - r.swap \201people_\202; - return r; - } - -private: - ::people people_; -};)RP( - - )0 P(This code frag)HY(ment)YH( should look famil)HY(iar)YH( by now. Just note that - all the )SM(post_*\201\202)ES( call)HY(backs)YH( now have return types instead - of )SM(void)ES(. Here is the imple)HY(men)HY(ta)HY(tion)YH( of the test - driver for this example:)EP( - - ) 38 76 PR(#include - -using namespace std; - -int -main \201int argc, char* argv[]\202 -{ - // Construct the parser. - // - xml_schema::short_pimpl short_p; - xml_schema::string_pimpl string_p; - - gender_pimpl gender_p; - person_pimpl person_p; - people_pimpl people_p; - - person_p.parsers \201string_p, string_p, gender_p, short_p\202; - people_p.parsers \201person_p\202; - - // Parse the document to obtain the object model. - // - xml_schema::document doc_p \201people_p, "people"\202; - - people_p.pre \201\202; - doc_p.parse \201argv[1]\202; - people ppl = people_p.post_people \201\202; - - // Print the object model. - // - for \201people::iterator i \201ppl.begin \201\202\202; i != ppl.end \201\202; ++i\202 - {)WR( - cout << "first: " << i->first \201\202 << endl - << "last: " << i->last \201\202 << endl - << "gender: " << \201i->gender \201\202 == male ? "male" : "female"\202 << endl - << "age: " << i->age \201\202 << endl - << endl; - } -})RP( - - )0 P(The parser creation and assem)HY(bly)YH( part is exactly the same as in - the previ)HY(ous)YH( chapter. The parsing part is a bit differ)HY(ent)YH(: - )SM(post_people\201\202)ES( now has a return value which is the - complete object model. We store it in the - )SM(ppl)ES( vari)HY(able)YH(. The last bit of the code simply iter)HY(ates)YH( - over the )SM(people)ES( vector and prints the infor)HY(ma)HY(tion)YH( - for each person. We save the last two code frag)HY(ments)YH( to - )SM(driver.cxx)ES( and proceed to compile and test - our new appli)HY(ca)HY(tion)YH(:)EP( - - - ) 12 49 PR($ c++ -I.../libxsd -c driver.cxx people-pskel.cxx -$ c++ -o driver driver.o people-pskel.o -lexpat -$ ./driver people.xml -first: John -last: Doe -gender: male -age: 32 - -first: Jane -last: Doe -gender: female -age: 28)RP( - - - - - - )0 1 20 H(5)WB 69 Sn()WB 23 Sn( Mapping Config)HY(u)HY(ra)HY(tion)YH()EA()EH( - - )0 P(The C++/Parser mapping has a number of config)HY(u)HY(ra)HY(tion)YH( param)HY(e)HY(ters)YH( that - deter)HY(mine)YH( the overall prop)HY(er)HY(ties)YH( and behav)HY(ior)YH( of the gener)HY(ated)YH( code. - Config)HY(u)HY(ra)HY(tion)YH( param)HY(e)HY(ters)YH( are spec)HY(i)HY(fied)YH( with the XSD command line - options and include the char)HY(ac)HY(ter)YH( type that is used by the gener)HY(ated)YH( - code, the under)HY(ly)HY(ing)YH( XML parser, whether the XML Schema vali)HY(da)HY(tion)YH( - is performed in the gener)HY(ated)YH( code, and support for XML Schema - poly)HY(mor)HY(phism)YH(. This chapter describes these config)HY(u)HY(ra)HY(tion)YH( - param)HY(e)HY(ters)YH( in more detail. For more ways to config)HY(ure)YH( the gener)HY(ated)YH( - code refer to the - )R1 2 A(XSD - Compiler Command Line Manual)EA(. - )EP( - - )0 2 21 H(5.1)WB 70 Sn()WB 24 Sn( Char)HY(ac)HY(ter)YH( Type and Encod)HY(ing)YH()EA()EH( - - )0 P(The C++/Parser mapping has built-in support for two char)HY(ac)HY(ter)YH( types: - )SM(char)ES( and )SM(wchar_t)ES(. You can select the - char)HY(ac)HY(ter)YH( type with the )SM(--char-type)ES( command line - option. The default char)HY(ac)HY(ter)YH( type is )SM(char)ES(. The - string-based built-in XML Schema types are returned as either - )SM(std::string)ES( or )SM(std::wstring)ES( depend)HY(ing)YH( - on the char)HY(ac)HY(ter)YH( type selected.)EP( - - )0 P(Another aspect of the mapping that depends on the char)HY(ac)HY(ter)YH( type - is char)HY(ac)HY(ter)YH( encod)HY(ing)YH(. For the )SM(char)ES( char)HY(ac)HY(ter)YH( type - the default encod)HY(ing)YH( is UTF-8. Other supported encod)HY(ings)YH( are - ISO-8859-1, Xerces-C++ Local Code Page \201LPC\202, as well as - custom encod)HY(ings)YH(. You can select which encod)HY(ing)YH( should be used - in the object model with the )SM(--char-encod)HY(ing)YH()ES( command - line option.)EP( - - )0 P(For the )SM(wchar_t)ES( char)HY(ac)HY(ter)YH( type the encod)HY(ing)YH( is - auto)HY(mat)HY(i)HY(cally)YH( selected between UTF-16 and UTF-32/UCS-4 depend)HY(ing)YH( - on the size of the )SM(wchar_t)ES( type. On some plat)HY(forms)YH( - \201for example, Windows with Visual C++ and AIX with IBM XL C++\202 - )SM(wchar_t)ES( is 2 bytes long. For these plat)HY(forms)YH( the - encod)HY(ing)YH( is UTF-16. On other plat)HY(forms)YH( )SM(wchar_t)ES( is 4 bytes - long and UTF-32/UCS-4 is used.)EP( - - )0 P(Note also that the char)HY(ac)HY(ter)YH( encod)HY(ing)YH( that is used in the object model - is inde)HY(pen)HY(dent)YH( of the encod)HY(ings)YH( used in input and output XML. In fact, - all three \201object mode, input XML, and output XML\202 can have differ)HY(ent)YH( - encod)HY(ings)YH(.)EP( - - )0 2 22 H(5.2)WB 71 Sn()WB 25 Sn( Under)HY(ly)HY(ing)YH( XML Parser)EA()EH( - - )0 P(The C++/Parser mapping can be used with either Xerces-C++ or Expat - as the under)HY(ly)HY(ing)YH( XML parser. You can select the XML parser with - the )SM(--xml-parser)ES( command line option. Valid values - for this option are )SM(xerces)ES( and )SM(expat)ES(. - The default XML parser is Xerces-C++.)EP( - - )0 P(The gener)HY(ated)YH( code is iden)HY(ti)HY(cal)YH( for both parsers except for the - )SM(xml_schema::docu)HY(ment)YH()ES( class in which some of the - )SM(parse\201\202)ES( func)HY(tions)YH( are parser-specific as described - in )0 43 1 A(Chapter 7, "Docu)HY(ment)YH( Parser and Error Handling")43 0 TN TL()Ec /AF f D(.)EP( - - - )0 2 23 H(5.3)WB 72 Sn()WB 26 Sn( XML Schema Vali)HY(da)HY(tion)YH()EA()EH( - - )0 P(The C++/Parser mapping provides support for vali)HY(dat)HY(ing)YH( a - commonly-used subset of W3C XML Schema in the gener)HY(ated)YH( code. - For the list of supported XML Schema constructs refer to - )0 47 1 A(Appendix A, "Supported XML Schema Constructs")47 0 TN TL()Ec /AF f D(.)EP( - - )0 P(By default vali)HY(da)HY(tion)YH( in the gener)HY(ated)YH( code is disabled if - the under)HY(ly)HY(ing)YH( XML parser is vali)HY(dat)HY(ing)YH( \201Xerces-C++\202 and - enabled other)HY(wise)YH( \201Expat\202. See )0 25 1 A(Section 5.2, - "Under)HY(ly)HY(ing)YH( XML Parser")25 0 TN TL()Ec /AF f D( for more infor)HY(ma)HY(tion)YH( about - the under)HY(ly)HY(ing)YH( XML parser. You can over)HY(ride)YH( the default - behav)HY(ior)YH( with the )SM(--gener)HY(ate)YH(-vali)HY(da)HY(tion)YH()ES( - and )SM(--suppress-vali)HY(da)HY(tion)YH()ES( command line options.)EP( - - - )0 2 24 H(5.4)WB 73 Sn()WB 27 Sn( Support for Poly)HY(mor)HY(phism)YH()EA()EH( - - )0 P(By default the XSD compiler gener)HY(ates)YH( non-poly)HY(mor)HY(phic)YH( code. If your - vocab)HY(u)HY(lary)YH( uses XML Schema poly)HY(mor)HY(phism)YH( in the form of )SM(xsi:type)ES( - and/or substi)HY(tu)HY(tion)YH( groups, then you will need to compile your schemas - with the )SM(--gener)HY(ate)YH(-poly)HY(mor)HY(phic)YH()ES( option to produce - poly)HY(mor)HY(phism)YH(-aware code as well as pass )SM(true)ES( as the last - argu)HY(ment)YH( to the )SM(xml_schema::docu)HY(ment)YH()ES('s construc)HY(tors)YH(.)EP( - - )0 P(When using the poly)HY(mor)HY(phism)YH(-aware gener)HY(ated)YH( code, you can specify - several parsers for a single element by passing a parser map - instead of an indi)HY(vid)HY(ual)YH( parser to the parser connec)HY(tion)YH( func)HY(tion)YH( - for the element. One of the parsers will then be looked up and used - depend)HY(ing)YH( on the )SM(xsi:type)ES( attribute value or an element - name from a substi)HY(tu)HY(tion)YH( group. Consider the follow)HY(ing)YH( schema as an - example:)EP( - - ) 44 62 PR( - - - - - - - - - - - - - - - - - - - - - - - - - - - -)WR( - - - - - - - - - - -)RP( - - )0 P(Conform)HY(ing)YH( XML docu)HY(ments)YH( can use the )SM(super)HY(man)YH()ES( - and )SM(batman)ES( types in place of the )SM(person)ES( - type either by spec)HY(i)HY(fy)HY(ing)YH( the type with the )SM(xsi:type)ES( - attributes or by using the elements from the substi)HY(tu)HY(tion)YH( - group, for instance:)EP( - - - ) 15 64 PR( - - - John Doe - - - - James "007" Bond - - - - Bruce Wayne - - -)RP( - - )0 P(To print the data stored in such XML docu)HY(ments)YH( we can imple)HY(ment)YH( - the parsers as follows:)EP( - - ) 79 52 PR(class person_pimpl: public virtual person_pskel -{ -public: - virtual void - pre \201\202 - { - cout << "starting to parse person" << endl; - } - - virtual void - name \201const std::string& v\202 - { - cout << "name: " << v << endl; - } - - virtual void - post_person \201\202 - { - cout << "finished parsing person" << endl; - } -}; - -class superman_pimpl: public virtual superman_pskel, - public person_pimpl -{ -public: - virtual void - pre \201\202 - { - cout << "starting to parse superman" << endl; - })WR( - - virtual void - can_fly \201bool v\202 - { - cout << "can-fly: " << v << endl; - } - - virtual void - post_person \201\202 - { - post_superman \201\202; - } - - virtual void - post_superman \201\202 - { - cout << "finished parsing superman" << endl - } -}; - -class batman_pimpl: public virtual batman_pskel, - public superman_pimpl -{ -public: - virtual void - pre \201\202 - { - cout << "starting to parse batman" << endl; - } -)WR( - virtual void - wing_span \201unsigned int v\202 - { - cout << "wing-span: " << v << endl; - } - - virtual void - post_superman \201\202 - { - post_batman \201\202; - } - - virtual void - post_batman \201\202 - { - cout << "finished parsing batman" << endl; - } -};)RP( - - )0 P(Note that because the derived type parsers \201)SM(super)HY(man)YH(_pskel)ES( - and )SM(batman_pskel)ES(\202 are called via the )SM(person_pskel)ES( - inter)HY(face)YH(, we have to over)HY(ride)YH( the )SM(post_person\201\202)ES( - virtual func)HY(tion)YH( in )SM(super)HY(man)YH(_pimpl)ES( to call - )SM(post_super)HY(man)YH(\201\202)ES( and the )SM(post_super)HY(man)YH(\201\202)ES( - virtual func)HY(tion)YH( in )SM(batman_pimpl)ES( to call - )SM(post_batman\201\202)ES(.)EP( - - )0 P(The follow)HY(ing)YH( code frag)HY(ment)YH( shows how to connect the parsers together. - Notice that for the )SM(person)ES( element in the )SM(super)HY(men)YH(_p)ES( - parser we specify a parser map instead of a specific parser and we pass - )SM(true)ES( as the last argu)HY(ment)YH( to the docu)HY(ment)YH( parser construc)HY(tor)YH( - to indi)HY(cate)YH( that we are parsing poten)HY(tially)YH(-poly)HY(mor)HY(phic)YH( XML docu)HY(ments)YH(:)EP( - - ) 39 64 PR(int -main \201int argc, char* argv[]\202 -{ - // Construct the parser. - // - xml_schema::string_pimpl string_p; - xml_schema::boolean_pimpl boolean_p; - xml_schema::unsigned_int_pimpl unsigned_int_p; - - person_pimpl person_p; - superman_pimpl superman_p; - batman_pimpl batman_p; - - xml_schema::parser_map_impl person_map; - supermen_pimpl supermen_p; - - person_p.parsers \201string_p\202; - superman_p.parsers \201string_p, boolean_p\202; - batman_p.parsers \201string_p, boolean_p, unsigned_int_p\202; - - // Here we are specifying a parser map which containes several - // parsers that can be used to parse the person element. - // - person_map.insert \201person_p\202; - person_map.insert \201superman_p\202; - person_map.insert \201batman_p\202; - - supermen_p.person_parser \201person_map\202; - - // Parse the XML document. The last argument to the document's - // constructor indicates that we are parsing polymorphic XML)WR( - // documents. - // - xml_schema::document doc_p \201supermen_p, "supermen", true\202; - - supermen_p.pre \201\202; - doc_p.parse \201argv[1]\202; - supermen_p.post_supermen \201\202; -})RP( - - )0 P(When poly)HY(mor)HY(phism)YH(-aware code is gener)HY(ated)YH(, each element's - )SM(*_parser\201\202)ES( func)HY(tion)YH( is over)HY(loaded)YH( to also accept - an object of the )SM(xml_schema::parser_map)ES( type. - For example, the )SM(super)HY(men)YH(_pskel)ES( class from the - above example looks like this:)EP( - - ) 21 63 PR(class supermen_pskel: public xml_schema::parser_complex_content -{ -public: - - ... - - // Parser construction API. - // - void - parsers \201person_pskel&\202; - - // Individual element parsers. - // - void - person_parser \201person_pskel&\202; - - void - person_parser \201const xml_schema::parser_map&\202; - - ... -};)RP( - - )0 P(Note that you can specify both the indi)HY(vid)HY(ual)YH( \201static\202 parser and - the parser map. The indi)HY(vid)HY(ual)YH( parser will be used when the static - element type and the dynamic type of the object being parsed are - the same. This is the case, for example, when there is no - )SM(xsi:type)ES( attribute and the element hasn't been - substi)HY(tuted)YH(. Because the indi)HY(vid)HY(ual)YH( parser for an element is - cached and no map lookup is neces)HY(sary)YH(, it makes sense to specify - both the indi)HY(vid)HY(ual)YH( parser and the parser map when most of the - objects being parsed are of the static type and optimal - perfor)HY(mance)YH( is impor)HY(tant)YH(. The follow)HY(ing)YH( code frag)HY(ment)YH( shows - how to change the above example to set both the indi)HY(vid)HY(ual)YH( - parser and the parser map:)EP( - - ) 13 40 PR(int -main \201int argc, char* argv[]\202 -{ - ... - - person_map.insert \201superman_p\202; - person_map.insert \201batman_p\202; - - supermen_p.person_parser \201person_p\202; - supermen_p.person_parser \201person_map\202; - - ... -})RP( - - - )0 P(The )SM(xml_schema::parser_map)ES( inter)HY(face)YH( and the - )SM(xml_schema::parser_map_impl)ES( default imple)HY(men)HY(ta)HY(tion)YH( - are presented below:)EP( - - ) 27 45 PR(namespace xml_schema -{ - class parser_map - { - public: - virtual parser_base* - find \201const ro_string* type\202 const = 0; - }; - - class parser_map_impl: public parser_map - { - public: - void - insert \201parser_base&\202; - - virtual parser_base* - find \201const ro_string* type\202 const; - - private: - parser_map_impl \201const parser_map_impl&\202; - - parser_map_impl& - operator= \201const parser_map_impl&\202; - - ... - }; -})RP( - - )0 P(The )SM(type)ES( argu)HY(ment)YH( in the )SM(find\201\202)ES( virtual - func)HY(tion)YH( is the type name and names)HY(pace)YH( from the xsi:type attribute - \201the names)HY(pace)YH( prefix is resolved to the actual XML names)HY(pace)YH(\202 - or the type of an element from the substi)HY(tu)HY(tion)YH( group in the form - )SM("\240")ES( with the space and the - names)HY(pace)YH( part absent if the type does not have a names)HY(pace)YH(. - You can obtain a parser's dynamic type in the same format - using the )SM(_dynamic_type\201\202)ES( func)HY(tion)YH(. The static - type can be obtained by calling the static )SM(_static_type\201\202)ES( - func)HY(tion)YH(, for example )SM(person_pskel::_static_type\201\202)ES(. - Both func)HY(tions)YH( return a C string \201)SM(const char*)ES( or - )SM(const wchar_t*)ES(, depend)HY(ing)YH( on the char)HY(ac)HY(ter)YH( type - used\202 which is valid for as long as the appli)HY(ca)HY(tion)YH( is running. - The follow)HY(ing)YH( example shows how we can imple)HY(ment)YH( our own parser - map using )SM(std::map)ES(:)EP( - - - ) 23 62 PR(#include -#include - -class parser_map: public xml_schema::parser_map -{ -public: - void - insert \201xml_schema::parser_base& p\202 - { - map_[p._dynamic_type \201\202] = &p; - } - - virtual xml_schema::parser_base* - find \201const xml_schema::ro_string* type\202 const - { - map::const_iterator i = map_.find \201type\202; - return i != map_.end \201\202 ? i->second : 0; - } - -private: - typedef std::map map; - map map_; -};)RP( - - )0 P(Most of code presented in this section is taken from the - )SM(poly)HY(mor)HY(phism)YH()ES( example which can be found in the - )SM(exam)HY(ples)YH(/cxx/parser/)ES( direc)HY(tory)YH( of the XSD distri)HY(bu)HY(tion)YH(. - Handling of )SM(xsi:type)ES( and substi)HY(tu)HY(tion)YH( groups when used - on root elements requires a number of special actions as shown in - the )SM(poly)HY(root)YH()ES( example.)EP( - - - - - - )0 1 25 H(6)WB 74 Sn()WB 28 Sn( Built-In XML Schema Type Parsers)EA()EH( - - )0 P(The XSD runtime provides parser imple)HY(men)HY(ta)HY(tions)YH( for all built-in - XML Schema types as summa)HY(rized)YH( in the follow)HY(ing)YH( table. Decla)HY(ra)HY(tions)YH( - for these types are auto)HY(mat)HY(i)HY(cally)YH( included into each gener)HY(ated)YH( - header file. As a result you don't need to include any headers - to gain access to these parser imple)HY(men)HY(ta)HY(tions)YH(. Note that some - parsers return either )SM(std::string)ES( or - )SM(std::wstring)ES( depend)HY(ing)YH( on the char)HY(ac)HY(ter)YH( type selected.)EP( - - - )0 PT( - - )0 2 26 H(6.1)WB 75 Sn()WB 30 Sn( )SM(QName)ES( Parser)EA()EH( - - )0 P(The return type of the )SM(qname_pimpl)ES( parser imple)HY(men)HY(ta)HY(tion)YH( - is )SM(xml_schema::qname)ES( which repre)HY(sents)YH( an XML qual)HY(i)HY(fied)YH( - name. Its inter)HY(face)YH( is presented below. - Note that the )SM(std::string)ES( type in the inter)HY(face)YH( becomes - )SM(std::wstring)ES( if the selected char)HY(ac)HY(ter)YH( type is - )SM(wchar_t)ES(.)EP( - - ) 28 63 PR(namespace xml_schema -{ - class qname - { - public: - explicit - qname \201const std::string& name\202; - qname \201const std::string& prefix, const std::string& name\202; - - const std::string& - prefix \201\202 const; - - void - prefix \201const std::string&\202; - - const std::string& - name \201\202 const; - - void - name \201const std::string&\202; - }; - - bool - operator== \201const qname&, const qname&\202; - - bool - operator!= \201const qname&, const qname&\202; -})RP( - - - )0 2 27 H(6.2)WB 76 Sn()WB 31 Sn( )SM(NMTO)HY(KENS)YH()ES( and )SM(IDREFS)ES( Parsers)EA()EH( - - )0 P(The return type of the )SM(nmto)HY(kens)YH(_pimpl)ES( and - )SM(idrefs_pimpl)ES( parser imple)HY(men)HY(ta)HY(tions)YH( is - )SM(xml_schema::string_sequence)ES( which repre)HY(sents)YH( a - sequence of strings. Its inter)HY(face)YH( is presented below. - Note that the )SM(std::string)ES( type in the inter)HY(face)YH( becomes - )SM(std::wstring)ES( if the selected char)HY(ac)HY(ter)YH( type is - )SM(wchar_t)ES(.)EP( - - ) 21 62 PR(namespace xml_schema -{ - class string_sequence: public std::vector - { - public: - string_sequence \201\202; - - explicit - string_sequence \201std::vector::size_type n, - const std::string& x = std::string \201\202\202; - - template - string_sequence \201const I& begin, const I& end\202; - }; - - bool - operator== \201const string_sequence&, const string_sequence&\202; - - bool - operator!= \201const string_sequence&, const string_sequence&\202; -})RP( - - - )0 2 28 H(6.3)WB 77 Sn()WB 32 Sn( )SM(base64Binary)ES( and )SM(hexBi)HY(nary)YH()ES( Parsers)EA()EH( - - )0 P(The return type of the )SM(base64_binary_pimpl)ES( and - )SM(hex_binary_pimpl)ES( parser imple)HY(men)HY(ta)HY(tions)YH( is - )SM(std::auto_ptr)ES(. The - )SM(xml_schema::buffer)ES( type repre)HY(sents)YH( a binary buffer - and its inter)HY(face)YH( is presented below.)EP( - - ) 69 60 PR(namespace xml_schema -{ - class buffer - { - public: - typedef std::size_t size_t; - - class bounds {}; // Out of bounds exception. - - public: - explicit - buffer \201size_t size = 0\202; - buffer \201size_t size, size_t capacity\202; - buffer \201const void* data, size_t size\202; - buffer \201const void* data, size_t size, size_t capacity\202; - buffer \201void* data, - size_t size, - size_t capacity, - bool assume_ownership\202; - - public: - buffer \201const buffer&\202; - - buffer& - operator= \201const buffer&\202; - - void - swap \201buffer&\202; - - public: - size_t)WR( - capacity \201\202 const; - - bool - capacity \201size_t\202; - - public: - size_t - size \201\202 const; - - bool - size \201size_t\202; - - public: - const char* - data \201\202 const; - - char* - data \201\202; - - const char* - begin \201\202 const; - - char* - begin \201\202; - - const char* - end \201\202 const; - - char* - end \201\202;)WR( - }; - - bool - operator== \201const buffer&, const buffer&\202; - - bool - operator!= \201const buffer&, const buffer&\202; -})RP( - - )0 P(If the )SM(assume_owner)HY(ship)YH()ES( argu)HY(ment)YH( to the construc)HY(tor)YH( - is )SM(true)ES(, the instance assumes the owner)HY(ship)YH( of the - memory block pointed to by the )SM(data)ES( argu)HY(ment)YH( and will - even)HY(tu)HY(ally)YH( release it by calling )SM(oper)HY(a)HY(tor)YH( delete\201\202)ES(. The - )SM(capac)HY(ity)YH(\201\202)ES( and )SM(size\201\202)ES( modi)HY(fier)YH( func)HY(tions)YH( - return )SM(true)ES( if the under)HY(ly)HY(ing)YH( buffer has moved. - )EP( - - )0 P(The )SM(bounds)ES( excep)HY(tion)YH( is thrown if the construc)HY(tor)YH( - argu)HY(ments)YH( violate the )SM(\201size\240<=\240capac)HY(ity)YH(\202)ES( - constraint.)EP( - - - )0 2 29 H(6.4)WB 78 Sn()WB 33 Sn( Time Zone Repre)HY(sen)HY(ta)HY(tion)YH()EA()EH( - - )0 P(The )SM(date)ES(, )SM(date)HY(Time)YH()ES(, )SM(gDay)ES(, - )SM(gMonth)ES(, )SM(gMon)HY(th)HY(Day)YH()ES(, )SM(gYear)ES(, - )SM(gYear)HY(Month)YH()ES(, and )SM(time)ES( XML Schema built-in - types all include an optional time zone compo)HY(nent)YH(. The follow)HY(ing)YH( - )SM(xml_schema::time_zone)ES( base class is used to repre)HY(sent)YH( - this infor)HY(ma)HY(tion)YH(:)EP( - - ) 33 50 PR(namespace xml_schema -{ - class time_zone - { - public: - time_zone \201\202; - time_zone \201short hours, short minutes\202; - - bool - zone_present \201\202 const; - - void - zone_reset \201\202; - - short - zone_hours \201\202 const; - - void - zone_hours \201short\202; - - short - zone_minutes \201\202 const; - - void - zone_minutes \201short\202; - }; - - bool - operator== \201const time_zone&, const time_zone&\202; - - bool)WR( - operator!= \201const time_zone&, const time_zone&\202; -})RP( - - )0 P(The )SM(zone_present\201\202)ES( acces)HY(sor)YH( func)HY(tion)YH( returns )SM(true)ES( - if the time zone is spec)HY(i)HY(fied)YH(. The )SM(zone_reset\201\202)ES( modi)HY(fier)YH( - func)HY(tion)YH( resets the time zone object to the )EM(not spec)HY(i)HY(fied)YH()ES( - state. If the time zone offset is nega)HY(tive)YH( then both hours and - minutes compo)HY(nents)YH( are repre)HY(sented)YH( as nega)HY(tive)YH( inte)HY(gers)YH(.)EP( - - - )0 2 30 H(6.5)WB 79 Sn()WB 34 Sn( )SM(date)ES( Parser)EA()EH( - - )0 P(The return type of the )SM(date_pimpl)ES( parser imple)HY(men)HY(ta)HY(tion)YH( - is )SM(xml_schema::date)ES( which repre)HY(sents)YH( a year, a day, and a month - with an optional time zone. Its inter)HY(face)YH( is presented below. - For more infor)HY(ma)HY(tion)YH( on the base )SM(xml_schema::time_zone)ES( - class refer to )0 33 1 A(Section 6.4, "Time Zone - Repre)HY(sen)HY(ta)HY(tion)YH(")33 0 TN TL()Ec /AF f D(.)EP( - - ) 34 62 PR(namespace xml_schema -{ - class date - { - public: - date \201int year, unsigned short month, unsigned short day\202; - date \201int year, unsigned short month, unsigned short day, - short zone_hours, short zone_minutes\202; - - int - year \201\202 const; - - void - year \201int\202; - - unsigned short - month \201\202 const; - - void - month \201unsigned short\202; - - unsigned short - day \201\202 const; - - void - day \201unsigned short\202; - }; - - bool - operator== \201const date&, const date&\202; -)WR( - bool - operator!= \201const date&, const date&\202; -})RP( - - )0 2 31 H(6.6)WB 80 Sn()WB 35 Sn( )SM(date)HY(Time)YH()ES( Parser)EA()EH( - - )0 P(The return type of the )SM(date_time_pimpl)ES( parser imple)HY(men)HY(ta)HY(tion)YH( - is )SM(xml_schema::date_time)ES( which repre)HY(sents)YH( a year, a month, a day, - hours, minutes, and seconds with an optional time zone. Its inter)HY(face)YH( - is presented below. - For more infor)HY(ma)HY(tion)YH( on the base )SM(xml_schema::time_zone)ES( - class refer to )0 33 1 A(Section 6.4, "Time Zone - Repre)HY(sen)HY(ta)HY(tion)YH(")33 0 TN TL()Ec /AF f D(.)EP( - - ) 56 69 PR(namespace xml_schema -{ - class date_time - { - public: - date_time \201int year, unsigned short month, unsigned short day, - unsigned short hours, unsigned short minutes, - double seconds\202; - - date_time \201int year, unsigned short month, unsigned short day, - unsigned short hours, unsigned short minutes, - double seconds, short zone_hours, short zone_minutes\202; - - int - year \201\202 const; - - void - year \201int\202; - - unsigned short - month \201\202 const; - - void - month \201unsigned short\202; - - unsigned short - day \201\202 const; - - void - day \201unsigned short\202; -)WR( - unsigned short - hours \201\202 const; - - void - hours \201unsigned short\202; - - unsigned short - minutes \201\202 const; - - void - minutes \201unsigned short\202; - - double - seconds \201\202 const; - - void - seconds \201double\202; - }; - - bool - operator== \201const date_time&, const date_time&\202; - - bool - operator!= \201const date_time&, const date_time&\202; -})RP( - - )0 2 32 H(6.7)WB 81 Sn()WB 36 Sn( )SM(dura)HY(tion)YH()ES( Parser)EA()EH( - - )0 P(The return type of the )SM(dura)HY(tion)YH(_pimpl)ES( parser imple)HY(men)HY(ta)HY(tion)YH( - is )SM(xml_schema::dura)HY(tion)YH()ES( which repre)HY(sents)YH( a poten)HY(tially)YH( - nega)HY(tive)YH( dura)HY(tion)YH( in the form of years, months, days, hours, minutes, - and seconds. Its inter)HY(face)YH( is presented below.)EP( - - ) 58 73 PR(namespace xml_schema -{ - class duration - { - public: - duration \201bool negative, - unsigned int years, unsigned int months, unsigned int days, - unsigned int hours, unsigned int minutes, double seconds\202; - - bool - negative \201\202 const; - - void - negative \201bool\202; - - unsigned int - years \201\202 const; - - void - years \201unsigned int\202; - - unsigned int - months \201\202 const; - - void - months \201unsigned int\202; - - unsigned int - days \201\202 const; - - void)WR( - days \201unsigned int\202; - - unsigned int - hours \201\202 const; - - void - hours \201unsigned int\202; - - unsigned int - minutes \201\202 const; - - void - minutes \201unsigned int\202; - - double - seconds \201\202 const; - - void - seconds \201double\202; - }; - - bool - operator== \201const duration&, const duration&\202; - - bool - operator!= \201const duration&, const duration&\202; -})RP( - - - )0 2 33 H(6.8)WB 82 Sn()WB 37 Sn( )SM(gDay)ES( Parser)EA()EH( - - )0 P(The return type of the )SM(gday_pimpl)ES( parser imple)HY(men)HY(ta)HY(tion)YH( - is )SM(xml_schema::gday)ES( which repre)HY(sents)YH( a day of the month with - an optional time zone. Its inter)HY(face)YH( is presented below. - For more infor)HY(ma)HY(tion)YH( on the base )SM(xml_schema::time_zone)ES( - class refer to )0 33 1 A(Section 6.4, "Time Zone - Repre)HY(sen)HY(ta)HY(tion)YH(")33 0 TN TL()Ec /AF f D(.)EP( - - ) 22 68 PR(namespace xml_schema -{ - class gday - { - public: - explicit - gday \201unsigned short day\202; - gday \201unsigned short day, short zone_hours, short zone_minutes\202; - - unsigned short - day \201\202 const; - - void - day \201unsigned short\202; - }; - - bool - operator== \201const gday&, const gday&\202; - - bool - operator!= \201const gday&, const gday&\202; -})RP( - - )0 2 34 H(6.9)WB 83 Sn()WB 38 Sn( )SM(gMonth)ES( Parser)EA()EH( - - )0 P(The return type of the )SM(gmonth_pimpl)ES( parser imple)HY(men)HY(ta)HY(tion)YH( - is )SM(xml_schema::gmonth)ES( which repre)HY(sents)YH( a month of the year - with an optional time zone. Its inter)HY(face)YH( is presented below. - For more infor)HY(ma)HY(tion)YH( on the base )SM(xml_schema::time_zone)ES( - class refer to )0 33 1 A(Section 6.4, "Time Zone - Repre)HY(sen)HY(ta)HY(tion)YH(")33 0 TN TL()Ec /AF f D(.)EP( - - ) 22 72 PR(namespace xml_schema -{ - class gmonth - { - public: - explicit - gmonth \201unsigned short month\202; - gmonth \201unsigned short month, short zone_hours, short zone_minutes\202; - - unsigned short - month \201\202 const; - - void - month \201unsigned short\202; - }; - - bool - operator== \201const gmonth&, const gmonth&\202; - - bool - operator!= \201const gmonth&, const gmonth&\202; -})RP( - - )0 2 35 H(6.10)WB 84 Sn()WB 39 Sn( )SM(gMon)HY(th)HY(Day)YH()ES( Parser)EA()EH( - - )0 P(The return type of the )SM(gmonth_day_pimpl)ES( parser imple)HY(men)HY(ta)HY(tion)YH( - is )SM(xml_schema::gmonth_day)ES( which repre)HY(sents)YH( a day and a month - of the year with an optional time zone. Its inter)HY(face)YH( is presented below. - For more infor)HY(ma)HY(tion)YH( on the base )SM(xml_schema::time_zone)ES( - class refer to )0 33 1 A(Section 6.4, "Time Zone - Repre)HY(sen)HY(ta)HY(tion)YH(")33 0 TN TL()Ec /AF f D(.)EP( - - ) 28 58 PR(namespace xml_schema -{ - class gmonth_day - { - public: - gmonth_day \201unsigned short month, unsigned short day\202; - gmonth_day \201unsigned short month, unsigned short day, - short zone_hours, short zone_minutes\202; - - unsigned short - month \201\202 const; - - void - month \201unsigned short\202; - - unsigned short - day \201\202 const; - - void - day \201unsigned short\202; - }; - - bool - operator== \201const gmonth_day&, const gmonth_day&\202; - - bool - operator!= \201const gmonth_day&, const gmonth_day&\202; -})RP( - - )0 2 36 H(6.11)WB 85 Sn()WB 40 Sn( )SM(gYear)ES( Parser)EA()EH( - - )0 P(The return type of the )SM(gyear_pimpl)ES( parser imple)HY(men)HY(ta)HY(tion)YH( - is )SM(xml_schema::gyear)ES( which repre)HY(sents)YH( a year with - an optional time zone. Its inter)HY(face)YH( is presented below. - For more infor)HY(ma)HY(tion)YH( on the base )SM(xml_schema::time_zone)ES( - class refer to )0 33 1 A(Section 6.4, "Time Zone - Repre)HY(sen)HY(ta)HY(tion)YH(")33 0 TN TL()Ec /AF f D(.)EP( - - ) 22 59 PR(namespace xml_schema -{ - class gyear - { - public: - explicit - gyear \201int year\202; - gyear \201int year, short zone_hours, short zone_minutes\202; - - int - year \201\202 const; - - void - year \201int\202; - }; - - bool - operator== \201const gyear&, const gyear&\202; - - bool - operator!= \201const gyear&, const gyear&\202; -})RP( - - )0 2 37 H(6.12)WB 86 Sn()WB 41 Sn( )SM(gYear)HY(Month)YH()ES( Parser)EA()EH( - - )0 P(The return type of the )SM(gyear_month_pimpl)ES( parser imple)HY(men)HY(ta)HY(tion)YH( - is )SM(xml_schema::gyear_month)ES( which repre)HY(sents)YH( a year and a month - with an optional time zone. Its inter)HY(face)YH( is presented below. - For more infor)HY(ma)HY(tion)YH( on the base )SM(xml_schema::time_zone)ES( - class refer to )0 33 1 A(Section 6.4, "Time Zone - Repre)HY(sen)HY(ta)HY(tion)YH(")33 0 TN TL()Ec /AF f D(.)EP( - - ) 28 55 PR(namespace xml_schema -{ - class gyear_month - { - public: - gyear_month \201int year, unsigned short month\202; - gyear_month \201int year, unsigned short month, - short zone_hours, short zone_minutes\202; - - int - year \201\202 const; - - void - year \201int\202; - - unsigned short - month \201\202 const; - - void - month \201unsigned short\202; - }; - - bool - operator== \201const gyear_month&, const gyear_month&\202; - - bool - operator!= \201const gyear_month&, const gyear_month&\202; -})RP( - - - )0 2 38 H(6.13)WB 87 Sn()WB 42 Sn( )SM(time)ES( Parser)EA()EH( - - )0 P(The return type of the )SM(time_pimpl)ES( parser imple)HY(men)HY(ta)HY(tion)YH( - is )SM(xml_schema::time)ES( which repre)HY(sents)YH( hours, minutes, - and seconds with an optional time zone. Its inter)HY(face)YH( is presented below. - For more infor)HY(ma)HY(tion)YH( on the base )SM(xml_schema::time_zone)ES( - class refer to )0 33 1 A(Section 6.4, "Time Zone - Repre)HY(sen)HY(ta)HY(tion)YH(")33 0 TN TL()Ec /AF f D(.)EP( - - ) 34 72 PR(namespace xml_schema -{ - class time - { - public: - time \201unsigned short hours, unsigned short minutes, double seconds\202; - time \201unsigned short hours, unsigned short minutes, double seconds, - short zone_hours, short zone_minutes\202; - - unsigned short - hours \201\202 const; - - void - hours \201unsigned short\202; - - unsigned short - minutes \201\202 const; - - void - minutes \201unsigned short\202; - - double - seconds \201\202 const; - - void - seconds \201double\202; - }; - - bool - operator== \201const time&, const time&\202; -)WR( - bool - operator!= \201const time&, const time&\202; -})RP( - - - - - - )0 1 39 H(7)WB 88 Sn()WB 43 Sn( Docu)HY(ment)YH( Parser and Error Handling)EA()EH( - - )0 P(In this chapter we will discuss the )SM(xml_schema::docu)HY(ment)YH()ES( - type as well as the error handling mech)HY(a)HY(nisms)YH( provided by the mapping - in more detail. As mentioned in )0 18 1 A(Section 3.4, - "Connect)HY(ing)YH( the Parsers Together")18 0 TN TL()Ec /AF f D(, the inter)HY(face)YH( of - )SM(xml_schema::docu)HY(ment)YH()ES( depends on the under)HY(ly)HY(ing)YH( XML - parser selected \201)0 25 1 A(Section 5.2, "Under)HY(ly)HY(ing)YH( XML - Parser")25 0 TN TL()Ec /AF f D(\202. The follow)HY(ing)YH( sections describe the - )SM(docu)HY(ment)YH()ES( type inter)HY(face)YH( for Xerces-C++ and - Expat as under)HY(ly)HY(ing)YH( parsers.)EP( - - )0 2 40 H(7.1)WB 89 Sn()WB 44 Sn( Xerces-C++ Docu)HY(ment)YH( Parser)EA()EH( - - )0 P(When Xerces-C++ is used as the under)HY(ly)HY(ing)YH( XML parser, the - )SM(docu)HY(ment)YH()ES( type has the follow)HY(ing)YH( inter)HY(face)YH(. Note that - if the char)HY(ac)HY(ter)YH( type is )SM(wchar_t)ES(, then the string type - in the inter)HY(face)YH( becomes )SM(std::wstring)ES( - \201see )0 24 1 A(Section 5.1, "Char)HY(ac)HY(ter)YH( Type and Encod)HY(ing)YH(")24 0 TN TL()Ec /AF f D(\202.)EP( - - ) 248 72 PR(namespace xml_schema -{ - class parser_base; - class error_handler; - - class flags - { - public: - // Do not validate XML documents with the Xerces-C++ validator. - // - static const unsigned long dont_validate; - - // Do not initialize the Xerces-C++ runtime. - // - static const unsigned long dont_initialize; - - // Disable handling of subsequent imports for the same namespace - // in Xerces-C++ 3.1.0 and later. - // - static const unsigned long no_multiple_imports; - }; - - class properties - { - public: - // Add a location for a schema with a target namespace. - // - void - schema_location \201const std::string& namespace_, - const std::string& location\202; -)WR( - // Add a location for a schema without a target namespace. - // - void - no_namespace_schema_location \201const std::string& location\202; - }; - - class document - { - public: - document \201parser_base& root, - const std::string& root_element_name, - bool polymorphic = false\202; - - document \201parser_base& root, - const std::string& root_element_namespace, - const std::string& root_element_name, - bool polymorphic = false\202; - - public: - // Parse URI or a local file. - // - void - parse \201const std::string& uri, - flags = 0, - const properties& = properties \201\202\202; - - // Parse URI or a local file with a user-provided error_handler - // object. - // - void)WR( - parse \201const std::string& uri, - error_handler&, - flags = 0, - const properties& = properties \201\202\202; - - // Parse URI or a local file with a user-provided ErrorHandler - // object. Note that you must initialize the Xerces-C++ runtime - // before calling this function. - // - void - parse \201const std::string& uri, - xercesc::ErrorHandler&, - flags = 0, - const properties& = properties \201\202\202; - - // Parse URI or a local file using a user-provided SAX2XMLReader - // object. Note that you must initialize the Xerces-C++ runtime - // before calling this function. - // - void - parse \201const std::string& uri, - xercesc::SAX2XMLReader&, - flags = 0, - const properties& = properties \201\202\202; - - public: - // Parse std::istream. - // - void - parse \201std::istream&,)WR( - flags = 0, - const properties& = properties \201\202\202; - - // Parse std::istream with a user-provided error_handler object. - // - void - parse \201std::istream&, - error_handler&, - flags = 0, - const properties& = properties \201\202\202; - - // Parse std::istream with a user-provided ErrorHandler object. - // Note that you must initialize the Xerces-C++ runtime before - // calling this function. - // - void - parse \201std::istream&, - xercesc::ErrorHandler&, - flags = 0, - const properties& = properties \201\202\202; - - // Parse std::istream using a user-provided SAX2XMLReader object. - // Note that you must initialize the Xerces-C++ runtime before - // calling this function. - // - void - parse \201std::istream&, - xercesc::SAX2XMLReader&, - flags = 0, - const properties& = properties \201\202\202;)WR( - - public: - // Parse std::istream with a system id. - // - void - parse \201std::istream&, - const std::string& system_id, - flags = 0, - const properties& = properties \201\202\202; - - // Parse std::istream with a system id and a user-provided - // error_handler object. - // - void - parse \201std::istream&, - const std::string& system_id, - error_handler&, - flags = 0, - const properties& = properties \201\202\202; - - // Parse std::istream with a system id and a user-provided - // ErrorHandler object. Note that you must initialize the - // Xerces-C++ runtime before calling this function. - // - void - parse \201std::istream&, - const std::string& system_id, - xercesc::ErrorHandler&, - flags = 0, - const properties& = properties \201\202\202;)WR( - - // Parse std::istream with a system id using a user-provided - // SAX2XMLReader object. Note that you must initialize the - // Xerces-C++ runtime before calling this function. - // - void - parse \201std::istream&, - const std::string& system_id, - xercesc::SAX2XMLReader&, - flags = 0, - const properties& = properties \201\202\202; - - public: - // Parse std::istream with system and public ids. - // - void - parse \201std::istream&, - const std::string& system_id, - const std::string& public_id, - flags = 0, - const properties& = properties \201\202\202; - - // Parse std::istream with system and public ids and a user-provided - // error_handler object. - // - void - parse \201std::istream&, - const std::string& system_id, - const std::string& public_id, - error_handler&,)WR( - flags = 0, - const properties& = properties \201\202\202; - - // Parse std::istream with system and public ids and a user-provided - // ErrorHandler object. Note that you must initialize the Xerces-C++ - // runtime before calling this function. - // - void - parse \201std::istream&, - const std::string& system_id, - const std::string& public_id, - xercesc::ErrorHandler&, - flags = 0, - const properties& = properties \201\202\202; - - // Parse std::istream with system and public ids using a user- - // provided SAX2XMLReader object. Note that you must initialize - // the Xerces-C++ runtime before calling this function. - // - void - parse \201std::istream&, - const std::string& system_id, - const std::string& public_id, - xercesc::SAX2XMLReader&, - flags = 0, - const properties& = properties \201\202\202; - - public: - // Parse InputSource. Note that you must initialize the Xerces-C++ - // runtime before calling this function.)WR( - // - void - parse \201const xercesc::InputSource&, - flags = 0, - const properties& = properties \201\202\202; - - // Parse InputSource with a user-provided error_handler object. - // Note that you must initialize the Xerces-C++ runtime before - // calling this function. - // - void - parse \201const xercesc::InputSource&, - error_handler&, - flags = 0, - const properties& = properties \201\202\202; - - // Parse InputSource with a user-provided ErrorHandler object. - // Note that you must initialize the Xerces-C++ runtime before - // calling this function. - // - void - parse \201const xercesc::InputSource&, - xercesc::ErrorHandler&, - flags = 0, - const properties& = properties \201\202\202; - - // Parse InputSource using a user-provided SAX2XMLReader object. - // Note that you must initialize the Xerces-C++ runtime before - // calling this function. - //)WR( - void - parse \201const xercesc::InputSource&, - xercesc::SAX2XMLReader&, - flags = 0, - const properties& = properties \201\202\202; - }; -})RP( - - )0 P(The )SM(docu)HY(ment)YH()ES( class is a root parser for - the vocab)HY(u)HY(lary)YH(. The first argu)HY(ment)YH( to its construc)HY(tors)YH( is the - parser for the type of the root element. The )SM(parser_base)ES( - class is the base type for all parser skele)HY(tons)YH(. The second and - third argu)HY(ments)YH( to the )SM(docu)HY(ment)YH()ES('s construc)HY(tors)YH( are - the root element's name and names)HY(pace)YH(. The last argu)HY(ment)YH(, - )SM(poly)HY(mor)HY(phic)YH()ES(, spec)HY(i)HY(fies)YH( whether the XML docu)HY(ments)YH( - being parsed use poly)HY(mor)HY(phism)YH(. For more infor)HY(ma)HY(tion)YH( on support - for XML Schema poly)HY(mor)HY(phism)YH( in the C++/Parser mapping refer - to )0 27 1 A(Section 5.4, "Support for Poly)HY(mor)HY(phism)YH(")27 0 TN TL()Ec /AF f D(.)EP( - - )0 P(The rest of the )SM(docu)HY(ment)YH()ES( inter)HY(face)YH( consists of over)HY(loaded)YH( - )SM(parse\201\202)ES( func)HY(tions)YH(. The last two argu)HY(ments)YH( in each of these - func)HY(tions)YH( are )SM(flags)ES( and )SM(prop)HY(er)HY(ties)YH()ES(. The - )SM(flags)ES( argu)HY(ment)YH( allows you to modify the default behav)HY(ior)YH( - of the parsing func)HY(tions)YH(. The )SM(prop)HY(er)HY(ties)YH()ES( argu)HY(ment)YH( allows - you to over)HY(ride)YH( the schema loca)HY(tion)YH( attributes spec)HY(i)HY(fied)YH( in XML - docu)HY(ments)YH(. Note that the schema loca)HY(tion)YH( paths are rela)HY(tive)YH( to an - XML docu)HY(ment)YH( unless they are complete URIs. For example if you want - to use a local schema file then you will need to use a URI in the - form )SM(file:///abso)HY(lute)YH(/path/to/your/schema)ES(.)EP( - - )0 P(A number of over)HY(loaded)YH( )SM(parse\201\202)ES( func)HY(tions)YH( have the - )SM(system_id)ES( and )SM(public_id)ES( argu)HY(ments)YH(. The - system id is a )EM(system)ES( iden)HY(ti)HY(fier)YH( of the resources being - parsed \201for example, URI or a full file path\202. The public id is a - )EM(public)ES( iden)HY(ti)HY(fier)YH( of the resource \201for example, an - appli)HY(ca)HY(tion)YH(-specific name or a rela)HY(tive)YH( file path\202. The system id - is used to resolve rela)HY(tive)YH( paths \201for example, schema paths\202. In - diag)HY(nos)HY(tics)YH( messages the public id is used if it is avail)HY(able)YH(. - Other)HY(wise)YH( the system id is used.)EP( - - )0 P(The error handling mech)HY(a)HY(nisms)YH( employed by the )SM(docu)HY(ment)YH()ES( - parser are described in )0 46 1 A(Section 7.3, "Error - Handling")46 0 TN TL()Ec /AF f D(.)EP( - - )0 2 41 H(7.2)WB 90 Sn()WB 45 Sn( Expat Docu)HY(ment)YH( Parser)EA()EH( - - )0 P(When Expat is used as the under)HY(ly)HY(ing)YH( XML parser, the - )SM(docu)HY(ment)YH()ES( type has the follow)HY(ing)YH( inter)HY(face)YH(. Note that - if the char)HY(ac)HY(ter)YH( type is )SM(wchar_t)ES(, then the string type - in the inter)HY(face)YH( becomes )SM(std::wstring)ES( - \201see )0 24 1 A(Section 5.1, "Char)HY(ac)HY(ter)YH( Type and Encod)HY(ing)YH(")24 0 TN TL()Ec /AF f D(\202.)EP( - - ) 123 72 PR(namespace xml_schema -{ - class parser_base; - class error_handler; - - class document - { - public: - document \201parser_base&, - const std::string& root_element_name, - bool polymorphic = false\202; - - document \201parser_base&, - const std::string& root_element_namespace, - const std::string& root_element_name, - bool polymorphic = false\202; - - public: - // Parse a local file. The file is accessed with std::ifstream - // in binary mode. The std::ios_base::failure exception is used - // to report io errors \201badbit and failbit\202. - void - parse \201const std::string& file\202; - - // Parse a local file with a user-provided error_handler - // object. The file is accessed with std::ifstream in binary - // mode. The std::ios_base::failure exception is used to report - // io errors \201badbit and failbit\202. - // - void - parse \201const std::string& file, error_handler&\202;)WR( - - public: - // Parse std::istream. - // - void - parse \201std::istream&\202; - - // Parse std::istream with a user-provided error_handler object. - // - void - parse \201std::istream&, error_handler&\202; - - // Parse std::istream with a system id. - // - void - parse \201std::istream&, const std::string& system_id\202; - - // Parse std::istream with a system id and a user-provided - // error_handler object. - // - void - parse \201std::istream&, - const std::string& system_id, - error_handler&\202; - - // Parse std::istream with system and public ids. - // - void - parse \201std::istream&, - const std::string& system_id,)WR( - const std::string& public_id\202; - - // Parse std::istream with system and public ids and a user-provided - // error_handler object. - // - void - parse \201std::istream&, - const std::string& system_id, - const std::string& public_id, - error_handler&\202; - - public: - // Parse a chunk of input. You can call these functions multiple - // times with the last call having the last argument true. - // - void - parse \201const void* data, std::size_t size, bool last\202; - - void - parse \201const void* data, std::size_t size, bool last, - error_handler&\202; - - void - parse \201const void* data, std::size_t size, bool last, - const std::string& system_id\202; - - void - parse \201const void* data, std::size_t size, bool last, - const std::string& system_id, - error_handler&\202;)WR( - - void - parse \201const void* data, std::size_t size, bool last, - const std::string& system_id, - const std::string& public_id\202; - - void - parse \201const void* data, std::size_t size, bool last, - const std::string& system_id, - const std::string& public_id, - error_handler&\202; - - public: - // Low-level Expat-specific parsing API. - // - void - parse_begin \201XML_Parser\202; - - void - parse_begin \201XML_Parser, const std::string& public_id\202; - - void - parse_begin \201XML_Parser, error_handler&\202; - - void - parse_begin \201XML_Parser, - const std::string& public_id, - error_handler&\202; - void - parse_end \201\202;)WR( - }; -})RP( - - )0 P(The )SM(docu)HY(ment)YH()ES( class is a root parser for - the vocab)HY(u)HY(lary)YH(. The first argu)HY(ment)YH( to its construc)HY(tors)YH( is the - parser for the type of the root element. The )SM(parser_base)ES( - class is the base type for all parser skele)HY(tons)YH(. The second and - third argu)HY(ments)YH( to the )SM(docu)HY(ment)YH()ES('s construc)HY(tors)YH( are - the root element's name and names)HY(pace)YH(. The last argu)HY(ment)YH(, - )SM(poly)HY(mor)HY(phic)YH()ES(, spec)HY(i)HY(fies)YH( whether the XML docu)HY(ments)YH( - being parsed use poly)HY(mor)HY(phism)YH(. For more infor)HY(ma)HY(tion)YH( on support - for XML Schema poly)HY(mor)HY(phism)YH( in the C++/Parser mapping refer - to )0 27 1 A(Section 5.4, "Support for Poly)HY(mor)HY(phism)YH(")27 0 TN TL()Ec /AF f D(.)EP( - - )0 P(A number of over)HY(loaded)YH( )SM(parse\201\202)ES( func)HY(tions)YH( have the - )SM(system_id)ES( and )SM(public_id)ES( argu)HY(ments)YH(. The - system id is a )EM(system)ES( iden)HY(ti)HY(fier)YH( of the resources being - parsed \201for example, URI or a full file path\202. The public id is a - )EM(public)ES( iden)HY(ti)HY(fier)YH( of the resource \201for example, an - appli)HY(ca)HY(tion)YH(-specific name or a rela)HY(tive)YH( file path\202. The system id - is used to resolve rela)HY(tive)YH( paths. In diag)HY(nos)HY(tics)YH( messages the - public id is used if it is avail)HY(able)YH(. Other)HY(wise)YH( the system id - is used.)EP( - - )0 P(The )SM(parse_begin\201\202)ES( and )SM(parse_end\201\202)ES( func)HY(tions)YH( - present a low-level, Expat-specific parsing API for maximum control. - A typical use-case would look like this \201pseudo-code\202:)EP( - - ) 20 55 PR(xxx_pimpl root_p; -document doc_p \201root_p, "root"\202; - -root_p.pre \201\202; -doc_p.parse_begin \201xml_parser, "file.xml"\202; - -while \201more_data_to_parse\202 -{ - // Call XML_Parse or XML_ParseBuffer. - - if \201status == XML_STATUS_ERROR\202 - break; -} - -// Call parse_end even in case of an error to translate -// XML and Schema errors to exceptions or error_handler -// calls. -// -doc.parse_end \201\202; -result_type result \201root_p.post_xxx \201\202\202;)RP( - - )0 P(Note that if your vocab)HY(u)HY(lary)YH( uses XML names)HY(paces)YH(, the - )SM(XML_Parser)HY(Cre)HY(at)HY(eNS)YH(\201\202)ES( func)HY(tions)YH( should be used to create - the XML parser. Space \201)SM(XML_Char \201' '\202)ES(\202 should be used - as a sepa)HY(ra)HY(tor)YH( \201the second argu)HY(ment)YH( to )SM(XML_Parser)HY(Cre)HY(at)HY(eNS)YH(\201\202)ES(\202. - )EP( - - )0 P(The error handling mech)HY(a)HY(nisms)YH( employed by the )SM(docu)HY(ment)YH()ES( - parser are described in )0 46 1 A(Section 7.3, "Error - Handling")46 0 TN TL()Ec /AF f D(.)EP( - - - )0 2 42 H(7.3)WB 91 Sn()WB 46 Sn( Error Handling)EA()EH( - - )0 P(There are three cate)HY(gories)YH( of errors that can result from running - a parser on an XML docu)HY(ment)YH(: System, XML, and Appli)HY(ca)HY(tion)YH(. - The System cate)HY(gory)YH( contains memory allo)HY(ca)HY(tion)YH( and file/stream - oper)HY(a)HY(tion)YH( errors. The XML cate)HY(gory)YH( covers XML parsing and - well-formed)HY(ness)YH( check)HY(ing)YH( as well as XML Schema vali)HY(da)HY(tion)YH( errors. - Finally, the Appli)HY(ca)HY(tion)YH( cate)HY(gory)YH( is for appli)HY(ca)HY(tion)YH( logic errors - that you may want to prop)HY(a)HY(gate)YH( from parser imple)HY(men)HY(ta)HY(tions)YH( to the - caller of the parser. - )EP( - - )0 P(The System errors are mapped to the stan)HY(dard)YH( excep)HY(tions)YH(. The - out of memory condi)HY(tion)YH( is indi)HY(cated)YH( by throw)HY(ing)YH( an instance - of )SM(std::bad_alloc)ES(. The stream oper)HY(a)HY(tion)YH( errors - are reported either by throw)HY(ing)YH( an instance of - )SM(std::ios_base::failure)ES( if excep)HY(tions)YH( are enabled - or by setting the stream state.)EP( - - )0 P(Note that if you are parsing )SM(std::istream)ES( on - which excep)HY(tions)YH( are not enabled, then you will need to - check the stream state before calling the )SM(post\201\202)ES( - call)HY(back)YH(, as shown in the follow)HY(ing)YH( example:)EP( - - ) 24 50 PR(int -main \201int argc, char* argv[]\202 -{ - ... - - std::ifstream ifs \201argv[1]\202; - - if \201ifs.fail \201\202\202 - { - cerr << argv[1] << ": unable to open" << endl; - return 1; - } - - root_p.pre \201\202; - doc_p.parse \201ifs\202; - - if \201ifs.fail \201\202\202 - { - cerr << argv[1] << ": io failure" << endl; - return 1; - } - - result_type result \201root_p.post_xxx \201\202\202; -})RP( - - )0 P(The above example can be rewrit)HY(ten)YH( to use excep)HY(tions)YH( - as shown below:)EP( - - ) 21 68 PR(int -main \201int argc, char* argv[]\202 -{ - try - { - ... - - std::ifstream ifs; - ifs.exceptions \201std::ifstream::badbit | std::ifstream::failbit\202; - ifs.open \201argv[1]\202; - - root_p.pre \201\202; - doc_p.parse \201ifs\202; - result_type result \201root_p.post_xxx \201\202\202; - } - catch \201const std::ifstream::failure&\202 - { - cerr << argv[1] << ": unable to open or io failure" << endl; - return 1; - } -})RP( - - - )0 P(For report)HY(ing)YH( appli)HY(ca)HY(tion)YH( errors from parsing call)HY(backs)YH(, you - can throw any excep)HY(tions)YH( of your choice. They are prop)HY(a)HY(gated)YH( to - the caller of the parser without any alter)HY(ations)YH(.)EP( - - )0 P(The XML errors can be reported either by throw)HY(ing)YH( the - )SM(xml_schema::parsing)ES( excep)HY(tion)YH( or by a call)HY(back)YH( - to the )SM(xml_schema::error_handler)ES( object \201and - )SM(xercesc::ErrorHan)HY(dler)YH()ES( object in case of Xerces-C++\202.)EP( - - )0 P(The )SM(xml_schema::parsing)ES( excep)HY(tion)YH( contains - a list of warn)HY(ings)YH( and errors that were accu)HY(mu)HY(lated)YH( during - parsing. Note that this excep)HY(tion)YH( is thrown only if there - was an error. This makes it impos)HY(si)HY(ble)YH( to obtain warn)HY(ings)YH( - from an other)HY(wise)YH( success)HY(ful)YH( parsing using this mech)HY(a)HY(nism)YH(. - The follow)HY(ing)YH( listing shows the defi)HY(ni)HY(tion)YH( of - )SM(xml_schema::parsing)ES( excep)HY(tion)YH(. Note that if the - char)HY(ac)HY(ter)YH( type is )SM(wchar_t)ES(, then the string type - and output stream type in the defi)HY(ni)HY(tion)YH( become - )SM(std::wstring)ES( and )SM(std::wostream)ES(, - respec)HY(tively)YH( \201see )0 24 1 A(Section 5.1, "Char)HY(ac)HY(ter)YH( Type - and Encod)HY(ing)YH(")24 0 TN TL()Ec /AF f D(\202.)EP( - - ) 82 51 PR(namespace xml_schema -{ - class exception: public std::exception - { - protected: - virtual void - print \201std::ostream&\202 const = 0; - }; - - inline std::ostream& - operator<< \201std::ostream& os, const exception& e\202 - { - e.print \201os\202; - return os; - } - - - class severity - { - public: - enum value - { - warning, - error - }; - }; - - - class error - { - public:)WR( - error \201xml_schema::severity, - const std::string& id, - unsigned long line, - unsigned long column, - const std::string& message\202; - - xml_schema::severity - severity \201\202 const; - - const std::string& - id \201\202 const; - - unsigned long - line \201\202 const; - - unsigned long - column \201\202 const; - - const std::string& - message \201\202 const; - }; - - std::ostream& - operator<< \201std::ostream&, const error&\202; - - - class diagnostics: public std::vector - { - }; -)WR( - std::ostream& - operator<< \201std::ostream&, const diagnostics&\202; - - - class parsing: public exception - { - public: - parsing \201\202; - parsing \201const xml_schema::diagnostics&\202; - - const xml_schema::diagnostics& - diagnostics \201\202 const; - - virtual const char* - what \201\202 const throw \201\202; - - protected: - virtual void - print \201std::ostream&\202 const; - }; -})RP( - - )0 P(The follow)HY(ing)YH( example shows how we can catch and print this - excep)HY(tion)YH(. The code will print diag)HY(nos)HY(tics)YH( messages one per line - in case of an error.)EP( - - ) 13 38 PR(int -main \201int argc, char* argv[]\202 -{ - try - { - // Parse. - } - catch \201const xml_schema::parsing& e\202 - { - cerr << e << endl; - return 1; - } -})RP( - - )0 P(With the )SM(error_handler)ES( approach the diag)HY(nos)HY(tics)YH( - messages are deliv)HY(ered)YH( as parsing progresses. The follow)HY(ing)YH( - listing presents the defi)HY(ni)HY(tion)YH( of the )SM(error_handler)ES( - inter)HY(face)YH(. Note that if the char)HY(ac)HY(ter)YH( type is )SM(wchar_t)ES(, - then the string type in the inter)HY(face)YH( becomes )SM(std::wstring)ES( - \201see )0 24 1 A(Section 5.1, "Char)HY(ac)HY(ter)YH( Type and Encod)HY(ing)YH(")24 0 TN TL()Ec /AF f D(\202.)EP( - - ) 24 44 PR(namespace xml_schema -{ - class error_handler - { - public: - class severity - { - public: - enum value - { - warning, - error, - fatal - }; - }; - - virtual bool - handle \201const std::string& id, - unsigned long line, - unsigned long column, - severity, - const std::string& message\202 = 0; - }; -})RP( - - )0 P(The return value of the )SM(handle\201\202)ES( func)HY(tion)YH( indi)HY(cates)YH( whether - parsing should continue if possi)HY(ble)YH(. The error with the fatal sever)HY(ity)YH( - level termi)HY(nates)YH( the parsing process regard)HY(less)YH( of the returned value. - At the end of the parsing process with an error that was reported via - the )SM(error_handler)ES( object, an empty - )SM(xml_schema::parsing)ES( excep)HY(tion)YH( is thrown to indi)HY(cate)YH( - the failure to the caller. You can alter this behav)HY(ior)YH( by throw)HY(ing)YH( - your own excep)HY(tion)YH( from the )SM(handle\201\202)ES( func)HY(tion)YH(.)EP( - - - - - - )0 1 43 H(Appendix)WB 92 Sn()WB 47 Sn( A \236 Supported XML Schema Constructs)EA()EH( - - )0 P(The C++/Parser mapping supports vali)HY(da)HY(tion)YH( of the follow)HY(ing)YH( W3C XML - Schema constructs in the gener)HY(ated)YH( code.)EP( - - - )1 PT( - - - )BR( -)BR( - -)WB NL -/TE t D NP TU PM 0 eq and{/Pn () D showpage}if end restore diff --git a/xsd/documentation/cxx/parser/guide/figure-1.png b/xsd/documentation/cxx/parser/guide/figure-1.png deleted file mode 100644 index 15d1723..0000000 Binary files a/xsd/documentation/cxx/parser/guide/figure-1.png and /dev/null differ diff --git a/xsd/documentation/cxx/parser/guide/figure-1.svg b/xsd/documentation/cxx/parser/guide/figure-1.svg deleted file mode 100644 index d994a79..0000000 --- a/xsd/documentation/cxx/parser/guide/figure-1.svg +++ /dev/null @@ -1,373 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - class people_pimpl{ void person ();}; - - - - class person_pimpl{ void first_name (string); void last_name (string); void gender (); void age (short); void post_person ();}; - - - - class string_pimpl{ string post_string ();}; - - - class short_pimpl{ short post_short ();}; - - - class gender_pimpl{ void post_gender ();}; - - - - - - - diff --git a/xsd/documentation/cxx/parser/guide/guide.html2ps b/xsd/documentation/cxx/parser/guide/guide.html2ps deleted file mode 100644 index 1021e9f..0000000 --- a/xsd/documentation/cxx/parser/guide/guide.html2ps +++ /dev/null @@ -1,65 +0,0 @@ -@html2ps { - option { - toc: hb; - colour: 1; - hyphenate: 1; - titlepage: 1; - } - - datefmt: "%B %Y"; - - titlepage { - content: " -
-

C++/Parser Mapping

-

Getting Started Guide

-

 

-

 

-

 

-

 

-

 

-

 

-
-

Copyright © 2005-2010 CODE SYNTHESIS TOOLS CC

- -

Permission is granted to copy, distribute and/or modify this - document under the terms of the - GNU Free - Documentation License, version 1.2; with no Invariant Sections, - no Front-Cover Texts and no Back-Cover Texts. -

- -

This document is available in the following formats: - XHTML, - PDF, and - PostScript.

"; - } - - toc { - indent: 2em; - } - - header { - odd-right: $H; - even-left: $H; - } - - footer { - odd-left: $D; - odd-center: $T; - odd-right: $N; - - even-left: $N; - even-center: $T; - even-right: $D; - } -} - -body { - font-size: 12pt; - text-align: justify; -} - -pre { - font-size: 10pt; -} diff --git a/xsd/documentation/cxx/parser/guide/index.xhtml b/xsd/documentation/cxx/parser/guide/index.xhtml deleted file mode 100644 index b65bcfe..0000000 --- a/xsd/documentation/cxx/parser/guide/index.xhtml +++ /dev/null @@ -1,4141 +0,0 @@ - - - - - - C++/Parser Mapping Getting Started Guide - - - - - - - - - - - - - -
-
- -
- -
-
C++/Parser Mapping
-
Getting Started Guide
- -

Copyright © 2005-2010 CODE SYNTHESIS TOOLS CC

- -

Permission is granted to copy, distribute and/or modify this - document under the terms of the - GNU Free - Documentation License, version 1.2; with no Invariant Sections, - no Front-Cover Texts and no Back-Cover Texts. -

- -

This document is available in the following formats: - XHTML, - PDF, and - PostScript.

- -
- -

Table of Contents

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Preface - - - -
About This Document
More Information
-
1Introduction - - - -
1.1Mapping Overview
1.2Benefits
-
2Hello World Example - - - - - -
2.1Writing XML Document and Schema
2.2Translating Schema to C++
2.3Implementing Application Logic
2.4Compiling and Running
-
3Parser Skeletons - - - - - -
3.1Implementing the Gender Parser
3.2Implementing the Person Parser
3.3Implementing the People Parser
3.4Connecting the Parsers Together
-
4Type Maps - - - - -
4.1Object Model
4.2Type Map File Format
4.3Parser Implementations
-
5Mapping Configuration - - - - - -
5.1Character Type and Encoding
5.2Underlying XML Parser
5.3XML Schema Validation
5.4Support for Polymorphism
-
6Built-In XML Schema Type Parsers - - - - - - - - - - - - - - -
6.1QName Parser
6.2NMTOKENS and IDREFS Parsers
6.3base64Binary and hexBinary Parsers
6.4Time Zone Representation
6.5date Parser
6.6dateTime Parser
6.7duration Parser
6.8gDay Parser
6.9gMonth Parser
6.10gMonthDay Parser
6.11gYear Parser
6.12gYearMonth Parser
6.13time Parser
-
7Document Parser and Error Handling - - - - -
7.1Xerces-C++ Document Parser
7.2Expat Document Parser
7.3Error Handling
-
Appendix A — Supported XML Schema Constructs
-
- -

Preface

- -

About This Document

- -

The goal of this document is to provide you with an understanding of - the C++/Parser programming model and allow you to efficiently evaluate - XSD against your project's technical requirements. As such, this - document is intended for C++ developers and software architects - who are looking for an XML processing solution. Prior experience - with XML and C++ is required to understand this document. Basic - understanding of XML Schema is advantageous but not expected - or required. -

- - -

More Information

- -

Beyond this guide, you may also find the following sources of - information useful:

- -
    -
  • XSD - Compiler Command Line Manual
  • - -
  • The examples/cxx/parser/ directory in the XSD - distribution contains a collection of examples and a README - file with an overview of each example.
  • - -
  • The README file in the XSD distribution explains - how to compile the examples on various platforms.
  • - -
  • The xsd-users - mailing list is the place to ask technical questions about XSD and the C++/Parser mapping. - Furthermore, the archives - may already have answers to some of your questions.
  • - -
- - - -

1 Introduction

- -

Welcome to CodeSynthesis XSD and the C++/Parser mapping. XSD is a - cross-platform W3C XML Schema to C++ data binding compiler. C++/Parser - is a W3C XML Schema to C++ mapping that represents an XML vocabulary - as a set of parser skeletons which you can implement to perform XML - processing as required by your application logic. -

- -

1.1 Mapping Overview

- -

The C++/Parser mapping provides event-driven, stream-oriented - XML parsing, XML Schema validation, and C++ data binding. It was - specifically designed and optimized for high performance and - small footprint. Based on the static analysis of the schemas, XSD - generates compact, highly-optimized hierarchical state machines - that combine data extraction, validation, and even dispatching - in a single step. As a result, the generated code is typically - 2-10 times faster than general-purpose validating XML parsers - while maintaining the lowest static and dynamic memory footprints. -

- -

To speed up application development, the C++/Parser mapping - can be instructed to generate sample parser implementations - and a test driver which can then be filled with the application - logic code. The mapping also provides a wide range of - mechanisms for controlling and customizing the generated code.

- -

The next chapter shows how to create a simple application that uses - the C++/Parser mapping to parse, validate, and extract data from a - simple XML document. The following chapters show how to - use the C++/Parser mapping in more detail.

- -

1.2 Benefits

- -

Traditional XML access APIs such as Document Object Model (DOM) - or Simple API for XML (SAX) have a number of drawbacks that - make them less suitable for creating robust and maintainable - XML processing applications. These drawbacks include: -

- -
    -
  • Generic representation of XML in terms of elements, attributes, - and text forces an application developer to write a substantial - amount of bridging code that identifies and transforms pieces - of information encoded in XML to a representation more suitable - for consumption by the application logic.
  • - -
  • String-based flow control defers error detection to runtime. - It also reduces code readability and maintainability.
  • - -
  • Lack of type safety because the data is represented - as text.
  • - -
  • Resulting applications are hard to debug, change, and - maintain.
  • -
- -

In contrast, statically-typed, vocabulary-specific parser - skeletons produced by the C++/Parser mapping allow you to - operate in your domain terms instead of the generic elements, - attributes, and text. Static typing helps catch errors at - compile-time rather than at run-time. Automatic code generation - frees you for more interesting tasks (such as doing something - useful with the information stored in the XML documents) and - minimizes the effort needed to adapt your applications to - changes in the document structure. To summarize, the C++/Parser - mapping has the following key advantages over generic XML - access APIs:

- -
    -
  • Ease of use. The generated code hides all the complexity - associated with recreating the document structure, maintaining the - dispatch state, and converting the data from the text representation - to data types suitable for manipulation by the application logic. - Parser skeletons also provide a convenient mechanism for building - custom in-memory representations.
  • - -
  • Natural representation. The generated parser skeletons - implement parser callbacks as virtual functions with names - corresponding to elements and attributes in XML. As a result, - you process the XML data using your domain vocabulary instead - of generic elements, attributes, and text. -
  • - -
  • Concise code. With a separate parser skeleton for each - XML Schema type, the application implementation is - simpler and thus easier to read and understand.
  • - -
  • Safety. The XML data is delivered to parser callbacks as - statically typed objects. The parser callbacks themselves are virtual - functions. This helps catch programming errors at compile-time - rather than at runtime.
  • - -
  • Maintainability. Automatic code generation minimizes the - effort needed to adapt the application to changes in the - document structure. With static typing, the C++ compiler - can pin-point the places in the application code that need to be - changed.
  • - -
  • Efficiency. The generated parser skeletons combine - data extraction, validation, and even dispatching in a single - step. This makes them much more efficient than traditional - architectures with separate stages for validation and data - extraction/dispatch.
  • -
- - - - -

2 Hello World Example

- -

In this chapter we will examine how to parse a very simple XML - document using the XSD-generated C++/Parser skeletons. - The code presented in this chapter is based on the hello - example which can be found in the examples/cxx/parser/ - directory of the XSD distribution.

- -

2.1 Writing XML Document and Schema

- -

First, we need to get an idea about the structure - of the XML documents we are going to process. Our - hello.xml, for example, could look like this:

- -
-<?xml version="1.0"?>
-<hello>
-
-  <greeting>Hello</greeting>
-
-  <name>sun</name>
-  <name>moon</name>
-  <name>world</name>
-
-</hello>
-  
- -

Then we can write a description of the above XML in the - XML Schema language and save it into hello.xsd:

- -
-<?xml version="1.0"?>
-<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
-
-  <xs:complexType name="hello">
-    <xs:sequence>
-      <xs:element name="greeting" type="xs:string"/>
-      <xs:element name="name" type="xs:string" maxOccurs="unbounded"/>
-    </xs:sequence>
-  </xs:complexType>
-
-  <xs:element name="hello" type="hello"/>
-
-</xs:schema>
-  
- -

Even if you are not familiar with XML Schema, it - should be easy to connect declarations in hello.xsd - to elements in hello.xml. The hello type - is defined as a sequence of the nested greeting and - name elements. Note that the term sequence in XML - Schema means that elements should appear in a particular order - as opposed to appearing multiple times. The name - element has its maxOccurs property set to - unbounded which means it can appear multiple times - in an XML document. Finally, the globally-defined hello - element prescribes the root element for our vocabulary. For an - easily-approachable introduction to XML Schema refer to - XML Schema Part 0: - Primer.

- -

The above schema is a specification of our XML vocabulary; it tells - everybody what valid documents of our XML-based language should look - like. The next step is to compile this schema to generate - the object model and parsing functions.

- -

2.2 Translating Schema to C++

- -

Now we are ready to translate our hello.xsd to C++ parser - skeletons. To do this we invoke the XSD compiler from a terminal - (UNIX) or a command prompt (Windows): -

- -
-$ xsd cxx-parser --xml-parser expat hello.xsd
-  
- -

The --xml-parser option indicates that we want to - use Expat as the underlying XML parser (see Section - 5.2, "Underlying XML Parser"). The XSD compiler produces two - C++ files: hello-pskel.hxx and hello-pskel.cxx. - The following code fragment is taken from hello-pskel.hxx; - it should give you an idea about what gets generated: -

- -
-class hello_pskel
-{
-public:
-  // Parser callbacks. Override them in your implementation.
-  //
-  virtual void
-  pre ();
-
-  virtual void
-  greeting (const std::string&);
-
-  virtual void
-  name (const std::string&);
-
-  virtual void
-  post_hello ();
-
-  // Parser construction API.
-  //
-  void
-  greeting_parser (xml_schema::string_pskel&);
-
-  void
-  name_parser (xml_schema::string_pskel&);
-
-  void
-  parsers (xml_schema::string_pskel& /* greeting */,
-           xml_schema::string_pskel& /* name */);
-
-private:
-  ...
-};
-  
- -

The first four member functions shown above are called parser - callbacks. You would normally override them in your implementation - of the parser to do something useful. Let's go through all of - them one by one.

- -

The pre() function is an initialization callback. It is - called when a new element of type hello is about - to be parsed. You would normally use this function to allocate a new - instance of the resulting type or clear accumulators that are used - to gather information during parsing. The default implementation - of this function does nothing.

- -

The post_hello() function is a finalization callback. Its - name is constructed by adding the parser skeleton name to the - post_ prefix. The finalization callback is called when - parsing of the element is complete and the result, if any, should - be returned. Note that in our case the return type of - post_hello() is void which means there - is nothing to return. More on parser return types later. -

- -

You may be wondering why the finalization callback is called - post_hello() instead of post() just - like pre(). The reason for this is that - finalization callbacks can have different return types and - result in function signature clashes across inheritance - hierarchies. To prevent this the signatures of finalization - callbacks are made unique by adding the type name to their names.

- -

The greeting() and name() functions are - called when the greeting and name elements - have been parsed, respectively. Their arguments are of type - std::string and contain the data extracted from XML.

- -

The last three functions are for connecting parsers to each other. - For example, there is a predefined parser for built-in XML Schema type - string in the XSD runtime. We will be using - it to parse the contents of greeting and - name elements, as shown in the next section.

- -

2.3 Implementing Application Logic

- -

At this point we have all the parts we need to do something useful - with the information stored in our XML document. The first step is - to implement the parser: -

- -
-#include <iostream>
-#include "hello-pskel.hxx"
-
-class hello_pimpl: public hello_pskel
-{
-public:
-  virtual void
-  greeting (const std::string& g)
-  {
-    greeting_ = g;
-  }
-
-  virtual void
-  name (const std::string& n)
-  {
-    std::cout << greeting_ << ", " << n << "!" << std::endl;
-  }
-
-private:
-  std::string greeting_;
-};
-  
- -

We left both pre() and post_hello() with the - default implementations; we don't have anything to initialize or - return. The rest is pretty straightforward: we store the greeting - in a member variable and later, when parsing names, use it to - say hello.

- -

An observant reader my ask what happens if the name - element comes before greeting? Don't we need to - make sure greeting_ was initialized and report - an error otherwise? The answer is no, we don't have to do - any of this. The hello_pskel parser skeleton - performs validation of XML according to the schema from which - it was generated. As a result, it will check the order - of the greeting and name elements - and report an error if it is violated.

- -

Now it is time to put this parser implementation to work:

- -
-using namespace std;
-
-int
-main (int argc, char* argv[])
-{
-  try
-  {
-    // Construct the parser.
-    //
-    xml_schema::string_pimpl string_p;
-    hello_pimpl hello_p;
-
-    hello_p.greeting_parser (string_p);
-    hello_p.name_parser (string_p);
-
-    // Parse the XML instance.
-    //
-    xml_schema::document doc_p (hello_p, "hello");
-
-    hello_p.pre ();
-    doc_p.parse (argv[1]);
-    hello_p.post_hello ();
-  }
-  catch (const xml_schema::exception& e)
-  {
-    cerr << e << endl;
-    return 1;
-  }
-}
-  
- -

The first part of this code snippet instantiates individual parsers - and assembles them into a complete vocabulary parser. - xml_schema::string_pimpl is an implementation of a parser - for built-in XML Schema type string. It is provided by - the XSD runtime along with parsers for other built-in types (for - more information on the built-in parsers see Chapter 6, - "Built-In XML Schema Type Parsers"). We use string_pimpl - to parse the greeting and name elements as - indicated by the calls to greeting_parser() and - name_parser(). -

- -

Then we instantiate a document parser (doc_p). The - first argument to its constructor is the parser for - the root element (hello_p in our case). The - second argument is the root element name. -

- -

The final piece is the calls to pre(), parse(), - and post_hello(). The call to parse() - perform the actual XML parsing while the calls to pre() and - post_hello() make sure that the parser for the root - element can perform proper initialization and cleanup.

- -

While our parser implementation and test driver are pretty small and - easy to write by hand, for bigger XML vocabularies it can be a - substantial effort. To help with this task XSD can automatically - generate sample parser implementations and a test driver from your - schemas. You can request the generation of a sample implementation with - empty function bodies by specifying the --generate-noop-impl - option. Or you can generate a sample implementation that prints the - data store in XML by using the --generate-print-impl - option. To request the generation of a test driver you can use the - --generate-test-driver option. For more information - on these options refer to the - XSD - Compiler Command Line Manual. The 'generated' example - in the XSD distribution shows the sample implementation generation - feature in action.

- - -

2.4 Compiling and Running

- -

After saving all the parts from the previous section in - driver.cxx, we are ready to compile our first - application and run it on the test XML document. On a UNIX - system this can be done with the following commands: -

- -
-$ c++ -I.../libxsd -c driver.cxx hello-pskel.cxx
-$ c++ -o driver driver.o hello-pskel.o -lexpat
-$ ./driver hello.xml
-Hello, sun!
-Hello, moon!
-Hello, world!
-  
- -

Here .../libxsd represents the path to the - libxsd directory in the XSD distribution. - We can also test the error handling. To test XML well-formedness - checking, we can try to parse hello-pskel.hxx:

- -
-$ ./driver hello-pskel.hxx
-hello-pskel.hxx:1:0: not well-formed (invalid token)
-  
- -

We can also try to parse a valid XML but not from our - vocabulary, for example hello.xsd:

- -
-$ ./driver hello.xsd
-hello.xsd:2:0: expected element 'hello' instead of
-'http://www.w3.org/2001/XMLSchema#schema'
-  
- - - - - -

3 Parser Skeletons

- -

As we have seen in the previous chapter, the XSD compiler generates - a parser skeleton class for each type defined in XML Schema. In - this chapter we will take a closer look at different functions - that comprise a parser skeleton as well as the way to connect - our implementations of these parser skeletons to create a complete - parser.

- -

In this and subsequent chapters we will use the following schema - that describes a collection of person records. We save it in - people.xsd:

- -
-<?xml version="1.0"?>
-<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
-
-  <xs:simpleType name="gender">
-    <xs:restriction base="xs:string">
-      <xs:enumeration value="male"/>
-      <xs:enumeration value="female"/>
-    </xs:restriction>
-  </xs:simpleType>
-
-  <xs:complexType name="person">
-    <xs:sequence>
-      <xs:element name="first-name" type="xs:string"/>
-      <xs:element name="last-name" type="xs:string"/>
-      <xs:element name="gender" type="gender"/>
-      <xs:element name="age" type="xs:short"/>
-    </xs:sequence>
-  </xs:complexType>
-
-  <xs:complexType name="people">
-    <xs:sequence>
-      <xs:element name="person" type="person" maxOccurs="unbounded"/>
-    </xs:sequence>
-  </xs:complexType>
-
-  <xs:element name="people" type="people"/>
-
-</xs:schema>
-  
- -

A sample XML instance to go along with this schema is saved - in people.xml:

- -
-<?xml version="1.0"?>
-<people>
-  <person>
-    <first-name>John</first-name>
-    <last-name>Doe</last-name>
-    <gender>male</gender>
-    <age>32</age>
-  </person>
-  <person>
-    <first-name>Jane</first-name>
-    <last-name>Doe</last-name>
-    <gender>female</gender>
-    <age>28</age>
-  </person>
-</people>
-  
- -

Compiling people.xsd with the XSD compiler results - in three parser skeletons being generated: gender_pskel, - person_pskel, and people_pskel. We are going - to examine and implement each of them in the subsequent sections.

- -

3.1 Implementing the Gender Parser

- -

The generated gender_pskel parser skeleton looks like - this:

- -
-class gender_pskel: public virtual xml_schema::string_pskel
-{
-public:
-  // Parser callbacks. Override them in your implementation.
-  //
-  virtual void
-  pre ();
-
-  virtual void
-  post_gender ();
-};
-  
- -

Notice that gender_pskel inherits from - xml_schema::string_skel which is a parser skeleton - for built-in XML Schema type string and is - predefined in the XSD runtime library. This is an example - of the general rule that parser skeletons follow: if a type - in XML Schema inherits from another then there will be an - equivalent inheritance between the corresponding parser - skeleton classes.

- -

The pre() and post_gender() callbacks - should look familiar from the previous chapter. Let's now - implement the parser. Our implementation will simply print - the gender to cout:

- - -
-class gender_pimpl: public gender_pskel,
-                    public xml_schema::string_pimpl
-{
-public:
-  virtual void
-  post_gender ()
-  {
-    std::string s = post_string ();
-    cout << "gender: " << s << endl;
-  }
-};
-  
- -

While the code is quite short, there is a lot going on. First, - notice that we are inheriting from gender_pskel and - from xml_schema::string_pimpl. We've encountered - xml_schema::string_pimpl already; it is an - implementation of the xml_schema::string_pskel parser - skeleton for built-in XML Schema type string.

- -

This is another common theme in the C++/Parser programming model: - reusing implementations of the base parsers in the derived ones with - the C++ mixin idiom. In our case, string_pimpl will - do all the dirty work of extracting the data and we can just get - it at the end with the call to post_string().

- -

In case you are curious, here is what - xml_schema::string_pskel and - xml_schema::string_pimpl look like:

- -
-namespace xml_schema
-{
-  class string_pskel: public simple_content
-  {
-  public:
-    virtual std::string
-    post_string () = 0;
-  };
-
-  class string_pimpl: public virtual string_pskel
-  {
-  public:
-    virtual void
-    _pre ();
-
-    virtual void
-    _characters (const xml_schema::ro_string&);
-
-    virtual std::string
-    post_string ();
-
-  protected:
-    std::string str_;
-  };
-}
-  
- -

There are three new pieces in this code that we haven't seen yet. - They are the simple_content class as well as - the _pre() and _characters() functions. - The simple_content class is defined in the XSD - runtime and is a base class for all parser skeletons that conform - to the simple content model in XML Schema. Types with the - simple content model cannot have nested elements—only text - and attributes. There is also the complex_content - class which corresponds to the complex content mode (types with - nested elements, for example, person from - people.xsd).

- -

The _pre() function is a parser callback. Remember we - talked about the pre() and post_*() callbacks - in the previous chapter? There are actually two more callbacks - with similar roles: _pre() and _post (). - As a result, each parser skeleton has four special callbacks:

- -
-  virtual void
-  pre ();
-
-  virtual void
-  _pre ();
-
-  virtual void
-  _post ();
-
-  virtual void
-  post_name ();
-  
- -

pre() and _pre() are initialization - callbacks. They get called in that order before a new instance of the type - is about to be parsed. The difference between pre() and - _pre() is conventional: pre() can - be completely overridden by a derived parser. The derived - parser can also override _pre() but has to always call - the original version. This allows you to partition initialization - into customizable and required parts.

- -

Similarly, _post() and post_name() are - finalization callbacks with exactly the same semantics: - post_name() can be completely overridden by the derived - parser while the original _post() should always be called. -

- -

The final bit we need to discuss in this section is the - _characters() function. As you might have guessed, it - is also a callback. A low-level one that delivers raw character content - for the type being parsed. You will seldom need to use this callback - directly. Using implementations for the built-in parsers provided by - the XSD runtime is usually a simpler and more convenient - alternative.

- -

At this point you might be wondering why some post_*() - callbacks, for example post_string(), return some data - while others, for example post_gender(), have - void as a return type. This is a valid concern - and it will be addressed in the next chapter.

- -

3.2 Implementing the Person Parser

- -

The generated person_pskel parser skeleton looks like - this:

- -
-class person_pskel: public xml_schema::complex_content
-{
-public:
-  // Parser callbacks. Override them in your implementation.
-  //
-  virtual void
-  pre ();
-
-  virtual void
-  first_name (const std::string&);
-
-  virtual void
-  last_name (const std::string&);
-
-  virtual void
-  gender ();
-
-  virtual void
-  age (short);
-
-  virtual void
-  post_person ();
-
-  // Parser construction API.
-  //
-  void
-  first_name_parser (xml_schema::string_pskel&);
-
-  void
-  last_name_parser (xml_schema::string_pskel&);
-
-  void
-  gender_parser (gender_pskel&);
-
-  void
-  age_parser (xml_schema::short_pskel&);
-
-  void
-  parsers (xml_schema::string_pskel& /* first-name */,
-           xml_schema::string_pskel& /* last-name */,
-           gender_pskel&             /* gender */,
-           xml_schema::short_pskel&  /* age */);
-};
-  
- - -

As you can see, we have a parser callback for each of the nested - elements found in the person XML Schema type. - The implementation of this parser is straightforward:

- -
-class person_pimpl: public person_pskel
-{
-public:
-  virtual void
-  first_name (const std::string& n)
-  {
-    cout << "first: " << f << endl;
-  }
-
-  virtual void
-  last_name (const std::string& l)
-  {
-    cout << "last: " << l << endl;
-  }
-
-  virtual void
-  age (short a)
-  {
-    cout << "age: " << a << endl;
-  }
-};
-  
- -

Notice that we didn't override the gender() callback - because all the printing is done by gender_pimpl.

- - -

3.3 Implementing the People Parser

- -

The generated people_pskel parser skeleton looks like - this:

- -
-class people_pskel: public xml_schema::complex_content
-{
-public:
-  // Parser callbacks. Override them in your implementation.
-  //
-  virtual void
-  pre ();
-
-  virtual void
-  person ();
-
-  virtual void
-  post_people ();
-
-  // Parser construction API.
-  //
-  void
-  person_parser (person_pskel&);
-
-  void
-  parsers (person_pskel& /* person */);
-};
-  
- -

The person() callback will be called after parsing each - person element. While person_pimpl does - all the printing, one useful thing we can do in this callback is to - print an extra newline after each person record so that our - output is more readable:

- -
-class people_pimpl: public people_pskel
-{
-public:
-  virtual void
-  person ()
-  {
-    cout << endl;
-  }
-};
-  
- -

Now it is time to put everything together.

- - -

3.4 Connecting the Parsers Together

- -

At this point we have all the individual parsers implemented - and can proceed to assemble them into a complete parser - for our XML vocabulary. The first step is to instantiate - all the individual parsers that we will need:

- -
-xml_schema::short_pimpl short_p;
-xml_schema::string_pimpl string_p;
-
-gender_pimpl gender_p;
-person_pimpl person_p;
-people_pimpl people_p;
-  
- -

Notice that our schema uses two built-in XML Schema types: - string for the first-name and - last-name elements as well as short - for age. We will use predefined parsers that - come with the XSD runtime to handle these types. The next - step is to connect all the individual parsers. We do this - with the help of functions defined in the parser - skeletons and marked with the "Parser Construction API" - comment. One way to do it is to connect each individual - parser by calling the *_parser() functions:

- -
-person_p.first_name_parser (string_p);
-person_p.last_name_parser (string_p);
-person_p.gender_parser (gender_p);
-person_p.age_parser (short_p);
-
-people_p.person_parser (person_p);
-  
- -

You might be wondering what happens if you do not provide - a parser by not calling one of the *_parser() functions. - In that case the corresponding XML content will be skipped, - including validation. This is an efficient way to ignore parts - of the document that you are not interested in.

- - -

An alternative, shorter, way to connect the parsers is by using - the parsers() functions which connects all the parsers - for a given type at once:

- -
-person_p.parsers (string_p, string_p, gender_p, short_p);
-people_p.parsers (person_p);
-  
- -

The following figure illustrates the resulting connections. Notice - the correspondence between return types of the post_*() - functions and argument types of element callbacks that are connected - by the arrows.

- - -
- -

The last step is the construction of the document parser and - invocation of the complete parser on our sample XML instance:

- -
-xml_schema::document doc_p (people_p, "people");
-
-people_p.pre ();
-doc_p.parse ("people.xml");
-people_p.post_people ();
-  
- -

Let's consider xml_schema::document in - more detail. While the exact definition of this class - varies depending on the underlying parser selected, - here is the common part:

- -
-namespace xml_schema
-{
-  class document
-  {
-  public:
-    document (xml_schema::parser_base&,
-              const std::string& root_element_name,
-              bool polymorphic = false);
-
-    document (xml_schema::parser_base&,
-              const std::string& root_element_namespace,
-              const std::string& root_element_name,
-              bool polymorphic = false);
-
-    void
-    parse (const std::string& file);
-
-    void
-    parse (std::istream&);
-
-    ...
-
-  };
-}
-  
- -

xml_schema::document is a root parser for - the vocabulary. The first argument to its constructors is the - parser for the type of the root element (people_impl - in our case). Because a type parser is only concerned with - the element's content and not with the element's name, we need - to specify the root element's name somewhere. That's - what is passed as the second and third arguments to the - document's constructors.

- -

There are also two overloaded parse() functions - defined in the document class (there are actually - more but the others are specific to the underlying XML parser). - The first version parses a local file identified by a name. The - second version reads the data from an input stream. For more - information on the xml_schema::document class - refer to Chapter 7, "Document Parser and Error - Handling".

- -

Let's now consider a step-by-step list of actions that happen - as we parse through people.xml. The content of - people.xml is repeated below for convenience.

- -
-<?xml version="1.0"?>
-<people>
-  <person>
-    <first-name>John</first-name>
-    <last-name>Doe</last-name>
-    <gender>male</gender>
-    <age>32</age>
-  </person>
-  <person>
-    <first-name>Jane</first-name>
-    <last-name>Doe</last-name>
-    <gender>female</gender>
-    <age>28</age>
-  </person>
-</people>
-  
- - -
    -
  1. people_p.pre() is called from - main(). We did not provide any implementation - for this callback so this call is a no-op.
  2. - -
  3. doc_p.parse("people.xml") is called from - main(). The parser opens the file and starts - parsing its content.
  4. - -
  5. The parser encounters the root element. doc_p - verifies that the root element is correct and calls - _pre() on people_p which is also - a no-op. Parsing is now delegated to people_p.
  6. - -
  7. The parser encounters the person element. - people_p determines that person_p - is responsible for parsing this element. pre() - and _pre() callbacks are called on person_p. - Parsing is now delegated to person_p.
  8. - -
  9. The parser encounters the first-name element. - person_p determines that string_p - is responsible for parsing this element. pre() - and _pre() callbacks are called on string_p. - Parsing is now delegated to string_p.
  10. - -
  11. The parser encounters character content consisting of - "John". The _characters() callback is - called on string_p.
  12. - -
  13. The parser encounters the end of first-name - element. The _post() and post_string() - callbacks are called on string_p. The - first_name() callback is called on person_p - with the return value of post_string(). The - first_name() implementation prints - "first: John" to cout. - Parsing is now returned to person_p.
  14. - -
  15. Steps analogous to 5-7 are performed for the last-name, - gender, and age elements.
  16. - -
  17. The parser encounters the end of person - element. The _post() and post_person() - callbacks are called on person_p. The - person() callback is called on people_p. - The person() implementation prints a new line - to cout. Parsing is now returned to - people_p.
  18. - -
  19. Steps 4-9 are performed for the second person - element.
  20. - -
  21. The parser encounters the end of people - element. The _post() callback is called on - people_p. The doc_p.parse("people.xml") - call returns to main().
  22. - -
  23. people_p.post_people() is called from - main() which is a no-op.
  24. - -
- - - - - -

4 Type Maps

- -

There are many useful things you can do inside parser callbacks as they - are right now. There are, however, times when you want to propagate - some information from one parser to another or to the caller of the - parser. One common task that would greatly benefit from such a - possibility is building a tree-like in-memory object model of the - data stored in XML. During execution, each individual sub-parser - would create a sub-tree and return it to its parent parser - which can then incorporate this sub-tree into the whole tree.

- -

In this chapter we will discuss the mechanisms offered by the - C++/Parser mapping for returning information from individual - parsers and see how to use them to build an object model - of our people vocabulary.

- -

4.1 Object Model

- -

An object model for our person record example could - look like this (saved in the people.hxx file):

- -
-#include <string>
-#include <vector>
-
-enum gender
-{
-  male,
-  female
-};
-
-class person
-{
-public:
-  person (const std::string& first,
-          const std::string& last,
-          ::gender gender,
-          short age)
-    : first_ (first), last_ (last),
-      gender_ (gender), age_ (age)
-  {
-  }
-
-  const std::string&
-  first () const
-  {
-    return first_;
-  }
-
-  const std::string&
-  last () const
-  {
-    return last_;
-  }
-
-  ::gender
-  gender () const
-  {
-    return gender_;
-  }
-
-  short
-  age () const
-  {
-    return age_;
-  }
-
-private:
-  std::string first_;
-  std::string last_;
-  ::gender gender_;
-  short age_;
-};
-
-typedef std::vector<person> people;
-  
- -

While it is clear which parser is responsible for which part of - the object model, it is not exactly clear how, for - example, gender_pimpl will deliver gender - to person_pimpl. You might have noticed that - string_pimpl manages to deliver its value to the - first_name() callback of person_pimpl. Let's - see how we can utilize the same mechanism to propagate our - own data.

- -

There is a way to tell the XSD compiler that you want to - exchange data between parsers. More precisely, for each - type defined in XML Schema, you can tell the compiler two things. - First, the return type of the post_*() callback - in the parser skeleton generated for this type. And, second, - the argument type for callbacks corresponding to elements and - attributes of this type. For example, for XML Schema type - gender we can specify the return type for - post_gender() in the gender_pskel - skeleton and the argument type for the gender() callback - in the person_pskel skeleton. As you might have guessed, - the generated code will then pass the return value from the - post_*() callback as an argument to the element or - attribute callback.

- -

The way to tell the XSD compiler about these XML Schema to - C++ mappings is with type map files. Here is a simple type - map for the gender type from the previous paragraph:

- -
-include "people.hxx";
-gender ::gender ::gender;
-  
- -

The first line indicates that the generated code must include - people.hxx in order to get the definition for the - gender type. The second line specifies that both - argument and return types for the gender - XML Schema type should be the ::gender C++ enum - (we use fully-qualified C++ names to avoid name clashes). - The next section will describe the type map format in detail. - We save this type map in people.map and - then translate our schemas with the --type-map - option to let the XSD compiler know about our type map:

- -
-$ xsd cxx-parser --type-map people.map people.xsd
-  
- -

If we now look at the generated people-pskel.hxx, - we will see the following changes in the gender_pskel and - person_pskel skeletons:

- -
-#include "people.hxx"
-
-class gender_pskel: public virtual xml_schema::string_pskel
-{
-  virtual ::gender
-  post_gender () = 0;
-
-  ...
-};
-
-class person_pskel: public xml_schema::complex_content
-{
-  virtual void
-  gender (::gender);
-
-  ...
-};
-  
- -

Notice that #include "people.hxx" was added to - the generated header file from the type map to provide the - definition for the gender enum.

- -

4.2 Type Map File Format

- -

Type map files are used to define a mapping between XML Schema - and C++ types. The compiler uses this information - to determine return types of post_*() - callbacks in parser skeletons corresponding to XML Schema - types as well as argument types for callbacks corresponding - to elements and attributes of these types.

- -

The compiler has a set of predefined mapping rules that map - the built-in XML Schema types to suitable C++ types (discussed - below) and all other types to void. - By providing your own type maps you can override these predefined - rules. The format of the type map file is presented below: -

- -
-namespace <schema-namespace> [<cxx-namespace>]
-{
-  (include <file-name>;)*
-  ([type] <schema-type> <cxx-ret-type> [<cxx-arg-type>];)*
-}
-  
- -

Both <schema-namespace> and - <schema-type> are regex patterns while - <cxx-namespace>, - <cxx-ret-type>, and - <cxx-arg-type> are regex pattern - substitutions. All names can be optionally enclosed in - " ", for example, to include white-spaces.

- -

<schema-namespace> determines XML - Schema namespace. Optional <cxx-namespace> - is prefixed to every C++ type name in this namespace declaration. - <cxx-ret-type> is a C++ type name that is - used as a return type for the post_*() callback. - Optional <cxx-arg-type> is an argument - type for callbacks corresponding to elements and attributes - of this type. If <cxx-arg-type> is not - specified, it defaults to <cxx-ret-type> - if <cxx-ret-type> ends with * or - & (that is, it is a pointer or a reference) and - const <cxx-ret-type>& - otherwise. - <file-name> is a file name either in the - " " or < > format - and is added with the #include directive to - the generated code.

- -

The # character starts a comment that ends - with a new line or end of file. To specify a name that contains - # enclose it in " ". - For example:

- -
-namespace http://www.example.com/xmlns/my my
-{
-  include "my.hxx";
-
-  # Pass apples by value.
-  #
-  apple apple;
-
-  # Pass oranges as pointers.
-  #
-  orange orange_t*;
-}
-  
- -

In the example above, for the - http://www.example.com/xmlns/my#orange - XML Schema type, the my::orange_t* C++ type will - be used as both return and argument types.

- -

Several namespace declarations can be specified in a single - file. The namespace declaration can also be completely - omitted to map types in a schema without a namespace. For - instance:

- -
-include "my.hxx";
-apple apple;
-
-namespace http://www.example.com/xmlns/my
-{
-  orange "const orange_t*";
-}
-  
- -

The compiler has a number of predefined mapping rules for - the built-in XML Schema types which can be presented as the - following map files. The string-based XML Schema types are - mapped to either std::string or - std::wstring depending on the character type - selected (see Section 5.1, "Character Type and - Encoding" for more information).

- -
-namespace http://www.w3.org/2001/XMLSchema
-{
-  boolean bool bool;
-
-  byte "signed char" "signed char";
-  unsignedByte "unsigned char" "unsigned char";
-
-  short short short;
-  unsignedShort "unsigned short" "unsigned short";
-
-  int int int;
-  unsignedInt "unsigned int" "unsigned int";
-
-  long "long long" "long long";
-  unsignedLong "unsigned long long" "unsigned long long";
-
-  integer "long long" "long long";
-
-  negativeInteger "long long" "long long";
-  nonPositiveInteger "long long" "long long";
-
-  positiveInteger "unsigned long long" "unsigned long long";
-  nonNegativeInteger "unsigned long long" "unsigned long long";
-
-  float float float;
-  double double double;
-  decimal double double;
-
-  string std::string;
-  normalizedString std::string;
-  token std::string;
-  Name std::string;
-  NMTOKEN std::string;
-  NCName std::string;
-  ID std::string;
-  IDREF std::string;
-  language std::string;
-  anyURI std::string;
-
-  NMTOKENS xml_schema::string_sequence;
-  IDREFS xml_schema::string_sequence;
-
-  QName xml_schema::qname;
-
-  base64Binary std::auto_ptr<xml_schema::buffer>
-               std::auto_ptr<xml_schema::buffer>;
-  hexBinary std::auto_ptr<xml_schema::buffer>
-            std::auto_ptr<xml_schema::buffer>;
-
-  date xml_schema::date;
-  dateTime xml_schema::date_time;
-  duration xml_schema::duration;
-  gDay xml_schema::gday;
-  gMonth xml_schema::gmonth;
-  gMonthDay xml_schema::gmonth_day;
-  gYear xml_schema::gyear;
-  gYearMonth xml_schema::gyear_month;
-  time xml_schema::time;
-}
-  
- -

For more information about the mapping of the built-in XML Schema types - to C++ types refer to Chapter 6, "Built-In XML Schema Type - Parsers". The last predefined rule maps anything that wasn't - mapped by previous rules to void:

- -
-namespace .*
-{
-  .* void void;
-}
-  
- - -

When you provide your own type maps with the - --type-map option, they are evaluated first. This - allows you to selectively override any of the predefined rules. - Note also that if you change the mapping - of a built-in XML Schema type then it becomes your responsibility - to provide the corresponding parser skeleton and implementation - in the xml_schema namespace. You can include the - custom definitions into the generated header file using the - --hxx-prologue-* options.

- -

4.3 Parser Implementations

- -

With the knowledge from the previous section, we can proceed - with creating a type map that maps types in the people.xsd - schema to our object model classes in - people.hxx. In fact, we already have the beginning - of our type map file in people.map. Let's extend - it with the rest of the types:

- -
-include "people.hxx";
-
-gender ::gender ::gender;
-person ::person;
-people ::people;
-  
- -

There are a few things to note about this type map. We did not - provide the argument types for person and - people because the default constant reference is - exactly what we need. We also did not provide any mappings - for built-in XML Schema types string and - short because they are handled by the predefined - rules and we are happy with the result. Note also that - all C++ types are fully qualified. This is done to avoid - potential name conflicts in the generated code. Now we can - recompile our schema and move on to implementing the parsers:

- -
-$ xsd cxx-parser --xml-parser expat --type-map people.map people.xsd
-  
- -

Here is the implementation of our three parsers in full. One - way to save typing when implementing your own parsers is - to open the generated code and copy the signatures of parser - callbacks into your code. Or you could always auto generate the - sample implementations and fill them with your code.

- - -
-#include "people-pskel.hxx"
-
-class gender_pimpl: public gender_pskel,
-                    public xml_schema::string_pimpl
-{
-public:
-  virtual ::gender
-  post_gender ()
-  {
-    return post_string () == "male" ? male : female;
-  }
-};
-
-class person_pimpl: public person_pskel
-{
-public:
-  virtual void
-  first_name (const std::string& f)
-  {
-    first_ = f;
-  }
-
-  virtual void
-  last_name (const std::string& l)
-  {
-    last_ = l;
-  }
-
-  virtual void
-  gender (::gender g)
-  {
-    gender_ = g;
-  }
-
-  virtual void
-  age (short a)
-  {
-    age_ = a;
-  }
-
-  virtual ::person
-  post_person ()
-  {
-    return ::person (first_, last_, gender_, age_);
-  }
-
-private:
-  std::string first_;
-  std::string last_;
-  ::gender gender_;
-  short age_;
-};
-
-class people_pimpl: public people_pskel
-{
-public:
-  virtual void
-  person (const ::person& p)
-  {
-    people_.push_back (p);
-  }
-
-  virtual ::people
-  post_people ()
-  {
-    ::people r;
-    r.swap (people_);
-    return r;
-  }
-
-private:
-  ::people people_;
-};
-  
- -

This code fragment should look familiar by now. Just note that - all the post_*() callbacks now have return types instead - of void. Here is the implementation of the test - driver for this example:

- -
-#include <iostream>
-
-using namespace std;
-
-int
-main (int argc, char* argv[])
-{
-  // Construct the parser.
-  //
-  xml_schema::short_pimpl short_p;
-  xml_schema::string_pimpl string_p;
-
-  gender_pimpl gender_p;
-  person_pimpl person_p;
-  people_pimpl people_p;
-
-  person_p.parsers (string_p, string_p, gender_p, short_p);
-  people_p.parsers (person_p);
-
-  // Parse the document to obtain the object model.
-  //
-  xml_schema::document doc_p (people_p, "people");
-
-  people_p.pre ();
-  doc_p.parse (argv[1]);
-  people ppl = people_p.post_people ();
-
-  // Print the object model.
-  //
-  for (people::iterator i (ppl.begin ()); i != ppl.end (); ++i)
-  {
-    cout << "first:  " << i->first () << endl
-         << "last:   " << i->last () << endl
-         << "gender: " << (i->gender () == male ? "male" : "female") << endl
-         << "age:    " << i->age () << endl
-         << endl;
-  }
-}
-  
- -

The parser creation and assembly part is exactly the same as in - the previous chapter. The parsing part is a bit different: - post_people() now has a return value which is the - complete object model. We store it in the - ppl variable. The last bit of the code simply iterates - over the people vector and prints the information - for each person. We save the last two code fragments to - driver.cxx and proceed to compile and test - our new application:

- - -
-$ c++ -I.../libxsd -c driver.cxx people-pskel.cxx
-$ c++ -o driver driver.o people-pskel.o -lexpat
-$ ./driver people.xml
-first:  John
-last:   Doe
-gender: male
-age:    32
-
-first:  Jane
-last:   Doe
-gender: female
-age:    28
-  
- - - - - -

5 Mapping Configuration

- -

The C++/Parser mapping has a number of configuration parameters that - determine the overall properties and behavior of the generated code. - Configuration parameters are specified with the XSD command line - options and include the character type that is used by the generated - code, the underlying XML parser, whether the XML Schema validation - is performed in the generated code, and support for XML Schema - polymorphism. This chapter describes these configuration - parameters in more detail. For more ways to configure the generated - code refer to the - XSD - Compiler Command Line Manual. -

- -

5.1 Character Type and Encoding

- -

The C++/Parser mapping has built-in support for two character types: - char and wchar_t. You can select the - character type with the --char-type command line - option. The default character type is char. The - string-based built-in XML Schema types are returned as either - std::string or std::wstring depending - on the character type selected.

- -

Another aspect of the mapping that depends on the character type - is character encoding. For the char character type - the default encoding is UTF-8. Other supported encodings are - ISO-8859-1, Xerces-C++ Local Code Page (LPC), as well as - custom encodings. You can select which encoding should be used - in the object model with the --char-encoding command - line option.

- -

For the wchar_t character type the encoding is - automatically selected between UTF-16 and UTF-32/UCS-4 depending - on the size of the wchar_t type. On some platforms - (for example, Windows with Visual C++ and AIX with IBM XL C++) - wchar_t is 2 bytes long. For these platforms the - encoding is UTF-16. On other platforms wchar_t is 4 bytes - long and UTF-32/UCS-4 is used.

- -

Note also that the character encoding that is used in the object model - is independent of the encodings used in input and output XML. In fact, - all three (object mode, input XML, and output XML) can have different - encodings.

- -

5.2 Underlying XML Parser

- -

The C++/Parser mapping can be used with either Xerces-C++ or Expat - as the underlying XML parser. You can select the XML parser with - the --xml-parser command line option. Valid values - for this option are xerces and expat. - The default XML parser is Xerces-C++.

- -

The generated code is identical for both parsers except for the - xml_schema::document class in which some of the - parse() functions are parser-specific as described - in Chapter 7, "Document Parser and Error Handling".

- - -

5.3 XML Schema Validation

- -

The C++/Parser mapping provides support for validating a - commonly-used subset of W3C XML Schema in the generated code. - For the list of supported XML Schema constructs refer to - Appendix A, "Supported XML Schema Constructs".

- -

By default validation in the generated code is disabled if - the underlying XML parser is validating (Xerces-C++) and - enabled otherwise (Expat). See Section 5.2, - "Underlying XML Parser" for more information about - the underlying XML parser. You can override the default - behavior with the --generate-validation - and --suppress-validation command line options.

- - -

5.4 Support for Polymorphism

- -

By default the XSD compiler generates non-polymorphic code. If your - vocabulary uses XML Schema polymorphism in the form of xsi:type - and/or substitution groups, then you will need to compile your schemas - with the --generate-polymorphic option to produce - polymorphism-aware code as well as pass true as the last - argument to the xml_schema::document's constructors.

- -

When using the polymorphism-aware generated code, you can specify - several parsers for a single element by passing a parser map - instead of an individual parser to the parser connection function - for the element. One of the parsers will then be looked up and used - depending on the xsi:type attribute value or an element - name from a substitution group. Consider the following schema as an - example:

- -
-<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
-
-  <xs:complexType name="person">
-    <xs:sequence>
-      <xs:element name="name" type="xs:string"/>
-    </xs:sequence>
-  </xs:complexType>
-
-  <!-- substitution group root -->
-  <xs:element name="person" type="person"/>
-
-  <xs:complexType name="superman">
-    <xs:complexContent>
-      <xs:extension base="person">
-        <xs:attribute name="can-fly" type="xs:boolean"/>
-      </xs:extension>
-    </xs:complexContent>
-  </xs:complexType>
-
-  <xs:element name="superman"
-              type="superman"
-              substitutionGroup="person"/>
-
-  <xs:complexType name="batman">
-    <xs:complexContent>
-      <xs:extension base="superman">
-        <xs:attribute name="wing-span" type="xs:unsignedInt"/>
-      </xs:extension>
-    </xs:complexContent>
-  </xs:complexType>
-
-  <xs:element name="batman"
-              type="batman"
-              substitutionGroup="superman"/>
-
-  <xs:complexType name="supermen">
-    <xs:sequence>
-      <xs:element ref="person" maxOccurs="unbounded"/>
-    </xs:sequence>
-  </xs:complexType>
-
-  <xs:element name="supermen" type="supermen"/>
-
-</xs:schema>
-  
- -

Conforming XML documents can use the superman - and batman types in place of the person - type either by specifying the type with the xsi:type - attributes or by using the elements from the substitution - group, for instance:

- - -
-<supermen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
-
-  <person>
-    <name>John Doe</name>
-  </person>
-
-  <superman can-fly="false">
-    <name>James "007" Bond</name>
-  </superman>
-
-  <superman can-fly="true" wing-span="10" xsi:type="batman">
-    <name>Bruce Wayne</name>
-  </superman>
-
-</supermen>
-  
- -

To print the data stored in such XML documents we can implement - the parsers as follows:

- -
-class person_pimpl: public virtual person_pskel
-{
-public:
-  virtual void
-  pre ()
-  {
-    cout << "starting to parse person" << endl;
-  }
-
-  virtual void
-  name (const std::string& v)
-  {
-    cout << "name: " << v << endl;
-  }
-
-  virtual void
-  post_person ()
-  {
-    cout << "finished parsing person" << endl;
-  }
-};
-
-class superman_pimpl: public virtual superman_pskel,
-                      public person_pimpl
-{
-public:
-  virtual void
-  pre ()
-  {
-    cout << "starting to parse superman" << endl;
-  }
-
-  virtual void
-  can_fly (bool v)
-  {
-    cout << "can-fly: " << v << endl;
-  }
-
-  virtual void
-  post_person ()
-  {
-    post_superman ();
-  }
-
-  virtual void
-  post_superman ()
-  {
-    cout << "finished parsing superman" << endl
-  }
-};
-
-class batman_pimpl: public virtual batman_pskel,
-                    public superman_pimpl
-{
-public:
-  virtual void
-  pre ()
-  {
-    cout << "starting to parse batman" << endl;
-  }
-
-  virtual void
-  wing_span (unsigned int v)
-  {
-    cout << "wing-span: " << v << endl;
-  }
-
-  virtual void
-  post_superman ()
-  {
-    post_batman ();
-  }
-
-  virtual void
-  post_batman ()
-  {
-    cout << "finished parsing batman" << endl;
-  }
-};
-  
- -

Note that because the derived type parsers (superman_pskel - and batman_pskel) are called via the person_pskel - interface, we have to override the post_person() - virtual function in superman_pimpl to call - post_superman() and the post_superman() - virtual function in batman_pimpl to call - post_batman().

- -

The following code fragment shows how to connect the parsers together. - Notice that for the person element in the supermen_p - parser we specify a parser map instead of a specific parser and we pass - true as the last argument to the document parser constructor - to indicate that we are parsing potentially-polymorphic XML documents:

- -
-int
-main (int argc, char* argv[])
-{
-  // Construct the parser.
-  //
-  xml_schema::string_pimpl string_p;
-  xml_schema::boolean_pimpl boolean_p;
-  xml_schema::unsigned_int_pimpl unsigned_int_p;
-
-  person_pimpl person_p;
-  superman_pimpl superman_p;
-  batman_pimpl batman_p;
-
-  xml_schema::parser_map_impl person_map;
-  supermen_pimpl supermen_p;
-
-  person_p.parsers (string_p);
-  superman_p.parsers (string_p, boolean_p);
-  batman_p.parsers (string_p, boolean_p, unsigned_int_p);
-
-  // Here we are specifying a parser map which containes several
-  // parsers that can be used to parse the person element.
-  //
-  person_map.insert (person_p);
-  person_map.insert (superman_p);
-  person_map.insert (batman_p);
-
-  supermen_p.person_parser (person_map);
-
-  // Parse the XML document. The last argument to the document's
-  // constructor indicates that we are parsing polymorphic XML
-  // documents.
-  //
-  xml_schema::document doc_p (supermen_p, "supermen", true);
-
-  supermen_p.pre ();
-  doc_p.parse (argv[1]);
-  supermen_p.post_supermen ();
-}
-  
- -

When polymorphism-aware code is generated, each element's - *_parser() function is overloaded to also accept - an object of the xml_schema::parser_map type. - For example, the supermen_pskel class from the - above example looks like this:

- -
-class supermen_pskel: public xml_schema::parser_complex_content
-{
-public:
-
-  ...
-
-  // Parser construction API.
-  //
-  void
-  parsers (person_pskel&);
-
-  // Individual element parsers.
-  //
-  void
-  person_parser (person_pskel&);
-
-  void
-  person_parser (const xml_schema::parser_map&);
-
-  ...
-};
-  
- -

Note that you can specify both the individual (static) parser and - the parser map. The individual parser will be used when the static - element type and the dynamic type of the object being parsed are - the same. This is the case, for example, when there is no - xsi:type attribute and the element hasn't been - substituted. Because the individual parser for an element is - cached and no map lookup is necessary, it makes sense to specify - both the individual parser and the parser map when most of the - objects being parsed are of the static type and optimal - performance is important. The following code fragment shows - how to change the above example to set both the individual - parser and the parser map:

- -
-int
-main (int argc, char* argv[])
-{
-  ...
-
-  person_map.insert (superman_p);
-  person_map.insert (batman_p);
-
-  supermen_p.person_parser (person_p);
-  supermen_p.person_parser (person_map);
-
-  ...
-}
-  
- - -

The xml_schema::parser_map interface and the - xml_schema::parser_map_impl default implementation - are presented below:

- -
-namespace xml_schema
-{
-  class parser_map
-  {
-  public:
-    virtual parser_base*
-    find (const ro_string* type) const = 0;
-  };
-
-  class parser_map_impl: public parser_map
-  {
-  public:
-    void
-    insert (parser_base&);
-
-    virtual parser_base*
-    find (const ro_string* type) const;
-
-  private:
-    parser_map_impl (const parser_map_impl&);
-
-    parser_map_impl&
-    operator= (const parser_map_impl&);
-
-    ...
-  };
-}
-  
- -

The type argument in the find() virtual - function is the type name and namespace from the xsi:type attribute - (the namespace prefix is resolved to the actual XML namespace) - or the type of an element from the substitution group in the form - "<name> <namespace>" with the space and the - namespace part absent if the type does not have a namespace. - You can obtain a parser's dynamic type in the same format - using the _dynamic_type() function. The static - type can be obtained by calling the static _static_type() - function, for example person_pskel::_static_type(). - Both functions return a C string (const char* or - const wchar_t*, depending on the character type - used) which is valid for as long as the application is running. - The following example shows how we can implement our own parser - map using std::map:

- - -
-#include <map>
-#include <string>
-
-class parser_map: public xml_schema::parser_map
-{
-public:
- void
- insert (xml_schema::parser_base& p)
- {
-   map_[p._dynamic_type ()] = &p;
- }
-
- virtual xml_schema::parser_base*
- find (const xml_schema::ro_string* type) const
- {
-   map::const_iterator i = map_.find (type);
-   return i != map_.end () ? i->second : 0;
- }
-
-private:
-  typedef std::map<std::string, xml_schema::parser_base*> map;
-  map map_;
-};
-  
- -

Most of code presented in this section is taken from the - polymorphism example which can be found in the - examples/cxx/parser/ directory of the XSD distribution. - Handling of xsi:type and substitution groups when used - on root elements requires a number of special actions as shown in - the polyroot example.

- - - - - -

6 Built-In XML Schema Type Parsers

- -

The XSD runtime provides parser implementations for all built-in - XML Schema types as summarized in the following table. Declarations - for these types are automatically included into each generated - header file. As a result you don't need to include any headers - to gain access to these parser implementations. Note that some - parsers return either std::string or - std::wstring depending on the character type selected.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
XML Schema typeParser implementation in the xml_schema namespaceParser return type
anyType and anySimpleType types
anyTypeany_type_pimplvoid
anySimpleTypeany_simple_type_pimplvoid
fixed-length integral types
bytebyte_pimplsigned char
unsignedByteunsigned_byte_pimplunsigned char
shortshort_pimplshort
unsignedShortunsigned_short_pimplunsigned short
intint_pimplint
unsignedIntunsigned_int_pimplunsigned int
longlong_pimpllong long
unsignedLongunsigned_long_pimplunsigned long long
arbitrary-length integral types
integerinteger_pimpllong long
nonPositiveIntegernon_positive_integer_pimpllong long
nonNegativeIntegernon_negative_integer_pimplunsigned long long
positiveIntegerpositive_integer_pimplunsigned long long
negativeIntegernegative_integer_pimpllong long
boolean types
booleanboolean_pimplbool
fixed-precision floating-point types
floatfloat_pimplfloat
doubledouble_pimpldouble
arbitrary-precision floating-point types
decimaldecimal_pimpldouble
string-based types
stringstring_pimplstd::string or std::wstring
normalizedStringnormalized_string_pimplstd::string or std::wstring
tokentoken_pimplstd::string or std::wstring
Namename_pimplstd::string or std::wstring
NMTOKENnmtoken_pimplstd::string or std::wstring
NCNamencname_pimplstd::string or std::wstring
languagelanguage_pimplstd::string or std::wstring
qualified name
QNameqname_pimplxml_schema::qname
Section 6.1, - "QName Parser"
ID/IDREF types
IDid_pimplstd::string or std::wstring
IDREFidref_pimplstd::string or std::wstring
list types
NMTOKENSnmtokens_pimplxml_schema::string_sequence
Section - 6.2, "NMTOKENS and IDREFS Parsers"
IDREFSidrefs_pimplxml_schema::string_sequence
Section - 6.2, "NMTOKENS and IDREFS Parsers"
URI types
anyURIuri_pimplstd::string or std::wstring
binary types
base64Binarybase64_binary_pimplstd::auto_ptr<xml_schema::buffer>
- Section 6.3, "base64Binary and - hexBinary Parsers"
hexBinaryhex_binary_pimplstd::auto_ptr<xml_schema::buffer>
- Section 6.3, "base64Binary and - hexBinary Parsers"
date/time types
datedate_pimplxml_schema::date
Section 6.5, - "date Parser"
dateTimedate_time_pimplxml_schema::date_time
Section 6.6, - "dateTime Parser"
durationduration_pimplxml_schema::duration
Section 6.7, - "duration Parser"
gDaygday_pimplxml_schema::gday
Section 6.8, - "gDay Parser"
gMonthgmonth_pimplxml_schema::gmonth
Section 6.9, - "gMonth Parser"
gMonthDaygmonth_day_pimplxml_schema::gmonth_day
Section 6.10, - "gMonthDay Parser"
gYeargyear_pimplxml_schema::gyear
Section 6.11, - "gYear Parser"
gYearMonthgyear_month_pimplxml_schema::gyear_month
Section - 6.12, "gYearMonth Parser"
timetime_pimplxml_schema::time
Section 6.13, - "time Parser"
- -

6.1 QName Parser

- -

The return type of the qname_pimpl parser implementation - is xml_schema::qname which represents an XML qualified - name. Its interface is presented below. - Note that the std::string type in the interface becomes - std::wstring if the selected character type is - wchar_t.

- -
-namespace xml_schema
-{
-  class qname
-  {
-  public:
-    explicit
-    qname (const std::string& name);
-    qname (const std::string& prefix, const std::string& name);
-
-    const std::string&
-    prefix () const;
-
-    void
-    prefix (const std::string&);
-
-    const std::string&
-    name () const;
-
-    void
-    name (const std::string&);
-  };
-
-  bool
-  operator== (const qname&, const qname&);
-
-  bool
-  operator!= (const qname&, const qname&);
-}
-  
- - -

6.2 NMTOKENS and IDREFS Parsers

- -

The return type of the nmtokens_pimpl and - idrefs_pimpl parser implementations is - xml_schema::string_sequence which represents a - sequence of strings. Its interface is presented below. - Note that the std::string type in the interface becomes - std::wstring if the selected character type is - wchar_t.

- -
-namespace xml_schema
-{
-  class string_sequence: public std::vector<std::string>
-  {
-  public:
-    string_sequence ();
-
-    explicit
-    string_sequence (std::vector<std::string>::size_type n,
-                     const std::string& x = std::string ());
-
-    template <typename I>
-    string_sequence (const I& begin, const I& end);
-  };
-
-  bool
-  operator== (const string_sequence&, const string_sequence&);
-
-  bool
-  operator!= (const string_sequence&, const string_sequence&);
-}
-  
- - -

6.3 base64Binary and hexBinary Parsers

- -

The return type of the base64_binary_pimpl and - hex_binary_pimpl parser implementations is - std::auto_ptr<xml_schema::buffer>. The - xml_schema::buffer type represents a binary buffer - and its interface is presented below.

- -
-namespace xml_schema
-{
-  class buffer
-  {
-  public:
-    typedef std::size_t size_t;
-
-    class bounds {}; // Out of bounds exception.
-
-  public:
-    explicit
-    buffer (size_t size = 0);
-    buffer (size_t size, size_t capacity);
-    buffer (const void* data, size_t size);
-    buffer (const void* data, size_t size, size_t capacity);
-    buffer (void* data,
-            size_t size,
-            size_t capacity,
-            bool assume_ownership);
-
-  public:
-    buffer (const buffer&);
-
-    buffer&
-    operator= (const buffer&);
-
-    void
-    swap (buffer&);
-
-  public:
-    size_t
-    capacity () const;
-
-    bool
-    capacity (size_t);
-
-  public:
-    size_t
-    size () const;
-
-    bool
-    size (size_t);
-
-  public:
-    const char*
-    data () const;
-
-    char*
-    data ();
-
-    const char*
-    begin () const;
-
-    char*
-    begin ();
-
-    const char*
-    end () const;
-
-    char*
-    end ();
-  };
-
-  bool
-  operator== (const buffer&, const buffer&);
-
-  bool
-  operator!= (const buffer&, const buffer&);
-}
-  
- -

If the assume_ownership argument to the constructor - is true, the instance assumes the ownership of the - memory block pointed to by the data argument and will - eventually release it by calling operator delete(). The - capacity() and size() modifier functions - return true if the underlying buffer has moved. -

- -

The bounds exception is thrown if the constructor - arguments violate the (size <= capacity) - constraint.

- - -

6.4 Time Zone Representation

- -

The date, dateTime, gDay, - gMonth, gMonthDay, gYear, - gYearMonth, and time XML Schema built-in - types all include an optional time zone component. The following - xml_schema::time_zone base class is used to represent - this information:

- -
-namespace xml_schema
-{
-  class time_zone
-  {
-  public:
-    time_zone ();
-    time_zone (short hours, short minutes);
-
-    bool
-    zone_present () const;
-
-    void
-    zone_reset ();
-
-    short
-    zone_hours () const;
-
-    void
-    zone_hours (short);
-
-    short
-    zone_minutes () const;
-
-    void
-    zone_minutes (short);
-  };
-
-  bool
-  operator== (const time_zone&, const time_zone&);
-
-  bool
-  operator!= (const time_zone&, const time_zone&);
-}
-  
- -

The zone_present() accessor function returns true - if the time zone is specified. The zone_reset() modifier - function resets the time zone object to the not specified - state. If the time zone offset is negative then both hours and - minutes components are represented as negative integers.

- - -

6.5 date Parser

- -

The return type of the date_pimpl parser implementation - is xml_schema::date which represents a year, a day, and a month - with an optional time zone. Its interface is presented below. - For more information on the base xml_schema::time_zone - class refer to Section 6.4, "Time Zone - Representation".

- -
-namespace xml_schema
-{
-  class date
-  {
-  public:
-    date (int year, unsigned short month, unsigned short day);
-    date (int year, unsigned short month, unsigned short day,
-          short zone_hours, short zone_minutes);
-
-    int
-    year () const;
-
-    void
-    year (int);
-
-    unsigned short
-    month () const;
-
-    void
-    month (unsigned short);
-
-    unsigned short
-    day () const;
-
-    void
-    day (unsigned short);
-  };
-
-  bool
-  operator== (const date&, const date&);
-
-  bool
-  operator!= (const date&, const date&);
-}
-  
- -

6.6 dateTime Parser

- -

The return type of the date_time_pimpl parser implementation - is xml_schema::date_time which represents a year, a month, a day, - hours, minutes, and seconds with an optional time zone. Its interface - is presented below. - For more information on the base xml_schema::time_zone - class refer to Section 6.4, "Time Zone - Representation".

- -
-namespace xml_schema
-{
-  class date_time
-  {
-  public:
-    date_time (int year, unsigned short month, unsigned short day,
-               unsigned short hours, unsigned short minutes,
-               double seconds);
-
-    date_time (int year, unsigned short month, unsigned short day,
-               unsigned short hours, unsigned short minutes,
-               double seconds, short zone_hours, short zone_minutes);
-
-    int
-    year () const;
-
-    void
-    year (int);
-
-    unsigned short
-    month () const;
-
-    void
-    month (unsigned short);
-
-    unsigned short
-    day () const;
-
-    void
-    day (unsigned short);
-
-    unsigned short
-    hours () const;
-
-    void
-    hours (unsigned short);
-
-    unsigned short
-    minutes () const;
-
-    void
-    minutes (unsigned short);
-
-    double
-    seconds () const;
-
-    void
-    seconds (double);
-  };
-
-  bool
-  operator== (const date_time&, const date_time&);
-
-  bool
-  operator!= (const date_time&, const date_time&);
-}
-  
- -

6.7 duration Parser

- -

The return type of the duration_pimpl parser implementation - is xml_schema::duration which represents a potentially - negative duration in the form of years, months, days, hours, minutes, - and seconds. Its interface is presented below.

- -
-namespace xml_schema
-{
-  class duration
-  {
-  public:
-    duration (bool negative,
-              unsigned int years, unsigned int months, unsigned int days,
-              unsigned int hours, unsigned int minutes, double seconds);
-
-    bool
-    negative () const;
-
-    void
-    negative (bool);
-
-    unsigned int
-    years () const;
-
-    void
-    years (unsigned int);
-
-    unsigned int
-    months () const;
-
-    void
-    months (unsigned int);
-
-    unsigned int
-    days () const;
-
-    void
-    days (unsigned int);
-
-    unsigned int
-    hours () const;
-
-    void
-    hours (unsigned int);
-
-    unsigned int
-    minutes () const;
-
-    void
-    minutes (unsigned int);
-
-    double
-    seconds () const;
-
-    void
-    seconds (double);
-  };
-
-  bool
-  operator== (const duration&, const duration&);
-
-  bool
-  operator!= (const duration&, const duration&);
-}
-  
- - -

6.8 gDay Parser

- -

The return type of the gday_pimpl parser implementation - is xml_schema::gday which represents a day of the month with - an optional time zone. Its interface is presented below. - For more information on the base xml_schema::time_zone - class refer to Section 6.4, "Time Zone - Representation".

- -
-namespace xml_schema
-{
-  class gday
-  {
-  public:
-    explicit
-    gday (unsigned short day);
-    gday (unsigned short day, short zone_hours, short zone_minutes);
-
-    unsigned short
-    day () const;
-
-    void
-    day (unsigned short);
-  };
-
-  bool
-  operator== (const gday&, const gday&);
-
-  bool
-  operator!= (const gday&, const gday&);
-}
-  
- -

6.9 gMonth Parser

- -

The return type of the gmonth_pimpl parser implementation - is xml_schema::gmonth which represents a month of the year - with an optional time zone. Its interface is presented below. - For more information on the base xml_schema::time_zone - class refer to Section 6.4, "Time Zone - Representation".

- -
-namespace xml_schema
-{
-  class gmonth
-  {
-  public:
-    explicit
-    gmonth (unsigned short month);
-    gmonth (unsigned short month, short zone_hours, short zone_minutes);
-
-    unsigned short
-    month () const;
-
-    void
-    month (unsigned short);
-  };
-
-  bool
-  operator== (const gmonth&, const gmonth&);
-
-  bool
-  operator!= (const gmonth&, const gmonth&);
-}
-  
- -

6.10 gMonthDay Parser

- -

The return type of the gmonth_day_pimpl parser implementation - is xml_schema::gmonth_day which represents a day and a month - of the year with an optional time zone. Its interface is presented below. - For more information on the base xml_schema::time_zone - class refer to Section 6.4, "Time Zone - Representation".

- -
-namespace xml_schema
-{
-  class gmonth_day
-  {
-  public:
-    gmonth_day (unsigned short month, unsigned short day);
-    gmonth_day (unsigned short month, unsigned short day,
-                short zone_hours, short zone_minutes);
-
-    unsigned short
-    month () const;
-
-    void
-    month (unsigned short);
-
-    unsigned short
-    day () const;
-
-    void
-    day (unsigned short);
-  };
-
-  bool
-  operator== (const gmonth_day&, const gmonth_day&);
-
-  bool
-  operator!= (const gmonth_day&, const gmonth_day&);
-}
-  
- -

6.11 gYear Parser

- -

The return type of the gyear_pimpl parser implementation - is xml_schema::gyear which represents a year with - an optional time zone. Its interface is presented below. - For more information on the base xml_schema::time_zone - class refer to Section 6.4, "Time Zone - Representation".

- -
-namespace xml_schema
-{
-  class gyear
-  {
-  public:
-    explicit
-    gyear (int year);
-    gyear (int year, short zone_hours, short zone_minutes);
-
-    int
-    year () const;
-
-    void
-    year (int);
-  };
-
-  bool
-  operator== (const gyear&, const gyear&);
-
-  bool
-  operator!= (const gyear&, const gyear&);
-}
-  
- -

6.12 gYearMonth Parser

- -

The return type of the gyear_month_pimpl parser implementation - is xml_schema::gyear_month which represents a year and a month - with an optional time zone. Its interface is presented below. - For more information on the base xml_schema::time_zone - class refer to Section 6.4, "Time Zone - Representation".

- -
-namespace xml_schema
-{
-  class gyear_month
-  {
-  public:
-    gyear_month (int year, unsigned short month);
-    gyear_month (int year, unsigned short month,
-                 short zone_hours, short zone_minutes);
-
-    int
-    year () const;
-
-    void
-    year (int);
-
-    unsigned short
-    month () const;
-
-    void
-    month (unsigned short);
-  };
-
-  bool
-  operator== (const gyear_month&, const gyear_month&);
-
-  bool
-  operator!= (const gyear_month&, const gyear_month&);
-}
-  
- - -

6.13 time Parser

- -

The return type of the time_pimpl parser implementation - is xml_schema::time which represents hours, minutes, - and seconds with an optional time zone. Its interface is presented below. - For more information on the base xml_schema::time_zone - class refer to Section 6.4, "Time Zone - Representation".

- -
-namespace xml_schema
-{
-  class time
-  {
-  public:
-    time (unsigned short hours, unsigned short minutes, double seconds);
-    time (unsigned short hours, unsigned short minutes, double seconds,
-          short zone_hours, short zone_minutes);
-
-    unsigned short
-    hours () const;
-
-    void
-    hours (unsigned short);
-
-    unsigned short
-    minutes () const;
-
-    void
-    minutes (unsigned short);
-
-    double
-    seconds () const;
-
-    void
-    seconds (double);
-  };
-
-  bool
-  operator== (const time&, const time&);
-
-  bool
-  operator!= (const time&, const time&);
-}
-  
- - - - - -

7 Document Parser and Error Handling

- -

In this chapter we will discuss the xml_schema::document - type as well as the error handling mechanisms provided by the mapping - in more detail. As mentioned in Section 3.4, - "Connecting the Parsers Together", the interface of - xml_schema::document depends on the underlying XML - parser selected (Section 5.2, "Underlying XML - Parser"). The following sections describe the - document type interface for Xerces-C++ and - Expat as underlying parsers.

- -

7.1 Xerces-C++ Document Parser

- -

When Xerces-C++ is used as the underlying XML parser, the - document type has the following interface. Note that - if the character type is wchar_t, then the string type - in the interface becomes std::wstring - (see Section 5.1, "Character Type and Encoding").

- -
-namespace xml_schema
-{
-  class parser_base;
-  class error_handler;
-
-  class flags
-  {
-  public:
-    // Do not validate XML documents with the Xerces-C++ validator.
-    //
-    static const unsigned long dont_validate;
-
-    // Do not initialize the Xerces-C++ runtime.
-    //
-    static const unsigned long dont_initialize;
-
-    // Disable handling of subsequent imports for the same namespace
-    // in Xerces-C++ 3.1.0 and later.
-    //
-    static const unsigned long no_multiple_imports;
-  };
-
-  class properties
-  {
-  public:
-    // Add a location for a schema with a target namespace.
-    //
-    void
-    schema_location (const std::string& namespace_,
-                     const std::string& location);
-
-    // Add a location for a schema without a target namespace.
-    //
-    void
-    no_namespace_schema_location (const std::string& location);
-  };
-
-  class document
-  {
-  public:
-    document (parser_base& root,
-              const std::string& root_element_name,
-	      bool polymorphic = false);
-
-    document (parser_base& root,
-              const std::string& root_element_namespace,
-              const std::string& root_element_name,
-	      bool polymorphic = false);
-
-  public:
-    // Parse URI or a local file.
-    //
-    void
-    parse (const std::string& uri,
-           flags = 0,
-           const properties& = properties ());
-
-    // Parse URI or a local file with a user-provided error_handler
-    // object.
-    //
-    void
-    parse (const std::string& uri,
-           error_handler&,
-           flags = 0,
-           const properties& = properties ());
-
-    // Parse URI or a local file with a user-provided ErrorHandler
-    // object. Note that you must initialize the Xerces-C++ runtime
-    // before calling this function.
-    //
-    void
-    parse (const std::string& uri,
-           xercesc::ErrorHandler&,
-           flags = 0,
-           const properties& = properties ());
-
-    // Parse URI or a local file using a user-provided SAX2XMLReader
-    // object. Note that you must initialize the Xerces-C++ runtime
-    // before calling this function.
-    //
-    void
-    parse (const std::string& uri,
-           xercesc::SAX2XMLReader&,
-           flags = 0,
-           const properties& = properties ());
-
-  public:
-    // Parse std::istream.
-    //
-    void
-    parse (std::istream&,
-           flags = 0,
-           const properties& = properties ());
-
-    // Parse std::istream with a user-provided error_handler object.
-    //
-    void
-    parse (std::istream&,
-           error_handler&,
-           flags = 0,
-           const properties& = properties ());
-
-    // Parse std::istream with a user-provided ErrorHandler object.
-    // Note that you must initialize the Xerces-C++ runtime before
-    // calling this function.
-    //
-    void
-    parse (std::istream&,
-           xercesc::ErrorHandler&,
-           flags = 0,
-           const properties& = properties ());
-
-    // Parse std::istream using a user-provided SAX2XMLReader object.
-    // Note that you must initialize the Xerces-C++ runtime before
-    // calling this function.
-    //
-    void
-    parse (std::istream&,
-           xercesc::SAX2XMLReader&,
-           flags = 0,
-           const properties& = properties ());
-
-  public:
-    // Parse std::istream with a system id.
-    //
-    void
-    parse (std::istream&,
-           const std::string& system_id,
-           flags = 0,
-           const properties& = properties ());
-
-    // Parse std::istream with a system id and a user-provided
-    // error_handler object.
-    //
-    void
-    parse (std::istream&,
-           const std::string& system_id,
-           error_handler&,
-           flags = 0,
-           const properties& = properties ());
-
-    // Parse std::istream with a system id and a user-provided
-    // ErrorHandler object. Note that you must initialize the
-    // Xerces-C++ runtime before calling this function.
-    //
-    void
-    parse (std::istream&,
-           const std::string& system_id,
-           xercesc::ErrorHandler&,
-           flags = 0,
-           const properties& = properties ());
-
-    // Parse std::istream with a system id using a user-provided
-    // SAX2XMLReader object. Note that you must initialize the
-    // Xerces-C++ runtime before calling this function.
-    //
-    void
-    parse (std::istream&,
-           const std::string& system_id,
-           xercesc::SAX2XMLReader&,
-           flags = 0,
-           const properties& = properties ());
-
-  public:
-    // Parse std::istream with system and public ids.
-    //
-    void
-    parse (std::istream&,
-           const std::string& system_id,
-           const std::string& public_id,
-           flags = 0,
-           const properties& = properties ());
-
-    // Parse std::istream with system and public ids and a user-provided
-    // error_handler object.
-    //
-    void
-    parse (std::istream&,
-           const std::string& system_id,
-           const std::string& public_id,
-           error_handler&,
-           flags = 0,
-           const properties& = properties ());
-
-    // Parse std::istream with system and public ids and a user-provided
-    // ErrorHandler object. Note that you must initialize the Xerces-C++
-    // runtime before calling this function.
-    //
-    void
-    parse (std::istream&,
-           const std::string& system_id,
-           const std::string& public_id,
-           xercesc::ErrorHandler&,
-           flags = 0,
-           const properties& = properties ());
-
-    // Parse std::istream with system and public ids using a user-
-    // provided SAX2XMLReader object. Note that you must initialize
-    // the Xerces-C++ runtime before calling this function.
-    //
-    void
-    parse (std::istream&,
-           const std::string& system_id,
-           const std::string& public_id,
-           xercesc::SAX2XMLReader&,
-           flags = 0,
-           const properties& = properties ());
-
-  public:
-    // Parse InputSource. Note that you must initialize the Xerces-C++
-    // runtime before calling this function.
-    //
-    void
-    parse (const xercesc::InputSource&,
-           flags = 0,
-           const properties& = properties ());
-
-    // Parse InputSource with a user-provided error_handler object.
-    // Note that you must initialize the Xerces-C++ runtime before
-    // calling this function.
-    //
-    void
-    parse (const xercesc::InputSource&,
-           error_handler&,
-           flags = 0,
-           const properties& = properties ());
-
-    // Parse InputSource with a user-provided ErrorHandler object.
-    // Note that you must initialize the Xerces-C++ runtime before
-    // calling this function.
-    //
-    void
-    parse (const xercesc::InputSource&,
-           xercesc::ErrorHandler&,
-           flags = 0,
-           const properties& = properties ());
-
-    // Parse InputSource using a user-provided SAX2XMLReader object.
-    // Note that you must initialize the Xerces-C++ runtime before
-    // calling this function.
-    //
-    void
-    parse (const xercesc::InputSource&,
-           xercesc::SAX2XMLReader&,
-           flags = 0,
-           const properties& = properties ());
-  };
-}
-  
- -

The document class is a root parser for - the vocabulary. The first argument to its constructors is the - parser for the type of the root element. The parser_base - class is the base type for all parser skeletons. The second and - third arguments to the document's constructors are - the root element's name and namespace. The last argument, - polymorphic, specifies whether the XML documents - being parsed use polymorphism. For more information on support - for XML Schema polymorphism in the C++/Parser mapping refer - to Section 5.4, "Support for Polymorphism".

- -

The rest of the document interface consists of overloaded - parse() functions. The last two arguments in each of these - functions are flags and properties. The - flags argument allows you to modify the default behavior - of the parsing functions. The properties argument allows - you to override the schema location attributes specified in XML - documents. Note that the schema location paths are relative to an - XML document unless they are complete URIs. For example if you want - to use a local schema file then you will need to use a URI in the - form file:///absolute/path/to/your/schema.

- -

A number of overloaded parse() functions have the - system_id and public_id arguments. The - system id is a system identifier of the resources being - parsed (for example, URI or a full file path). The public id is a - public identifier of the resource (for example, an - application-specific name or a relative file path). The system id - is used to resolve relative paths (for example, schema paths). In - diagnostics messages the public id is used if it is available. - Otherwise the system id is used.

- -

The error handling mechanisms employed by the document - parser are described in Section 7.3, "Error - Handling".

- -

7.2 Expat Document Parser

- -

When Expat is used as the underlying XML parser, the - document type has the following interface. Note that - if the character type is wchar_t, then the string type - in the interface becomes std::wstring - (see Section 5.1, "Character Type and Encoding").

- -
-namespace xml_schema
-{
-  class parser_base;
-  class error_handler;
-
-  class document
-  {
-  public:
-    document (parser_base&,
-              const std::string& root_element_name,
-              bool polymorphic = false);
-
-    document (parser_base&,
-              const std::string& root_element_namespace,
-              const std::string& root_element_name,
-              bool polymorphic = false);
-
-  public:
-    // Parse a local file. The file is accessed with std::ifstream
-    // in binary mode. The std::ios_base::failure exception is used
-    // to report io errors (badbit and failbit).
-    void
-    parse (const std::string& file);
-
-    // Parse a local file with a user-provided error_handler
-    // object. The file is accessed with std::ifstream in binary
-    // mode. The std::ios_base::failure exception is used to report
-    // io errors (badbit and failbit).
-    //
-    void
-    parse (const std::string& file, error_handler&);
-
-  public:
-    // Parse std::istream.
-    //
-    void
-    parse (std::istream&);
-
-    // Parse std::istream with a user-provided error_handler object.
-    //
-    void
-    parse (std::istream&, error_handler&);
-
-    // Parse std::istream with a system id.
-    //
-    void
-    parse (std::istream&, const std::string& system_id);
-
-    // Parse std::istream with a system id and a user-provided
-    // error_handler object.
-    //
-    void
-    parse (std::istream&,
-           const std::string& system_id,
-           error_handler&);
-
-    // Parse std::istream with system and public ids.
-    //
-    void
-    parse (std::istream&,
-           const std::string& system_id,
-           const std::string& public_id);
-
-    // Parse std::istream with system and public ids and a user-provided
-    // error_handler object.
-    //
-    void
-    parse (std::istream&,
-           const std::string& system_id,
-           const std::string& public_id,
-           error_handler&);
-
-  public:
-    // Parse a chunk of input. You can call these functions multiple
-    // times with the last call having the last argument true.
-    //
-    void
-    parse (const void* data, std::size_t size, bool last);
-
-    void
-    parse (const void* data, std::size_t size, bool last,
-           error_handler&);
-
-    void
-    parse (const void* data, std::size_t size, bool last,
-           const std::string& system_id);
-
-    void
-    parse (const void* data, std::size_t size, bool last,
-           const std::string& system_id,
-           error_handler&);
-
-    void
-    parse (const void* data, std::size_t size, bool last,
-           const std::string& system_id,
-           const std::string& public_id);
-
-    void
-    parse (const void* data, std::size_t size, bool last,
-           const std::string& system_id,
-           const std::string& public_id,
-           error_handler&);
-
-  public:
-    // Low-level Expat-specific parsing API.
-    //
-    void
-    parse_begin (XML_Parser);
-
-    void
-    parse_begin (XML_Parser, const std::string& public_id);
-
-    void
-    parse_begin (XML_Parser, error_handler&);
-
-    void
-    parse_begin (XML_Parser,
-                 const std::string& public_id,
-                 error_handler&);
-    void
-    parse_end ();
-  };
-}
-  
- -

The document class is a root parser for - the vocabulary. The first argument to its constructors is the - parser for the type of the root element. The parser_base - class is the base type for all parser skeletons. The second and - third arguments to the document's constructors are - the root element's name and namespace. The last argument, - polymorphic, specifies whether the XML documents - being parsed use polymorphism. For more information on support - for XML Schema polymorphism in the C++/Parser mapping refer - to Section 5.4, "Support for Polymorphism".

- -

A number of overloaded parse() functions have the - system_id and public_id arguments. The - system id is a system identifier of the resources being - parsed (for example, URI or a full file path). The public id is a - public identifier of the resource (for example, an - application-specific name or a relative file path). The system id - is used to resolve relative paths. In diagnostics messages the - public id is used if it is available. Otherwise the system id - is used.

- -

The parse_begin() and parse_end() functions - present a low-level, Expat-specific parsing API for maximum control. - A typical use-case would look like this (pseudo-code):

- -
-xxx_pimpl root_p;
-document doc_p (root_p, "root");
-
-root_p.pre ();
-doc_p.parse_begin (xml_parser, "file.xml");
-
-while (more_data_to_parse)
-{
-  // Call XML_Parse or XML_ParseBuffer.
-
-  if (status == XML_STATUS_ERROR)
-    break;
-}
-
-// Call parse_end even in case of an error to translate
-// XML and Schema errors to exceptions or error_handler
-// calls.
-//
-doc.parse_end ();
-result_type result (root_p.post_xxx ());
-  
- -

Note that if your vocabulary uses XML namespaces, the - XML_ParserCreateNS() functions should be used to create - the XML parser. Space (XML_Char (' ')) should be used - as a separator (the second argument to XML_ParserCreateNS()). -

- -

The error handling mechanisms employed by the document - parser are described in Section 7.3, "Error - Handling".

- - -

7.3 Error Handling

- -

There are three categories of errors that can result from running - a parser on an XML document: System, XML, and Application. - The System category contains memory allocation and file/stream - operation errors. The XML category covers XML parsing and - well-formedness checking as well as XML Schema validation errors. - Finally, the Application category is for application logic errors - that you may want to propagate from parser implementations to the - caller of the parser. -

- -

The System errors are mapped to the standard exceptions. The - out of memory condition is indicated by throwing an instance - of std::bad_alloc. The stream operation errors - are reported either by throwing an instance of - std::ios_base::failure if exceptions are enabled - or by setting the stream state.

- -

Note that if you are parsing std::istream on - which exceptions are not enabled, then you will need to - check the stream state before calling the post() - callback, as shown in the following example:

- -
-int
-main (int argc, char* argv[])
-{
-  ...
-
-  std::ifstream ifs (argv[1]);
-
-  if (ifs.fail ())
-  {
-    cerr << argv[1] << ": unable to open" << endl;
-    return 1;
-  }
-
-  root_p.pre ();
-  doc_p.parse (ifs);
-
-  if (ifs.fail ())
-  {
-    cerr << argv[1] << ": io failure" << endl;
-    return 1;
-  }
-
-  result_type result (root_p.post_xxx ());
-}
-  
- -

The above example can be rewritten to use exceptions - as shown below:

- -
-int
-main (int argc, char* argv[])
-{
-  try
-  {
-    ...
-
-    std::ifstream ifs;
-    ifs.exceptions (std::ifstream::badbit | std::ifstream::failbit);
-    ifs.open (argv[1]);
-
-    root_p.pre ();
-    doc_p.parse (ifs);
-    result_type result (root_p.post_xxx ());
-  }
-  catch (const std::ifstream::failure&)
-  {
-    cerr << argv[1] << ": unable to open or io failure" << endl;
-    return 1;
-  }
-}
-  
- - -

For reporting application errors from parsing callbacks, you - can throw any exceptions of your choice. They are propagated to - the caller of the parser without any alterations.

- -

The XML errors can be reported either by throwing the - xml_schema::parsing exception or by a callback - to the xml_schema::error_handler object (and - xercesc::ErrorHandler object in case of Xerces-C++).

- -

The xml_schema::parsing exception contains - a list of warnings and errors that were accumulated during - parsing. Note that this exception is thrown only if there - was an error. This makes it impossible to obtain warnings - from an otherwise successful parsing using this mechanism. - The following listing shows the definition of - xml_schema::parsing exception. Note that if the - character type is wchar_t, then the string type - and output stream type in the definition become - std::wstring and std::wostream, - respectively (see Section 5.1, "Character Type - and Encoding").

- -
-namespace xml_schema
-{
-  class exception: public std::exception
-  {
-  protected:
-    virtual void
-    print (std::ostream&) const = 0;
-  };
-
-  inline std::ostream&
-  operator<< (std::ostream& os, const exception& e)
-  {
-    e.print (os);
-    return os;
-  }
-
-
-  class severity
-  {
-  public:
-    enum value
-    {
-      warning,
-      error
-    };
-  };
-
-
-  class error
-  {
-  public:
-    error (xml_schema::severity,
-           const std::string& id,
-           unsigned long line,
-           unsigned long column,
-           const std::string& message);
-
-    xml_schema::severity
-    severity () const;
-
-    const std::string&
-    id () const;
-
-    unsigned long
-    line () const;
-
-    unsigned long
-    column () const;
-
-    const std::string&
-    message () const;
-  };
-
-  std::ostream&
-  operator<< (std::ostream&, const error&);
-
-
-  class diagnostics: public std::vector<error>
-  {
-  };
-
-  std::ostream&
-  operator<< (std::ostream&, const diagnostics&);
-
-
-  class parsing: public exception
-  {
-  public:
-    parsing ();
-    parsing (const xml_schema::diagnostics&);
-
-    const xml_schema::diagnostics&
-    diagnostics () const;
-
-    virtual const char*
-    what () const throw ();
-
-  protected:
-    virtual void
-    print (std::ostream&) const;
-  };
-}
-  
- -

The following example shows how we can catch and print this - exception. The code will print diagnostics messages one per line - in case of an error.

- -
-int
-main (int argc, char* argv[])
-{
-  try
-  {
-    // Parse.
-  }
-  catch (const xml_schema::parsing& e)
-  {
-    cerr << e << endl;
-    return 1;
-  }
-}
-  
- -

With the error_handler approach the diagnostics - messages are delivered as parsing progresses. The following - listing presents the definition of the error_handler - interface. Note that if the character type is wchar_t, - then the string type in the interface becomes std::wstring - (see Section 5.1, "Character Type and Encoding").

- -
-namespace xml_schema
-{
-  class error_handler
-  {
-  public:
-    class severity
-    {
-    public:
-      enum value
-      {
-        warning,
-        error,
-        fatal
-      };
-    };
-
-    virtual bool
-    handle (const std::string& id,
-            unsigned long line,
-            unsigned long column,
-            severity,
-            const std::string& message) = 0;
-  };
-}
-  
- -

The return value of the handle() function indicates whether - parsing should continue if possible. The error with the fatal severity - level terminates the parsing process regardless of the returned value. - At the end of the parsing process with an error that was reported via - the error_handler object, an empty - xml_schema::parsing exception is thrown to indicate - the failure to the caller. You can alter this behavior by throwing - your own exception from the handle() function.

- - - - - -

Appendix A — Supported XML Schema Constructs

- -

The C++/Parser mapping supports validation of the following W3C XML - Schema constructs in the generated code.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
ConstructNotes
Structure
element
attribute
any
anyAttribute
all
sequence
choice
complex type, empty content
complex type, mixed content
complex type, simple content extension
complex type, simple content restrictionSimple type facets are not validated.
complex type, complex content extension
complex type, complex content restriction
list
Datatypes
byte
unsignedByte
short
unsignedShort
int
unsignedInt
long
unsignedLong
integer
nonPositiveInteger
nonNegativeInteger
positiveInteger
negativeInteger
boolean
float
double
decimal
string
normalizedString
token
Name
NMTOKEN
NCName
language
anyURI
IDIdentity constraint is not enforced.
IDREFIdentity constraint is not enforced.
NMTOKENS
IDREFSIdentity constraint is not enforced.
QName
base64Binary
hexBinary
date
dateTime
duration
gDay
gMonth
gMonthDay
gYear
gYearMonth
time
- - -
-
- - - diff --git a/xsd/documentation/cxx/parser/guide/makefile b/xsd/documentation/cxx/parser/guide/makefile deleted file mode 100644 index f78a9f9..0000000 --- a/xsd/documentation/cxx/parser/guide/makefile +++ /dev/null @@ -1,55 +0,0 @@ -# file : documentation/cxx/parser/guide/makefile -# author : Boris Kolpackov -# copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC -# license : GNU GPL v2 + exceptions; see accompanying LICENSE file - -include $(dir $(lastword $(MAKEFILE_LIST)))../../../../build/bootstrap.make - -default := $(out_base)/ -install := $(out_base)/.install -dist := $(out_base)/.dist -dist-win := $(out_base)/.dist-win -cleandoc := $(out_base)/.cleandoc - -# Build. -# -$(default): $(out_base)/cxx-parser-guide.ps $(out_base)/cxx-parser-guide.pdf - -$(out_base)/cxx-parser-guide.ps: $(src_base)/index.xhtml \ - $(src_base)/figure-1.png \ - $(src_base)/guide.html2ps \ - | $(out_base)/. - $(call message,html2ps $<,html2ps -f $(src_base)/guide.html2ps -o $@ $<) - -$(out_base)/cxx-parser-guide.pdf: $(out_base)/cxx-parser-guide.ps | $(out_base)/. - $(call message,ps2pdf $<,ps2pdf14 $< $@) - -# Install & Dist. -# -$(install): path := $(subst $(src_root)/documentation/,,$(src_base)) -$(dist): path := $(subst $(src_root)/,,$(src_base)) - -$(install): $(out_base)/cxx-parser-guide.ps $(out_base)/cxx-parser-guide.pdf - $(call install-data,$(src_base)/figure-1.png,$(install_doc_dir)/xsd/$(path)/figure-1.png) - $(call install-data,$(src_base)/index.xhtml,$(install_doc_dir)/xsd/$(path)/index.xhtml) - $(call install-data,$(out_base)/cxx-parser-guide.ps,$(install_doc_dir)/xsd/$(path)/cxx-parser-guide.ps) - $(call install-data,$(out_base)/cxx-parser-guide.pdf,$(install_doc_dir)/xsd/$(path)/cxx-parser-guide.pdf) - -$(dist): $(out_base)/cxx-parser-guide.ps $(out_base)/cxx-parser-guide.pdf - $(call install-data,$(src_base)/figure-1.png,$(dist_prefix)/$(path)/figure-1.png) - $(call install-data,$(src_base)/index.xhtml,$(dist_prefix)/$(path)/index.xhtml) - $(call install-data,$(out_base)/cxx-parser-guide.ps,$(dist_prefix)/$(path)/cxx-parser-guide.ps) - $(call install-data,$(out_base)/cxx-parser-guide.pdf,$(dist_prefix)/$(path)/cxx-parser-guide.pdf) - -$(dist-win): $(dist) - - -# Clean -# -$(cleandoc): - $(call message,rm $$1,rm -f $$1,$(out_base)/cxx-parser-guide.ps) - $(call message,rm $$1,rm -f $$1,$(out_base)/cxx-parser-guide.pdf) - -# How to. -# -$(call include,$(bld_root)/install.make) diff --git a/xsd/documentation/cxx/parser/makefile b/xsd/documentation/cxx/parser/makefile deleted file mode 100644 index c0394dc..0000000 --- a/xsd/documentation/cxx/parser/makefile +++ /dev/null @@ -1,22 +0,0 @@ -# file : documentation/cxx/parser/makefile -# author : Boris Kolpackov -# copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC -# license : GNU GPL v2 + exceptions; see accompanying LICENSE file - -include $(dir $(lastword $(MAKEFILE_LIST)))../../../build/bootstrap.make - -docs := guide - -default := $(out_base)/ -install := $(out_base)/.install -dist := $(out_base)/.dist -dist-win := $(out_base)/.dist-win -cleandoc := $(out_base)/.cleandoc - -$(default): $(addprefix $(out_base)/,$(addsuffix /,$(docs))) -$(install): $(addprefix $(out_base)/,$(addsuffix /.install,$(docs))) -$(dist): $(addprefix $(out_base)/,$(addsuffix /.dist,$(docs))) -$(dist-win): $(addprefix $(out_base)/,$(addsuffix /.dist-win,$(docs))) -$(cleandoc): $(addprefix $(out_base)/,$(addsuffix /.cleandoc,$(docs))) - -$(foreach m,$(docs),$(call import,$(src_base)/$m/makefile)) diff --git a/xsd/documentation/cxx/tree/dbxml/driver.cxx b/xsd/documentation/cxx/tree/dbxml/driver.cxx deleted file mode 100644 index 56cbb4a..0000000 --- a/xsd/documentation/cxx/tree/dbxml/driver.cxx +++ /dev/null @@ -1,175 +0,0 @@ -// file : examples/cxx/tree/dbxml/driver.cxx -// author : Boris Kolpackov -// copyright : not copyrighted - public domain - -#include // std::auto_ptr -#include -#include -#include - -#include - -#include "library.hxx" - -using std::cerr; -using std::endl; -using std::string; -using std::auto_ptr; - -using namespace DbXml; -using namespace xsd::cxx; // for xml::string - -void -print_document (const string& desc, - XmlContainer container, - const string& name) -{ - XmlDocument doc (container.getDocument (name)); - - string content; - doc.getContent (content); - - cerr << endl - << desc << endl - << content << endl; -} - -int -main () -{ - try - { - using namespace library; - using xml_schema::date; - - XmlManager manager; - - { - XmlContainer container (manager.createContainer ("new.bdbxml")); - - XmlUpdateContext update_context (manager.createUpdateContext ()); - - XmlQueryContext context (manager.createQueryContext ()); - context.setNamespace ("lib", "http://www.codesynthesis.com/library"); - - - // Create a new document from an object model. - // - { - // Create a new catalog with one book. - // - catalog c; - - book b (20530902, // ISBN - "The Elements of Style", // Title - genre::reference, // Genre - "ES"); // ID - - author strunk ("William Strunk, Jr.", date (1869, 7, 1)); - strunk.died (date (1946, 9, 26)); - - b.author ().push_back (strunk); - c.book ().push_back (b); - - - // Create a new XML document. - // - XmlDocument doc (manager.createDocument ()); - doc.setName ("new.xml"); - - - // Obtain its DOM representation and add the root element. - // - xercesc::DOMDocument& dom_doc (*doc.getContentAsDOM ()); - - dom_doc.appendChild ( - dom_doc.createElementNS ( - xml::string ("http://www.codesynthesis.com/library").c_str (), - xml::string ("lib:catalog").c_str ())); - - - // Serialize the object model to the XML document. Also avoid - // re-initializing the Xerces-C++ runtime since XmlManager has - // it initialized. - // - catalog_ (dom_doc, c, xml_schema::flags::dont_initialize); - - - // Place the document into the container. - // - container.putDocument (doc, update_context); - - print_document ("after create:", container, "new.xml"); - } - - // Create an object model from a document in DB. - // - { - // Resolve the document in the container. - // - XmlDocument doc (container.getDocument ("new.xml")); - - - // Create the object model from the document's DOM. Also avoid - // re-initializing the Xerces-C++ runtime since XmlManager has - // it initialized. - // - auto_ptr c (catalog_ (*doc.getContentAsDOM (), - xml_schema::flags::dont_initialize)); - - cerr << *c << endl; - } - - - // Lookup a document fragment. - // - - string query ("collection('new.bdbxml')/lib:catalog/book[@id='ES']"); - - // Find "The Elements of Style". - // - XmlValue v; - XmlResults results (manager.query (query, context)); - - if (results.next (v)) - { - // Create an object model from the document fragment. - // - auto_ptr b ( - new book ( - *static_cast (v.asNode ()))); - - cerr << *b << endl; - - - // Add another author, change the availability status. - // - author white ("E.B. White", date (1899, 7, 11)); - white.died (date (1985, 10, 1)); - - b->author ().push_back (white); - b->available (false); - - - // Update the document fragment from the object model. - // - *static_cast (v.asNode ()) << *b; - - - // Update the document in the container. - // - XmlDocument doc (v.asDocument ()); - container.updateDocument (doc, update_context); - } - - print_document ("after update:", container, "new.xml"); - } - - manager.removeContainer ("new.bdbxml"); - } - catch (const std::exception& e) - { - cerr << e.what () << endl; - return 1; - } -} diff --git a/xsd/documentation/cxx/tree/dbxml/index.xhtml b/xsd/documentation/cxx/tree/dbxml/index.xhtml deleted file mode 100644 index adfeb24..0000000 --- a/xsd/documentation/cxx/tree/dbxml/index.xhtml +++ /dev/null @@ -1,348 +0,0 @@ - - - - - - C++/Tree Mapping and Berkeley DB XML Integration Guide - - - - - - - - - - - -
-
- -

Introduction

- -

This guide shows how to integrate the - C++/Tree - mapping generated by - CodeSynthesis XSD - with - Berkeley DB XML. - - Berkeley DB XML is an embedded XML database which allows efficient - storage and query of XML instance documents. - - CodeSynthesis XSD is a W3C XML Schema to C++ data binding compiler. - - The C++/Tree mapping allows you to manipulate the data stored in XML - using objects that semantically correspond to your application - domain rather than dealing with direct representations of XML. - - For an introduction to - the Berkeley DB XML refer to the - Berkeley DB XML - Getting Started Guide. - For an introduction to the C++/Tree mapping refer to - the C++/Tree Mapping Getting Started Guide. -

- - -

This guide describes the following four operations:

- -
    -
  • Create a new document in DB from an object model
  • -
  • Create an object model from a document in DB
  • -
  • Create an object model from a document fragment in DB
  • -
  • Update a document fragment in DB from an object model
  • -
- -

Our examples will be based on simple XML for book library. The XML - Schema definition for the library is in - library.xsd and is compiled by XSD - to obtain library.hxx and library.cxx. - All C++ code fragments that are presented in this guide are available - as a single program in driver.cxx. - The complete example is available in the - examples/cxx/tree/dbxml directory of the XSD distribution.

- -

Note that due to the incomplete DOM API implementation provided by DB - XML (as of version 2.3.10), the generated code and your application - should be compiled with the DBXML_DOM macro defined in - order to avoid using unsupported parts of the API. -

- -

A sample XML document for the library schema is presented below:

- -
-<lib:catalog xmlns:lib="http://www.codesynthesis.com/library">
-  <book available="true" id="ES">
-    <isbn>20530902</isbn>
-    <title>The Elements of Style</title>
-    <genre>reference</genre>
-
-    <author>
-      <name>William Strunk, Jr.</name>
-      <born>1869-07-01</born>
-      <died>1946-09-26</died>
-    </author>
-
-    <author>
-      <name>E.B. White</name>
-      <born>1899-07-11</born>
-      <died>1985-10-01</died>
-    </author>
-  </book>
-</lib:catalog>
-  
- -

Create Document from Object Model

- -

In this step, we will programmatically create a book catalog - with one book, save it into an XmlDocument object - using one of the serialization functions generated by XSD ( - catalog_ in our case), and store the - XmlDocument object as a new document in the - DB container:

- -
-XmlManager manager;
-XmlContainer container (manager.createContainer ("new.bdbxml"));
-XmlUpdateContext update_context (manager.createUpdateContext ());
-XmlQueryContext context (manager.createQueryContext ());
-context.setNamespace ("lib", "http://www.codesynthesis.com/library");
-
-// Create a new catalog with one book.
-//
-catalog c;
-
-book b (20530902,                        // ISBN
-        title ("The Elements of Style"), // Title
-        genre::reference,                // Genre
-        "ES");                           // ID
-
-author strunk ("William Strunk, Jr.", date (1869, 7, 1));
-strunk.died (date (1946, 9, 26));
-
-b.author ().push_back (strunk);
-c.book ().push_back (b);
-
-// Create a new XML document.
-//
-XmlDocument doc (manager.createDocument ());
-doc.setName ("new.xml");
-
-// Obtain its DOM representation and add the root element.
-//
-xercesc::DOMDocument& dom_doc (*doc.getContentAsDOM ());
-
-dom_doc.appendChild (
-  dom_doc.createElementNS (
-    xml::string ("http://www.codesynthesis.com/library").c_str (),
-    xml::string ("lib:catalog").c_str ()));
-
-// Serialize the object model to the XML document. Also avoid
-// re-initializing the Xerces-C++ runtime since XmlManager has
-// it initialized.
-//
-catalog_ (dom_doc, c, xml_schema::flags::dont_initialize);
-
-// Place the document into the container.
-//
-container.putDocument (doc, update_context);
-  
- -

If we now resolve the new.xml in the container and - print its content, we will get:

- -
-<lib:catalog xmlns:lib="http://www.codesynthesis.com/library">
-  <book available="true" id="ES">
-    <isbn>20530902</isbn>
-    <title>The Elements of Style</title>
-    <genre>reference</genre>
-    <author>
-      <name>William Strunk, Jr.</name>
-      <born>1869-07-01</born>
-      <died>1946-09-26</died>
-    </author>
-  </book>
-</lib:catalog>
-  
- -

Create Object Model from Document

- -

Creating an object model from a document is a matter - of obtaining XmlDocument object and passing its DOM - representation to one of the parsing functions generated by XSD - (catalog_ in our case): -

- -
-// Resolve the document in the container.
-//
-XmlDocument doc (container.getDocument ("new.xml"));
-
-// Create the object model from the document's DOM. Also avoid
-// re-initializing the Xerces-C++ runtime since XmlManager has
-// it initialized.
-//
-auto_ptr<catalog> c (catalog_ (*doc.getContentAsDOM (),
-                               xml_schema::flags::dont_initialize));
-
-cerr << *c << endl;
-  
- -

This code fragment prints:

- -
-book:
-isbn: 20530902
-title: The Elements of Style
-genre: reference
-author:
-name: William Strunk, Jr.
-born: 1869-07-01
-died: 1946-09-26
-available: 1
-id: ES
-  
- -

Create Object Model from Document Fragment

- -

The following code fragment looks up the book with id "ES" - using XQuery. It then creates a book object from the - resulting XmlValue:

- -
-string query ("collection('new.bdbxml')/lib:catalog/book[@id='ES']");
-
-// Find "The Elements of Style".
-//
-XmlValue v;
-XmlResults results (manager.query (query, context));
-
-if (results.next (v))
-{
-  // Create an object model from the document fragment.
-  //
-  auto_ptr<book> b (
-    new book (
-      *static_cast<xercesc::DOMElement*> (v.asNode ())));
-
-  cerr << *b << endl;
-}
-  
- -

This code fragment prints:

- -
-isbn: 20530902
-title: The Elements of Style
-genre: reference
-author:
-name: William Strunk, Jr.
-born: 1869-07-01
-died: 1946-09-26
-available: 1
-id: ES
-  
- -

Note that we had to perform a static_cast from - xercesc::DOMNode - returned by the XmlValue::asNode member function to - xercesc::DOMElement. This is safe since we know - that in our schema books are represented as XML elements.

- -

Update Document Fragment from Object Model

- -

Analogous to the create case, the following code fragment looks - up the book with id "ES" using XQuery. It then creates - a book object from the resulting XmlValue, - adds another author, changes the availability status, and saves - the changes back to the XmlValue object: -

- -
-string query ("collection('new.bdbxml')/lib:catalog/book[@id='ES']");
-
-// Find "The Elements of Style".
-//
-XmlValue v;
-XmlResults results (manager.query (query, context));
-
-if (results.next (v))
-{
-  // Create an object model from the document fragment.
-  //
-  auto_ptr<book> b (
-    new book (
-      *static_cast<xercesc::DOMElement*> (v.asNode ())));
-
-  // Add another author, change the availability status.
-  //
-  author white ("E.B. White", date (1899, 7, 11));
-  white.died (date (1985, 10, 1));
-
-  b->author ().push_back (white);
-  b->available (false);
-
-  // Update the document fragment from the object model.
-  //
-  *static_cast<xercesc::DOMElement*> (v.asNode ()) << *b;
-
-  // Update the document in the container.
-  //
-  XmlDocument doc (v.asDocument ());
-  container.updateDocument (doc, update_context);
-}
-  
- -

If we now resolve the new.xml in the container and - print its content, we will get:

- -
-<lib:catalog xmlns:lib="http://www.codesynthesis.com/library">
-  <book available="false" id="ES">
-    <isbn>20530902</isbn>
-    <title>The Elements of Style</title>
-    <genre>reference</genre>
-    <author>
-      <name>William Strunk, Jr.</name>
-      <born>1869-07-01</born>
-      <died>1946-09-26</died>
-    </author>
-    <author>
-      <name>E.B. White</name>
-      <born>1899-07-11</born>
-      <died>1985-10-01</died>
-    </author>
-  </book>
-</lib:catalog>
-  
- -
- - -
- - - diff --git a/xsd/documentation/cxx/tree/dbxml/library.xsd b/xsd/documentation/cxx/tree/dbxml/library.xsd deleted file mode 100644 index c71c312..0000000 --- a/xsd/documentation/cxx/tree/dbxml/library.xsd +++ /dev/null @@ -1,75 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/xsd/documentation/cxx/tree/guide/cxx-tree-guide.pdf b/xsd/documentation/cxx/tree/guide/cxx-tree-guide.pdf deleted file mode 100644 index 03d94fd..0000000 Binary files a/xsd/documentation/cxx/tree/guide/cxx-tree-guide.pdf and /dev/null differ diff --git a/xsd/documentation/cxx/tree/guide/cxx-tree-guide.ps b/xsd/documentation/cxx/tree/guide/cxx-tree-guide.ps deleted file mode 100644 index de3f351..0000000 --- a/xsd/documentation/cxx/tree/guide/cxx-tree-guide.ps +++ /dev/null @@ -1,3470 +0,0 @@ -%!PS -%%Title: C++/Tree Mapping Getting Started Guide -%%Creator: html2ps version 1.0 beta5 -%%EndComments -save -2000 dict begin -/d {bind def} bind def -/D {def} d -/t true D -/f false D -/FL [/Times-Roman -/Times-Italic -/Times-Bold -/Times-BoldItalic -/Courier -/Courier-Oblique -/Courier-Bold -/Courier-BoldOblique -/Helvetica -/Helvetica-Oblique -/Helvetica-Bold -/Helvetica-BoldOblique] D -/WF t D -/WI 0 D -/F 1 D -/IW 471 F div D -/IL 621 F div D -/PS 791 D -/EF [0 1 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 2 2] D -/EZ [12 10 19 17 15 13 12 11 12 12 12 12 12 12 12 12 12 12 12 12 12 12 8 8] D -/Ey [0 0 2 2 2 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0] D -/EG [-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1] D -/Tm [1 1 0.8 0.8 0.8 0.8 0.8 0.8 0 0 0 0 0 0 0.5 1 1 1 1 0 0 1.3 0 0] D -/Bm [1 1 0.5 0.5 0.5 0.5 0.5 0.5 0 0 0 0 0 0 0.5 1 1 1 1 0 0 1 0 0] D -/Lm [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 2 2 0 0 2 0 0 0] D -/Rm [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0] D -/EU [-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 0 0] D -/NO f D -/YY [[{()}{ h }][{ h }{()}][{()}{()}]] D -/ZZ [[{ (April 2010) }{ Pn }][{ Pn }{ (April 2010) }][{ Ti }{ Ti }]] D -/Ts EZ 0 get D -/TU f D -/Xp t D -/AU f D -/SN 0 D -/Cf t D -/Tp t D -/Fe f D -/TI 2 Ts mul D -/Fm 14 D -/xL 71 D -/xR 71 D -/yL 706 D -/yR 706 D -/Wl 471 F div D -/Wr 471 F div D -/hL 621 F div D -/hR 621 F div D -/FE {newpath Fm neg Fm M CP BB IW Fm add Fm L IW Fm add IL Fm add neg L CP BB - Fm neg IL Fm add neg L closepath} D -/LA {PM 0 eq{/IW Wl D /IL hL D}{/IW Wr D /IL hR D}ie /W IW D /LL W D /LS W D - TU PM 0 eq and{IW 56 F div add SA{Sf div}if 0 translate} - {PM 0 eq{xL yL}{xR yR}ie translate F SA{Sf mul}if dup scale - CS CF FS Cf{CA CL get VC}if /Bb f D}ie 0 0 M - TF not Tc or {Cf{gsave SA{1 Sf div dup scale}if Cb VC FE fill grestore}if}if}D -/Pi 0 Ts mul D -/SG [0.8 1 1] D -/Ab 15 D -/J 0 D -/Tc t D -/NH 6 D -/Nf f D -/Pa f D -/LH 1.2 D -/XR f D -/Xr {/pN E D ( [p ) WB pN WB (] )WB} D -/Db [16#FF 16#FF 16#FF] D -/Dt [16#00 16#00 16#00] D -/eA f D -/Fi f D -/bT f D -/Lc t D -/Dl [16#00 16#00 16#00] D -/LX f D -/Br 0.25 D -/IA ([IMAGE]) D -/DS {/PF f D()WB NL NP()pop RC ZF} D -/Gb f D -/Mb t D -/Hc [16#00 16#00 16#00] D -/Bl 3 D -/MI -15.6 D -/DX (DRAFT) D -/Di 0 D -/Tt 113.385826771654 D -/Th { ( -) 2 Al()BR ( - ) 0 1 -1 H()4 FZ (C++/Tree Mapping) ES()EH ( - ) 0 1 -1 H()4 FZ (Getting Started Guide) ES()EH ( - ) 0 1 -1 H ( ) EH ( - ) 0 1 -1 H ( ) EH ( - ) 0 1 -1 H ( ) EH ( - ) 0 1 -1 H ( ) EH ( - ) 0 1 -1 H ( ) EH ( - ) 0 1 -1 H ( ) EH ( -) Ea()BR ( - ) 0 P (Copyright © 2005-2010 CODE SYNTHESIS TOOLS CC) EP ( - - ) 0 P (Permission is granted to copy, distribute and/or modify this - document under the terms of the - ) R0 2 A (GNU Free - Documentation License, version 1.2) EA (; with no Invariant Sections, - no Front-Cover Texts and no Back-Cover Texts. - ) EP ( - - ) 0 P (This document is available in the following formats: - ) R1 2 A (XHTML) EA (, - ) R2 2 A (PDF) EA (, and - ) R3 2 A (PostScript) EA (.) EP()} D -/tH {()0 1 -1 H (Table of Contents) EH()} D -/FD 2 D -/Dy 2 D -/cD [16#F0 16#F0 16#F0] D -/FW 0.6 D -/FU [16#00 16#00 16#00] D -/ET {/RM f D /A0 3 D /PN SN D /OU t D /Ou t D /W IW D /LL W D D1 - Ms not TP and{Ip}if /TF f D} D - -%-- End of variable part -- -/MySymbol 10 dict dup begin - /FontType 3 D /FontMatrix [.001 0 0 .001 0 0 ] D /FontBBox [25 -10 600 600] D - /Encoding 256 array D 0 1 255{Encoding exch /.notdef put}for - Encoding (e) 0 get /euro put - /Metrics 2 dict D Metrics begin - /.notdef 0 D - /euro 651 D - end - /BBox 2 dict D BBox begin - /.notdef [0 0 0 0] D - /euro [25 -10 600 600] D - end - /CharacterDefs 2 dict D CharacterDefs begin - /.notdef {} D - /euro{newpath 114 600 moveto 631 600 lineto 464 200 lineto 573 200 lineto - 573 0 lineto -94 0 lineto 31 300 lineto -10 300 lineto closepath clip - 50 setlinewidth newpath 656 300 moveto 381 300 275 0 360 arc stroke - -19 350 moveto 600 0 rlineto -19 250 moveto 600 0 rlineto stroke}d - end - /BuildChar{0 begin - /char E D /fontdict E D /charname fontdict /Encoding get char get D - fontdict begin - Metrics charname get 0 BBox charname get aload pop setcachedevice - CharacterDefs charname get exec - end - end}D - /BuildChar load 0 3 dict put /UniqueID 1 D -end -definefont pop - -/Cd {aload length 2 idiv dup dict begin {D} repeat currentdict end} D -/EX {EC cvx exec} D -/DU {} d -/BB {pop pop}d -/ie {ifelse} d -/E {exch} d -/M {moveto} d -/R {rmoveto} d -/L {lineto} d -/RL {rlineto} d -/CP {currentpoint} d -/SW {stringwidth} d -/GI {getinterval} d -/PI {putinterval} d -/Sg {setgray} d -/LW {setlinewidth} d -/S {dup () ne OU and{0 Co R AT 3 eq LB and HF not and A1 0 ne A2 0 ne or and - {A2 0 32 A1 0 6 -1 roll awidthshow}{show}ie 0 Co neg R}{pop}ie - OU PH 3 eq or{/Ms t D}if} D -/U {OU{gsave CP currentfont /FontInfo get /UnderlinePosition get - 0 E currentfont /FontMatrix get dtransform E pop add newpath M dup SW pop - CJ 0 RL stroke grestore}if} D -/B {OU Br 0 gt and{CP Ts neg Ts .33 mul R gsave 0 Sg - CP newpath Ts Br mul 0 360 arc closepath UI 2 mod 0 eq{stroke}{fill}ie - grestore M CP E Ts Br 1 add mul sub E BB /Ms t D}if}D -/NP {Ms TP not or PA and OU and{TP{OR}if f1{mF k2 /mF E D /YC 0 D}if - TP TU not PM 0 eq or and{showpage}if DU Ip TE not{LA}if 0.6 LW - /CI 0 D /TP t D /Hs f D /hl 6 D /Hv 6 D /HI hi D /Ms f D}if Bs XO BO M} D -/Np {LE sub CP E pop gt PL 0 eq and{NP}if}D -/Ip {/PN PN 1 add D /Pn RM{1}{4}ie PN Ns D /PM PN SN sub 2 mod D} D -/GP {E dup 3 -1 roll get PN 1 add 2 mod get dup type /integertype eq - {get 0 get}{E pop}ie}d -/Fc {dup 2 GP exec SW pop /S1 E D dup 1 GP exec SW pop /S2 E D 0 GP exec SW - pop /S3 E D S1 0 gt{S2 2 mul S1 add S3 2 mul S1 add 2 copy lt{E}if pop}{0}ie - S2 S3 add 2 copy lt{E}if pop IW .9 mul div dup 1 gt{1 E div}{pop 1}ie}D -/OR {Df{Sd}if tp not{gsave SA{1 Sf div dup scale}if Fe{Cf{FU VC}if FW LW - 1 setlinejoin FE stroke}if /YO {60 F div dup 40 gt{pop 40}if}D /cs CS D - /cf CF D /CF 0 D /pf PF D /PF f D /Fn FN D /At AT D /AT 0 D /FN EF Hf 1 add - get D Fz Fs FS ZZ Fc Fz mul Fs FS EU Hf 1 add get dup type /arraytype eq - Cf and{VC}{pop 0 Sg}ie IW IL neg YO sub M ZZ 1 GP exec dup SW pop neg 0 R Sh - 0 IL neg YO sub M ZZ 0 GP exec Sh ZZ 2 GP exec dup SW pop IW E sub 2 div - IL neg YO sub M Sh Fz Fs FS NO{/AW IW Pn SW pop sub D AW 2 div IL neg YO sub - S1 0 gt S2 AW .45 mul gt or S3 AW .45 mul gt or{Fz 2 mul sub}if M Pn Sh}if - EU Hf get dup type /arraytype eq Cf and{VC}{pop 0 Sg}ie YY Fc /FN EF Hf get D - Hz mul HS FS IW YO M YY 1 GP exec dup SW pop neg 0 R Sh 0 YO M YY 0 GP exec Sh - YY 2 GP exec dup SW pop IW E sub 2 div YO M Sh /FN Fn D /AT At D t Pb XO SZ - SL get neg R /PF pf D grestore /CF 0 D cs cf FS}if}D -/Sh {dup () ne{CP Hz 4 div sub BB show CP CS add BB}{pop}ie}D -/Pb {/OU E D /Ou OU D /PB t D 0 0 M Ba{/Sa save D /BP t D /Fl t D RC /PL 0 D - /PH 0 D /W IW D /LE IL .7 mul D /EO 0 D SI ZF /YA 0 D /BO 0 D /C1 () D - BA 0 Ts neg R Bb{Xl Yl Xh Yh}if Bb CP Sa restore M - {/Yh E D /Xh E D /Yl E D /Xl E D}if /Fl t D}if - BL /OU t D /HM f D /Ou t D /PB f D} D -/Bs {/BP Ba not D}D -/reencodeISO { - dup dup findfont dup length dict begin{1 index /FID ne{D}{pop pop}ie}forall - /Encoding ISOLatin1Encoding D currentdict end definefont} D -/ISOLatin1Encoding [ -/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef -/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef -/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef -/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef -/space/exclam/quotedbl/numbersign/dollar/percent/ampersand/quoteright -/parenleft/parenright/asterisk/plus/comma/hyphen/period/slash -/zero/one/two/three/four/five/six/seven/eight/nine/colon/semicolon -/less/equal/greater/question/at/A/B/C/D/E/F/G/H/I/J/K/L/M/N -/O/P/Q/R/S/T/U/V/W/X/Y/Z/bracketleft/backslash/bracketright -/asciicircum/underscore/quoteleft/a/b/c/d/e/f/g/h/i/j/k/l/m -/n/o/p/q/r/s/t/u/v/w/x/y/z/braceleft/bar/braceright/asciitilde -/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef -/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef -/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef -/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef -/.notdef/space/exclamdown/cent/sterling/currency/yen/brokenbar -/section/dieresis/copyright/ordfeminine/guillemotleft/logicalnot -/hyphen/registered/macron/degree/plusminus/twosuperior/threesuperior -/acute/mu/paragraph/periodcentered/cedilla/onesuperior/ordmasculine -/guillemotright/onequarter/onehalf/threequarters/questiondown -/Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE/Ccedilla -/Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex -/Idieresis/Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis -/multiply/Oslash/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute -/Thorn/germandbls/agrave/aacute/acircumflex/atilde/adieresis -/aring/ae/ccedilla/egrave/eacute/ecircumflex/edieresis/igrave -/iacute/icircumflex/idieresis/eth/ntilde/ograve/oacute/ocircumflex -/otilde/odieresis/divide/oslash/ugrave/uacute/ucircumflex/udieresis -/yacute/thorn/ydieresis -] D -[128/backslash 129/parenleft 130/parenright 141/circumflex 142/tilde -143/perthousand 144/dagger 145/daggerdbl 146/Ydieresis 147/scaron 148/Scaron -149/oe 150/OE 151/guilsinglleft 152/guilsinglright 153/quotesinglbase -154/quotedblbase 155/quotedblleft 156/quotedblright 157/endash 158/emdash -159/trademark] -aload length 2 idiv 1 1 3 -1 roll{pop ISOLatin1Encoding 3 1 roll put}for -/colorimage where{pop}{ - /colorimage { - pop pop /Pr E D {/Cv Pr D /Gr Cv length 3 idiv string D 0 1 Gr length 1 sub - {Gr E dup /i E 3 mul D Cv i get 0.299 mul Cv i 1 add get 0.587 mul add - Cv i 2 add get 0.114 mul add cvi put}for Gr} image} D -}ie -/pdfmark where{pop}{userdict /pdfmark /cleartomark load put}ie -WF{FL{reencodeISO D}forall}{4 1 FL length 1 sub{FL E get reencodeISO D}for}ie -/Symbol dup dup findfont dup length dict begin - {1 index /FID ne{D}{pop pop}ie}forall /Encoding [Encoding aload pop] - dup 128 /therefore put D currentdict end definefont D - -/SF {/CS E D SZ SL CS put FO SL FN put /YI CS LH neg mul D dup ST cvs ( ) join - CS ST cvs join C1 E join ( NF ) join /C1 E D CS NF /Wf WF FN 0 gt or D - /BW Wf{( ) SW pop}{0}ie D}D -/NF {/cS E D /cF E D cF 0 ge{FL cF get}{cF -1 eq{/Symbol}{/MySymbol}ie}ie - findfont cS scalefont setfont} D -/FS {CF or /CF E D FR SL CF put CF CF 0 ge{FN 4 mul add}if E SF} D -/PC {SH /BP f D fin not GL not and{NL}if /HM t D /LL LS D} D -/BS {/TX E D Wf{/fin f D /CW 0 D /LK 0 D /SC 0 D - /RT TX D {RT ( ) search{/NW E D pop /RT E D /WH NW SW pop D CW WH add LL gt - {TX SC LK SC sub 1 sub NN GI GL{SH cF cS OC - 2 copy cS ne E cF ne or{NF}{pop pop}ie}{PC /CW WH BW add D}ie - /SC LK D} - {GL{JC}if - /CW CW WH add BW add D /HM t D}ie /GL f D /Ph f D - /LK LK NW length 1 add add D}{pop exit}ie}loop - /fin t D TX SC LK SC sub GI SH RT () ne{GL not{CC}if}if - /LC TX length D /WH RT SW pop D CW WH add Hy{HC SW pop add}if LL gt - {RT GL{SH cF cS OC 2 copy cS ne E cF ne or{NF}{pop pop}ie - Hy{/Ph t D}if /LL LS D}{NL /LL LS D SH}ie} - {RT PC Hy{CC}if /Ph Ph Hy or D}ie RT () ne{/GL t D /HM t D}if} - {TX SW pop LL le{TX SH}{/NW () D 0 2 TX length 1 sub - {/CW E D TX 0 CW GI dup SW pop LL gt{pop NW SH /HM t D NL/LL W XO sub MR sub D - /CW CW 2 sub NN D /TX TX CW TX length CW sub GI D TX BS exit} - {/NW E D}ie}for}ie}ie /HM t D}D -/CC {C0 length 0 gt{JC}if /C0 [C1 L1 YA YB Mf NS NB TB AF Bw] D - /C1 () D /L0 L1 D /YA 0 D /YB 0 D /Mf 0 D /NS 0 D /NB 0 D}D -/JC {C0 aload length 0 gt{pop pop pop NB add /NB E D NS add /NS E D - dup Mf gt{/Mf E D}{pop}ie dup YB gt{/YB E D}{pop}ie - dup YA gt{/YA E D}{pop}ie pop C1 join /C1 E D /C0 [] D}if}D -/OC {C0 length 0 gt{C1 L1 L0 sub YA YB Mf NS NB TB AF Bw GL C0 aload pop - /Bw E D /AF E D /TB E D /NB E D /NS E D /Mf E D /YB E D /YA E D /C0 [] D - /L1 E D /C1 E D Ph{HC SH}if NL /GL E D /Bw E D /AF E D /TB E D /NB E D /NS E D - /Mf E D /YB E D /YA E D /L1 E D /LL W L1 sub XO sub MR sub WH sub D /CW 0 D - C1 E join /C1 E D}if}D -/BT {/LB t D dup length string copy RS dup dup () ne E ( ) ne and - {/CI 0 D /LS LL D /LL W L1 sub XO sub MR sub D BS} - {dup ( ) eq{/GL f D}if dup () eq L1 0 eq or{pop}{SH /BP f D /Ph f D}ie}ie - /LB f D} D -/BL {CP E pop XO E M} D -/NL {JC /GL f D /SK W XO sub MR sub L1 sub TB{Bw add}if D - /YA LF{Mf HM Fl not and PF or{LH mul}if}{0 /LF t D}ie YA 2 copy lt{E}if pop D - C1 () ne{/FB YB Mf SA{Sf mul}if 4 div 2 copy lt{E}if pop D}if Fl{/Ya YA D}if - CP E pop YA sub YB sub LE neg lt Fl not and PB not and{NP}if NT TL BL - OU PF not and PB or{/RE L1 TB{Bw sub}if - W XO sub MR sub div YA YB add LE BO add div 2 copy lt{E}if pop D - RE 1 gt{BL 1 RE div dup scale}if}if - AT 2 le{SK AT mul 2 div YA neg R}if - AT 3 eq{0 YA neg R TB{/NB NB 1 sub D /NS NS 1 sub D}if /NB NB 1 sub NN D - /A3 NS 6 mul NB add D NS NB add 0 eq - {/A1 0 D /A2 0 D} - {NS 0 eq{/A1 SK NB div dup J gt{pop 0}if D /A2 0 D}{J A3 mul SK lt - {/A1 J D /A2 SK J NB mul sub NS div dup Ab gt{/A1 0 D pop 0}if D} - {/A1 SK A3 div D /A2 A1 6 mul D}ie}ie}ie /A1 A1 NN D /A2 A2 NN D}if - AT 4 eq{0 YA neg R PH 2 le{PD 0 lt{/PD L1 D}if PD M1 gt{/M1 PD D}if - L1 PD sub M2 gt{/M2 L1 PD sub D}if}{DV ID 1 sub get 0 ge{Lo 0 R}if}ie}if - F0 cF ne Cs cS ne or{F0 Cs NF}if - /ms Ms D /Ms f D CP FB sub - C1 cvx exec XO EO sub L1 add TB{BW sub}if dup LM gt{/LM E D}{pop}ie - PH 0 eq PH 4 eq or Ms and{HF not{/PO t D /AH t D}if - BB CP YA add E AT 3 eq LB and{A1 sub}if TB{BW sub}if E BB} - {pop pop}ie Ms HM PH 3 eq and or{/BP f D /Fl f D}if - /Lo 0 D /L1 0 D /F0 cF D /Cs cS D BP not{0 YB NN neg R}if - OU f1 and mF not and{k2 /f1 f D}if - OU PF not and PB or{RE 1 gt{RE dup scale}if}if /Ms ms Ms or D - /C1 AF{(Cp )}{()}ie D /YA 0 D /YB 0 D BL - AT 4 eq LB not and PH 3 ge and - {ID DV length lt{DV ID get dup 0 ge{DO E sub /Lo E D /L1 Lo D}{pop}ie - /ID ID 1 add D}if}if /T t D CD{/LN LN 1 add D PD}if - /PD -1 D /NS 0 D /NB 0 D /TB f D /Ph f D /Mf 0 D /HM f D} D -/RS {/TM E D /CN 0 D TM{10 eq{TM CN ( ) PI}if /CN CN 1 add D}forall - /CN 0 D /BK HM EN and{0}{1}ie D TM - {dup 32 ne{TM CN 3 2 roll put /CN CN 1 add D /BK 0 D} - {pop BK 0 eq{TM CN 32 put /CN CN 1 add D}if /BK 1 D}ie}forall - TM 0 CN GI dup dup () ne E ( ) ne and - {dup CN 1 sub get 32 eq{/EN f D}{/EN t D}ie}if} D -/join {2 copy length E length add string dup 4 2 roll 2 index 0 3 index - PI E length E PI}d -/WR {(\n) search{dup () ne BP not or - {Li 4 le CP E pop YI Li mul add LE add 0 lt and PL 0 eq and{NP}if - SH NL pop /Li Li 1 sub D WR}{pop pop WR}ie}{SH}ie /CI 0 D /BP f D} D -/SH {dup dup () ne E ( ) ne and PF or CS Mf gt and{/Mf CS D}if - T not Wf and{( ) E join /T t D}if dup BP{/MF CS D}if - AT 3 eq{2 copy length dup 0 gt{/NB E NB add D - {( ) search{/NS NS 1 add D pop pop}{pop exit}ie}loop}{pop pop}ie}if - CD PD 0 lt and{dup DC search{SW pop /PD E L1 add D pop pop}{pop}ie}if - 0 Np dup SW pop L1 add /L1 E D dup () ne - {C1 (\() join E join (\)) join AU AF and UF or Wf and{( U ) join}if - sF{( s ) join}if ( S ) join - /C1 E D dup length 1 sub get 32 eq /TB E D /Bw BW D}{pop pop}ie} D -/BG {AI LG BC add add 0 eq} D -/ON {OU{Ty AR AI NN get dup 1 add Ln Ns Ty 2 mod 0 eq{(. )}{(\) )}ie join - dup SW pop neg 0 R CP E 0 lt{0 E M}{pop}ie CP BB show /Ms t D}if} D -/Ln {AR AI 3 -1 roll put}D -/SP {dup CI lt BP not and{dup CI sub 0 E R /CI E D}{pop}ie} D -/BN {PF{WR /HM f D}{BT NL}ie} D -/NN {dup 0 lt{pop 0}if} D -/h {(h) HI ST cvs join cvx exec dup 1 get E Nf{0 get E join}{pop}ie} D -/H {/fn FN D /Hi E 1 add D 1 sub /HL E D /H2 HL 2 add D /GS EZ H2 get D - E Tm H2 get GS mul BE dup 0 gt{1 sub}{pop EG H2 get dup 0 lt{pop AT}if}ie NA - WW Np /SL SL 1 add D /FN EF H2 get D GS Ey H2 get FS - EU H2 get Sc Hs not HL Hl lt and Hs HL hl lt and or Hi 0 eq or - {/HI Hi D /Hs t D /hl HL D /Hv HL D}if HL Hl lt{/hi Hi D}if - Nf HI 0 gt and{(h) Hi ST cvs join cvx exec 0 get WB}if - /HF t D /AH f D /PO f D} D -/EH {Bm H2 get GS mul BE OA /SL SL 1 sub NN D /CF 0 D /FN fn D - SZ SL get FR SL get FS /HF f D /GS Ts D ()Ec} D -/P {E PF{WR}{PO{EP}{BN}ie Ts 4 mul Np AE not{Tm 0 get Ts mul neg SP}if - dup 0 ge AH and{Pi Pd}if}ie 1 sub dup 0 lt{pop AV AL get}if /AT E D /PO t D} D -/EP {PF{WR}{BN Ts 4 mul Np}ie AE not{Bm 0 get Ts mul neg SP}if - /AT AV AL get D /PO f D} D -/BE {E PO{EP}{BN}ie Ts 4 mul Np neg SP} D -/HR {/Aw W EO sub D /RW E dup 0 gt{Aw mul}{neg}ie dup Aw gt{pop Aw}if D /RZ E D - E BN Ts neg SP 1 sub 2 div Aw RW sub mul EO add CP E pop M PF{0 Ps neg R}if - 0 Np OU{gsave RZ LW Cf{Hc VC}{0 Sg}ie CP BB RW 0 RL CP BB stroke grestore}if - /CI 0 D /BP f D PF not{Ts neg SP}if /Ms t D} D -/AD {I NL EG 14 get dup 0 lt{pop AT}if NA /AE t D Tm 14 get Ts mul neg SP - Cf{EU 14 get dup -1 eq{pop CA CL get}if Sc}if} D -/DA {BN ()ES OA /AE f D ()Ec Bm 14 get Ts mul neg SP} D -/PR {/MW E D /Li E D Tm 1 get Ps mul BE 0 NA /FN Fp D /PF t D SI /SL SL 1 add D - /CF 0 D Ps CS mul Ts div MW WC mul CS mul Ts div dup LL gt PL 0 eq and - {LL div div}{pop}ie Ey 1 get FS CP E pop LE add YI neg div cvi dup Li lt - AH and{4 lt YI Li mul 5 mul LE add 0 gt or PL 0 eq and{NP}if}{pop}ie - EU 1 get Sc /GS Ps D}D -/RP {WR NL () /PF f D SI /FN 0 D ES Bm 1 get Ps mul neg SP OA /GS Ts D} D -/SI {/XO Lm 15 get BC NN mul Lm 16 get AI UI sub NN mul add - Lm 17 get UI NN mul add Lm 20 get LG NN mul add Ts mul - PF{Lm 1 get Ps mul add}if EO add D - /MR Rm 15 get BC NN mul Rm 16 get AI UI sub NN mul add - Rm 17 get UI NN mul add Rm 20 get LG NN mul add Ts mul - PF{Rm 1 get Ps mul add}if D /LL W XO sub MR sub D} D -/DT {/cC E D BN /LG LG 1 sub D SI /LG LG 1 add D WW 2 div Np BL} D -/DD {WB Cc 0 eq cC 0 eq and L1 0 eq or Lm 20 get Ts mul L1 sub TB{BW add}if - Ts 2 div lt or NL /LF E D SI BL /cC 0 D} D -/DL {Dc LG Cc put /Cc E D BG{Tm 18 get Ts mul BE}{BN}ie /LG LG 1 add D BL} D -/LD {BN LG 0 gt{/LG LG 1 sub D}if /Cc Dc LG get D SI - BG{()Bm 18 get Ts mul BE}if BL} D -/UL {BG{Tm 17 get Ts mul BE}{BN}ie NR AI NN 0 put /UI UI 1 add D - /AI AI 1 add D SI BL} D -/LU {BN /UI UI 1 sub D /AI AI 1 sub D SI BG{()Bm 17 get Ts mul BE}if BL} D -/OL {E BG{Tm 16 get Ts mul BE}{BN}ie TR AI NN Ty put /Ty E D NR AI NN 1 put - /AI AI 1 add D SI BL 1 Ln} D -/LO {BN /AI AI 1 sub D /Ty TR AI get D SI BG{()Bm 16 get Ts mul BE}if BL} D -/LI {E BN -1 SP /BP f D /CI 0 D 0 Np NR AI 1 sub NN get 1 eq - {dup dup 0 gt E 4 le and{/Ty E D}{pop}ie - /L1 L1 Ty AR AI NN get Ns SW pop XO sub dup 0 lt{pop 0}if add D ( ON )} - {pop ( B )}ie C1 E join /C1 E D CS Mf gt{/Mf CS D}if BL} D -/BQ {Tm 15 get Ts mul BE /BC BC 1 add D SI BL} D -/QB {Bm 15 get Ts mul BE /BC BC 1 sub D SI BL} D -/Al {E EP 1 sub dup 0 lt{pop AV AL get}if NA} D -/Ea {EP OA} D -/WB {PF{WR}{BT}ie} D -/F1 {WB /FN 0 D CS 0 FS} D -/F2 {WB /FN WI D CS 0 FS} D -/HY {/Hy t D WB /Hy f D} D -/YH {WB} D -/A {/LT E D LT 1 eq{/RN E D}if /Lh E D WB /C1 C1 ( Cp ) join D - Lc AF not and{Cl Sc}if /AF t D} D -/EA {Lc AF and{Ec}{WB}ie TL Pa AF and Lh 0 ne and - {( \() Lh join (\)) join /AF f D WB}if /AF f D} D -/TL {C1 ( Tl ) apa /C1 E D} d -/apa {AF OU and Lh 0 ne LT 1 eq or and{LT 1 eq{RN ( /) E ST cvs join} - {(\() Lh join (\)) join}ie E join join}{pop}ie} d -/Cp {/Xc CP /Yc E D D} D -/SS {Cf{dup 0 ge{EU E get dup -1 eq{pop CA CL get}if}{pop CA CL get}ie Sc} - {pop}ie SZ SL get /SL SL 1 add D} D -/I {WB 8 SS 1 FS} D -/EM {WB 8 SS /CF CF 1 xor D 0 FS} D -/BD {WB 9 SS 2 FS} D -/TT {WB 10 SS /FN Fp D 0 FS} D -/KB {WB 11 SS /FN Fp D 2 FS} D -/CT {WB 12 SS 1 FS} D -/SM {WB 13 SS /FN Fp D 0 FS} D -/Q {/QL QL 1 add D QO QL 2 mod get La get join WB} D -/EQ {QC QL 2 mod get La get join WB /QL QL 1 sub D} D -/RO {WB -1 SS /CF 0 D 0 FS} D -/SY {WB -1 SS -1 FS} D -/MY {WB -1 SS -2 FS} D -/ES {WB /SL SL 1 sub NN D /CF 0 D /FN FO SL get D SZ SL get FR SL get FS ()Ec}D -/FZ {3 sub 1.2 E exp GS mul E WB TL /C1 C1 ( Cp ) join D /SL SL 1 add D 0 FS} D -/Ef {WB TL ()ES /C1 C1 ( Cp ) join D} D -/BZ {dup /Bf E D FZ}D -/Sc {dup -1 ne Cf and{/CL CL 1 add D dup 0 eq{pop [0 0 0]}if - dup CA E CL E put VS ( VC ) join C1 E join /C1 E D}{pop}ie} D -/Ec {WB Cf{/CL CL 1 sub NN D CA CL get VS ( VC ) join C1 E join /C1 E D}if} D -/VS {dup type /arraytype eq{([) E {ST cvs join ( ) join}forall (]) join}if} D -/VC {{255 div}forall setrgbcolor} D -/Sl {dup type /integertype ne{Ds}if /La E D WB}d -/UN {WB /UF t D} D -/NU {WB /UF f D} D -/SE {WB /sF t D} D -/XE {WB /sF f D} D -/sM {/C1 C1 ( k1 ) join D}d -/eM {/C1 C1 ( k2 ) join D}d -/k1 {/YC CP E pop Ts add D /mF t D /f1 t D}d -/k2 {gsave 3 LW -9 CP E pop Ts 0.2 mul sub M -9 YC L stroke grestore /mF f D}d -/Ac {/AC E D WB}d -/Ca {eA{( \()join AC join(\) )join}if WB}d -/s {OU{gsave 0 CS .25 mul R dup SW pop CJ 0 RL stroke grestore}if}D -/CJ {AT 3 eq LB and{E dup dup length 1 sub A1 mul E - {( ) search{pop pop E A2 add E}{pop exit}ie}loop 3 -1 roll add - W CP pop sub 2 copy gt{E}if pop}if}D -/So {/Co E D} D -/SO {C1 Yo ST cvs join ( So ) join /C1 E D (j) SW pop 2 div Pd} D -/Se {E WB CS E div Pd}D -/Pd {dup type /stringtype eq{SW pop}if dup /L1 E L1 add D - ST cvs ( 0 R ) join C1 E join /C1 E D} D -/Sp {0.35 CO} D -/Sb {-0.2 CO} D -/CO {OV Io Yo put /Yo E CS mul Yo add D /Io Io 1 add D -1.5 Io mul 3 add FZ SO - CS Yo add dup YA gt{/YA E D}{pop}ie - Yo neg dup YB gt{/YB E D}{pop}ie} D -/Es {ES /Io Io 1 sub NN D /Yo OV Io get D SO} D -/SB {/N2 0 D 0 1 NI{/N E D{IX N2 get 0 lt{/N2 N2 1 add D}{exit}ie}loop - /K WS N get FC N get mul D /NY AY N2 get D /BV NY array D - 0 1 NY 1 sub{/TM K string D currentfile TM readhexstring pop pop BV E TM put} - for BM N BV put /N2 N2 1 add D}for} D -/IC [{/MA E D /MB 0 D}{2 div /MA E D /MB MA D}{/MB E CS sub D /MA CS D} - {pop /MA YS AB mul D /MB 1 AB sub YS mul D}{pop /MA 0 D /MB 0 D}] D -/IP {BV N get /N N 1 add D} D -/II {/K E D IX K get 0 lt{/EC E D}if /TY E D - TY 4 eq{/Y E D /X E D}if TY 3 eq{/AB E D}if - /XW AX K get D /YW AY K get D /IS SG IT K get get D /XS XW IS mul D - /YS YW IS mul D YS IC TY get exec /MA MA Fl not{3 add}if D} D -/IM {II /ty TY D /xs XS D /ys YS D /ya YA D /yb YB D /ma MA D /mb MB D /k K D - /ec EC D /BP f D /CI 0 D WB TL L1 xs add dup XO add MR add W gt - {pop /ma ma Fl{3 add}if D NL /YA ma D /YB mb D /YS ys D /L1 xs D} - {/L1 E D ma YA gt{/YA ma D}if mb YB gt{/YB mb D}if}ie /TB f D - OU{CP E pop YS sub LE neg lt Fl not and PB not and{NP /YA ma D /YB mb D}if - /BP f D ty ST cvs ( ) join IX k get 0 lt{(\() join ec join (\) ) join}if - k ST cvs join ty 3 eq{AB ST cvs ( ) join E join}if - ty 4 eq{X ST cvs ( ) join Y ST cvs join ( ) join E join}if C1 E join - ( DI ) join FP 2 eq FP 1 eq AF and or{( FM ) join}if - ( Il Cp ) apa /C1 E D /EN f D}if /HM t D /T f D} D -/DI {II /Xc CP /Yc E D D /YN YW neg D /HM t D /CI 0 D /K2 IX K get D gsave - TY 4 eq{OX X IS mul add OY FY add YS sub Y IS mul sub} - {/FY YS D CP MB sub 2 copy /OY E D /OX E D}ie - translate K2 0 ge{/DP AZ K2 get D /BV BM K2 get D XS YS scale /N 0 D XW YW DP - [XW 0 0 YN 0 YW] {IP} FC K2 get 1 eq{image}{f 3 colorimage}ie} - {EX}ie grestore XS 0 R /Ms t D} D -/FM {gsave 0 Sg CP MB sub translate XS neg 0 M 0 YS RL XS 0 RL 0 YS neg RL - XS neg 0 RL stroke grestore} D -/NA {/AT E D /AL AL 1 add D AV AL AT put} D -/OA {AL 0 gt{/AL AL 1 sub D /AT AV AL get D}if} D -/D1 {/BR {CP E pop E BN Mb{CP E pop eq{0 YI R}if}{pop}ie} D - /Sn {OU{C1 E ST cvs join ( Ld ) join /C1 E D}{pop}ie} D} D -/D1 {/BR {BN} D /Sn {OU {C1 E ST cvs join ( Ld ) join /C1 E D} {pop} ie} D} D -/TC {/TF t D /ML 0 D HN{SW pop dup ML gt{/ML E D}{pop}ie}forall NP /RM RM not D - RC /OU Tc D Ep /PN 0 D Ms not TP and{Ip}if /W IW ML sub Ts sub D - /A0 0 D TH{/BR {( ) join BT} D /Sn {pop} D /Au () D}if} D -/TN {0 eq{E EA PF HF or not XR and{HN E get Xr}{pop}ie} - {OU{Tn 0 ge{() BN}if /Tn E D}{pop}ie WB}ie} D -/NT {OU LB not and Tn 0 ge and{PL 0 eq{Ms not{CS CF FS}if CP dup - /y E YA sub D W 9 sub CS -1.8 mul XO L1 add 2 add{y M (.) show}for - HN Tn get dup SW pop IW E sub y M show CP BB M}if /Tn -1 D}if} D -/Ld {/DN E D HN DN Pn put [/View [/XYZ -4 Fl{PS}{CP YA add US E pop}ie null] - /Dest DN ST cvs cvn /DEST pdfmark} D -/C {ND 1 eq{1 sub}if TI mul /XO E D NL Nf not{pop()}if 0 3 -1 roll 1 A} D -/OP {BP not{NP}if PN 2 mod 0 eq{/Ms t D NP}if}D -/Ep {Xp PN 2 mod 0 eq and OU and{/Pn (-) D showpage /PM 1 D LA}if}D -/Dg [73 86 88 76 67 68 77] D -/Rd [0 [1 1 0][2 1 0][3 1 0][2 1 1][1 1 1][2 2 1][3 3 1][4 4 1][2 1 2]] D -/Ns {/m E D /c E 32 mul D /j m 1000 idiv D /p j 12 add string D - c 96 le m 0 gt and{c 32 le {/i 0 D /d 77 D /l 100 D /m m j 1000 mul sub D - j -1 1 {pop p i d c add put /i i 1 add D}for - 4 -2 0 {/j E D /n m l idiv D /m m n l mul sub D /d Dg j get D - n 0 gt {/x Rd n get D x 0 get -1 1 {pop p i d c add put /i i 1 add D}for - p i x 1 get sub Dg x 2 get j add get c add put}if /l l 10 idiv D - }for p 0 i GI} - {/i ST length 1 sub D m {1 sub dup 0 ge{dup 26 mod c add 1 add - ST i 3 -1 roll put 26 idiv dup 0 eq{pop exit}if}if /i i 1 sub D}loop - ST i ST length i sub GI}ie} - {m p cvs}ie} D -/US {matrix currentmatrix matrix defaultmatrix matrix invertmatrix - matrix concatmatrix transform} D -/GB {Gb{US}if}D -/Tl {/Rn E D Xc CP pop ne{ - [/Rect [Xc 1 sub Yc cS 0.25 mul sub GB CP E 1 add E cS 0.85 mul add GB] - /Subtype /Link /Border [0 0 Cf Lc and LX and AU or{0}{1}ie] Rn type - /nametype eq {/Dest Rn}{/Action [/Subtype /URI /URI Rn] Cd}ie - /ANN pdfmark}if} D -/Il {/Rn E D [/Rect [Xc Yc GB Xc XS add Yc YS add GB] /Subtype /Link - /Border [0 0 0] Rn type /nametype eq{/Dest Rn} - {/Action [/Subtype /URI /URI Rn] Cd}ie /ANN pdfmark} D -/XP {[{/Z Bz 2 div D Z 0 R Z Z RL Z neg Z RL Z neg Z neg RL Z Z neg RL - Fi cH 1 eq and{fill}if} {Bz 0 RL 0 Bz RL Bz neg 0 RL 0 Bz neg RL - Fi cH 1 eq and{fill}if} {0 -5 R Bz 0 RL 0 21 RL Bz neg 0 RL 0 -21 RL}]} D -/MS {/Sm E D WB}D -/O {BN()0 Sm BX} D -/BX {/Bt E D Bt 2 lt{/Ch E D CS 0.8 mul}{11 mul}ie W XO sub MR sub - 2 copy gt{E}if pop /HZ E D Bt 2 eq{Fi not{pop()}if ( )E join /Ft E D TT - /PF t D /MW 1 D /Li 1 D /Fw Ft SW pop D Fw HZ gt{/HZ Fw 8 add D}if - HZ ST cvs( )join}{WB Ch ST cvs( )join}ie L1 HZ add XO add MR add W gt{NL}if - Bt 2 eq{Ft ES Fw neg HM{CS sub}if Pd}if Bt ST cvs join( Bx )join - Bt 2 eq HM and{CS Pd}if C1 E join /C1 E D /L1 L1 HZ add D /T f D - ( ) Pd /PF f D Bt 2 lt{YA CS .8 mul lt{/YA CS .8 mul D}if} - {YB 5 lt{/YB 5 D}if YA 21 lt{/YA 21 D}if}ie /CI 0 D} D -/Bx {dup 2 eq{E /Bz E D}{E /cH E D /Bz CS .8 mul D}ie - OU {gsave 0 Sg XP E get exec stroke grestore}{pop}ie Bz 0 R /Ms t D}D -/SD {FD 4 mul Dy add DZ NF newpath 0 0 M DX t charpath pathbbox - 3 -1 roll sub /DY E D E dup /X1 E D sub WM mul WX DY mul add WM DG mul E div - /DF E D /DR WX DF mul DY mul WM div 2 div D} d -/Sd {gsave 0 IL Di mul neg translate IL IW atan Di 0 eq{neg}if rotate - FD 4 mul Dy add DZ NF DR X1 sub DY 2 div neg M cD VC DX show grestore} d -/Pt {/tp t D Tp{NP /Pn (TP) D 0 Tt neg R Th BN NP Ep ET RC ZF}if /tp f D} D -/RC {/AI 0 D /LG 0 D /BC 0 D /UI 0 D /PF f D /Cc 0 D /cC 0 D /Dc 10 array D - /NR [0 1 9{pop 0}for] D /La Ds D /AR 10 array D /TR 10 array D /AV 30 array D - SI /AL -1 D /AT A0 D AT NA /OV 9 array D /Yo 0 D /Co 0 D /Io 0 D /Hy f D - /Ph f D /CL -1 D Ct Sc}D -/ZF {/FR [0 1 30{pop 0}for] D /SZ [0 1 30{pop 0}for] D /FO [0 1 30{pop 0}for] D - /SL 0 D /CF 0 D /FN 0 D 0 Ts SF}D -/QO [[(\234)(\233)(\253\240)(\232)(\273)(\253)][(')(`)(\253\240)(\231)(\273)(\253)]] D -/QC [[(\234)(\234)(\240\273)(\233)(\253)(\273)][(')(')(\240\273)(`)(\253)(\273)]] D -/Hf EF length 2 sub D -/Hz EZ Hf get D -/HS Ey Hf get D -/Fz EZ Hf 1 add get D -/Fs Ey Hf 1 add get D -/LE IL D -/Ps EZ 1 get D -/Fp EF 1 get D -/XO 0 D -/YI 0 D -/CI 0 D -/FP 0 D -/WW Ts 7 mul D -/Mf 0 D -/YA 0 D -/YB 0 D -/Cs Ts D -/GS Ts D -/F0 0 D -/NS 0 D -/NB 0 D -/N 0 D -/C0 [] D -/C1 () D -/Lo 0 D -/L1 0 D -/LM 0 D -/PH 0 D -/EC 0 D -/Lh 0 D -/LT 0 D -/CH 1 string D -/ST 16 string D -/CA 9 array D -/HC (\255) D -/HM f D -/PF f D -/EN f D -/TB f D -/UF f D -/sF f D -/AE f D -/AF f D -/BP t D -/CD f D -/PA t D -/GL f D -/T t D -/HF f D -/AH f D -/SA f D -/PB f D -/f1 f D -/mF f D -/OX 0 D -/OY 0 D -/FY 0 D -/EO 0 D -/FB 0 D -/PL 0 D -/Bw 0 D -/PD -1 D -/TP f D -/tp f D -/TH t D -/Ty 4 D -/Tn -1 D -/Fl t D -/LB t D -/PM 1 D -/Ms f D -/Ba f D -/Bb f D -/Hl 3 D -/hl 6 D -/Hv 6 D -/Hs f D -/HI 0 D -/hi 0 D -/PO t D -/TE f D -/LF t D -/BO 0 D -/Sm 1 D -/Bf 3 D -/A1 0 D -/A2 0 D -/Ds 1 D -/QL -1 D -/Cb Db D -/Ct Dt D -/Cl Dl D -[/Creator (html2ps version 1.0 beta5) /Author () /Keywords (xsd, xml, schema, c++, mapping, data, binding, parsing, serialization, validation) /Subject () - /Title (C++/Tree Mapping Getting Started Guide) /DOCINFO pdfmark -/ND 1 D -/HN [(1) (1) (1) (1) (1) (1) (1) (2) (2) (3) (3) (5) (6) (7) (8) (11) (13) (15) -(16) (16) (16) (17) (17) (20) (22) (24) (26) (29) (??) (31) (32) (34) (36) -(37) (38) (1) (1) (1) (1) (2) (2) (3) (3) (5) (6) (7) (8) (11) (13) (15) -(16) (16) (16) (17) (17) (20) (22) (24) (26) (29) (31) (32) (34) (36) (37) -(38)] D -/h0 [()(Table of Contents)] D -/h1 [(1\240\240)(Preface)] D -/h2 [(1.1\240\240)(About This Document)] D -/h3 [(1.2\240\240)(More Information)] D -/h4 [(2\240\240)(1 Introduction)] D -/h5 [(2.1\240\240)(1.1 Mapping Overview)] D -/h6 [(2.2\240\240)(1.2 Benefits)] D -/h7 [(3\240\240)(2 Hello World Example)] D -/h8 [(3.1\240\240)(2.1 Writing XML Document and Schema)] D -/h9 [(3.2\240\240)(2.2 Translating Schema to C++)] D -/h10 [(3.3\240\240)(2.3 Implementing Application Logic)] D -/h11 [(3.4\240\240)(2.4 Compiling and Running)] D -/h12 [(3.5\240\240)(2.5 Adding Serialization)] D -/h13 [(3.6\240\240)(2.6 Selecting Naming Convention)] D -/h14 [(3.7\240\240)(2.7 Generating Documentation)] D -/h15 [(4\240\240)(3 Overall Mapping Configuration)] D -/h16 [(4.1\240\240)(3.1 Character Type and Encoding)] D -/h17 [(4.2\240\240)(3.2 Support for Polymorphism)] D -/h18 [(4.3\240\240)(3.3 Namespace Mapping)] D -/h19 [(4.4\240\240)(3.4 Thread Safety)] D -/h20 [(5\240\240)(4 Working with Object Models)] D -/h21 [(5.1\240\240)(4.1 Attribute and Element Cardinalities)] D -/h22 [(5.2\240\240)(4.2 Accessing the Object Model)] D -/h23 [(5.3\240\240)(4.3 Modifying the Object Model)] D -/h24 [(5.4\240\240)(4.4 Creating the Object Model from Scratch)] D -/h25 [(5.5\240\240)(4.5 Mapping for the Built-in XML Schema Types)] D -/h26 [(6\240\240)(5 Parsing)] D -/h27 [(6.1\240\240)(5.1 XML Schema Validation and Searching)] D -/h28 [(6.2\240\240)(5.2 Error Handling)] D -/h29 [(7\240\240)(6 Serialization)] D -/h30 [(7.1\240\240)(6.1 Namespace and Schema Information)] D -/h31 [(7.2\240\240)(6.2 Error Handling)] D -/Hr [35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 -57 58 59 60 61 62 63 64 65]D -/HV [1 2 2 1 2 2 1 2 2 2 2 2 2 2 1 2 2 2 2 1 2 2 2 2 2 1 2 2 1 2 2]D -/Cn [2 0 0 2 0 0 7 0 0 0 0 0 0 0 4 0 0 0 0 5 0 0 0 0 0 2 0 0 2 0 0]D -Hr length 0 gt{[/PageMode /UseOutlines /DOCVIEW pdfmark}if -/Hn 1 D -0 1 Hr length 1 sub{ - /Bn E D [Cn Bn get dup 0 gt{/Count E HV Bn get Bl ge{neg}if}{pop}ie - /Dest Hr Bn get dup abs ST cvs cvn E 0 ge{(h)Hn ST cvs join cvx exec - dup 1 get E Nf{0 get E join}{pop}ie /Hn Hn 1 add D}{()}ie - /Title E dup length 255 gt{0 255 getinterval}if /OUT pdfmark}for -ZF /FN Fp D Ps 0 FS /WC Wf{( )}{}ie SW pop D -ET RC ZF -/Df f D -/R0 (http://www.codesynthesis.com/licenses/fdl-1.2.txt) D -/R1 (http://www.codesynthesis.com/projects/xsd/documentation/cxx/tree/guide/index.xhtml) D -/R2 (http://www.codesynthesis.com/projects/xsd/documentation/cxx/tree/guide/cxx-parser-guide.pdf) D -/R3 (http://www.codesynthesis.com/projects/xsd/documentation/cxx/tree/guide/cxx-parser-guide.ps) D -/R1 (http://www.codesynthesis.com/projects/xsd/documentation/cxx/tree/manual/) D -/R2 (http://wiki.codesynthesis.com/Tree/Customization_guide) D -/R3 (http://www.codesynthesis.com/projects/xsd/documentation/cxx/tree/dbxml/) D -/R4 (http://wiki.codesynthesis.com/Tree/FAQ) D -/R5 (http://www.codesynthesis.com/projects/xsd/documentation/xsd.xhtml) D -/R6 (http://www.codesynthesis.com/mailman/listinfo/xsd-users) D -/R7 (http://www.codesynthesis.com/pipermail/xsd-users/) D -/R8 (http://www.w3.org/TR/xmlschema-0/) D -/R9 (http://www.doxygen.org/) D -/R10 (http://www.codesynthesis.com/projects/xsd/documentation/cxx/tree/hello/html/annotated.html) D -/R11 (http://www.codesynthesis.com/projects/xsd/documentation/cxx/tree/manual/#2.11) D -/R12 (http://www.codesynthesis.com/projects/xsd/documentation/cxx/tree/manual/#2.8) D -/R13 (http://www.codesynthesis.com/projects/xsd/documentation/cxx/tree/manual/#2.5) D -/R14 (http://www.codesynthesis.com/projects/xsd/documentation/cxx/tree/manual/#2.9) D -/R15 (http://www.codesynthesis.com/projects/xsd/documentation/cxx/tree/manual/#3) D -/R16 (http://www.codesynthesis.com/projects/xsd/documentation/cxx/tree/manual/#3.3) D -/R17 (http://www.codesynthesis.com/projects/xsd/documentation/cxx/tree/manual/#4) D -/R18 (http://www.codesynthesis.com/projects/xsd/documentation/cxx/tree/manual/#4.4) D -/TS { - tables E get /table E D - table aload pop /rdesc E D /cdesc E D /tdesc E D - tdesc aload pop /capalg E D /caption E D /rules E D /frame E D /nfoot E D - /nhead E D /ncol E D /nrow E D /border E D /twid E D /units E D /talign E D - /flow E D /clear E D /tclass E D pop pop - /w W D /eps 0.1 D /OU f D /PL 1 D - /FN EF 21 get D EZ 21 get Ey 21 get FS - 0 1 1{ - /pass E D - 0 1 nrow{ - /irow E D - /cells rdesc irow get 6 get D - 0 1 ncol{ - /icol E D - /cell cells icol get D - cell 0 ne{ - cell aload pop /ang E D /CB E D pop pop pop - /DV E D /bot E D /top E D /right E D /left E D /nowrap E D /valign E D - /dp E D /align E D /rspan E D /cspan E D /cclass E D /ctype E D /cmax E D - /cmin E D /proc E D - rspan 0 eq{/rspan nrow irow sub 1 add D}if - cspan 0 eq{/cspan ncol icol sub 1 add D}if - pass 0 eq cspan 1 eq and pass 1 eq cspan 1 gt and or{ - /W 1e5 D /LL W D /PH 1 D - ctype 1 eq{() BD}if - RC align NA - AT 4 eq{/CD t D /DC dp D /LN 0 D /M1 0 D /M2 0 D}{/CD f D}ie - 0 0 M /LM 0 D proc exec BN - AT 4 eq{ - LN array astore cell 15 3 -1 roll put - cdesc icol get dup dup 5 get M1 lt{5 M1 put}{5 get /M1 E D}ie - dup 6 get M2 lt{6 M2 put}{6 get /M2 E D}ie - /LM M1 M2 add D - }if - /CD f D - ang 0 ne{/LM CP E pop neg D}if - /thiswid LM left add right add eps add D - /oldmin 0 D /oldmax 0 D - 0 1 cspan 1 sub{ - icol add cdesc E get dup 2 get /oldmax E oldmax add D - 1 get /oldmin E oldmin add D - }for - thiswid oldmax ge{ - 0 1 cspan 1 sub{ - icol add cdesc E get dup 2 E 2 get oldmax 0 eq - {pop thiswid cspan div}{thiswid mul oldmax div}ie - put - }for - }if - nowrap 1 eq{ - thiswid oldmin ge{ - 0 1 cspan 1 sub{ - icol add cdesc E get dup 1 E 1 get oldmin 0 eq - {pop thiswid cspan div}{thiswid mul oldmin div}ie - put - }for - }if - }{ - /W 0 D /LL W D /PH 2 D - ctype 1 eq{() ES () BD}if - 0 0 M /LM 0 D RC proc exec BN - /thiswid LM left add right add eps add D - thiswid oldmin ge{ - 0 1 cspan 1 sub{ - icol add cdesc E get dup 1 E 1 get oldmin 0 eq - {pop thiswid cspan div}{thiswid mul oldmin div}ie - put - }for - }if - }ie - ctype 1 eq{() ES}if - }if - }if - }for - }for - }for - /tmin 0 D /tmax 0 D - 0 1 ncol{ - cdesc E get dup 1 get E 2 get 2 copy gt{pop dup}if - tmax add /tmax E D tmin add /tmin E D - }for - twid 0 lt{twid neg IW gt{IW neg}{twid}ie /twid E D}if - tdesc 0 twid neg tmin 2 copy lt{E}if pop put - tdesc 1 twid neg tmax 2 copy lt{E}if pop put - /W w D /LL W D /OU t D /PH 0 D /PL 0 D -} D -/PT { - /PL PL 1 add D - tables E get /table E D Tm 21 get Ts mul BE - PL 2 ge{save}if - /SL SL 1 add D /FN EF 21 get D EZ 21 get Ey 21 get FS - table aload pop /rdesc E D /cdesc E D /tdesc E D - tdesc aload pop /capalg E D /caption E D /rules E D /frame E D /nfoot E D - /nhead E D /ncol E D /nrow E D /border E D /twid E D /units E D /talign E D - /flow E D /clear E D /tclass E D /tmax E D /tmin E D - /w W D /xo XO D /mr MR D /ll LL D /lg LG D /ai AI D /bc BC D /nr NR D /ar AR D - /tr TR D /ui UI D /ph PH D /a0 A0 D /pf PF D /at AT D /av AV D /al AL D - /Le LE D /la La D - talign 0 lt{/talign AL 0 gt{AV AL get}{A0 2 le{A0}{0}ie}ie D}if - ph 1 eq ph 2 eq or{ - NL ph 1 eq{tmax}{tmin}ie dup XO add LM gt{/LM E XO add D}{pop}ie LM E - }{ - /PH 3 D /LE 1e5 D RC %ZF - border 0 gt{/border 1 D}if - /twidth 0 D /avail W xo sub D - twid 0 eq{0 1 ncol{cdesc E get dup 2 get E 3 get dup 0 gt{div neg dup twid lt - {/twid E D}{pop}ie}{pop pop}ie}for}if - /twid twid dup 0 lt{neg avail 2 copy gt{E}if pop}{avail mul}ie D - /OK t D 0 1 ncol{cdesc E get dup 1 get E 3 get twid mul gt{/OK f D}if}for - 0 1 ncol{ - cdesc E get dup 1 get /colmin E D dup 3 get /cwid E twid mul D dup - tmax avail le{2 get}if - tmin avail le tmax avail gt and{ - dup 2 get E 1 get dup 3 1 roll sub avail tmin sub mul tmax tmin sub div add - }if - tmin avail gt{1 get}if - 0 E colmin cwid lt OK and{pop cwid}if dup /twidth E twidth add D put - }for - /OU f D CP - tmin twid le{ - 0 1 ncol{cdesc E get dup 0 get twidth div twid mul 0 E put}for - /twidth twid D - }if - CP printcap CP E pop sub /caphig E D pop - 0 1 1{ - /pass E D - 0 1 nrow{ - /irow E D - /cells rdesc irow get 6 get D - 0 1 ncol{ - /icol E D - /cell cells icol get D - cell 0 ne{ - cell aload pop /ang E D /CB E D pop pop pop - /DV E D /bot E D /top E D /right E D /left E D /nowrap E D /valign E D - /dp E D /align E D /rspan E D /cspan E D /cclass E D /ctype E D /cmax E D - /cmin E D /proc E D - rspan 0 eq{/rspan nrow irow sub 1 add D}if - cspan 0 eq{/cspan ncol icol sub 1 add D}if - /W 0 D - 0 1 cspan 1 sub{icol add cdesc E get 0 get /W E W add D}for - pass 0 eq rspan 1 eq and pass 1 eq rspan 1 gt and or{ - ctype 1 eq{() BD}if - /W W left sub right sub D /XO 0 D /EO 0 D SI - /A0 align D RC align NA - AT 4 eq{ - /DC dp D /DO 0 D /ID 1 D - 0 1 DV length 1 sub{DV E get dup DO gt{/DO E D}{pop}ie}for - /Lo DO DV 0 get sub D /L1 Lo D - }if - 0 0 M /BP t D /Fl t D /MF 0 D /FB 0 D - proc exec T not{/CI 0 D}if BN 0 FB neg R MF 0 eq{/MF CS D}if - CP /thishig E neg bot add top add CI add D pop - ang 0 ne{/thishig LM bot add top add D}if - cell 16 MF put cell 17 Ya put cell 18 thishig put - valign 4 eq{ - /below thishig Ya sub D - rdesc irow get dup dup 4 get Ya lt - {4 Ya put}{4 get /Ya E D}ie - dup 5 get below lt{5 below put}{5 get /below E D}ie - /thishig Ya below add D - }if - ctype 1 eq{()ES}if - /oldhig 0 D - 0 1 rspan 1 sub{ - irow add rdesc E get 0 get /oldhig E oldhig add D - }for - thishig oldhig ge{ - 0 1 rspan 1 sub{ - irow add rdesc E get dup 0 E 0 get oldhig 0 eq - {pop thishig rspan div}{thishig mul oldhig div}ie - put - }for - }if - }if - }if - }for - }for - }for M RC %ZF - /thight 0 D /racc 0 D /maxh 0 D /brk 0 D /rbeg nhead nfoot add D - 0 1 nrow{ - rdesc E get dup 0 get dup /thight E thight add D - brk 0 eq{/racc E D}{/racc E racc add D}ie - racc maxh gt{/maxh racc D}if 2 get /brk E D - }for - ph 3 ge{thight caphig add E}if - ph 0 eq ph 4 eq or{ - /PH 4 D /LE Le D /OU Ou D /yoff 0 D /headsz 0 D - 0 1 nhead 1 sub{rdesc E get 0 get headsz add /headsz E D}for - /footsz 0 D - 0 1 nfoot 1 sub{rdesc E nhead add get 0 get footsz add /footsz E D}for - /ahig LE BO add MI add D /maxh maxh headsz add footsz add D - /thight thight headsz add footsz add D - tmin avail gt maxh ahig gt or - {/Sf avail tmin div dup ahig maxh div gt{pop ahig maxh div}if D /SA t D} - {/Sf 1 D}ie - tclass 1 eq thight LE 15 sub gt and - {/SA t D LE 15 sub thight div dup Sf lt{/Sf E D}{pop}ie}if - SA{Sf Sf scale /ll ll Sf div D /xo xo Sf div D /LE LE Sf div D - /mr mr Sf div D /BO BO Sf div D /ahig ahig Sf div D}if - nhead nfoot add getwid - LE CP E pop add capalg 0 eq{caphig sub}if - bT{f}{dup thight lt thight ahig lt and}ie - E headsz sub footsz sub rwid lt or{NP}if - capalg 0 eq{printcap -8 SP}if - CP /ycur E D pop - printhead - rbeg 1 nrow{/row E D row - getwid - ycur yoff add rwid sub footsz sub LE add 0 lt - {nfoot 0 gt{printfoot}if Tf NP /rbeg irow1 D - Ba{MI /MI MI SA{Sf div}if D MI SP /MI E D}if - CP /ycur E D pop /yoff 0 D printhead}if - irow1 printrow - }for - printfoot /row row 1 add D Tf - 0 ycur yoff add M - capalg 1 eq{/EO 0 D SI -3 SP printcap}if - Sf 1 lt{1 Sf div dup scale /ll ll Sf mul D /xo xo Sf mul D /LE LE Sf mul D - /mr mr Sf mul D /BO BO Sf mul D /SA f D}if - /EO 0 D - }if - }ie - /W w D /XO xo D /MR mr D /LL ll D /LG lg D /AI ai D /BC bc D /NR nr D /AR ar D - /TR tr D /UI ui D /PH ph D /A0 a0 D /PF pf D /AT at D /AV av D /AL al D - /La la D - /SL SL 1 sub NN D /CF 0 D /FN 0 D SZ SL get FR SL get FS Wf not{()F2}if - PL 2 ge{Ms E restore Ms or /Ms E D PH 1 eq PH 2 eq or - {/LM E D}if PH 3 ge{/CI 0 D NL 0 E neg R}if - }if - /PL PL 1 sub D /CI 0 D /BP f D /PO f D () Bm 21 get Ts mul BE BL %CF CS SF -} D -/printcap{ - capalg 0 ge{ - SA{/W w Sf div D} - {talign 1 eq{/XO xo ll twidth sub 2 div add D}if - talign 2 eq{/XO xo ll twidth sub add D}if - /W XO twidth add D - }ie /XO xo D /LL W XO sub MR sub D - /PA f D /Fl capalg 0 eq D - 1 NA BL caption exec BN OA /PA t D - }if -} D -/getwid{ - /irow1 E D - /irow2 irow1 D - /rwid 0 D - {rdesc irow2 get dup 0 get rwid add /rwid E D 2 get 0 eq - {exit}{/irow2 irow2 1 add D}ie - }loop -} D -/printrow{ - /xoff ll twidth PL 2 ge{Sf div}if sub talign mul 2 div D - /xleft xoff xo add D - /irow E D - /cells rdesc irow get 6 get D - 0 1 ncol{ - /icol E D - /cell cells icol get D - cell 0 ne{ - cell aload pop /ang E D /CB E D /cvsize E D /above E D /fontsz E D - /DV E D /bot E D /top E D /right E D /left E D /nowrap E D /valign E D - /dp E D /align E D /rspan E D /cspan E D /cclass E D /ctype E D /cmax E D - /cmin E D /proc E D - rspan 0 eq{/rspan nrow irow sub 1 add D}if - cspan 0 eq{/cspan ncol icol sub 1 add D}if - /width 0 D - 0 1 cspan 1 sub{icol add cdesc E get 0 get /width E width add D}for - /rhight rdesc irow get 0 get D - /hight rhight D - 1 1 rspan 1 sub{irow add rdesc E get 0 get /hight E hight add D}for - /W xo xoff add width add right sub D - ang 0 ne{/W xo xoff add hight add right sub D}if - /EO xo xoff add left add D SI - Cf{ - gsave CB VC xo xoff add ycur yoff add M - 0 hight neg RL width 0 RL 0 hight RL width neg 0 RL fill - grestore - }if - ctype 1 eq{() BD}if - /A0 align D RC - AT 4 eq{ - /DC dp D /ID 1 D /DO cdesc icol get 5 get D /Lo DO DV 0 get sub D /L1 Lo D - }if - ang 0 ne{ - gsave ang 90 eq - {xoff ycur add hight cvsize sub 2 div sub ycur hight sub xoff sub} - {xoff ycur sub width add hight cvsize sub 2 div add ycur xoff add}ie - translate ang rotate - }if - valign 3 le{0 ycur yoff add top sub - hight cvsize sub valign 1 sub mul 2 div sub M} - {0 ycur yoff add top sub above add rdesc irow get 4 get sub M}ie - /PA f D /BP t D /Fl t D - BL proc exec BN - ang 0 ne{grestore}if - /PA t D - ctype 1 eq{() ES}if - }if - /xoff xoff cdesc icol get 0 get add D - }for - /yoff yoff rhight sub D -} D -/printhead {0 1 nhead 1 sub{printrow}for} D -/printfoot {nhead 1 nhead nfoot add 1 sub{printrow}for} D -/Tf { - OU{rules 2 ge{/yoff 0 D - gsave 0 Sg - [0 1 nhead 1 sub{}for rbeg 1 row 1 sub{}for nhead 1 nhead nfoot add 1 sub{}for]{ - /irow E D - /xoff ll twidth PL 2 ge{Sf div}if sub talign mul 2 div D - /cells rdesc irow get 6 get D - 0 1 ncol{ - /icol E D - /cell cells icol get D - cell 0 ne{ - /rspan cell 6 get D - /cspan cell 5 get D - rspan 0 eq{/rspan nrow irow sub 1 add D}if - cspan 0 eq{/cspan ncol icol sub 1 add D}if - /width 0 D - 0 1 cspan 1 sub{icol add cdesc E get 0 get /width E width add D}for - /rhight rdesc irow get 0 get D - /hight rhight D - 1 1 rspan 1 sub{irow add rdesc E get 0 get /hight E hight add D}for - xo xoff add width add ycur yoff add M - 0 hight neg icol cspan add 1 sub ncol lt - {cdesc icol 1 add get 4 get dup rules 3 le{1 eq}{pop t}ie - {1 eq{0.8}{0.3}ie - LW RL CP stroke M}{pop R}ie}{R}ie - irow nhead nfoot add 1 sub ne nfoot 0 eq or - {irow rspan add 1 sub nrow lt - {rdesc irow rspan add get 3 get}{nfoot 0 eq{0}{1}ie}ie - dup rules 2 mod 0 eq{1 eq}{pop t}ie - {1 eq irow rspan add nhead eq or irow rspan add row eq nfoot 0 gt and or - {0.8}{0.3}ie LW width neg 0 RL CP stroke M}{pop}ie}if - }if - /xoff xoff cdesc icol get 0 get add D - }for - /yoff yoff rhight sub D - }forall - grestore - /Ms t D - }if - frame 1 gt{ - gsave - 1 LW 0 Sg - xleft ycur M CP BB - 0 yoff frame 5 eq frame 7 ge or{RL}{R}ie - twidth 0 frame 3 eq frame 4 eq or frame 8 ge or{RL}{R}ie CP BB - 0 yoff neg frame 6 ge{RL}{R}ie - twidth neg 0 frame 2 eq frame 4 eq or frame 8 ge or{RL}{R}ie - closepath stroke - grestore - /Ms t D - }if - }if -} D -/tables [[[0 0 0 0 0 -1 0 0 1 55 2 0 0 9 5 {()} -1] - [[0 0 0 0 0 0 0][0 0 0 0 0 0 0][0 0 0 0 0 0 0]] - [[0 0 0 0 0 0 [[{()1 Sl()WB(XML Schema type)} 0 0 1 0 1 1 1 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB(Alias in the )SM(xml_schema)ES( names)HY(pace)YH()} 0 0 1 0 1 1 1 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB(C++ type - )} 0 0 1 0 1 1 1 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -]] -[0 0 0 0 0 0 [[{()1 Sl()WB(fixed-length inte)HY(gral)YH( types - )} 0 0 1 0 3 1 1 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -0 -0 -]] -[0 0 0 0 0 0 [[{()1 Sl()WB()SM(byte)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()SM(byte)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()SM(signed\240char)ES( - )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -]] -[0 0 0 0 0 0 [[{()1 Sl()WB()SM(unsigned)HY(Byte)YH()ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()SM(unsigned_byte)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()SM(unsigned\240char)ES( - )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -]] -[0 0 0 0 0 0 [[{()1 Sl()WB()SM(short)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()SM(short_)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()SM(short)ES( - )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -]] -[0 0 0 0 0 0 [[{()1 Sl()WB()SM(unsigned)HY(Short)YH()ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()SM(unsigned_short)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()SM(unsigned\240short)ES( - )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -]] -[0 0 0 0 0 0 [[{()1 Sl()WB()SM(int)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()SM(int_)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()SM(int)ES( - )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -]] -[0 0 0 0 0 0 [[{()1 Sl()WB()SM(unsignedInt)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()SM(unsigned_int)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()SM(unsigned\240int)ES( - )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -]] -[0 0 0 0 0 0 [[{()1 Sl()WB()SM(long)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()SM(long_)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()SM(long\240long)ES( - )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -]] -[0 0 0 0 0 0 [[{()1 Sl()WB()SM(unsigned)HY(Long)YH()ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()SM(unsigned_long)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()SM(unsigned\240long\240long)ES( - )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -]] -[0 0 0 0 0 0 [[{()1 Sl()WB(arbi)HY(trary)YH(-length inte)HY(gral)YH( types - )} 0 0 1 0 3 1 1 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -0 -0 -]] -[0 0 0 0 0 0 [[{()1 Sl()WB()SM(integer)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()SM(integer)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()SM(long\240long)ES( - )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -]] -[0 0 0 0 0 0 [[{()1 Sl()WB()SM(nonPos)HY(i)HY(tiveIn)HY(te)HY(ger)YH()ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()SM(non_posi)HY(tive)YH(_integer)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()SM(long\240long)ES( - )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -]] -[0 0 0 0 0 0 [[{()1 Sl()WB()SM(nonNeg)HY(a)HY(tiveIn)HY(te)HY(ger)YH()ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()SM(non_nega)HY(tive)YH(_integer)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()SM(unsigned long\240long)ES( - )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -]] -[0 0 0 0 0 0 [[{()1 Sl()WB()SM(posi)HY(tiveIn)HY(te)HY(ger)YH()ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()SM(posi)HY(tive)YH(_integer)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()SM(unsigned long\240long)ES( - )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -]] -[0 0 0 0 0 0 [[{()1 Sl()WB()SM(nega)HY(tiveIn)HY(te)HY(ger)YH()ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()SM(nega)HY(tive)YH(_integer)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()SM(long\240long)ES( - )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -]] -[0 0 0 0 0 0 [[{()1 Sl()WB(boolean types - )} 0 0 1 0 3 1 1 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -0 -0 -]] -[0 0 0 0 0 0 [[{()1 Sl()WB()SM(boolean)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()SM(boolean)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()SM(bool)ES( - )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -]] -[0 0 0 0 0 0 [[{()1 Sl()WB(fixed-preci)HY(sion)YH( float)HY(ing)YH(-point types - )} 0 0 1 0 3 1 1 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -0 -0 -]] -[0 0 0 0 0 0 [[{()1 Sl()WB()SM(float)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()SM(float_)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()SM(float)ES( - )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -]] -[0 0 0 0 0 0 [[{()1 Sl()WB()SM(double)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()SM(double_)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()SM(double)ES( - )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -]] -[0 0 0 0 0 0 [[{()1 Sl()WB(arbi)HY(trary)YH(-preci)HY(sion)YH( float)HY(ing)YH(-point types - )} 0 0 1 0 3 1 1 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -0 -0 -]] -[0 0 0 0 0 0 [[{()1 Sl()WB()SM(decimal)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()SM(decimal)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()SM(double)ES( - )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -]] -[0 0 0 0 0 0 [[{()1 Sl()WB(string types - )} 0 0 1 0 3 1 1 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -0 -0 -]] -[0 0 0 0 0 0 [[{()1 Sl()WB()SM(string)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()SM(string)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB(type derived from )SM(std::basic_string)ES( - )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -]] -[0 0 0 0 0 0 [[{()1 Sl()WB()SM(normal)HY(ized)HY(String)YH()ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()SM(normal)HY(ized)YH(_string)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB(type derived from )SM(string)ES( - )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -]] -[0 0 0 0 0 0 [[{()1 Sl()WB()SM(token)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()SM(token)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB(type\240derived\240from\240)SM(normal)HY(ized)YH(_string)ES( - )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -]] -[0 0 0 0 0 0 [[{()1 Sl()WB()SM(Name)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()SM(name)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB(type derived from )SM(token)ES( - )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -]] -[0 0 0 0 0 0 [[{()1 Sl()WB()SM(NMTOKEN)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()SM(nmtoken)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB(type derived from )SM(token)ES( - )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -]] -[0 0 0 0 0 0 [[{()1 Sl()WB()SM(NMTO)HY(KENS)YH()ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()SM(nmto)HY(kens)YH()ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB(type derived from )SM(sequence)ES( - )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -]] -[0 0 0 0 0 0 [[{()1 Sl()WB()SM(NCName)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()SM(ncname)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB(type derived from )SM(name)ES( - )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -]] -[0 0 0 0 0 0 [[{()1 Sl()WB()SM(language)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()SM(language)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB(type derived from )SM(token)ES( - )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -]] -[0 0 0 0 0 0 [[{()1 Sl()WB(qual)HY(i)HY(fied)YH( name - )} 0 0 1 0 3 1 1 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -0 -0 -]] -[0 0 0 0 0 0 [[{()1 Sl()WB()SM(QName)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()SM(qname)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()SM(xml_schema::qname)ES( - )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -]] -[0 0 0 0 0 0 [[{()1 Sl()WB(ID/IDREF types - )} 0 0 1 0 3 1 1 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -0 -0 -]] -[0 0 0 0 0 0 [[{()1 Sl()WB()SM(ID)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()SM(id)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB(type derived from )SM(ncname)ES( - )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -]] -[0 0 0 0 0 0 [[{()1 Sl()WB()SM(IDREF)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()SM(idref)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB(type derived from )SM(ncname)ES( - )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -]] -[0 0 0 0 0 0 [[{()1 Sl()WB()SM(IDREFS)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()SM(idrefs)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB(type derived from )SM(sequence)ES( - )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -]] -[0 0 0 0 0 0 [[{()1 Sl()WB(URI types - )} 0 0 1 0 3 1 1 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -0 -0 -]] -[0 0 0 0 0 0 [[{()1 Sl()WB()SM(anyURI)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()SM(uri)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB(type derived from )SM(std::basic_string)ES( - )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -]] -[0 0 0 0 0 0 [[{()1 Sl()WB(binary types - )} 0 0 1 0 3 1 1 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -0 -0 -]] -[0 0 0 0 0 0 [[{()1 Sl()WB()SM(base64Binary)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()SM(base64_binary)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()SM(xml_schema::base64_binary)ES( - )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -]] -[0 0 0 0 0 0 [[{()1 Sl()WB()SM(hexBi)HY(nary)YH()ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()SM(hex_binary)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()SM(xml_schema::hex_binary)ES( - )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -]] -[0 0 0 0 0 0 [[{()1 Sl()WB(date/time types - )} 0 0 1 0 3 1 1 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -0 -0 -]] -[0 0 0 0 0 0 [[{()1 Sl()WB()SM(date)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()SM(date)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()SM(xml_schema::date)ES( - )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -]] -[0 0 0 0 0 0 [[{()1 Sl()WB()SM(date)HY(Time)YH()ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()SM(date_time)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()SM(xml_schema::date_time)ES( - )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -]] -[0 0 0 0 0 0 [[{()1 Sl()WB()SM(dura)HY(tion)YH()ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()SM(dura)HY(tion)YH()ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()SM(xml_schema::dura)HY(tion)YH()ES( - )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -]] -[0 0 0 0 0 0 [[{()1 Sl()WB()SM(gDay)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()SM(gday)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()SM(xml_schema::gday)ES( - )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -]] -[0 0 0 0 0 0 [[{()1 Sl()WB()SM(gMonth)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()SM(gmonth)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()SM(xml_schema::gmonth)ES( - )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -]] -[0 0 0 0 0 0 [[{()1 Sl()WB()SM(gMon)HY(th)HY(Day)YH()ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()SM(gmonth_day)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()SM(xml_schema::gmonth_day)ES( - )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -]] -[0 0 0 0 0 0 [[{()1 Sl()WB()SM(gYear)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()SM(gyear)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()SM(xml_schema::gyear)ES( - )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -]] -[0 0 0 0 0 0 [[{()1 Sl()WB()SM(gYear)HY(Month)YH()ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()SM(gyear_month)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()SM(xml_schema::gyear_month)ES( - )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -]] -[0 0 0 0 0 0 [[{()1 Sl()WB()SM(time)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()SM(time)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()SM(xml_schema::time)ES( - )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -]] -[0 0 0 0 0 0 [[{()1 Sl()WB(entity types - )} 0 0 1 0 3 1 1 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -0 -0 -]] -[0 0 0 0 0 0 [[{()1 Sl()WB()SM(ENTITY)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()SM(entity)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB(type derived from )SM(name)ES( - )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -]] -[0 0 0 0 0 0 [[{()1 Sl()WB()SM(ENTI)HY(TIES)YH()ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()SM(enti)HY(ties)YH()ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB(type derived from )SM(sequence)ES( - )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -]] -]] -] D -0 1 0{TS}for RC ZF -/Ba f D /BO 0 D Bs -/UR (/home/boris/work/xsd/xsd/documentation/cxx/tree/guide/index.xhtml) D -/Ti (C++/Tree Mapping Getting Started Guide) D -/Au () D -/Df f D -/ME [] D -Pt -/BO 0 D TC /Ba f D Bs /AU f D /UR () D RC ZF - tH WB -ND 1 gt{Ts 3 mul Np 0()0 C()BD(C++/Tree Mapping Getting Started Guide)ES()0 1 TN()EA()BN}if -1 NH le{35(1\240\240)1 C(Preface)WB 3 Sn()35 1 TN()EA()BN}if -2 NH le{36(1.1\240\240)2 C(About)WB 4 Sn( This Docu)HY(ment)YH()36 1 TN()EA()BN}if -2 NH le{37(1.2\240\240)2 C(More)WB 5 Sn( Infor)HY(ma)HY(tion)YH()37 1 TN()EA()BN}if -1 NH le{38(2\240\240)1 C(1)WB 6 Sn( Intro)HY(duc)HY(tion)YH()38 1 TN()EA()BN}if -2 NH le{39(2.1\240\240)2 C(1.1)WB 7 Sn( Mapping Overview)39 1 TN()EA()BN}if -2 NH le{40(2.2\240\240)2 C(1.2)WB 8 Sn( Bene)HY(fits)YH()40 1 TN()EA()BN}if -1 NH le{41(3\240\240)1 C(2)WB 9 Sn( Hello World Example)41 1 TN()EA()BN}if -2 NH le{42(3.1\240\240)2 C(2.1)WB 10 Sn( Writing XML Docu)HY(ment)YH( and Schema)42 1 TN()EA()BN}if -2 NH le{43(3.2\240\240)2 C(2.2)WB 11 Sn( Trans)HY(lat)HY(ing)YH( Schema to C++)43 1 TN()EA()BN}if -2 NH le{44(3.3\240\240)2 C(2.3)WB 12 Sn( Imple)HY(ment)HY(ing)YH( Appli)HY(ca)HY(tion)YH( Logic)44 1 TN()EA()BN}if -2 NH le{45(3.4\240\240)2 C(2.4)WB 13 Sn( Compil)HY(ing)YH( and Running)45 1 TN()EA()BN}if -2 NH le{46(3.5\240\240)2 C(2.5)WB 14 Sn( Adding Seri)HY(al)HY(iza)HY(tion)YH()46 1 TN()EA()BN}if -2 NH le{47(3.6\240\240)2 C(2.6)WB 15 Sn( Select)HY(ing)YH( Naming Conven)HY(tion)YH()47 1 TN()EA()BN}if -2 NH le{48(3.7\240\240)2 C(2.7)WB 16 Sn( Gener)HY(at)HY(ing)YH( Docu)HY(men)HY(ta)HY(tion)YH()48 1 TN()EA()BN}if -1 NH le{49(4\240\240)1 C(3)WB 17 Sn( Overall Mapping Config)HY(u)HY(ra)HY(tion)YH()49 1 TN()EA()BN}if -2 NH le{50(4.1\240\240)2 C(3.1)WB 18 Sn( Char)HY(ac)HY(ter)YH( Type and Encod)HY(ing)YH()50 1 TN()EA()BN}if -2 NH le{51(4.2\240\240)2 C(3.2)WB 19 Sn( Support for Poly)HY(mor)HY(phism)YH()51 1 TN()EA()BN}if -2 NH le{52(4.3\240\240)2 C(3.3)WB 20 Sn( Names)HY(pace)YH( Mapping)52 1 TN()EA()BN}if -2 NH le{53(4.4\240\240)2 C(3.4)WB 21 Sn( Thread Safety)53 1 TN()EA()BN}if -1 NH le{54(5\240\240)1 C(4)WB 22 Sn( Working with Object Models)54 1 TN()EA()BN}if -2 NH le{55(5.1\240\240)2 C(4.1)WB 23 Sn( Attribute and Element Cardi)HY(nal)HY(i)HY(ties)YH()55 1 TN()EA()BN}if -2 NH le{56(5.2\240\240)2 C(4.2)WB 24 Sn( Access)HY(ing)YH( the Object Model)56 1 TN()EA()BN}if -2 NH le{57(5.3\240\240)2 C(4.3)WB 25 Sn( Modi)HY(fy)HY(ing)YH( the Object Model)57 1 TN()EA()BN}if -2 NH le{58(5.4\240\240)2 C(4.4)WB 26 Sn( Creat)HY(ing)YH( the Object Model from Scratch)58 1 TN()EA()BN}if -2 NH le{59(5.5\240\240)2 C(4.5)WB 27 Sn( Mapping for the Built-in XML Schema Types)59 1 TN()EA()BN}if -1 NH le{60(6\240\240)1 C(5)WB 29 Sn( Parsing)60 1 TN()EA()BN}if -2 NH le{61(6.1\240\240)2 C(5.1)WB 30 Sn( XML Schema Vali)HY(da)HY(tion)YH( and Search)HY(ing)YH()61 1 TN()EA()BN}if -2 NH le{62(6.2\240\240)2 C(5.2)WB 31 Sn( Error Handling)62 1 TN()EA()BN}if -1 NH le{63(7\240\240)1 C(6)WB 32 Sn( Seri)HY(al)HY(iza)HY(tion)YH()63 1 TN()EA()BN}if -2 NH le{64(7.1\240\240)2 C(6.1)WB 33 Sn( Names)HY(pace)YH( and Schema Infor)HY(ma)HY(tion)YH()64 1 TN()EA()BN}if -2 NH le{65(7.2\240\240)2 C(6.2)WB 34 Sn( Error Handling)65 1 TN()EA()BN}if -/OU t D /Cb Db D NP Ep ET -/Cb Db D /Ct [16#00 16#00 16#00] D /Cl [16#00 16#00 16#00] D /CL -1 D Ct Sc - -/Ba f D /BO 0 D Bs -/UR (/home/boris/work/xsd/xsd/documentation/cxx/tree/guide/index.xhtml) D -/Ti (C++/Tree Mapping Getting Started Guide) D -/Au () D -/Df f D -/ME [] D - -NP RC ZF -()1 Sl()WB 0 Sn( - -)BR()WB 1 Sn( )BR()WB 2 Sn( - - - )0 1 0 H(Preface)WB 35 Sn()WB 3 Sn()EA()EH( - - )0 2 1 H(About)WB 36 Sn()WB 4 Sn( This Docu)HY(ment)YH()EA()EH( - - )0 P(The goal of this docu)HY(ment)YH( is to provide you with an under)HY(stand)HY(ing)YH( of - the C++/Tree program)HY(ming)YH( model and allow you to effi)HY(ciently)YH( eval)HY(u)HY(ate)YH( - XSD against your project's tech)HY(ni)HY(cal)YH( require)HY(ments)YH(. As such, this - docu)HY(ment)YH( is intended for C++ devel)HY(op)HY(ers)YH( and soft)HY(ware)YH( archi)HY(tects)YH( - who are looking for an XML process)HY(ing)YH( solu)HY(tion)YH(. For a more in-depth - descrip)HY(tion)YH( of the C++/Tree mapping refer to the - )R1 2 A(C++/Tree - Mapping User Manual)EA(.)EP( - - )0 P(Prior expe)HY(ri)HY(ence)YH( with XML and C++ is required to under)HY(stand)YH( this - docu)HY(ment)YH(. Basic under)HY(stand)HY(ing)YH( of XML Schema is advan)HY(ta)HY(geous)YH( but - not expected or required. - )EP( - - - )0 2 2 H(More)WB 37 Sn()WB 5 Sn( Infor)HY(ma)HY(tion)YH()EA()EH( - - )0 P(Beyond this guide, you may also find the follow)HY(ing)YH( sources of - infor)HY(ma)HY(tion)YH( useful:)EP( - - )UL( )-1 LI()R1 2 A(C++/Tree - Mapping User Manual)EA( - - )-1 LI()R2 2 A(C++/Tree - Mapping Customiza)HY(tion)YH( Guide)EA( - - )-1 LI()R3 2 A(C++/Tree - Mapping and Berke)HY(ley)YH( DB XML Inte)HY(gra)HY(tion)YH( Guide)EA( - - )-1 LI()R4 2 A(C++/Tree - Mapping Frequently Asked Ques)HY(tions)YH( \201FAQ\202)EA( - - )-1 LI()R5 2 A(XSD - Compiler Command Line Manual)EA( - - )-1 LI(The )SM(exam)HY(ples)YH(/cxx/tree/)ES( direc)HY(tory)YH( in the XSD - distri)HY(bu)HY(tion)YH( contains a collec)HY(tion)YH( of exam)HY(ples)YH( and a README - file with an overview of each example. - - )-1 LI(The )SM(README)ES( file in the XSD distri)HY(bu)HY(tion)YH( explains - how to compile the exam)HY(ples)YH( on various plat)HY(forms)YH(. - - )-1 LI(The )R6 2 A(xsd-users)EA( - mailing list is the place to ask tech)HY(ni)HY(cal)YH( ques)HY(tions)YH( about XSD and the C++/Parser mapping. - Further)HY(more)YH(, the )R7 2 A(archives)EA( - may already have answers to some of your ques)HY(tions)YH(. - - )LU( - - - - )0 1 3 H(1)WB 38 Sn()WB 6 Sn( Intro)HY(duc)HY(tion)YH()EA()EH( - - )0 P(Welcome to CodeSyn)HY(the)HY(sis)YH( XSD and the C++/Tree mapping. XSD is a - cross-plat)HY(form)YH( W3C XML Schema to C++ data binding compiler. C++/Tree - is a W3C XML Schema to C++ mapping that repre)HY(sents)YH( the data stored - in XML as a stat)HY(i)HY(cally)YH(-typed, vocab)HY(u)HY(lary)YH(-specific object model. - )EP( - - )0 2 4 H(1.1)WB 39 Sn()WB 7 Sn( Mapping Overview)EA()EH( - - )0 P(Based on a formal descrip)HY(tion)YH( of an XML vocab)HY(u)HY(lary)YH( \201schema\202, the - C++/Tree mapping produces a tree-like data struc)HY(ture)YH( suit)HY(able)YH( for - in-memory process)HY(ing)YH(. The core of the mapping consists of C++ - classes that consti)HY(tute)YH( the object model and are derived from - types defined in XML Schema as well as XML parsing and - seri)HY(al)HY(iza)HY(tion)YH( code.)EP( - - )0 P(Besides the core features, C++/Tree provide a number of addi)HY(tional)YH( - mapping elements that can be useful in some appli)HY(ca)HY(tions)YH(. These - include seri)HY(al)HY(iza)HY(tion)YH( and extrac)HY(tion)YH( to/from formats others than - XML, such as unstruc)HY(tured)YH( text \201useful for debug)HY(ging)YH(\202 and binary - repre)HY(sen)HY(ta)HY(tions)YH( such as XDR and CDR for high-speed data process)HY(ing)YH(, - inte)HY(gra)HY(tion)YH( with XML databases such as Berke)HY(ley)YH( DB XML, and auto)HY(matic)YH( - docu)HY(men)HY(ta)HY(tion)YH( gener)HY(a)HY(tion)YH(. The C++/Tree mapping also provides a wide - range of mech)HY(a)HY(nisms)YH( for control)HY(ling)YH( and customiz)HY(ing)YH( the gener)HY(ated)YH( - code.)EP( - - )0 P(A typical appli)HY(ca)HY(tion)YH( that uses C++/Tree for XML process)HY(ing)YH( usually - performs the follow)HY(ing)YH( three steps: it first reads \201parses\202 an XML - docu)HY(ment)YH( to an in-memory object model, it then performs some useful - compu)HY(ta)HY(tions)YH( on that object model which may involve modi)HY(fi)HY(ca)HY(tion)YH( - of the model, and finally it may write \201seri)HY(al)HY(ize)YH(\202 the modi)HY(fied)YH( - object model back to XML.)EP( - - )0 P(The next chapter presents a simple appli)HY(ca)HY(tion)YH( that performs these - three steps. The follow)HY(ing)YH( chap)HY(ters)YH( show how to use the C++/Tree - mapping in more detail.)EP( - - )0 2 5 H(1.2)WB 40 Sn()WB 8 Sn( Bene)HY(fits)YH()EA()EH( - - )0 P(Tradi)HY(tional)YH( XML access APIs such as Docu)HY(ment)YH( Object Model \201DOM\202 - or Simple API for XML \201SAX\202 have a number of draw)HY(backs)YH( that - make them less suit)HY(able)YH( for creat)HY(ing)YH( robust and main)HY(tain)HY(able)YH( - XML process)HY(ing)YH( appli)HY(ca)HY(tions)YH(. These draw)HY(backs)YH( include: - )EP( - - )UL( )-1 LI(Generic repre)HY(sen)HY(ta)HY(tion)YH( of XML in terms of elements, attributes, - and text forces an appli)HY(ca)HY(tion)YH( devel)HY(oper)YH( to write a substan)HY(tial)YH( - amount of bridg)HY(ing)YH( code that iden)HY(ti)HY(fies)YH( and trans)HY(forms)YH( pieces - of infor)HY(ma)HY(tion)YH( encoded in XML to a repre)HY(sen)HY(ta)HY(tion)YH( more suit)HY(able)YH( - for consump)HY(tion)YH( by the appli)HY(ca)HY(tion)YH( logic. - - )-1 LI(String-based flow control defers error detec)HY(tion)YH( to runtime. - It also reduces code read)HY(abil)HY(ity)YH( and main)HY(tain)HY(abil)HY(ity)YH(. - - )-1 LI(Lack of type safety because the data is repre)HY(sented)YH( as text. - - )-1 LI(Result)HY(ing)YH( appli)HY(ca)HY(tions)YH( are hard to debug, change, and - main)HY(tain)YH(. - )LU( - - )0 P(In contrast, stat)HY(i)HY(cally)YH(-typed, vocab)HY(u)HY(lary)YH(-specific object model - produced by the C++/Tree mapping allows you to operate in your - domain terms instead of the generic elements, attributes, and - text. Static typing helps catch errors at compile-time rather - than at run-time. Auto)HY(matic)YH( code gener)HY(a)HY(tion)YH( frees you for more - inter)HY(est)HY(ing)YH( tasks \201such as doing some)HY(thing)YH( useful with the - infor)HY(ma)HY(tion)YH( stored in the XML docu)HY(ments)YH(\202 and mini)HY(mizes)YH( the - effort needed to adapt your appli)HY(ca)HY(tions)YH( to changes in the - docu)HY(ment)YH( struc)HY(ture)YH(. To summa)HY(rize)YH(, the C++/Tree object model has - the follow)HY(ing)YH( key advan)HY(tages)YH( over generic XML access APIs:)EP( - - )UL( )-1 LI()BD(Ease of use.)ES( The gener)HY(ated)YH( code hides all the complex)HY(ity)YH( - asso)HY(ci)HY(ated)YH( with parsing and seri)HY(al)HY(iz)HY(ing)YH( XML. This includes navi)HY(gat)HY(ing)YH( - the struc)HY(ture)YH( and convert)HY(ing)YH( between the text repre)HY(sen)HY(ta)HY(tion)YH( and - data types suit)HY(able)YH( for manip)HY(u)HY(la)HY(tion)YH( by the appli)HY(ca)HY(tion)YH( - logic. - - )-1 LI()BD(Natural repre)HY(sen)HY(ta)HY(tion)YH(.)ES( The object repre)HY(sen)HY(ta)HY(tion)YH( allows - you to access the XML data using your domain vocab)HY(u)HY(lary)YH( instead - of generic elements, attributes, and text. - - )-1 LI()BD(Concise code.)ES( With the object repre)HY(sen)HY(ta)HY(tion)YH( the - appli)HY(ca)HY(tion)YH( imple)HY(men)HY(ta)HY(tion)YH( is simpler and thus easier - to read and under)HY(stand)YH(. - - )-1 LI()BD(Safety.)ES( The gener)HY(ated)YH( object model is stat)HY(i)HY(cally)YH( - typed and uses func)HY(tions)YH( instead of strings to access the - infor)HY(ma)HY(tion)YH(. This helps catch program)HY(ming)YH( errors at compile-time - rather than at runtime. - - )-1 LI()BD(Main)HY(tain)HY(abil)HY(ity)YH(.)ES( Auto)HY(matic)YH( code gener)HY(a)HY(tion)YH( mini)HY(mizes)YH( the - effort needed to adapt the appli)HY(ca)HY(tion)YH( to changes in the - docu)HY(ment)YH( struc)HY(ture)YH(. With static typing, the C++ compiler - can pin-point the places in the client code that need to be - changed. - - )-1 LI()BD(Compat)HY(i)HY(bil)HY(ity)YH(.)ES( Sequences of elements are repre)HY(sented)YH( in - the object model as contain)HY(ers)YH( conform)HY(ing)YH( to the stan)HY(dard)YH( C++ - sequence require)HY(ments)YH(. This makes it possi)HY(ble)YH( to use stan)HY(dard)YH( - C++ algo)HY(rithms)YH( on the object repre)HY(sen)HY(ta)HY(tion)YH( and frees you from - learn)HY(ing)YH( yet another container inter)HY(face)YH(, as is the case with - DOM. - - )-1 LI()BD(Effi)HY(ciency)YH(.)ES( If the appli)HY(ca)HY(tion)YH( makes repet)HY(i)HY(tive)YH( use - of the data extracted from XML, then the C++/Tree object model - is more effi)HY(cient)YH( because the navi)HY(ga)HY(tion)YH( is performed using - func)HY(tion)YH( calls rather than string compar)HY(isons)YH( and the XML - data is extracted only once. Further)HY(more)YH(, the runtime memory - usage is reduced due to more effi)HY(cient)YH( data storage - \201for instance, storing numeric data as inte)HY(gers)YH( instead of - strings\202 as well as the static knowl)HY(edge)YH( of cardi)HY(nal)HY(ity)YH( - constraints. - )LU( - - - - - - )0 1 6 H(2)WB 41 Sn()WB 9 Sn( Hello World Example)EA()EH( - - )0 P(In this chapter we will examine how to parse, access, modify, and - seri)HY(al)HY(ize)YH( a very simple XML docu)HY(ment)YH( using the XSD-gener)HY(ated)YH( - C++/Tree object model. The code presented in this chapter is - based on the )SM(hello)ES( example which can be found in - the )SM(exam)HY(ples)YH(/cxx/tree/)ES( direc)HY(tory)YH( of the XSD - distri)HY(bu)HY(tion)YH(.)EP( - - )0 2 7 H(2.1)WB 42 Sn()WB 10 Sn( Writing XML Docu)HY(ment)YH( and Schema)EA()EH( - - )0 P(First, we need to get an idea about the struc)HY(ture)YH( - of the XML docu)HY(ments)YH( we are going to process. Our - )SM(hello.xml)ES(, for example, could look like this:)EP( - - ) 10 28 PR( - - - Hello - - sun - moon - world - -)RP( - - )0 P(Then we can write a descrip)HY(tion)YH( of the above XML in the - XML Schema language and save it into )SM(hello.xsd)ES(:)EP( - - ) 13 70 PR( - - - - - - - - - - - -)RP( - - )0 P(Even if you are not famil)HY(iar)YH( with XML Schema, it - should be easy to connect decla)HY(ra)HY(tions)YH( in )SM(hello.xsd)ES( - to elements in )SM(hello.xml)ES(. The )SM(hello_t)ES( type - is defined as a sequence of the nested )SM(greet)HY(ing)YH()ES( and - )SM(name)ES( elements. Note that the term sequence in XML - Schema means that elements should appear in a partic)HY(u)HY(lar)YH( order - as opposed to appear)HY(ing)YH( multi)HY(ple)YH( times. The )SM(name)ES( - element has its )SM(maxOc)HY(curs)YH()ES( prop)HY(erty)YH( set to - )SM(unbounded)ES( which means it can appear multi)HY(ple)YH( times - in an XML docu)HY(ment)YH(. Finally, the glob)HY(ally)YH(-defined )SM(hello)ES( - element prescribes the root element for our vocab)HY(u)HY(lary)YH(. For an - easily-approach)HY(able)YH( intro)HY(duc)HY(tion)YH( to XML Schema refer to - )R8 2 A(XML Schema Part 0: - Primer)EA(.)EP( - - )0 P(The above schema is a spec)HY(i)HY(fi)HY(ca)HY(tion)YH( of our XML vocab)HY(u)HY(lary)YH(; it tells - every)HY(body)YH( what valid docu)HY(ments)YH( of our XML-based language should look - like. We can also update our )SM(hello.xml)ES( to include the - infor)HY(ma)HY(tion)YH( about the schema so that XML parsers can vali)HY(date)YH( - our docu)HY(ment)YH(:)EP( - - ) 11 60 PR( - - - Hello - - sun - moon - world - -)RP( - - - )0 P(The next step is to compile the schema to gener)HY(ate)YH( the object - model and parsing func)HY(tions)YH(.)EP( - - )0 2 8 H(2.2)WB 43 Sn()WB 11 Sn( Trans)HY(lat)HY(ing)YH( Schema to C++)EA()EH( - - )0 P(Now we are ready to trans)HY(late)YH( our )SM(hello.xsd)ES( to C++. - To do this we invoke the XSD compiler from a termi)HY(nal)YH( \201UNIX\202 or - a command prompt \201Windows\202: - )EP( - - ) 1 24 PR($ xsd cxx-tree hello.xsd)RP( - - )0 P(The XSD compiler produces two C++ files: )SM(hello.hxx)ES( and - )SM(hello.cxx)ES(. The follow)HY(ing)YH( code frag)HY(ment)YH( is taken from - )SM(hello.hxx)ES(; it should give you an idea about what gets - gener)HY(ated)YH(: - )EP( - - ) 45 60 PR(class hello_t -{ -public: - // greeting - // - typedef xml_schema::string greeting_type; - - const greeting_type& - greeting \201\202 const; - - greeting_type& - greeting \201\202; - - void - greeting \201const greeting_type& x\202; - - // name - // - typedef xml_schema::string name_type; - typedef xsd::sequence name_sequence; - typedef name_sequence::iterator name_iterator; - typedef name_sequence::const_iterator name_const_iterator; - - const name_sequence& - name \201\202 const; - - name_sequence& - name \201\202; - - void - name \201const name_sequence& s\202;)WR( - - // Constructor. - // - hello_t \201const greeting_type&\202; - - ... - -}; - -std::auto_ptr -hello \201const std::string& uri\202; - -std::auto_ptr -hello \201std::istream&\202;)RP( - - )0 P(The )SM(hello_t)ES( C++ class corre)HY(sponds)YH( to the - )SM(hello_t)ES( XML Schema type. For each element - in this type a set of C++ type defi)HY(ni)HY(tions)YH( as well as - acces)HY(sor)YH( and modi)HY(fier)YH( func)HY(tions)YH( are gener)HY(ated)YH( inside the - )SM(hello_t)ES( class. Note that the type defi)HY(ni)HY(tions)YH( - and member func)HY(tions)YH( for the )SM(greet)HY(ing)YH()ES( and - )SM(name)ES( elements are differ)HY(ent)YH( because of the - cardi)HY(nal)HY(ity)YH( differ)HY(ences)YH( between these two elements - \201)SM(greet)HY(ing)YH()ES( is a required single element and - )SM(name)ES( is a sequence of elements\202.)EP( - - )0 P(The )SM(xml_schema::string)ES( type used in the type - defi)HY(ni)HY(tions)YH( is a C++ class provided by the XSD runtime - that corre)HY(sponds)YH( to built-in XML Schema type - )SM(string)ES(. The )SM(xml_schema::string)ES( - is based on )SM(std::string)ES( and can be used as - such. Simi)HY(larly)YH(, the )SM(sequence)ES( class template - that is used in the )SM(name_sequence)ES( type - defi)HY(ni)HY(tion)YH( is based on and has the same inter)HY(face)YH( as - )SM(std::vector)ES(. The mapping between the built-in - XML Schema types and C++ types is described in more detail in - )0 27 1 A(Section 4.5, "Mapping for the Built-in XML Schema - Types")27 0 TN TL()Ec /AF f D(. The )SM(hello_t)ES( class also includes a - construc)HY(tor)YH( with an initial)HY(izer)YH( for the required - )SM(greet)HY(ing)YH()ES( element as its argu)HY(ment)YH(.)EP( - - )0 P(The )SM(hello)ES( over)HY(loaded)YH( global func)HY(tions)YH( corre)HY(spond)YH( - to the )SM(hello)ES( global element in XML Schema. A - global element in XML Schema is a valid docu)HY(ment)YH( root. - By default XSD gener)HY(ated)YH( a set of parsing func)HY(tions)YH( for each - global element defined in XML Schema \201this can be over)HY(rid)HY(den)YH( - with the )SM(--root-element-*)ES( options\202. For more - infor)HY(ma)HY(tion)YH( on parsing func)HY(tions)YH( see )0 29 1 A(Chapter 5, - "Parsing")29 0 TN TL()Ec /AF f D(.)EP( - - )0 2 9 H(2.3)WB 44 Sn()WB 12 Sn( Imple)HY(ment)HY(ing)YH( Appli)HY(ca)HY(tion)YH( Logic)EA()EH( - - )0 P(At this point we have all the parts we need to do some)HY(thing)YH( useful - with the infor)HY(ma)HY(tion)YH( stored in our XML docu)HY(ment)YH(: - )EP( - - ) 25 62 PR(#include -#include "hello.hxx" - -using namespace std; - -int -main \201int argc, char* argv[]\202 -{ - try - { - auto_ptr h \201hello \201argv[1]\202\202; - - for \201hello_t::name_const_iterator i \201h->name \201\202.begin \201\202\202; - i != h->name \201\202.end \201\202; - ++i\202 - { - cerr << h->greeting \201\202 << ", " << *i << "!" << endl; - } - } - catch \201const xml_schema::exception& e\202 - { - cerr << e << endl; - return 1; - } -})RP( - - )0 P(The first part of our appli)HY(ca)HY(tion)YH( calls one of the parsing - func)HY(tions)YH( to parser an XML file spec)HY(i)HY(fied)YH( in the command line. - We then use the returned object model to iterate over names - and print a greet)HY(ing)YH( line for each of them. Finally, we - catch and print the )SM(xml_schema::excep)HY(tion)YH()ES( - excep)HY(tion)YH( in case some)HY(thing)YH( goes wrong. This excep)HY(tion)YH( - is the root of the excep)HY(tion)YH( hier)HY(ar)HY(chy)YH( used by the - XSD-gener)HY(ated)YH( code. - )EP( - - - )0 2 10 H(2.4)WB 45 Sn()WB 13 Sn( Compil)HY(ing)YH( and Running)EA()EH( - - )0 P(After saving our appli)HY(ca)HY(tion)YH( from the previ)HY(ous)YH( section in - )SM(driver.cxx)ES(, we are ready to compile our first - program and run it on the test XML docu)HY(ment)YH(. On a UNIX - system this can be done with the follow)HY(ing)YH( commands: - )EP( - - ) 6 43 PR($ c++ -I.../libxsd -c driver.cxx hello.cxx -$ c++ -o driver driver.o hello.o -lxerces-c -$ ./driver hello.xml -Hello, sun! -Hello, moon! -Hello, world!)RP( - - )0 P(Here )SM(.../libxsd)ES( repre)HY(sents)YH( the path to the - )SM(libxsd)ES( direc)HY(tory)YH( in the XSD distri)HY(bu)HY(tion)YH(. - Note also that we are required to link our appli)HY(ca)HY(tion)YH( - with the Xerces-C++ library because the gener)HY(ated)YH( code - uses it as the under)HY(ly)HY(ing)YH( XML parser.)EP( - - )0 2 11 H(2.5)WB 46 Sn()WB 14 Sn( Adding Seri)HY(al)HY(iza)HY(tion)YH()EA()EH( - - )0 P(While parsing and access)HY(ing)YH( the XML data may be every)HY(thing)YH( - you need, there are appli)HY(ca)HY(tions)YH( that require creat)HY(ing)YH( new - or modi)HY(fy)HY(ing)YH( exist)HY(ing)YH( XML docu)HY(ments)YH(. By default XSD does - not produce seri)HY(al)HY(iza)HY(tion)YH( code. We will need to request - it with the )SM(--gener)HY(ate)YH(-seri)HY(al)HY(iza)HY(tion)YH()ES( options:)EP( - - ) 1 49 PR($ xsd cxx-tree --generate-serialization hello.xsd)RP( - - )0 P(If we now examine the gener)HY(ated)YH( )SM(hello.hxx)ES( file, - we will find a set of over)HY(loaded)YH( seri)HY(al)HY(iza)HY(tion)YH( func)HY(tions)YH(, - includ)HY(ing)YH( the follow)HY(ing)YH( version:)EP( - - ) 5 45 PR(void -hello \201std::ostream&, - const hello_t&, - const xml_schema::namespace_infomap& = - xml_schema::namespace_infomap \201\202\202; -)RP( - - )0 P(Just like with parsing func)HY(tions)YH(, XSD gener)HY(ates)YH( seri)HY(al)HY(iza)HY(tion)YH( - func)HY(tions)YH( for each global element unless instructed other)HY(wise)YH( - with one of the )SM(--root-element-*)ES( options. For more - infor)HY(ma)HY(tion)YH( on seri)HY(al)HY(iza)HY(tion)YH( func)HY(tions)YH( see )0 32 1 A(Chapter 6, - "Seri)HY(al)HY(iza)HY(tion)YH(")32 0 TN TL()Ec /AF f D(.)EP( - - )0 P(We first examine an appli)HY(ca)HY(tion)YH( that modi)HY(fies)YH( an exist)HY(ing)YH( - object model and seri)HY(al)HY(izes)YH( it back to XML:)EP( - - ) 34 50 PR(#include -#include "hello.hxx" - -using namespace std; - -int -main \201int argc, char* argv[]\202 -{ - try - { - auto_ptr h \201hello \201argv[1]\202\202; - - // Change the greeting phrase. - // - h->greeting \201"Hi"\202; - - // Add another entry to the name sequence. - // - h->name \201\202.push_back \201"mars"\202; - - // Serialize the modified object model to XML. - // - xml_schema::namespace_infomap map; - map[""].name = ""; - map[""].schema = "hello.xsd"; - - hello \201cout, *h, map\202; - } - catch \201const xml_schema::exception& e\202 - { - cerr << e << endl;)WR( - return 1; - } -})RP( - - )0 P(First, our appli)HY(ca)HY(tion)YH( parses an XML docu)HY(ment)YH( and obtains its - object model as in the previ)HY(ous)YH( example. Then it changes the - greet)HY(ing)YH( string and adds another entry to the list of names. - Finally, it seri)HY(al)HY(izes)YH( the object model back to XML by calling - the seri)HY(al)HY(iza)HY(tion)YH( func)HY(tion)YH(.)EP( - - )0 P(The first argu)HY(ment)YH( we pass to the seri)HY(al)HY(iza)HY(tion)YH( func)HY(tion)YH( is - )SM(cout)ES( which results in the XML being written to - the stan)HY(dard)YH( output for us to inspect. We could have also - written the result to a file or memory buffer by creat)HY(ing)YH( an - instance of )SM(std::ofstream)ES( or )SM(std::ostringstream)ES( - and passing it instead of )SM(cout)ES(. The second argu)HY(ment)YH( is the - object model we want to seri)HY(al)HY(ize)YH(. The final argu)HY(ment)YH( is an optional - names)HY(pace)YH( infor)HY(ma)HY(tion)YH( map for our vocab)HY(u)HY(lary)YH(. It captures infor)HY(ma)HY(tion)YH( - such as names)HY(paces)YH(, names)HY(pace)YH( prefixes to which they should be mapped, - and schemas asso)HY(ci)HY(ated)YH( with these names)HY(paces)YH(. If we don't provide - this argu)HY(ment)YH( then generic names)HY(pace)YH( prefixes \201)SM(p1)ES(, - )SM(p2)ES(, etc.\202 will be auto)HY(mat)HY(i)HY(cally)YH( assigned to XML names)HY(paces)YH( - and no schema infor)HY(ma)HY(tion)YH( will be added to the result)HY(ing)YH( docu)HY(ment)YH( - \201see )0 32 1 A(Chapter 6, "Seri)HY(al)HY(iza)HY(tion)YH(")32 0 TN TL()Ec /AF f D( for details\202. - In our case, the prefix \201map key\202 and names)HY(pace)YH( name are empty - because our vocab)HY(u)HY(lary)YH( does not use XML names)HY(paces)YH(.)EP( - - )0 P(If we now compile and run this appli)HY(ca)HY(tion)YH( we will see the - output as shown in the follow)HY(ing)YH( listing:)EP( - - ) 12 60 PR( - - - Hi - - sun - moon - world - mars - -)RP( - - )0 P(We can also create and seri)HY(al)HY(ize)YH( an object model from scratch - as shown in the follow)HY(ing)YH( example:)EP( - - ) 33 43 PR(#include -#include -#include "hello.hxx" - -using namespace std; - -int -main \201int argc, char* argv[]\202 -{ - try - { - hello_t h \201"Hi"\202; - - hello_t::name_sequence& ns \201h.name \201\202\202; - - ns.push_back \201"Jane"\202; - ns.push_back \201"John"\202; - - // Serialize the object model to XML. - // - xml_schema::namespace_infomap map; - map[""].name = ""; - map[""].schema = "hello.xsd"; - - std::ofstream ofs \201argv[1]\202; - hello \201ofs, h, map\202; - } - catch \201const xml_schema::exception& e\202 - { - cerr << e << endl; - return 1;)WR( - } -})RP( - - )0 P(In this example we used the gener)HY(ated)YH( construc)HY(tor)YH( to create - an instance of type )SM(hello_t)ES(. To reduce typing, - we obtained a refer)HY(ence)YH( to the name sequence which we then - used to add a few names. The seri)HY(al)HY(iza)HY(tion)YH( part is iden)HY(ti)HY(cal)YH( - to the previ)HY(ous)YH( example except this time we are writing to - a file. If we compile and run this program, it produces the - follow)HY(ing)YH( XML file:)EP( - - ) 10 60 PR( - - - Hi - - Jane - John - -)RP( - - )0 2 12 H(2.6)WB 47 Sn()WB 15 Sn( Select)HY(ing)YH( Naming Conven)HY(tion)YH()EA()EH( - - )0 P(By default XSD uses the so-called K&R \201Kernighan and Ritchie\202 - iden)HY(ti)HY(fier)YH( naming conven)HY(tion)YH( in the gener)HY(ated)YH( code. In this - conven)HY(tion)YH( both type and func)HY(tion)YH( names are in lower case and - words are sepa)HY(rated)YH( by under)HY(scores)YH(. If your appli)HY(ca)HY(tion)YH( code or - schemas use a differ)HY(ent)YH( nota)HY(tion)YH(, you may want to change the - naming conven)HY(tion)YH( used in the gener)HY(ated)YH( code for consis)HY(tency)YH(. - XSD supports a set of widely-used naming conven)HY(tions)YH( - that you can select with the )SM(--type-naming)ES( and - )SM(--func)HY(tion)YH(-naming)ES( options. You can also further - refine one of the prede)HY(fined)YH( conven)HY(tions)YH( or create a completely - custom naming scheme by using the )SM(--*-regex)ES( options.)EP( - - )0 P(As an example, let's assume that our "Hello World" appli)HY(ca)HY(tion)YH( - uses the so-called upper-camel-case naming conven)HY(tion)YH( for types - \201that is, each word in a type name is capi)HY(tal)HY(ized)YH(\202 and the K&R - conven)HY(tion)YH( for func)HY(tion)YH( names. Since K&R is the default - conven)HY(tion)YH( for both type and func)HY(tion)YH( names, we only need to - change the type naming scheme:)EP( - - ) 1 42 PR($ xsd cxx-tree --type-naming ucc hello.xsd)RP( - - )0 P(The )SM(ucc)ES( argu)HY(ment)YH( to the )SM(--type-naming)ES( - options stands for upper-camel-case. If we now examine the - gener)HY(ated)YH( )SM(hello.hxx)ES(, we will see the follow)HY(ing)YH( - changes compared to the decla)HY(ra)HY(tions)YH( shown in the previ)HY(ous)YH( - sections:)EP( - - ) 45 57 PR(class Hello_t -{ -public: - // greeting - // - typedef xml_schema::String GreetingType; - - const GreetingType& - greeting \201\202 const; - - GreetingType& - greeting \201\202; - - void - greeting \201const GreetingType& x\202; - - // name - // - typedef xml_schema::String NameType; - typedef xsd::sequence NameSequence; - typedef NameSequence::iterator NameIterator; - typedef NameSequence::const_iterator NameConstIterator; - - const NameSequence& - name \201\202 const; - - NameSequence& - name \201\202; - - void - name \201const NameSequence& s\202;)WR( - - // Constructor. - // - Hello_t \201const GreetingType&\202; - - ... - -}; - -std::auto_ptr -hello \201const std::string& uri\202; - -std::auto_ptr -hello \201std::istream&\202;)RP( - - )0 P(Notice that the type names in the )SM(xml_schema)ES( names)HY(pace)YH(, - for example )SM(xml_schema::String)ES(, now also use the - upper-camel-case naming conven)HY(tion)YH(. The only thing that we may - be unhappy about in the above code is the )SM(_t)ES( - suffix in )SM(Hello_t)ES(. If we are not in a posi)HY(tion)YH( - to change the schema, we can )EM(touch-up)ES( the )SM(ucc)ES( - conven)HY(tion)YH( with a custom trans)HY(la)HY(tion)YH( rule using the - )SM(--type-regex)ES( option:)EP( - - ) 1 72 PR($ xsd cxx-tree --type-naming ucc --type-regex '/ \201.+\202_t/\200u$1/' hello.xsd)RP( - - )0 P(This results in the follow)HY(ing)YH( changes to the gener)HY(ated)YH( code:)EP( - - ) 45 57 PR(class Hello -{ -public: - // greeting - // - typedef xml_schema::String GreetingType; - - const GreetingType& - greeting \201\202 const; - - GreetingType& - greeting \201\202; - - void - greeting \201const GreetingType& x\202; - - // name - // - typedef xml_schema::String NameType; - typedef xsd::sequence NameSequence; - typedef NameSequence::iterator NameIterator; - typedef NameSequence::const_iterator NameConstIterator; - - const NameSequence& - name \201\202 const; - - NameSequence& - name \201\202; - - void - name \201const NameSequence& s\202;)WR( - - // Constructor. - // - Hello \201const GreetingType&\202; - - ... - -}; - -std::auto_ptr -hello \201const std::string& uri\202; - -std::auto_ptr -hello \201std::istream&\202;)RP( - - )0 P(For more detailed infor)HY(ma)HY(tion)YH( on the )SM(--type-naming)ES(, - )SM(--func)HY(tion)YH(-naming)ES(, )SM(--type-regex)ES(, and - other )SM(--*-regex)ES( options refer to the NAMING - CONVEN)HY(TION)YH( section in the )R5 2 A(XSD - Compiler Command Line Manual)EA(.)EP( - - )0 2 13 H(2.7)WB 48 Sn()WB 16 Sn( Gener)HY(at)HY(ing)YH( Docu)HY(men)HY(ta)HY(tion)YH()EA()EH( - - )0 P(While our object model is quite simple, real-world vocab)HY(u)HY(lar)HY(ies)YH( - can be quite complex with hundreds of types, elements, and - attributes. For such vocab)HY(u)HY(lar)HY(ies)YH( figur)HY(ing)YH( out which types - provide which member func)HY(tions)YH( by study)HY(ing)YH( the gener)HY(ated)YH( - source code or schemas can be a daunt)HY(ing)YH( task. To provide - appli)HY(ca)HY(tion)YH( devel)HY(op)HY(ers)YH( with a more acces)HY(si)HY(ble)YH( way of - under)HY(stand)HY(ing)YH( the gener)HY(ated)YH( object models, the XSD compiler - can be instructed to produce source code with docu)HY(men)HY(ta)HY(tion)YH( - comments in the Doxygen format. Then the source code can be - processed with the )R9 2 A(Doxygen)EA( - docu)HY(men)HY(ta)HY(tion)YH( system to extract this infor)HY(ma)HY(tion)YH( and produce - docu)HY(men)HY(ta)HY(tion)YH( in various formats. - )EP( - - )0 P(In this section we will see how to gener)HY(ate)YH( docu)HY(men)HY(ta)HY(tion)YH( - for our "Hello World" vocab)HY(u)HY(lary)YH(. To show)HY(case)YH( the full power - of the XSD docu)HY(men)HY(ta)HY(tion)YH( facil)HY(i)HY(ties)YH(, we will first docu)HY(ment)YH( - our schema. The XSD compiler will then trans)HY(fer)YH( - this infor)HY(ma)HY(tion)YH( from the schema to the gener)HY(ated)YH( code and - then to the object model docu)HY(men)HY(ta)HY(tion)YH(. Note that the - docu)HY(men)HY(ta)HY(tion)YH( in the schema is not required for XSD to - gener)HY(ate)YH( useful docu)HY(men)HY(ta)HY(tion)YH(. Below you will find - our )SM(hello.xsd)ES( with added docu)HY(men)HY(ta)HY(tion)YH(:)EP( - - ) 43 69 PR( - - - - - - The hello_t type consists of a greeting phrase and a - collection of names to which this greeting applies. - - - - - - - - - The greeting element contains the greeting phrase - for this hello object. - - - - - - - - The name elements contains names to be greeted. - - - - - )WR( - - - - - - The hello element is a root of the Hello XML vocabulary. - Every conforming document should start with this element. - - - - -)RP( - - )0 P(The first step in obtain)HY(ing)YH( the docu)HY(men)HY(ta)HY(tion)YH( is to recom)HY(pile)YH( - our schema with the )SM(--gener)HY(ate)YH(-doxygen)ES( option:)EP( - - ) 1 68 PR($ xsd cxx-tree --generate-serialization --generate-doxygen hello.xsd)RP( - - )0 P(Now the gener)HY(ated)YH( )SM(hello.hxx)ES( file contains comments - in the Doxygen format. The next step is to process this file - with the Doxygen docu)HY(men)HY(ta)HY(tion)YH( system. If your project does - not use Doxygen then you first need to create a config)HY(u)HY(ra)HY(tion)YH( - file for your project:)EP( - - ) 1 26 PR($ doxygen -g hello.doxygen)RP( - - )0 P(You only need to perform this step once. Now we can gener)HY(ate)YH( - the docu)HY(men)HY(ta)HY(tion)YH( by execut)HY(ing)YH( the follow)HY(ing)YH( command in the - direc)HY(tory)YH( with the gener)HY(ated)YH( source code:)EP( - - ) 1 23 PR($ doxygen hello.doxygen)RP( - - )0 P(While the gener)HY(ated)YH( docu)HY(men)HY(ta)HY(tion)YH( can be useful as is, we can - go one step further and link \201using the Doxygen tags mech)HY(a)HY(nism)YH(\202 - the docu)HY(men)HY(ta)HY(tion)YH( for our object model with the docu)HY(men)HY(ta)HY(tion)YH( - for the XSD runtime library which defines C++ classes for the - built-in XML Schema types. This way we can seam)HY(lessly)YH( browse - between docu)HY(men)HY(ta)HY(tion)YH( for the )SM(hello_t)ES( class which - is gener)HY(ated)YH( by the XSD compiler and the )SM(xml_schema::string)ES( - class which is defined in the XSD runtime library. The Doxygen - config)HY(u)HY(ra)HY(tion)YH( file for the XSD runtime is provided with the XSD - distri)HY(bu)HY(tion)YH(.)EP( - - )0 P(You can view the result of the steps described in this section - on the )R10 2 A(Hello - Example Docu)HY(men)HY(ta)HY(tion)YH()EA( page.)EP( - - - - - )0 1 14 H(3)WB 49 Sn()WB 17 Sn( Overall Mapping Config)HY(u)HY(ra)HY(tion)YH()EA()EH( - - )0 P(The C++/Tree mapping has a number of config)HY(u)HY(ra)HY(tion)YH( param)HY(e)HY(ters)YH( that - deter)HY(mine)YH( the overall prop)HY(er)HY(ties)YH( and behav)HY(ior)YH( of the gener)HY(ated)YH( code. - Config)HY(u)HY(ra)HY(tion)YH( param)HY(e)HY(ters)YH( are spec)HY(i)HY(fied)YH( with the XSD command line - options. This chapter describes config)HY(u)HY(ra)HY(tion)YH( aspects that are most - commonly encoun)HY(tered)YH( by appli)HY(ca)HY(tion)YH( devel)HY(op)HY(ers)YH(. These include: - the char)HY(ac)HY(ter)YH( type that is used by the gener)HY(ated)YH( code, handling of - vocab)HY(u)HY(lar)HY(ies)YH( that use XML Schema poly)HY(mor)HY(phism)YH(, XML Schema to C++ - names)HY(pace)YH( mapping, and thread safety. For more ways to config)HY(ure)YH( - the gener)HY(ated)YH( code refer to the - )R5 2 A(XSD - Compiler Command Line Manual)EA(. - )EP( - - )0 2 15 H(3.1)WB 50 Sn()WB 18 Sn( Char)HY(ac)HY(ter)YH( Type and Encod)HY(ing)YH()EA()EH( - - )0 P(The C++/Tree mapping has built-in support for two char)HY(ac)HY(ter)YH( types: - )SM(char)ES( and )SM(wchar_t)ES(. You can select the - char)HY(ac)HY(ter)YH( type with the )SM(--char-type)ES( command line - option. The default char)HY(ac)HY(ter)YH( type is )SM(char)ES(. The - char)HY(ac)HY(ter)YH( type affects all string and string-based types that - are used in the mapping. These include the string-based built-in - XML Schema types, excep)HY(tion)YH( types, stream types, etc.)EP( - - )0 P(Another aspect of the mapping that depends on the char)HY(ac)HY(ter)YH( type - is char)HY(ac)HY(ter)YH( encod)HY(ing)YH(. For the )SM(char)ES( char)HY(ac)HY(ter)YH( type - the default encod)HY(ing)YH( is UTF-8. Other supported encod)HY(ings)YH( are - ISO-8859-1, Xerces-C++ Local Code Page \201LPC\202, as well as - custom encod)HY(ings)YH(. You can select which encod)HY(ing)YH( should be used - in the object model with the )SM(--char-encod)HY(ing)YH()ES( command - line option.)EP( - - )0 P(For the )SM(wchar_t)ES( char)HY(ac)HY(ter)YH( type the encod)HY(ing)YH( is - auto)HY(mat)HY(i)HY(cally)YH( selected between UTF-16 and UTF-32/UCS-4 depend)HY(ing)YH( - on the size of the )SM(wchar_t)ES( type. On some plat)HY(forms)YH( - \201for example, Windows with Visual C++ and AIX with IBM XL C++\202 - )SM(wchar_t)ES( is 2 bytes long. For these plat)HY(forms)YH( the - encod)HY(ing)YH( is UTF-16. On other plat)HY(forms)YH( )SM(wchar_t)ES( is 4 bytes - long and UTF-32/UCS-4 is used.)EP( - - )0 P(Note also that the char)HY(ac)HY(ter)YH( encod)HY(ing)YH( that is used in the object model - is inde)HY(pen)HY(dent)YH( of the encod)HY(ings)YH( used in input and output XML. In fact, - all three \201object mode, input XML, and output XML\202 can have differ)HY(ent)YH( - encod)HY(ings)YH(.)EP( - - )0 2 16 H(3.2)WB 51 Sn()WB 19 Sn( Support for Poly)HY(mor)HY(phism)YH()EA()EH( - - )0 P(By default XSD gener)HY(ates)YH( non-poly)HY(mor)HY(phic)YH( code. If your vocab)HY(u)HY(lary)YH( - uses XML Schema poly)HY(mor)HY(phism)YH( in the form of )SM(xsi:type)ES( - and/or substi)HY(tu)HY(tion)YH( groups, then you will need to compile - your schemas with the )SM(--gener)HY(ate)YH(-poly)HY(mor)HY(phic)YH()ES( option - to produce poly)HY(mor)HY(phism)YH(-aware code. For more infor)HY(ma)HY(tion)YH( on - working with poly)HY(mor)HY(phic)YH( object models, refer to - )R11 2 A(Section 2.11, - "Mapping for )SM(xsi:type)ES( and Substi)HY(tu)HY(tion)YH( Groups")EA( in - the C++/Tree Mapping User Manual.)EP( - - )0 2 17 H(3.3)WB 52 Sn()WB 20 Sn( Names)HY(pace)YH( Mapping)EA()EH( - - )0 P(XSD maps XML names)HY(paces)YH( spec)HY(i)HY(fied)YH( in the )SM(target)HY(Names)HY(pace)YH()ES( - attribute in XML Schema to one or more nested C++ names)HY(paces)YH(. By - default, a names)HY(pace)YH( URI is mapped to a sequence of C++ names)HY(pace)YH( - names by remov)HY(ing)YH( the proto)HY(col)YH( and host parts and split)HY(ting)YH( the - rest into a sequence of names with )SM('/')ES( as the name - sepa)HY(ra)HY(tor)YH(.)EP( - - )0 P(The default mapping of names)HY(pace)YH( URIs to C++ names)HY(paces)YH( - can be altered using the )SM(--names)HY(pace)YH(-map)ES( and - )SM(--names)HY(pace)YH(-regex)ES( compiler options. For example, - to map names)HY(pace)YH( URI )SM(http://www.codesyn)HY(the)HY(sis)YH(.com/my)ES( to - C++ names)HY(pace)YH( )SM(cs::my)ES(, we can use the follow)HY(ing)YH( option:)EP( - - ) 1 54 PR(--namespace-map http://www.codesynthesis.com/my=cs::my)RP( - - )0 P(A vocab)HY(u)HY(lary)YH( without a names)HY(pace)YH( is mapped to the global scope. This - also can be altered with the above options by using an empty name - for the XML names)HY(pace)YH(:)EP( - - ) 1 19 PR(--namespace-map =cs)RP( - - )0 2 18 H(3.4)WB 53 Sn()WB 21 Sn( Thread Safety)EA()EH( - - )0 P(XSD-gener)HY(ated)YH( code is thread-safe in the sense that you can - use differ)HY(ent)YH( instan)HY(ti)HY(a)HY(tions)YH( of the object model in several - threads concur)HY(rently)YH(. This is possi)HY(ble)YH( due to the gener)HY(ated)YH( - code not relying on any writable global vari)HY(ables)YH(. If you need - to share the same object between several threads then you will - need to provide some form of synchro)HY(niza)HY(tion)YH(. One approach would - be to use the gener)HY(ated)YH( code customiza)HY(tion)YH( mech)HY(a)HY(nisms)YH( to embed - synchro)HY(niza)HY(tion)YH( prim)HY(i)HY(tives)YH( into the gener)HY(ated)YH( C++ classes. For more - infor)HY(ma)HY(tion)YH( on gener)HY(ated)YH( code customiza)HY(tion)YH( refer to the - )R2 2 A(C++/Tree - Mapping Customiza)HY(tion)YH( Guide)EA(.)EP( - - )0 P(If you also would like to call parsing and/or seri)HY(al)HY(iza)HY(tion)YH( - func)HY(tions)YH( from several threads poten)HY(tially)YH( concur)HY(rently)YH(, then - you will need to make sure the Xerces-C++ runtime is initial)HY(ized)YH( - and termi)HY(nated)YH( only once. The easiest way to do this is to - initial)HY(ize)YH(/termi)HY(nate)YH( Xerces-C++ from )SM(main\201\202)ES( when - there are no threads yet/anymore:)EP( - - ) 13 56 PR(#include - -int -main \201\202 -{ - xercesc::XMLPlatformUtils::Initialize \201\202; - - { - // Start/terminate threads and parse/serialize here. - } - - xercesc::XMLPlatformUtils::Terminate \201\202; -})RP( - - )0 P(Because you initial)HY(ize)YH( the Xerces-C++ runtime your)HY(self)YH( you should - also pass the )SM(xml_schema::flags::dont_initial)HY(ize)YH()ES( flag - to parsing and seri)HY(al)HY(iza)HY(tion)YH( func)HY(tions)YH(. See )0 29 1 A(Chapter 5, - "Parsing")29 0 TN TL()Ec /AF f D( and )0 32 1 A(Chapter 6, "Seri)HY(al)HY(iza)HY(tion)YH(")32 0 TN TL()Ec /AF f D( for - more infor)HY(ma)HY(tion)YH(.)EP( - - - - - - )0 1 19 H(4)WB 54 Sn()WB 22 Sn( Working with Object Models)EA()EH( - - )0 P(As we have seen in the previ)HY(ous)YH( chap)HY(ters)YH(, the XSD compiler gener)HY(ates)YH( - a C++ class for each type defined in XML Schema. Together these classes - consti)HY(tute)YH( an object model for an XML vocab)HY(u)HY(lary)YH(. In this chapter we - will take a closer look at differ)HY(ent)YH( elements that comprise an - object model class as well as how to create, access, and modify - object models.)EP( - - )0 P(In this and subse)HY(quent)YH( chap)HY(ters)YH( we will use the follow)HY(ing)YH( schema - that describes a collec)HY(tion)YH( of person records. We save it in - )SM(people.xsd)ES(:)EP( - - ) 30 71 PR( - - - - - - - - - - - - - - - - - - - - - - - - - - - - -)RP( - - )0 P(A sample XML instance to go along with this schema is saved - in )SM(people.xml)ES(:)EP( - - ) 20 61 PR( - - - - John - Doe - male - 32 - - - - Jane - Mary - Doe - female - 28 - - -)RP( - - )0 P(Compil)HY(ing)YH( )SM(people.xsd)ES( with the XSD compiler results - in three gener)HY(ated)YH( C++ classes: )SM(gender_t)ES(, - )SM(person_t)ES(, and )SM(people_t)ES(. - The )SM(gender_t)ES( class is modelled after the C++ - )SM(enum)ES( type. Its defi)HY(ni)HY(tion)YH( is presented below:)EP( - - ) 17 41 PR(class gender_t: public xml_schema::string -{ -public: - enum value - { - male, - female - }; - - gender_t \201value\202; - gender_t \201const xml_schema::string&\202; - - gender_t& - operator= \201value\202; - - operator value \201\202 const; -};)RP( - - )0 P(The follow)HY(ing)YH( listing shows how we can use this type:)EP( - - ) 19 41 PR(gender_t m \201gender_t::male\202; -gender_t f \201"female"\202; - -if \201m == "female" || f == gender_t::male\202 -{ - ... -} - -switch \201m\202 -{ -case gender_t::male: - { - ... - } -case gender_t::female: - { - ... - } -})RP( - - )0 P(The other two classes will be exam)HY(ined)YH( in detail in the subse)HY(quent)YH( - sections.)EP( - - )0 2 20 H(4.1)WB 55 Sn()WB 23 Sn( Attribute and Element Cardi)HY(nal)HY(i)HY(ties)YH()EA()EH( - - )0 P(As we have seen in the previ)HY(ous)YH( chap)HY(ters)YH(, XSD gener)HY(ates)YH( a differ)HY(ent)YH( - set of type defi)HY(ni)HY(tions)YH( and member func)HY(tions)YH( for elements with - differ)HY(ent)YH( cardi)HY(nal)HY(i)HY(ties)YH(. The C++/Tree mapping divides all the possi)HY(ble)YH( - element and attribute cardi)HY(nal)HY(i)HY(ties)YH( into three cardi)HY(nal)HY(ity)YH( classes: - )EM(one)ES(, )EM(optional)ES(, and )EM(sequence)ES(.)EP( - - )0 P(The )EM(one)ES( cardi)HY(nal)HY(ity)YH( class covers all elements that should - occur exactly once as well as required attributes. In our - example, the )SM(first-name)ES(, )SM(last-name)ES(, - )SM(gender)ES(, and )SM(age)ES( elements as well as - the )SM(id)ES( attribute belong to this cardi)HY(nal)HY(ity)YH( class. - The follow)HY(ing)YH( code frag)HY(ment)YH( shows type defi)HY(ni)HY(tions)YH( as well as the - acces)HY(sor)YH( and modi)HY(fier)YH( func)HY(tions)YH( that are gener)HY(ated)YH( for the - )SM(gender)ES( element in the )SM(person_t)ES( class:)EP( - - ) 15 31 PR(class person_t -{ - // gender - // - typedef gender_t gender_type; - - const gender_type& - gender \201\202 const; - - gender_type& - gender \201\202; - - void - gender \201const gender_type&\202; -};)RP( - - )0 P(The )SM(gender_type)ES( type is an alias for the element's type. - The first two acces)HY(sor)YH( func)HY(tions)YH( return read-only \201constant\202 and - read-write refer)HY(ences)YH( to the element's value, respec)HY(tively)YH(. The - modi)HY(fier)YH( func)HY(tion)YH( sets the new value for the element.)EP( - - )0 P(The )EM(optional)ES( cardi)HY(nal)HY(ity)YH( class covers all elements that - can occur zero or one time as well as optional attributes. In our - example, the )SM(middle-name)ES( element belongs to this - cardi)HY(nal)HY(ity)YH( class. The follow)HY(ing)YH( code frag)HY(ment)YH( shows the type - defi)HY(ni)HY(tions)YH( as well as the acces)HY(sor)YH( and modi)HY(fier)YH( func)HY(tions)YH( that - are gener)HY(ated)YH( for this element in the )SM(person_t)ES( class:)EP( - - ) 19 63 PR(class person_t -{ - // middle-name - // - typedef xml_schema::string middle_name_type; - typedef xsd::optional middle_name_optional; - - const middle_name_optional& - middle_name \201\202 const; - - middle_name_optional& - middle_name \201\202; - - void - middle_name \201const middle_name_type&\202; - - void - middle_name \201const middle_name_optional&\202; -};)RP( - - )0 P(As with the )SM(gender)ES( element, )SM(middle_name_type)ES( - is an alias for the element's type. The )SM(middle_name_optional)ES( - type is a container for the element's optional value. It can be queried - for the pres)HY(ence)YH( of the value using the )SM(present\201\202)ES( func)HY(tion)YH(. - The value itself can be retrieved using the )SM(get\201\202)ES( - acces)HY(sor)YH( and set using the )SM(set\201\202)ES( modi)HY(fier)YH(. The container - can be reverted to the value not present state with the call to the - )SM(reset\201\202)ES( func)HY(tion)YH(. The follow)HY(ing)YH( example shows how we - can use this container:)EP( - - ) 9 42 PR(person_t::middle_name_optional n \201"John"\202; - -if \201n.preset \201\202\202 -{ - cout << n.get \201\202 << endl; -} - -n.set \201"Jane"\202; -n.reset \201\202;)RP( - - - )0 P(Unlike the )EM(one)ES( cardi)HY(nal)HY(ity)YH( class, the acces)HY(sor)YH( func)HY(tions)YH( - for the )EM(optional)ES( class return read-only \201constant\202 and - read-write refer)HY(ences)YH( to the container instead of the element's - value directly. The modi)HY(fier)YH( func)HY(tions)YH( set the new value for the - element.)EP( - - )0 P(Finally, the )EM(sequence)ES( cardi)HY(nal)HY(ity)YH( class covers all elements - that can occur more than once. In our example, the - )SM(person)ES( element in the )SM(people_t)ES( type - belongs to this cardi)HY(nal)HY(ity)YH( class. The follow)HY(ing)YH( code frag)HY(ment)YH( shows - the type defi)HY(ni)HY(tions)YH( as well as the acces)HY(sor)YH( and modi)HY(fier)YH( func)HY(tions)YH( - that are gener)HY(ated)YH( for this element in the )SM(people_t)ES( - class:)EP( - - ) 18 64 PR(class people_t -{ - // person - // - typedef person_t person_type; - typedef xsd::sequence person_sequence; - typedef person_sequence::iterator person_iterator; - typedef person_sequence::const_iterator person_const_iterator; - - const person_sequence& - person \201\202 const; - - person_sequence& - person \201\202; - - void - person \201const person_sequence&\202; -};)RP( - - )0 P(Iden)HY(ti)HY(cal)YH( to the other cardi)HY(nal)HY(ity)YH( classes, )SM(person_type)ES( - is an alias for the element's type. The )SM(person_sequence)ES( - type is a sequence container for the element's values. It is based - on and has the same inter)HY(face)YH( as )SM(std::vector)ES( and - there)HY(fore)YH( can be used in similar ways. The )SM(person_iter)HY(a)HY(tor)YH()ES( - and )SM(person_const_iter)HY(a)HY(tor)YH()ES( types are read-only - \201constant\202 and read-write iter)HY(a)HY(tors)YH( for the )SM(person_sequence)ES( - container.)EP( - - )0 P(Similar to the )EM(optional)ES( cardi)HY(nal)HY(ity)YH( class, the - acces)HY(sor)YH( func)HY(tions)YH( for the )EM(sequence)ES( class return - read-only \201constant\202 and read-write refer)HY(ences)YH( to the sequence - container. The modi)HY(fier)YH( func)HY(tions)YH( copies the entries from - the passed sequence.)EP( - - )0 P(For complex schemas with many levels of nested compos)HY(i)HY(tors)YH( - \201)SM(xs:choice)ES( and )SM(xs:sequence)ES(\202 it can - be hard to deduce the cardi)HY(nal)HY(ity)YH( class of a partic)HY(u)HY(lar)YH( element. - The gener)HY(ated)YH( Doxygen docu)HY(men)HY(ta)HY(tion)YH( can greatly help with - this task. For each element and attribute the docu)HY(men)HY(ta)HY(tion)YH( - clearly iden)HY(ti)HY(fies)YH( its cardi)HY(nal)HY(ity)YH( class. Alter)HY(na)HY(tively)YH(, you - can study the gener)HY(ated)YH( header files to find out the cardi)HY(nal)HY(ity)YH( - class of a partic)HY(u)HY(lar)YH( attribute or element. In the next sections - we will examine how to access and modify infor)HY(ma)HY(tion)YH( stored in - an object model using acces)HY(sor)YH( and modi)HY(fier)YH( func)HY(tions)YH( described - in this section.)EP( - - - )0 2 21 H(4.2)WB 56 Sn()WB 24 Sn( Access)HY(ing)YH( the Object Model)EA()EH( - - )0 P(In this section we will learn how to get to the infor)HY(ma)HY(tion)YH( - stored in the object model for our person records vocab)HY(u)HY(lary)YH(. - The follow)HY(ing)YH( appli)HY(ca)HY(tion)YH( accesses and prints the contents - of the )SM(people.xml)ES( file:)EP( - - ) 36 70 PR(#include -#include "people.hxx" - -using namespace std; - -int -main \201\202 -{ - auto_ptr ppl \201people \201"people.xml"\202\202; - - // Iterate over individual person records. - // - people_t::person_sequence& ps \201ppl->person \201\202\202; - - for \201people_t::person_iterator i \201ps.begin \201\202\202; i != ps.end \201\202; ++i\202 - { - person_t& p \201*i\202; - - // Print names: first-name and last-name are required elements, - // middle-name is optional. - // - cout << "name: " << p.first_name \201\202 << " "; - - if \201p.middle_name \201\202.present \201\202\202 - cout << p.middle_name \201\202.get \201\202 << " "; - - cout << p.last_name \201\202 << endl; - - // Print gender, age, and id which are all required. - // - cout << "gender: " << p.gender \201\202 << endl)WR( - << "age: " << p.age \201\202 << endl - << "id: " << p.id \201\202 << endl - << endl; - } -})RP( - - )0 P(This code shows common patterns of access)HY(ing)YH( elements and attributes - with differ)HY(ent)YH( cardi)HY(nal)HY(ity)YH( classes. For the sequence element - \201)SM(person)ES( in )SM(people_t)ES(\202 we first obtain a - refer)HY(ence)YH( to the container and then iterate over indi)HY(vid)HY(ual)YH( - records. The values of elements and attributes with the - )EM(one)ES( cardi)HY(nal)HY(ity)YH( class \201)SM(first-name)ES(, - )SM(last-name)ES(, )SM(gender)ES(, )SM(age)ES(, - and )SM(id)ES(\202 can be obtained directly by calling the - corre)HY(spond)HY(ing)YH( acces)HY(sor)YH( func)HY(tions)YH(. For the optional element - )SM(middle-name)ES( we first check if the value is present - and only then call )SM(get\201\202)ES( to retrieve it.)EP( - - )0 P(Note that when we want to reduce typing by creat)HY(ing)YH( a vari)HY(able)YH( - repre)HY(sent)HY(ing)YH( a frag)HY(ment)YH( of the object model that we are currently - working with \201)SM(ps)ES( and )SM(p)ES( above\202, we obtain - a refer)HY(ence)YH( to that frag)HY(ment)YH( instead of making a poten)HY(tially)YH( - expen)HY(sive)YH( copy. This is gener)HY(ally)YH( a good rule to follow when - creat)HY(ing)YH( high-perfor)HY(mance)YH( appli)HY(ca)HY(tions)YH(.)EP( - - )0 P(If we run the above appli)HY(ca)HY(tion)YH( on our sample - )SM(people.xml)ES(, the output looks as follows:)EP( - - ) 9 21 PR(name: John Doe -gender: male -age: 32 -id: 1 - -name: Jane Mary Doe -gender: female -age: 28 -id: 2)RP( - - - )0 2 22 H(4.3)WB 57 Sn()WB 25 Sn( Modi)HY(fy)HY(ing)YH( the Object Model)EA()EH( - - )0 P(In this section we will learn how to modify the infor)HY(ma)HY(tion)YH( - stored in the object model for our person records vocab)HY(u)HY(lary)YH(. - The follow)HY(ing)YH( appli)HY(ca)HY(tion)YH( changes the contents of the - )SM(people.xml)ES( file:)EP( - - ) 43 70 PR(#include -#include "people.hxx" - -using namespace std; - -int -main \201\202 -{ - auto_ptr ppl \201people \201"people.xml"\202\202; - - // Iterate over individual person records and increment - // the age. - // - people_t::person_sequence& ps \201ppl->person \201\202\202; - - for \201people_t::person_iterator i \201ps.begin \201\202\202; i != ps.end \201\202; ++i\202 - { - // Alternative way: i->age \201\202++; - // - i->age \201i->age \201\202 + 1\202; - } - - // Add middle-name to the first record and remove it from - // the second. - // - person_t& john \201ps[0]\202; - person_t& jane \201ps[1]\202; - - john.middle_name \201"Mary"\202; - jane.middle_name \201\202.reset \201\202; -)WR( - // Add another John record. - // - ps.push_back \201john\202; - - // Serialize the modified object model to XML. - // - xml_schema::namespace_infomap map; - map[""].name = ""; - map[""].schema = "people.xsd"; - - people \201cout, *ppl, map\202; -})RP( - - )0 P(The first modi)HY(fi)HY(ca)HY(tion)YH( the above appli)HY(ca)HY(tion)YH( performs is iter)HY(at)HY(ing)YH( - over person records and incre)HY(ment)HY(ing)YH( the age value. This code - frag)HY(ment)YH( shows how to modify the value of a required attribute - or element. The next modi)HY(fi)HY(ca)HY(tion)YH( shows how to set a new value - for the optional )SM(middle-name)ES( element as well - as clear its value. Finally the example adds a copy of the - John Doe record to the )SM(person)ES( element sequence.)EP( - - )0 P(Note that in this case using refer)HY(ences)YH( for the )SM(ps)ES(, - )SM(john)ES(, and )SM(jane)ES( vari)HY(ables)YH( is no longer - a perfor)HY(mance)YH( improve)HY(ment)YH( but a require)HY(ment)YH( for the appli)HY(ca)HY(tion)YH( - to func)HY(tion)YH( correctly. If we hadn't used refer)HY(ences)YH(, all our changes - would have been made on copies without affect)HY(ing)YH( the object model.)EP( - - )0 P(If we run the above appli)HY(ca)HY(tion)YH( on our sample )SM(people.xml)ES(, - the output looks as follows:)EP( - - ) 28 61 PR( - - - - John - Mary - Doe - male - 33 - - - - Jane - Doe - female - 29 - - - - John - Mary - Doe - male - 33 - - -)RP( - - - )0 2 23 H(4.4)WB 58 Sn()WB 26 Sn( Creat)HY(ing)YH( the Object Model from Scratch)EA()EH( - - )0 P(In this section we will learn how to create a new object model - for our person records vocab)HY(u)HY(lary)YH(. The follow)HY(ing)YH( appli)HY(ca)HY(tion)YH( - recre)HY(ates)YH( the content of the orig)HY(i)HY(nal)YH( )SM(people.xml)ES( - file:)EP( - - ) 42 48 PR(#include -#include "people.hxx" - -using namespace std; - -int -main \201\202 -{ - people_t ppl; - people_t::person_sequence& ps \201ppl.person \201\202\202; - - // Add the John Doe record. - // - ps.push_back \201 - person_t \201"John", // first-name - "Doe", // last-name - gender_t::male, // gender - 32, // age - 1\202\202; - - // Add the Jane Doe record. - // - ps.push_back \201 - person_t \201"Jane", // first-name - "Doe", // last-name - gender_t::female, // gender - 28, // age - 2\202\202; // id - - // Add middle name to the Jane Doe record. - //)WR( - person_t& jane \201ps.back \201\202\202; - jane.middle_name \201"Mary"\202; - - // Serialize the object model to XML. - // - xml_schema::namespace_infomap map; - map[""].name = ""; - map[""].schema = "people.xsd"; - - people \201cout, ppl, map\202; -})RP( - - )0 P(The only new part in the above appli)HY(ca)HY(tion)YH( is the calls - to the )SM(people_t)ES( and )SM(person_t)ES( - construc)HY(tors)YH(. As a general rule, for each C++ class - XSD gener)HY(ates)YH( a construc)HY(tor)YH( with initial)HY(iz)HY(ers)YH( - for each element and attribute belong)HY(ing)YH( to the )EM(one)ES( - cardi)HY(nal)HY(ity)YH( class. For our vocab)HY(u)HY(lary)YH(, the follow)HY(ing)YH( - construc)HY(tors)YH( are gener)HY(ated)YH(:)EP( - - ) 13 35 PR(class person_t -{ - person_t \201const first_name_type&, - const last_name_type&, - const gender_type&, - const age_type&, - const id_type&\202; -}; - -class people_t -{ - people_t \201\202; -};)RP( - - )0 P(Note also that we set the )SM(middle-name)ES( element - on the Jane Doe record by obtain)HY(ing)YH( a refer)HY(ence)YH( to that record - in the object model and setting the )SM(middle-name)ES( - value on it. This is a general rule that should be followed - in order to obtain the best perfor)HY(mance)YH(: if possi)HY(ble)YH(, - direct modi)HY(fi)HY(ca)HY(tions)YH( to the object model should be preferred - to modi)HY(fi)HY(ca)HY(tions)YH( on tempo)HY(raries)YH( with subse)HY(quent)YH( copying. The - follow)HY(ing)YH( code frag)HY(ment)YH( shows a seman)HY(ti)HY(cally)YH( equiv)HY(a)HY(lent)YH( but - slightly slower version:)EP( - - ) 11 46 PR(// Add the Jane Doe record. -// -person_t jane \201"Jane", // first-name - "Doe", // last-name - gender_t::female, // gender - 28, // age - 2\202; // id - -jane.middle_name \201"Mary"\202; - -ps.push_back \201jane\202;)RP( - - )0 P(We can also go one step further to reduce copying and improve - the perfor)HY(mance)YH( of our appli)HY(ca)HY(tion)YH( by using the non-copying - )SM(push_back\201\202)ES( func)HY(tion)YH( which assumes owner)HY(ship)YH( - of the passed objects:)EP( - - ) 19 47 PR(// Add the John Doe record. -// -auto_ptr john_p \201 - new person_t \201"John", // first-name - "Doe", // last-name - gender_t::male, // gender - 32, // age - 1\202\202; -ps.push_back \201john_p\202; // assumes ownership - -// Add the Jane Doe record. -// -auto_ptr jane_p \201 - new person_t \201"Jane", // first-name - "Doe", // last-name - gender_t::female, // gender - 28, // age - 2\202\202; // id -ps.push_back \201jane_p\202; // assumes ownership)RP( - - )0 P(For more infor)HY(ma)HY(tion)YH( on the non-copying modi)HY(fier)YH( func)HY(tions)YH( refer to - )R12 2 A(Section - 2.8, "Mapping for Local Elements and Attributes")EA( in the C++/Tree Mapping - User Manual. The above appli)HY(ca)HY(tion)YH( produces the follow)HY(ing)YH( output:)EP( - - ) 20 61 PR( - - - - John - Doe - male - 32 - - - - Jane - Mary - Doe - female - 28 - - -)RP( - - )0 2 24 H(4.5)WB 59 Sn()WB 27 Sn( Mapping for the Built-in XML Schema Types)EA()EH( - - )0 P(Our person record vocab)HY(u)HY(lary)YH( uses several built-in XML Schema - types: )SM(string)ES(, )SM(short)ES(, and - )SM(unsignedInt)ES(. Until now we haven't talked about - the mapping of built-in XML Schema types to C++ types and how - to work with them. This section provides an overview - of the built-in types. For more detailed infor)HY(ma)HY(tion)YH( refer - to )R13 2 A(Section - 2.5, "Mapping for Built-in Data Types")EA( in the C++/Tree Mapping - User Manual.)EP( - - )0 P(In XML Schema, built-in types are defined in the XML Schema names)HY(pace)YH(. - By default, the C++/Tree mapping maps this names)HY(pace)YH( to C++ - names)HY(pace)YH( )SM(xml_schema)ES( \201this mapping can be altered - with the )SM(--names)HY(pace)YH(-map)ES( option\202. The follow)HY(ing)YH( table - summa)HY(rizes)YH( the mapping of XML Schema built-in types to C++ types:)EP( - - - )0 PT( - - )0 P(As you can see from the table above a number of built-in - XML Schema types are mapped to funda)HY(men)HY(tal)YH( C++ types such - as )SM(int)ES( or )SM(bool)ES(. All string-based - XML Schema types are mapped to C++ types that are derived - from either )SM(std::string)ES( or - )SM(std::wstring)ES(, depend)HY(ing)YH( on the char)HY(ac)HY(ter)YH( - type selected. For access and modi)HY(fi)HY(ca)HY(tion)YH( purposes these - types can be treated as )SM(std::string)ES(. A number - of built-in types, such as )SM(qname)ES(, the binary - types, and the date/time types do not have suit)HY(able)YH( - funda)HY(men)HY(tal)YH( or stan)HY(dard)YH( C++ types to map to. As a result, - these types are imple)HY(mented)YH( from scratch in the XSD runtime. - For more infor)HY(ma)HY(tion)YH( on their inter)HY(faces)YH( refer to - )R13 2 A(Section - 2.5, "Mapping for Built-in Data Types")EA( in the C++/Tree Mapping - User Manual.)EP( - - - - - - )0 1 25 H(5)WB 60 Sn()WB 29 Sn( Parsing)EA()EH( - - )0 P(We have already seen how to parse XML to an object model in this guide - before. In this chapter we will discuss the parsing topic in more - detail.)EP( - - )0 P(By default, the C++/Tree mapping provides a total of 14 over)HY(loaded)YH( - parsing func)HY(tions)YH(. They differ in the input methods used to - read XML as well as the error report)HY(ing)YH( mech)HY(a)HY(nisms)YH(. It is also possi)HY(ble)YH( - to gener)HY(ate)YH( types for root elements instead of parsing and seri)HY(al)HY(iza)HY(tion)YH( - func)HY(tions)YH(. This may be useful if your XML vocab)HY(u)HY(lary)YH( has multi)HY(ple)YH( - root elements. For more infor)HY(ma)HY(tion)YH( on element types refer to - )R14 2 A(Section - 2.9, "Mapping for Global Elements")EA( in the C++/Tree Mapping User - Manual.)EP( - - - )0 P(In this section we will discuss the most commonly used versions of - the parsing func)HY(tions)YH(. For a compre)HY(hen)HY(sive)YH( descrip)HY(tion)YH( of parsing - refer to )R15 2 A(Chapter - 3, "Parsing")EA( in the C++/Tree Mapping User Manual. For the )SM(people)ES( - global element from our person record vocab)HY(u)HY(lary)YH(, we will concen)HY(trate)YH( - on the follow)HY(ing)YH( three parsing func)HY(tions)YH(:)EP( - - ) 15 71 PR(std::auto_ptr -people \201const std::string& uri, - xml_schema::flags f = 0, - const xml_schema::properties& p = xml_schema::properties \201\202\202; - -std::auto_ptr -people \201std::istream& is, - xml_schema::flags f = 0, - const xml_schema::properties& p = xml_schema::properties \201\202\202; - -std::auto_ptr -people \201std::istream& is, - const std::string& resource_id, - xml_schema::flags f = 0, - const xml_schema::properties& p = ::xml_schema::properties \201\202\202;)RP( - - )0 P(The first func)HY(tion)YH( parses a local file or a URI. We have already - used this parsing func)HY(tion)YH( in the previ)HY(ous)YH( chap)HY(ters)YH(. The second - and third func)HY(tions)YH( read XML from a stan)HY(dard)YH( input stream. The - last func)HY(tion)YH( also requires a resource id. This id is used to - iden)HY(tify)YH( the XML docu)HY(ment)YH( being parser in diag)HY(nos)HY(tics)YH( messages - as well as to resolve rela)HY(tive)YH( paths to other docu)HY(ments)YH( \201for example, - schemas\202 that might be refer)HY(enced)YH( from the XML docu)HY(ment)YH(.)EP( - - )0 P(The last two argu)HY(ments)YH( to all three parsing func)HY(tions)YH( are parsing - flags and prop)HY(er)HY(ties)YH(. The flags argu)HY(ment)YH( provides a number of ways - to fine-tune the parsing process. The prop)HY(er)HY(ties)YH( argu)HY(ment)YH( allows - to pass addi)HY(tional)YH( infor)HY(ma)HY(tion)YH( to the parsing func)HY(tions)YH(. We will - use these two argu)HY(ments)YH( in )0 30 1 A(Section 5.1, "XML Schema - Vali)HY(da)HY(tion)YH( and Search)HY(ing)YH(")30 0 TN TL()Ec /AF f D( below. The follow)HY(ing)YH( example shows - how we can use the above parsing func)HY(tions)YH(:)EP( - - ) 17 65 PR(using std::auto_ptr; - -// Parse a local file or URI. -// -auto_ptr p1 \201people \201"people.xml"\202\202; -auto_ptr p2 \201people \201"http://example.com/people.xml"\202\202; - -// Parse a local file via ifstream. -// -std::ifstream ifs \201"people.xml"\202; -auto_ptr p3 \201people \201ifs, "people.xml"\202\202; - -// Parse an XML string. -// -std::string str \201"..."\202; // XML in a string. -std::istringstream iss \201str\202; -auto_ptr p4 \201people \201iss\202\202;)RP( - - - )0 2 26 H(5.1)WB 61 Sn()WB 30 Sn( XML Schema Vali)HY(da)HY(tion)YH( and Search)HY(ing)YH()EA()EH( - - )0 P(The C++/Tree mapping relies on the under)HY(ly)HY(ing)YH( Xerces-C++ XML - parser for full XML docu)HY(ment)YH( vali)HY(da)HY(tion)YH(. The XML Schema - vali)HY(da)HY(tion)YH( is enabled by default and can be disabled by - passing the )SM(xml_schema::flags::dont_vali)HY(date)YH()ES( - flag to the parsing func)HY(tions)YH(, for example:)EP( - - ) 2 59 PR(auto_ptr p \201 - people \201"people.xml", xml_schema::flags::dont_validate\202\202;)RP( - - )0 P(Even when XML Schema vali)HY(da)HY(tion)YH( is disabled, the gener)HY(ated)YH( - code still performs a number of checks to prevent - construc)HY(tion)YH( of an incon)HY(sis)HY(tent)YH( object model \201for example, an - object model with missing required attributes or elements\202.)EP( - - )0 P(When XML Schema vali)HY(da)HY(tion)YH( is enabled, the XML parser needs - to locate a schema to vali)HY(date)YH( against. There are several - methods to provide the schema loca)HY(tion)YH( infor)HY(ma)HY(tion)YH( to the - parser. The easiest and most commonly used method is to - specify schema loca)HY(tions)YH( in the XML docu)HY(ment)YH( itself - with the )SM(schemaLo)HY(ca)HY(tion)YH()ES( or - )SM(noNames)HY(paceSchemaLo)HY(ca)HY(tion)YH()ES( attributes, for example:)EP( - - ) 4 74 PR( -)RP( - - )0 P(As you might have noticed, we used this method in all the sample XML - docu)HY(ments)YH( presented in this guide up until now. Note that the - schema loca)HY(tions)YH( spec)HY(i)HY(fied)YH( with these two attributes are rela)HY(tive)YH( - to the docu)HY(ment)YH('s path unless they are abso)HY(lute)YH( URIs \201that is - start with )SM(http://)ES(, )SM(file://)ES(, etc.\202. - In partic)HY(u)HY(lar)YH(, if you specify just file names as your schema - loca)HY(tions)YH(, as we did above, then the schemas should reside in - the same direc)HY(tory)YH( as the XML docu)HY(ment)YH( itself.)EP( - - )0 P(Another method of provid)HY(ing)YH( the schema loca)HY(tion)YH( infor)HY(ma)HY(tion)YH( - is via the )SM(xml_schema::prop)HY(er)HY(ties)YH()ES( argu)HY(ment)YH(, as - shown in the follow)HY(ing)YH( example:)EP( - - ) 5 74 PR(xml_schema::properties props; -props.no_namespace_schema_location \201"people.xsd"\202; -props.schema_location \201"http://www.w3.org/XML/1998/namespace", "xml.xsd"\202; - -auto_ptr p \201people \201"people.xml", 0, props\202\202;)RP( - - )0 P(The schema loca)HY(tions)YH( provided with this method over)HY(rides)YH( - those spec)HY(i)HY(fied)YH( in the XML docu)HY(ment)YH(. As with the previ)HY(ous)YH( - method, the schema loca)HY(tions)YH( spec)HY(i)HY(fied)YH( this way are - rela)HY(tive)YH( to the docu)HY(ment)YH('s path unless they are abso)HY(lute)YH( URIs. - In partic)HY(u)HY(lar)YH(, if you want to use local schemas that are - not related to the docu)HY(ment)YH( being parsed, then you will - need to use the )SM(file://)ES( URI. The follow)HY(ing)YH( - example shows how to use schemas that reside in the current - working direc)HY(tory)YH(:)EP( - - ) 19 55 PR(#include // getcwd -#include // PATH_MAX - -char cwd[PATH_MAX]; -if \201getcwd \201cwd, PATH_MAX\202 == 0\202 -{ - // Buffer too small? -} - -xml_schema::properties props; - -props.no_namespace_schema_location \201 - "file:///" + std::string \201cwd\202 + "people.xsd"\202; - -props.schema_location \201 - "http://www.w3.org/XML/1998/namespace", - "file:///" + std::string \201cwd\202 + "xml.xsd"\202; - -auto_ptr p \201people \201"people.xml", 0, props\202\202;)RP( - - )0 P(A third method is the most useful if you are plan)HY(ning)YH( to parse - several XML docu)HY(ments)YH( of the same vocab)HY(u)HY(lary)YH(. In that case - it may be bene)HY(fi)HY(cial)YH( to pre-parse and cache the schemas in - the XML parser which can then be used to parse all docu)HY(ments)YH( - without re-parsing the schemas. For more infor)HY(ma)HY(tion)YH( on - this method refer to the )SM(caching)ES( example in the - )SM(exam)HY(ples)YH(/cxx/tree/)ES( direc)HY(tory)YH( of the XSD - distri)HY(bu)HY(tion)YH(. It is also possi)HY(ble)YH( to convert the schemas into - a pre-compiled binary repre)HY(sen)HY(ta)HY(tion)YH( and embed this repre)HY(sen)HY(ta)HY(tion)YH( - directly into the appli)HY(ca)HY(tion)YH( executable. With this approach your - appli)HY(ca)HY(tion)YH( can perform XML Schema vali)HY(da)HY(tion)YH( without depend)HY(ing)YH( on - any exter)HY(nal)YH( schema files. For more infor)HY(ma)HY(tion)YH( on how to achieve - this refer to the )SM(embed)HY(ded)YH()ES( example in the - )SM(exam)HY(ples)YH(/cxx/tree/)ES( direc)HY(tory)YH( of the XSD distri)HY(bu)HY(tion)YH(.)EP( - - )0 P(When the XML parser cannot locate a schema for the - XML docu)HY(ment)YH(, the vali)HY(da)HY(tion)YH( fails and XML docu)HY(ment)YH( - elements and attributes for which schema defi)HY(ni)HY(tions)YH( could - not be located are reported in the diag)HY(nos)HY(tics)YH(. For - example, if we remove the )SM(noNames)HY(paceSchemaLo)HY(ca)HY(tion)YH()ES( - attribute in )SM(people.xml)ES( from the previ)HY(ous)YH( chapter, - then we will get the follow)HY(ing)YH( diag)HY(nos)HY(tics)YH( if we try to parse - this file with vali)HY(da)HY(tion)YH( enabled:)EP( - - ) 8 74 PR(people.xml:2:63 error: no declaration found for element 'people' -people.xml:4:18 error: no declaration found for element 'person' -people.xml:4:18 error: attribute 'id' is not declared for element 'person' -people.xml:5:17 error: no declaration found for element 'first-name' -people.xml:6:18 error: no declaration found for element 'middle-name' -people.xml:7:16 error: no declaration found for element 'last-name' -people.xml:8:13 error: no declaration found for element 'gender' -people.xml:9:10 error: no declaration found for element 'age')RP( - - )0 2 27 H(5.2)WB 62 Sn()WB 31 Sn( Error Handling)EA()EH( - - )0 P(The parsing func)HY(tions)YH( offer a number of ways to handle error condi)HY(tions)YH( - with the C++ excep)HY(tions)YH( being the most commonly used mech)HY(a)HY(nism)YH(. All - C++/Tree excep)HY(tions)YH( derive from common base )SM(xml_schema::excep)HY(tion)YH()ES( - which in turn derives from )SM(std::excep)HY(tion)YH()ES(. The easiest - way to uniformly handle all possi)HY(ble)YH( C++/Tree excep)HY(tions)YH( and print - detailed infor)HY(ma)HY(tion)YH( about the error is to catch and print - )SM(xml_schema::excep)HY(tion)YH()ES(, as shown in the follow)HY(ing)YH( - example:)EP( - - ) 8 47 PR(try -{ - auto_ptr p \201people \201"people.xml"\202\202; -} -catch \201const xml_schema::exception& e\202 -{ - cerr << e << endl; -})RP( - - )0 P(Each indi)HY(vid)HY(ual)YH( C++/Tree excep)HY(tion)YH( also allows you to obtain - error details program)HY(mat)HY(i)HY(cally)YH(. For example, the - )SM(xml_schema::parsing)ES( excep)HY(tion)YH( is thrown when - the XML parsing and vali)HY(da)HY(tion)YH( in the under)HY(ly)HY(ing)YH( XML parser - fails. It encap)HY(su)HY(lates)YH( various diag)HY(nos)HY(tics)YH( infor)HY(ma)HY(tion)YH( - such as the file name, line and column numbers, as well as the - error or warning message for each entry. For more infor)HY(ma)HY(tion)YH( - about this and other excep)HY(tions)YH( that can be thrown during - parsing, refer to - )R16 2 A(Section - 3.3, "Error Handling")EA( in the C++/Tree Mapping - User Manual.)EP( - - )0 P(Note that if you are parsing )SM(std::istream)ES( on which - excep)HY(tions)YH( are not enabled, then you will need to check the - stream state after the call to the parsing func)HY(tion)YH( in order - to detect any possi)HY(ble)YH( stream fail)HY(ures)YH(, for example:)EP( - - ) 15 50 PR(std::ifstream ifs \201"people.xml"\202; - -if \201ifs.fail \201\202\202 -{ - cerr << "people.xml: unable to open" << endl; - return 1; -} - -auto_ptr p \201people \201ifs, "people.xml"\202\202; - -if \201ifs.fail \201\202\202 -{ - cerr << "people.xml: read error" << endl; - return 1; -})RP( - - )0 P(The above example can be rewrit)HY(ten)YH( to use excep)HY(tions)YH( as - shown below:)EP( - - ) 13 66 PR(try -{ - std::ifstream ifs; - ifs.exceptions \201std::ifstream::badbit | std::ifstream::failbit\202; - ifs.open \201"people.xml"\202; - - auto_ptr p \201people \201ifs, "people.xml"\202\202; -} -catch \201const std::ifstream::failure&\202 -{ - cerr << "people.xml: unable to open or read error" << endl; - return 1; -})RP( - - - - - - )0 1 28 H(6)WB 63 Sn()WB 32 Sn( Seri)HY(al)HY(iza)HY(tion)YH()EA()EH( - - )0 P(We have already seen how to seri)HY(al)HY(ize)YH( an object model back to XML - in this guide before. In this chapter we will discuss the - seri)HY(al)HY(iza)HY(tion)YH( topic in more detail.)EP( - - )0 P(By default, the C++/Tree mapping provides a total of 8 over)HY(loaded)YH( - seri)HY(al)HY(iza)HY(tion)YH( func)HY(tions)YH(. They differ in the output methods used to write - XML as well as the error report)HY(ing)YH( mech)HY(a)HY(nisms)YH(. It is also possi)HY(ble)YH( to - gener)HY(ate)YH( types for root elements instead of parsing and seri)HY(al)HY(iza)HY(tion)YH( - func)HY(tions)YH(. This may be useful if your XML vocab)HY(u)HY(lary)YH( has multi)HY(ple)YH( - root elements. For more infor)HY(ma)HY(tion)YH( on element types refer to - )R14 2 A(Section - 2.9, "Mapping for Global Elements")EA( in the C++/Tree Mapping User - Manual.)EP( - - - )0 P(In this section we will discuss the most commonly - used version of seri)HY(al)HY(iza)HY(tion)YH( func)HY(tions)YH(. For a compre)HY(hen)HY(sive)YH( descrip)HY(tion)YH( - of seri)HY(al)HY(iza)HY(tion)YH( refer to - )R17 2 A(Chapter - 4, "Seri)HY(al)HY(iza)HY(tion)YH(")EA( in the C++/Tree Mapping User Manual. For the - )SM(people)ES( global element from our person record vocab)HY(u)HY(lary)YH(, - we will concen)HY(trate)YH( on the follow)HY(ing)YH( seri)HY(al)HY(iza)HY(tion)YH( func)HY(tion)YH(:)EP( - - ) 7 50 PR(void -people \201std::ostream& os, - const people_t& x, - const xml_schema::namespace_infomap& map = - xml_schema::namespace_infomap \201\202, - const std::string& encoding = "UTF-8", - xml_schema::flags f = 0\202;)RP( - - )0 P(This func)HY(tion)YH( seri)HY(al)HY(izes)YH( the object model passed as the second - argu)HY(ment)YH( to the stan)HY(dard)YH( output stream passed as the first - argu)HY(ment)YH(. The third argu)HY(ment)YH( is a names)HY(pace)YH( infor)HY(ma)HY(tion)YH( map - which we will discuss in more detail in the next section. - The fourth argu)HY(ment)YH( is a char)HY(ac)HY(ter)YH( encod)HY(ing)YH( that the result)HY(ing)YH( - XML docu)HY(ment)YH( should be in. Possi)HY(ble)YH( valid values for this - argu)HY(ment)YH( are "US-ASCII", "ISO8859-1", "UTF-8", "UTF-16BE", - "UTF-16LE", "UCS-4BE", and "UCS-4LE". Finally, the flags - argu)HY(ment)YH( allows fine-tuning of the seri)HY(al)HY(iza)HY(tion)YH( process. - The follow)HY(ing)YH( example shows how we can use the above seri)HY(al)HY(iza)HY(tion)YH( - func)HY(tion)YH(:)EP( - - ) 19 34 PR(people_t& p = ... - -xml_schema::namespace_infomap map; -map[""].schema = "people.xsd"; - -// Serialize to stdout. -// -people \201std::cout, p, map\202; - -// Serialize to a file. -// -std::ofstream ofs \201"people.xml"\202; -people \201ofs, p, map\202; - -// Serialize to a string. -// -std::ostringstream oss; -people \201oss, p, map\202; -std::string xml \201oss.str \201\202\202;)RP( - - - )0 2 29 H(6.1)WB 64 Sn()WB 33 Sn( Names)HY(pace)YH( and Schema Infor)HY(ma)HY(tion)YH()EA()EH( - - )0 P(While XML seri)HY(al)HY(iza)HY(tion)YH( can be done just from the object - model alone, it is often desir)HY(able)YH( to assign mean)HY(ing)HY(ful)YH( - prefixes to XML names)HY(paces)YH( used in the vocab)HY(u)HY(lary)YH( as - well as to provide the schema loca)HY(tion)YH( infor)HY(ma)HY(tion)YH(. - This is accom)HY(plished)YH( by passing the names)HY(pace)YH( infor)HY(ma)HY(tion)YH( - map to the seri)HY(al)HY(iza)HY(tion)YH( func)HY(tion)YH(. The key in this map is - a names)HY(pace)YH( prefix that should be assigned to an XML names)HY(pace)YH( - spec)HY(i)HY(fied)YH( in the )SM(name)ES( vari)HY(able)YH( of the - map value. You can also assign an optional schema loca)HY(tion)YH( for - this names)HY(pace)YH( in the )SM(schema)ES( vari)HY(able)YH(. Based - on each key-value entry in this map, the seri)HY(al)HY(iza)HY(tion)YH( - func)HY(tion)YH( adds two attributes to the result)HY(ing)YH( XML docu)HY(ment)YH(: - the names)HY(pace)YH(-prefix mapping attribute and schema loca)HY(tion)YH( - attribute. The empty prefix indi)HY(cates)YH( that the names)HY(pace)YH( - should be mapped without a prefix. For example, the follow)HY(ing)YH( - map:)EP( - - ) 7 55 PR(xml_schema::namespace_infomap map; - -map[""].name = "http://www.example.com/example"; -map[""].schema = "example.xsd"; - -map["x"].name = "http://www.w3.org/XML/1998/namespace"; -map["x"].schema = "xml.xsd";)RP( - - )0 P(Results in the follow)HY(ing)YH( XML docu)HY(ment)YH(:)EP( - - ) 7 68 PR( -)RP( - - )0 P(The empty names)HY(pace)YH( indi)HY(cates)YH( that the vocab)HY(u)HY(lary)YH( has no target - names)HY(pace)YH(. For example, the follow)HY(ing)YH( map results in only the - )SM(noNames)HY(paceSchemaLo)HY(ca)HY(tion)YH()ES( attribute being added:)EP( - - ) 4 34 PR(xml_schema::namespace_infomap map; - -map[""].name = ""; -map[""].schema = "example.xsd";)RP( - - )0 2 30 H(6.2)WB 65 Sn()WB 34 Sn( Error Handling)EA()EH( - - )0 P(Similar to the parsing func)HY(tions)YH(, the seri)HY(al)HY(iza)HY(tion)YH( func)HY(tions)YH( offer a - number of ways to handle error condi)HY(tions)YH( with the C++ excep)HY(tions)YH( being - the most commonly used mech)HY(a)HY(nisms)YH(. As with parsing, the easiest way to - uniformly handle all possi)HY(ble)YH( seri)HY(al)HY(iza)HY(tion)YH( excep)HY(tions)YH( and print - detailed infor)HY(ma)HY(tion)YH( about the error is to catch and print - )SM(xml_schema::excep)HY(tion)YH()ES(:)EP( - - ) 13 38 PR(try -{ - people_t& p = ... - - xml_schema::namespace_infomap map; - map[""].schema = "people.xsd"; - - people \201std::cout, p, map\202\202; -} -catch \201const xml_schema::exception& e\202 -{ - cerr << e << endl; -})RP( - - )0 P(The most commonly encoun)HY(tered)YH( seri)HY(al)HY(iza)HY(tion)YH( excep)HY(tion)YH( is - )SM(xml_schema::seri)HY(al)HY(iza)HY(tion)YH()ES(. It is thrown - when the XML seri)HY(al)HY(iza)HY(tion)YH( in the under)HY(ly)HY(ing)YH( XML writer - fails. It encap)HY(su)HY(lates)YH( various diag)HY(nos)HY(tics)YH( infor)HY(ma)HY(tion)YH( - such as the file name, line and column numbers, as well as the - error or warning message for each entry. For more infor)HY(ma)HY(tion)YH( - about this and other excep)HY(tions)YH( that can be thrown during - seri)HY(al)HY(iza)HY(tion)YH(, refer to - )R18 2 A(Section - 4.4, "Error Handling")EA( in the C++/Tree Mapping - User Manual.)EP( - - )0 P(Note that if you are seri)HY(al)HY(iz)HY(ing)YH( to )SM(std::ostream)ES( on - which excep)HY(tions)YH( are not enabled, then you will need to check the - stream state after the call to the seri)HY(al)HY(iza)HY(tion)YH( func)HY(tion)YH( in order - to detect any possi)HY(ble)YH( stream fail)HY(ures)YH(, for example:)EP( - - ) 15 47 PR(std::ofstream ofs \201"people.xml"\202; - -if \201ofs.fail \201\202\202 -{ - cerr << "people.xml: unable to open" << endl; - return 1; -} - -people \201ofs, p, map\202\202; - -if \201ofs.fail \201\202\202 -{ - cerr << "people.xml: write error" << endl; - return 1; -})RP( - - )0 P(The above example can be rewrit)HY(ten)YH( to use excep)HY(tions)YH( as - shown below:)EP( - - ) 13 66 PR(try -{ - std::ofstream ofs; - ofs.exceptions \201std::ofstream::badbit | std::ofstream::failbit\202; - ofs.open \201"people.xml"\202; - - people \201ofs, p, map\202\202; -} -catch \201const std::ofstream::failure&\202 -{ - cerr << "people.xml: unable to open or write error" << endl; - return 1; -})RP( - - )BR( -)BR( - -)WB NL -/TE t D NP TU PM 0 eq and{/Pn () D showpage}if end restore diff --git a/xsd/documentation/cxx/tree/guide/guide.html2ps b/xsd/documentation/cxx/tree/guide/guide.html2ps deleted file mode 100644 index 30a4e3d..0000000 --- a/xsd/documentation/cxx/tree/guide/guide.html2ps +++ /dev/null @@ -1,65 +0,0 @@ -@html2ps { - option { - toc: hb; - colour: 1; - hyphenate: 1; - titlepage: 1; - } - - datefmt: "%B %Y"; - - titlepage { - content: " -
-

C++/Tree Mapping

-

Getting Started Guide

-

 

-

 

-

 

-

 

-

 

-

 

-
-

Copyright © 2005-2010 CODE SYNTHESIS TOOLS CC

- -

Permission is granted to copy, distribute and/or modify this - document under the terms of the - GNU Free - Documentation License, version 1.2; with no Invariant Sections, - no Front-Cover Texts and no Back-Cover Texts. -

- -

This document is available in the following formats: - XHTML, - PDF, and - PostScript.

"; - } - - toc { - indent: 2em; - } - - header { - odd-right: $H; - even-left: $H; - } - - footer { - odd-left: $D; - odd-center: $T; - odd-right: $N; - - even-left: $N; - even-center: $T; - even-right: $D; - } -} - -body { - font-size: 12pt; - text-align: justify; -} - -pre { - font-size: 10pt; -} diff --git a/xsd/documentation/cxx/tree/guide/index.xhtml b/xsd/documentation/cxx/tree/guide/index.xhtml deleted file mode 100644 index 476e7ea..0000000 --- a/xsd/documentation/cxx/tree/guide/index.xhtml +++ /dev/null @@ -1,2690 +0,0 @@ - - - - - - C++/Tree Mapping Getting Started Guide - - - - - - - - - - - - - -
-
- -
- -
-
C++/Tree Mapping
-
Getting Started Guide
- -

Copyright © 2005-2010 CODE SYNTHESIS TOOLS CC

- -

Permission is granted to copy, distribute and/or modify this - document under the terms of the - GNU Free - Documentation License, version 1.2; with no Invariant Sections, - no Front-Cover Texts and no Back-Cover Texts. -

- -

This document is available in the following formats: - XHTML, - PDF, and - PostScript.

- -
- -

Table of Contents

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Preface - - - -
About This Document
More Information
-
1Introduction - - - -
1.1Mapping Overview
1.2Benefits
-
2Hello World Example - - - - - - - - -
2.1Writing XML Document and Schema
2.2Translating Schema to C++
2.3Implementing Application Logic
2.4Compiling and Running
2.5Adding Serialization
2.6Selecting Naming Convention
2.7Generating Documentation
-
3Overall Mapping Configuration - - - - - -
3.1Character Type and Encoding
3.2Support for Polymorphism
3.3Namespace Mapping
3.4Thread Safety
-
4Working with Object Models - - - - - - -
4.1Attribute and Element Cardinalities
4.2Accessing the Object Model
4.3Modifying the Object Model
4.4Creating the Object Model from Scratch
4.5Mapping for the Built-in XML Schema Types
-
5Parsing - - - -
5.1XML Schema Validation and Searching
5.2Error Handling
-
6Serialization - - - -
6.1Namespace and Schema Information
6.2Error Handling
-
-
- -

Preface

- -

About This Document

- -

The goal of this document is to provide you with an understanding of - the C++/Tree programming model and allow you to efficiently evaluate - XSD against your project's technical requirements. As such, this - document is intended for C++ developers and software architects - who are looking for an XML processing solution. For a more in-depth - description of the C++/Tree mapping refer to the - C++/Tree - Mapping User Manual.

- -

Prior experience with XML and C++ is required to understand this - document. Basic understanding of XML Schema is advantageous but - not expected or required. -

- - -

More Information

- -

Beyond this guide, you may also find the following sources of - information useful:

- - - - - -

1 Introduction

- -

Welcome to CodeSynthesis XSD and the C++/Tree mapping. XSD is a - cross-platform W3C XML Schema to C++ data binding compiler. C++/Tree - is a W3C XML Schema to C++ mapping that represents the data stored - in XML as a statically-typed, vocabulary-specific object model. -

- -

1.1 Mapping Overview

- -

Based on a formal description of an XML vocabulary (schema), the - C++/Tree mapping produces a tree-like data structure suitable for - in-memory processing. The core of the mapping consists of C++ - classes that constitute the object model and are derived from - types defined in XML Schema as well as XML parsing and - serialization code.

- -

Besides the core features, C++/Tree provide a number of additional - mapping elements that can be useful in some applications. These - include serialization and extraction to/from formats others than - XML, such as unstructured text (useful for debugging) and binary - representations such as XDR and CDR for high-speed data processing, - integration with XML databases such as Berkeley DB XML, and automatic - documentation generation. The C++/Tree mapping also provides a wide - range of mechanisms for controlling and customizing the generated - code.

- -

A typical application that uses C++/Tree for XML processing usually - performs the following three steps: it first reads (parses) an XML - document to an in-memory object model, it then performs some useful - computations on that object model which may involve modification - of the model, and finally it may write (serialize) the modified - object model back to XML.

- -

The next chapter presents a simple application that performs these - three steps. The following chapters show how to use the C++/Tree - mapping in more detail.

- -

1.2 Benefits

- -

Traditional XML access APIs such as Document Object Model (DOM) - or Simple API for XML (SAX) have a number of drawbacks that - make them less suitable for creating robust and maintainable - XML processing applications. These drawbacks include: -

- -
    -
  • Generic representation of XML in terms of elements, attributes, - and text forces an application developer to write a substantial - amount of bridging code that identifies and transforms pieces - of information encoded in XML to a representation more suitable - for consumption by the application logic.
  • - -
  • String-based flow control defers error detection to runtime. - It also reduces code readability and maintainability.
  • - -
  • Lack of type safety because the data is represented as text.
  • - -
  • Resulting applications are hard to debug, change, and - maintain.
  • -
- -

In contrast, statically-typed, vocabulary-specific object model - produced by the C++/Tree mapping allows you to operate in your - domain terms instead of the generic elements, attributes, and - text. Static typing helps catch errors at compile-time rather - than at run-time. Automatic code generation frees you for more - interesting tasks (such as doing something useful with the - information stored in the XML documents) and minimizes the - effort needed to adapt your applications to changes in the - document structure. To summarize, the C++/Tree object model has - the following key advantages over generic XML access APIs:

- -
    -
  • Ease of use. The generated code hides all the complexity - associated with parsing and serializing XML. This includes navigating - the structure and converting between the text representation and - data types suitable for manipulation by the application - logic.
  • - -
  • Natural representation. The object representation allows - you to access the XML data using your domain vocabulary instead - of generic elements, attributes, and text.
  • - -
  • Concise code. With the object representation the - application implementation is simpler and thus easier - to read and understand.
  • - -
  • Safety. The generated object model is statically - typed and uses functions instead of strings to access the - information. This helps catch programming errors at compile-time - rather than at runtime.
  • - -
  • Maintainability. Automatic code generation minimizes the - effort needed to adapt the application to changes in the - document structure. With static typing, the C++ compiler - can pin-point the places in the client code that need to be - changed.
  • - -
  • Compatibility. Sequences of elements are represented in - the object model as containers conforming to the standard C++ - sequence requirements. This makes it possible to use standard - C++ algorithms on the object representation and frees you from - learning yet another container interface, as is the case with - DOM.
  • - -
  • Efficiency. If the application makes repetitive use - of the data extracted from XML, then the C++/Tree object model - is more efficient because the navigation is performed using - function calls rather than string comparisons and the XML - data is extracted only once. Furthermore, the runtime memory - usage is reduced due to more efficient data storage - (for instance, storing numeric data as integers instead of - strings) as well as the static knowledge of cardinality - constraints.
  • -
- - - - - -

2 Hello World Example

- -

In this chapter we will examine how to parse, access, modify, and - serialize a very simple XML document using the XSD-generated - C++/Tree object model. The code presented in this chapter is - based on the hello example which can be found in - the examples/cxx/tree/ directory of the XSD - distribution.

- -

2.1 Writing XML Document and Schema

- -

First, we need to get an idea about the structure - of the XML documents we are going to process. Our - hello.xml, for example, could look like this:

- -
-<?xml version="1.0"?>
-<hello>
-
-  <greeting>Hello</greeting>
-
-  <name>sun</name>
-  <name>moon</name>
-  <name>world</name>
-
-</hello>
-  
- -

Then we can write a description of the above XML in the - XML Schema language and save it into hello.xsd:

- -
-<?xml version="1.0"?>
-<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
-
-  <xs:complexType name="hello_t">
-    <xs:sequence>
-      <xs:element name="greeting" type="xs:string"/>
-      <xs:element name="name" type="xs:string" maxOccurs="unbounded"/>
-    </xs:sequence>
-  </xs:complexType>
-
-  <xs:element name="hello" type="hello_t"/>
-
-</xs:schema>
-  
- -

Even if you are not familiar with XML Schema, it - should be easy to connect declarations in hello.xsd - to elements in hello.xml. The hello_t type - is defined as a sequence of the nested greeting and - name elements. Note that the term sequence in XML - Schema means that elements should appear in a particular order - as opposed to appearing multiple times. The name - element has its maxOccurs property set to - unbounded which means it can appear multiple times - in an XML document. Finally, the globally-defined hello - element prescribes the root element for our vocabulary. For an - easily-approachable introduction to XML Schema refer to - XML Schema Part 0: - Primer.

- -

The above schema is a specification of our XML vocabulary; it tells - everybody what valid documents of our XML-based language should look - like. We can also update our hello.xml to include the - information about the schema so that XML parsers can validate - our document:

- -
-<?xml version="1.0"?>
-<hello xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-       xsi:noNamespaceSchemaLocation="hello.xsd">
-
-  <greeting>Hello</greeting>
-
-  <name>sun</name>
-  <name>moon</name>
-  <name>world</name>
-
-</hello>
-      
- - -

The next step is to compile the schema to generate the object - model and parsing functions.

- -

2.2 Translating Schema to C++

- -

Now we are ready to translate our hello.xsd to C++. - To do this we invoke the XSD compiler from a terminal (UNIX) or - a command prompt (Windows): -

- -
-$ xsd cxx-tree hello.xsd
-  
- -

The XSD compiler produces two C++ files: hello.hxx and - hello.cxx. The following code fragment is taken from - hello.hxx; it should give you an idea about what gets - generated: -

- -
-class hello_t
-{
-public:
-  // greeting
-  //
-  typedef xml_schema::string greeting_type;
-
-  const greeting_type&
-  greeting () const;
-
-  greeting_type&
-  greeting ();
-
-  void
-  greeting (const greeting_type& x);
-
-  // name
-  //
-  typedef xml_schema::string name_type;
-  typedef xsd::sequence<name_type> name_sequence;
-  typedef name_sequence::iterator name_iterator;
-  typedef name_sequence::const_iterator name_const_iterator;
-
-  const name_sequence&
-  name () const;
-
-  name_sequence&
-  name ();
-
-  void
-  name (const name_sequence& s);
-
-  // Constructor.
-  //
-  hello_t (const greeting_type&);
-
-  ...
-
-};
-
-std::auto_ptr<hello_t>
-hello (const std::string& uri);
-
-std::auto_ptr<hello_t>
-hello (std::istream&);
-  
- -

The hello_t C++ class corresponds to the - hello_t XML Schema type. For each element - in this type a set of C++ type definitions as well as - accessor and modifier functions are generated inside the - hello_t class. Note that the type definitions - and member functions for the greeting and - name elements are different because of the - cardinality differences between these two elements - (greeting is a required single element and - name is a sequence of elements).

- -

The xml_schema::string type used in the type - definitions is a C++ class provided by the XSD runtime - that corresponds to built-in XML Schema type - string. The xml_schema::string - is based on std::string and can be used as - such. Similarly, the sequence class template - that is used in the name_sequence type - definition is based on and has the same interface as - std::vector. The mapping between the built-in - XML Schema types and C++ types is described in more detail in - Section 4.5, "Mapping for the Built-in XML Schema - Types". The hello_t class also includes a - constructor with an initializer for the required - greeting element as its argument.

- -

The hello overloaded global functions correspond - to the hello global element in XML Schema. A - global element in XML Schema is a valid document root. - By default XSD generated a set of parsing functions for each - global element defined in XML Schema (this can be overridden - with the --root-element-* options). For more - information on parsing functions see Chapter 5, - "Parsing".

- -

2.3 Implementing Application Logic

- -

At this point we have all the parts we need to do something useful - with the information stored in our XML document: -

- -
-#include <iostream>
-#include "hello.hxx"
-
-using namespace std;
-
-int
-main (int argc, char* argv[])
-{
-  try
-  {
-    auto_ptr<hello_t> h (hello (argv[1]));
-
-    for (hello_t::name_const_iterator i (h->name ().begin ());
-         i != h->name ().end ();
-         ++i)
-    {
-      cerr << h->greeting () << ", " << *i << "!" << endl;
-    }
-  }
-  catch (const xml_schema::exception& e)
-  {
-    cerr << e << endl;
-    return 1;
-  }
-}
-  
- -

The first part of our application calls one of the parsing - functions to parser an XML file specified in the command line. - We then use the returned object model to iterate over names - and print a greeting line for each of them. Finally, we - catch and print the xml_schema::exception - exception in case something goes wrong. This exception - is the root of the exception hierarchy used by the - XSD-generated code. -

- - -

2.4 Compiling and Running

- -

After saving our application from the previous section in - driver.cxx, we are ready to compile our first - program and run it on the test XML document. On a UNIX - system this can be done with the following commands: -

- -
-$ c++ -I.../libxsd -c driver.cxx hello.cxx
-$ c++ -o driver driver.o hello.o -lxerces-c
-$ ./driver hello.xml
-Hello, sun!
-Hello, moon!
-Hello, world!
-  
- -

Here .../libxsd represents the path to the - libxsd directory in the XSD distribution. - Note also that we are required to link our application - with the Xerces-C++ library because the generated code - uses it as the underlying XML parser.

- -

2.5 Adding Serialization

- -

While parsing and accessing the XML data may be everything - you need, there are applications that require creating new - or modifying existing XML documents. By default XSD does - not produce serialization code. We will need to request - it with the --generate-serialization options:

- -
-$ xsd cxx-tree --generate-serialization hello.xsd
-  
- -

If we now examine the generated hello.hxx file, - we will find a set of overloaded serialization functions, - including the following version:

- -
-void
-hello (std::ostream&,
-       const hello_t&,
-       const xml_schema::namespace_infomap& =
-         xml_schema::namespace_infomap ());
-
-  
- -

Just like with parsing functions, XSD generates serialization - functions for each global element unless instructed otherwise - with one of the --root-element-* options. For more - information on serialization functions see Chapter 6, - "Serialization".

- -

We first examine an application that modifies an existing - object model and serializes it back to XML:

- -
-#include <iostream>
-#include "hello.hxx"
-
-using namespace std;
-
-int
-main (int argc, char* argv[])
-{
-  try
-  {
-    auto_ptr<hello_t> h (hello (argv[1]));
-
-    // Change the greeting phrase.
-    //
-    h->greeting ("Hi");
-
-    // Add another entry to the name sequence.
-    //
-    h->name ().push_back ("mars");
-
-    // Serialize the modified object model to XML.
-    //
-    xml_schema::namespace_infomap map;
-    map[""].name = "";
-    map[""].schema = "hello.xsd";
-
-    hello (cout, *h, map);
-  }
-  catch (const xml_schema::exception& e)
-  {
-    cerr << e << endl;
-    return 1;
-  }
-}
-  
- -

First, our application parses an XML document and obtains its - object model as in the previous example. Then it changes the - greeting string and adds another entry to the list of names. - Finally, it serializes the object model back to XML by calling - the serialization function.

- -

The first argument we pass to the serialization function is - cout which results in the XML being written to - the standard output for us to inspect. We could have also - written the result to a file or memory buffer by creating an - instance of std::ofstream or std::ostringstream - and passing it instead of cout. The second argument is the - object model we want to serialize. The final argument is an optional - namespace information map for our vocabulary. It captures information - such as namespaces, namespace prefixes to which they should be mapped, - and schemas associated with these namespaces. If we don't provide - this argument then generic namespace prefixes (p1, - p2, etc.) will be automatically assigned to XML namespaces - and no schema information will be added to the resulting document - (see Chapter 6, "Serialization" for details). - In our case, the prefix (map key) and namespace name are empty - because our vocabulary does not use XML namespaces.

- -

If we now compile and run this application we will see the - output as shown in the following listing:

- -
-<?xml version="1.0"?>
-<hello xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-       xsi:noNamespaceSchemaLocation="hello.xsd">
-
-  <greeting>Hi</greeting>
-
-  <name>sun</name>
-  <name>moon</name>
-  <name>world</name>
-  <name>mars</name>
-
-</hello>
-  
- -

We can also create and serialize an object model from scratch - as shown in the following example:

- -
-#include <iostream>
-#include <fstream>
-#include "hello.hxx"
-
-using namespace std;
-
-int
-main (int argc, char* argv[])
-{
-  try
-  {
-    hello_t h ("Hi");
-
-    hello_t::name_sequence& ns (h.name ());
-
-    ns.push_back ("Jane");
-    ns.push_back ("John");
-
-    // Serialize the object model to XML.
-    //
-    xml_schema::namespace_infomap map;
-    map[""].name = "";
-    map[""].schema = "hello.xsd";
-
-    std::ofstream ofs (argv[1]);
-    hello (ofs, h, map);
-  }
-  catch (const xml_schema::exception& e)
-  {
-    cerr << e << endl;
-    return 1;
-  }
-}
-  
- -

In this example we used the generated constructor to create - an instance of type hello_t. To reduce typing, - we obtained a reference to the name sequence which we then - used to add a few names. The serialization part is identical - to the previous example except this time we are writing to - a file. If we compile and run this program, it produces the - following XML file:

- -
-<?xml version="1.0"?>
-<hello xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-       xsi:noNamespaceSchemaLocation="hello.xsd">
-
-  <greeting>Hi</greeting>
-
-  <name>Jane</name>
-  <name>John</name>
-
-</hello>
-  
- -

2.6 Selecting Naming Convention

- -

By default XSD uses the so-called K&R (Kernighan and Ritchie) - identifier naming convention in the generated code. In this - convention both type and function names are in lower case and - words are separated by underscores. If your application code or - schemas use a different notation, you may want to change the - naming convention used in the generated code for consistency. - XSD supports a set of widely-used naming conventions - that you can select with the --type-naming and - --function-naming options. You can also further - refine one of the predefined conventions or create a completely - custom naming scheme by using the --*-regex options.

- -

As an example, let's assume that our "Hello World" application - uses the so-called upper-camel-case naming convention for types - (that is, each word in a type name is capitalized) and the K&R - convention for function names. Since K&R is the default - convention for both type and function names, we only need to - change the type naming scheme:

- -
-$ xsd cxx-tree --type-naming ucc hello.xsd
-  
- -

The ucc argument to the --type-naming - options stands for upper-camel-case. If we now examine the - generated hello.hxx, we will see the following - changes compared to the declarations shown in the previous - sections:

- -
-class Hello_t
-{
-public:
-  // greeting
-  //
-  typedef xml_schema::String GreetingType;
-
-  const GreetingType&
-  greeting () const;
-
-  GreetingType&
-  greeting ();
-
-  void
-  greeting (const GreetingType& x);
-
-  // name
-  //
-  typedef xml_schema::String NameType;
-  typedef xsd::sequence<NameType> NameSequence;
-  typedef NameSequence::iterator NameIterator;
-  typedef NameSequence::const_iterator NameConstIterator;
-
-  const NameSequence&
-  name () const;
-
-  NameSequence&
-  name ();
-
-  void
-  name (const NameSequence& s);
-
-  // Constructor.
-  //
-  Hello_t (const GreetingType&);
-
-  ...
-
-};
-
-std::auto_ptr<Hello_t>
-hello (const std::string& uri);
-
-std::auto_ptr<Hello_t>
-hello (std::istream&);
-  
- -

Notice that the type names in the xml_schema namespace, - for example xml_schema::String, now also use the - upper-camel-case naming convention. The only thing that we may - be unhappy about in the above code is the _t - suffix in Hello_t. If we are not in a position - to change the schema, we can touch-up the ucc - convention with a custom translation rule using the - --type-regex option:

- -
-$ xsd cxx-tree --type-naming ucc --type-regex '/ (.+)_t/\u$1/' hello.xsd
-  
- -

This results in the following changes to the generated code:

- -
-class Hello
-{
-public:
-  // greeting
-  //
-  typedef xml_schema::String GreetingType;
-
-  const GreetingType&
-  greeting () const;
-
-  GreetingType&
-  greeting ();
-
-  void
-  greeting (const GreetingType& x);
-
-  // name
-  //
-  typedef xml_schema::String NameType;
-  typedef xsd::sequence<NameType> NameSequence;
-  typedef NameSequence::iterator NameIterator;
-  typedef NameSequence::const_iterator NameConstIterator;
-
-  const NameSequence&
-  name () const;
-
-  NameSequence&
-  name ();
-
-  void
-  name (const NameSequence& s);
-
-  // Constructor.
-  //
-  Hello (const GreetingType&);
-
-  ...
-
-};
-
-std::auto_ptr<Hello>
-hello (const std::string& uri);
-
-std::auto_ptr<Hello>
-hello (std::istream&);
-  
- -

For more detailed information on the --type-naming, - --function-naming, --type-regex, and - other --*-regex options refer to the NAMING - CONVENTION section in the XSD - Compiler Command Line Manual.

- -

2.7 Generating Documentation

- -

While our object model is quite simple, real-world vocabularies - can be quite complex with hundreds of types, elements, and - attributes. For such vocabularies figuring out which types - provide which member functions by studying the generated - source code or schemas can be a daunting task. To provide - application developers with a more accessible way of - understanding the generated object models, the XSD compiler - can be instructed to produce source code with documentation - comments in the Doxygen format. Then the source code can be - processed with the Doxygen - documentation system to extract this information and produce - documentation in various formats. -

- -

In this section we will see how to generate documentation - for our "Hello World" vocabulary. To showcase the full power - of the XSD documentation facilities, we will first document - our schema. The XSD compiler will then transfer - this information from the schema to the generated code and - then to the object model documentation. Note that the - documentation in the schema is not required for XSD to - generate useful documentation. Below you will find - our hello.xsd with added documentation:

- -
-<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
-
-  <xs:complexType name="hello_t">
-
-    <xs:annotation>
-      <xs:documentation>
-        The hello_t type consists of a greeting phrase and a
-        collection of names to which this greeting applies.
-      </xs:documentation>
-    </xs:annotation>
-
-    <xs:sequence>
-
-      <xs:element name="greeting" type="xs:string">
-        <xs:annotation>
-          <xs:documentation>
-            The greeting element contains the greeting phrase
-            for this hello object.
-          </xs:documentation>
-        </xs:annotation>
-      </xs:element>
-
-      <xs:element name="name" type="xs:string" maxOccurs="unbounded">
-        <xs:annotation>
-          <xs:documentation>
-            The name elements contains names to be greeted.
-          </xs:documentation>
-        </xs:annotation>
-      </xs:element>
-
-    </xs:sequence>
-  </xs:complexType>
-
-  <xs:element name="hello" type="hello_t">
-    <xs:annotation>
-      <xs:documentation>
-        The hello element is a root of the Hello XML vocabulary.
-        Every conforming document should start with this element.
-      </xs:documentation>
-    </xs:annotation>
-  </xs:element>
-
-</xs:schema>
-  
- -

The first step in obtaining the documentation is to recompile - our schema with the --generate-doxygen option:

- -
-$ xsd cxx-tree --generate-serialization --generate-doxygen hello.xsd
-  
- -

Now the generated hello.hxx file contains comments - in the Doxygen format. The next step is to process this file - with the Doxygen documentation system. If your project does - not use Doxygen then you first need to create a configuration - file for your project:

- -
-$ doxygen -g hello.doxygen
-  
- -

You only need to perform this step once. Now we can generate - the documentation by executing the following command in the - directory with the generated source code:

- -
-$ doxygen hello.doxygen
-  
- -

While the generated documentation can be useful as is, we can - go one step further and link (using the Doxygen tags mechanism) - the documentation for our object model with the documentation - for the XSD runtime library which defines C++ classes for the - built-in XML Schema types. This way we can seamlessly browse - between documentation for the hello_t class which - is generated by the XSD compiler and the xml_schema::string - class which is defined in the XSD runtime library. The Doxygen - configuration file for the XSD runtime is provided with the XSD - distribution.

- -

You can view the result of the steps described in this section - on the Hello - Example Documentation page.

- - - - -

3 Overall Mapping Configuration

- -

The C++/Tree mapping has a number of configuration parameters that - determine the overall properties and behavior of the generated code. - Configuration parameters are specified with the XSD command line - options. This chapter describes configuration aspects that are most - commonly encountered by application developers. These include: - the character type that is used by the generated code, handling of - vocabularies that use XML Schema polymorphism, XML Schema to C++ - namespace mapping, and thread safety. For more ways to configure - the generated code refer to the - XSD - Compiler Command Line Manual. -

- -

3.1 Character Type and Encoding

- -

The C++/Tree mapping has built-in support for two character types: - char and wchar_t. You can select the - character type with the --char-type command line - option. The default character type is char. The - character type affects all string and string-based types that - are used in the mapping. These include the string-based built-in - XML Schema types, exception types, stream types, etc.

- -

Another aspect of the mapping that depends on the character type - is character encoding. For the char character type - the default encoding is UTF-8. Other supported encodings are - ISO-8859-1, Xerces-C++ Local Code Page (LPC), as well as - custom encodings. You can select which encoding should be used - in the object model with the --char-encoding command - line option.

- -

For the wchar_t character type the encoding is - automatically selected between UTF-16 and UTF-32/UCS-4 depending - on the size of the wchar_t type. On some platforms - (for example, Windows with Visual C++ and AIX with IBM XL C++) - wchar_t is 2 bytes long. For these platforms the - encoding is UTF-16. On other platforms wchar_t is 4 bytes - long and UTF-32/UCS-4 is used.

- -

Note also that the character encoding that is used in the object model - is independent of the encodings used in input and output XML. In fact, - all three (object mode, input XML, and output XML) can have different - encodings.

- -

3.2 Support for Polymorphism

- -

By default XSD generates non-polymorphic code. If your vocabulary - uses XML Schema polymorphism in the form of xsi:type - and/or substitution groups, then you will need to compile - your schemas with the --generate-polymorphic option - to produce polymorphism-aware code. For more information on - working with polymorphic object models, refer to - Section 2.11, - "Mapping for xsi:type and Substitution Groups" in - the C++/Tree Mapping User Manual.

- -

3.3 Namespace Mapping

- -

XSD maps XML namespaces specified in the targetNamespace - attribute in XML Schema to one or more nested C++ namespaces. By - default, a namespace URI is mapped to a sequence of C++ namespace - names by removing the protocol and host parts and splitting the - rest into a sequence of names with '/' as the name - separator.

- -

The default mapping of namespace URIs to C++ namespaces - can be altered using the --namespace-map and - --namespace-regex compiler options. For example, - to map namespace URI http://www.codesynthesis.com/my to - C++ namespace cs::my, we can use the following option:

- -
---namespace-map http://www.codesynthesis.com/my=cs::my
-  
- -

A vocabulary without a namespace is mapped to the global scope. This - also can be altered with the above options by using an empty name - for the XML namespace:

- -
---namespace-map =cs
-  
- -

3.4 Thread Safety

- -

XSD-generated code is thread-safe in the sense that you can - use different instantiations of the object model in several - threads concurrently. This is possible due to the generated - code not relying on any writable global variables. If you need - to share the same object between several threads then you will - need to provide some form of synchronization. One approach would - be to use the generated code customization mechanisms to embed - synchronization primitives into the generated C++ classes. For more - information on generated code customization refer to the - C++/Tree - Mapping Customization Guide.

- -

If you also would like to call parsing and/or serialization - functions from several threads potentially concurrently, then - you will need to make sure the Xerces-C++ runtime is initialized - and terminated only once. The easiest way to do this is to - initialize/terminate Xerces-C++ from main() when - there are no threads yet/anymore:

- -
-#include <xercesc/util/PlatformUtils.hpp>
-
-int
-main ()
-{
-  xercesc::XMLPlatformUtils::Initialize ();
-
-  {
-    // Start/terminate threads and parse/serialize here.
-  }
-
-  xercesc::XMLPlatformUtils::Terminate ();
-}
-  
- -

Because you initialize the Xerces-C++ runtime yourself you should - also pass the xml_schema::flags::dont_initialize flag - to parsing and serialization functions. See Chapter 5, - "Parsing" and Chapter 6, "Serialization" for - more information.

- - - - - -

4 Working with Object Models

- -

As we have seen in the previous chapters, the XSD compiler generates - a C++ class for each type defined in XML Schema. Together these classes - constitute an object model for an XML vocabulary. In this chapter we - will take a closer look at different elements that comprise an - object model class as well as how to create, access, and modify - object models.

- -

In this and subsequent chapters we will use the following schema - that describes a collection of person records. We save it in - people.xsd:

- -
-<?xml version="1.0"?>
-<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
-
-  <xs:simpleType name="gender_t">
-    <xs:restriction base="xs:string">
-      <xs:enumeration value="male"/>
-      <xs:enumeration value="female"/>
-    </xs:restriction>
-  </xs:simpleType>
-
-  <xs:complexType name="person_t">
-    <xs:sequence>
-      <xs:element name="first-name" type="xs:string"/>
-      <xs:element name="middle-name" type="xs:string" minOccurs="0"/>
-      <xs:element name="last-name" type="xs:string"/>
-      <xs:element name="gender" type="gender_t"/>
-      <xs:element name="age" type="xs:short"/>
-    </xs:sequence>
-    <xs:attribute name="id" type="xs:unsignedInt" use="required"/>
-  </xs:complexType>
-
-  <xs:complexType name="people_t">
-    <xs:sequence>
-      <xs:element name="person" type="person_t" maxOccurs="unbounded"/>
-    </xs:sequence>
-  </xs:complexType>
-
-  <xs:element name="people" type="people_t"/>
-
-</xs:schema>
-  
- -

A sample XML instance to go along with this schema is saved - in people.xml:

- -
-<?xml version="1.0"?>
-<people xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-        xsi:noNamespaceSchemaLocation="people.xsd">
-
-  <person id="1">
-    <first-name>John</first-name>
-    <last-name>Doe</last-name>
-    <gender>male</gender>
-    <age>32</age>
-  </person>
-
-  <person id="2">
-    <first-name>Jane</first-name>
-    <middle-name>Mary</middle-name>
-    <last-name>Doe</last-name>
-    <gender>female</gender>
-    <age>28</age>
-  </person>
-
-</people>
-  
- -

Compiling people.xsd with the XSD compiler results - in three generated C++ classes: gender_t, - person_t, and people_t. - The gender_t class is modelled after the C++ - enum type. Its definition is presented below:

- -
-class gender_t: public xml_schema::string
-{
-public:
-  enum value
-  {
-    male,
-    female
-  };
-
-  gender_t (value);
-  gender_t (const xml_schema::string&);
-
-  gender_t&
-  operator= (value);
-
-  operator value () const;
-};
-  
- -

The following listing shows how we can use this type:

- -
-gender_t m (gender_t::male);
-gender_t f ("female");
-
-if (m == "female" || f == gender_t::male)
-{
-  ...
-}
-
-switch (m)
-{
-case gender_t::male:
-  {
-    ...
-  }
-case gender_t::female:
-  {
-    ...
-  }
-}
-  
- -

The other two classes will be examined in detail in the subsequent - sections.

- -

4.1 Attribute and Element Cardinalities

- -

As we have seen in the previous chapters, XSD generates a different - set of type definitions and member functions for elements with - different cardinalities. The C++/Tree mapping divides all the possible - element and attribute cardinalities into three cardinality classes: - one, optional, and sequence.

- -

The one cardinality class covers all elements that should - occur exactly once as well as required attributes. In our - example, the first-name, last-name, - gender, and age elements as well as - the id attribute belong to this cardinality class. - The following code fragment shows type definitions as well as the - accessor and modifier functions that are generated for the - gender element in the person_t class:

- -
-class person_t
-{
-  // gender
-  //
-  typedef gender_t gender_type;
-
-  const gender_type&
-  gender () const;
-
-  gender_type&
-  gender ();
-
-  void
-  gender (const gender_type&);
-};
-  
- -

The gender_type type is an alias for the element's type. - The first two accessor functions return read-only (constant) and - read-write references to the element's value, respectively. The - modifier function sets the new value for the element.

- -

The optional cardinality class covers all elements that - can occur zero or one time as well as optional attributes. In our - example, the middle-name element belongs to this - cardinality class. The following code fragment shows the type - definitions as well as the accessor and modifier functions that - are generated for this element in the person_t class:

- -
-class person_t
-{
-  // middle-name
-  //
-  typedef xml_schema::string middle_name_type;
-  typedef xsd::optional<middle_name_type> middle_name_optional;
-
-  const middle_name_optional&
-  middle_name () const;
-
-  middle_name_optional&
-  middle_name ();
-
-  void
-  middle_name (const middle_name_type&);
-
-  void
-  middle_name (const middle_name_optional&);
-};
-  
- -

As with the gender element, middle_name_type - is an alias for the element's type. The middle_name_optional - type is a container for the element's optional value. It can be queried - for the presence of the value using the present() function. - The value itself can be retrieved using the get() - accessor and set using the set() modifier. The container - can be reverted to the value not present state with the call to the - reset() function. The following example shows how we - can use this container:

- -
-person_t::middle_name_optional n ("John");
-
-if (n.preset ())
-{
-  cout << n.get () << endl;
-}
-
-n.set ("Jane");
-n.reset ();
-  
- - -

Unlike the one cardinality class, the accessor functions - for the optional class return read-only (constant) and - read-write references to the container instead of the element's - value directly. The modifier functions set the new value for the - element.

- -

Finally, the sequence cardinality class covers all elements - that can occur more than once. In our example, the - person element in the people_t type - belongs to this cardinality class. The following code fragment shows - the type definitions as well as the accessor and modifier functions - that are generated for this element in the people_t - class:

- -
-class people_t
-{
-  // person
-  //
-  typedef person_t person_type;
-  typedef xsd::sequence<person_type> person_sequence;
-  typedef person_sequence::iterator person_iterator;
-  typedef person_sequence::const_iterator person_const_iterator;
-
-  const person_sequence&
-  person () const;
-
-  person_sequence&
-  person ();
-
-  void
-  person (const person_sequence&);
-};
-  
- -

Identical to the other cardinality classes, person_type - is an alias for the element's type. The person_sequence - type is a sequence container for the element's values. It is based - on and has the same interface as std::vector and - therefore can be used in similar ways. The person_iterator - and person_const_iterator types are read-only - (constant) and read-write iterators for the person_sequence - container.

- -

Similar to the optional cardinality class, the - accessor functions for the sequence class return - read-only (constant) and read-write references to the sequence - container. The modifier functions copies the entries from - the passed sequence.

- -

For complex schemas with many levels of nested compositors - (xs:choice and xs:sequence) it can - be hard to deduce the cardinality class of a particular element. - The generated Doxygen documentation can greatly help with - this task. For each element and attribute the documentation - clearly identifies its cardinality class. Alternatively, you - can study the generated header files to find out the cardinality - class of a particular attribute or element. In the next sections - we will examine how to access and modify information stored in - an object model using accessor and modifier functions described - in this section.

- - -

4.2 Accessing the Object Model

- -

In this section we will learn how to get to the information - stored in the object model for our person records vocabulary. - The following application accesses and prints the contents - of the people.xml file:

- -
-#include <iostream>
-#include "people.hxx"
-
-using namespace std;
-
-int
-main ()
-{
-  auto_ptr<people_t> ppl (people ("people.xml"));
-
-  // Iterate over individual person records.
-  //
-  people_t::person_sequence& ps (ppl->person ());
-
-  for (people_t::person_iterator i (ps.begin ()); i != ps.end (); ++i)
-  {
-    person_t& p (*i);
-
-    // Print names: first-name and last-name are required elements,
-    // middle-name is optional.
-    //
-    cout << "name:   " << p.first_name () << " ";
-
-    if (p.middle_name ().present ())
-      cout << p.middle_name ().get () << " ";
-
-    cout << p.last_name () << endl;
-
-    // Print gender, age, and id which are all required.
-    //
-    cout << "gender: " << p.gender () << endl
-         << "age:    " << p.age () << endl
-         << "id:     " << p.id () << endl
-         << endl;
-  }
-}
-  
- -

This code shows common patterns of accessing elements and attributes - with different cardinality classes. For the sequence element - (person in people_t) we first obtain a - reference to the container and then iterate over individual - records. The values of elements and attributes with the - one cardinality class (first-name, - last-name, gender, age, - and id) can be obtained directly by calling the - corresponding accessor functions. For the optional element - middle-name we first check if the value is present - and only then call get() to retrieve it.

- -

Note that when we want to reduce typing by creating a variable - representing a fragment of the object model that we are currently - working with (ps and p above), we obtain - a reference to that fragment instead of making a potentially - expensive copy. This is generally a good rule to follow when - creating high-performance applications.

- -

If we run the above application on our sample - people.xml, the output looks as follows:

- -
-name:   John Doe
-gender: male
-age:    32
-id:     1
-
-name:   Jane Mary Doe
-gender: female
-age:    28
-id:     2
-  
- - -

4.3 Modifying the Object Model

- -

In this section we will learn how to modify the information - stored in the object model for our person records vocabulary. - The following application changes the contents of the - people.xml file:

- -
-#include <iostream>
-#include "people.hxx"
-
-using namespace std;
-
-int
-main ()
-{
-  auto_ptr<people_t> ppl (people ("people.xml"));
-
-  // Iterate over individual person records and increment
-  // the age.
-  //
-  people_t::person_sequence& ps (ppl->person ());
-
-  for (people_t::person_iterator i (ps.begin ()); i != ps.end (); ++i)
-  {
-    // Alternative way: i->age ()++;
-    //
-    i->age (i->age () + 1);
-  }
-
-  // Add middle-name to the first record and remove it from
-  // the second.
-  //
-  person_t& john (ps[0]);
-  person_t& jane (ps[1]);
-
-  john.middle_name ("Mary");
-  jane.middle_name ().reset ();
-
-  // Add another John record.
-  //
-  ps.push_back (john);
-
-  // Serialize the modified object model to XML.
-  //
-  xml_schema::namespace_infomap map;
-  map[""].name = "";
-  map[""].schema = "people.xsd";
-
-  people (cout, *ppl, map);
-}
-  
- -

The first modification the above application performs is iterating - over person records and incrementing the age value. This code - fragment shows how to modify the value of a required attribute - or element. The next modification shows how to set a new value - for the optional middle-name element as well - as clear its value. Finally the example adds a copy of the - John Doe record to the person element sequence.

- -

Note that in this case using references for the ps, - john, and jane variables is no longer - a performance improvement but a requirement for the application - to function correctly. If we hadn't used references, all our changes - would have been made on copies without affecting the object model.

- -

If we run the above application on our sample people.xml, - the output looks as follows:

- -
-<?xml version="1.0"?>
-<people xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-        xsi:noNamespaceSchemaLocation="people.xsd">
-
-  <person id="1">
-    <first-name>John</first-name>
-    <middle-name>Mary</middle-name>
-    <last-name>Doe</last-name>
-    <gender>male</gender>
-    <age>33</age>
-  </person>
-
-  <person id="2">
-    <first-name>Jane</first-name>
-    <last-name>Doe</last-name>
-    <gender>female</gender>
-    <age>29</age>
-  </person>
-
-  <person id="1">
-    <first-name>John</first-name>
-    <middle-name>Mary</middle-name>
-    <last-name>Doe</last-name>
-    <gender>male</gender>
-    <age>33</age>
-  </person>
-
-</people>
-  
- - -

4.4 Creating the Object Model from Scratch

- -

In this section we will learn how to create a new object model - for our person records vocabulary. The following application - recreates the content of the original people.xml - file:

- -
-#include <iostream>
-#include "people.hxx"
-
-using namespace std;
-
-int
-main ()
-{
-  people_t ppl;
-  people_t::person_sequence& ps (ppl.person ());
-
-  // Add the John Doe record.
-  //
-  ps.push_back (
-    person_t ("John",         // first-name
-              "Doe",          // last-name
-              gender_t::male, // gender
-              32,             // age
-              1));
-
-  // Add the Jane Doe record.
-  //
-  ps.push_back (
-    person_t ("Jane",           // first-name
-              "Doe",            // last-name
-              gender_t::female, // gender
-              28,               // age
-              2));              // id
-
-  // Add middle name to the Jane Doe record.
-  //
-  person_t& jane (ps.back ());
-  jane.middle_name ("Mary");
-
-  // Serialize the object model to XML.
-  //
-  xml_schema::namespace_infomap map;
-  map[""].name = "";
-  map[""].schema = "people.xsd";
-
-  people (cout, ppl, map);
-}
-  
- -

The only new part in the above application is the calls - to the people_t and person_t - constructors. As a general rule, for each C++ class - XSD generates a constructor with initializers - for each element and attribute belonging to the one - cardinality class. For our vocabulary, the following - constructors are generated:

- -
-class person_t
-{
-  person_t (const first_name_type&,
-            const last_name_type&,
-            const gender_type&,
-            const age_type&,
-            const id_type&);
-};
-
-class people_t
-{
-  people_t ();
-};
-  
- -

Note also that we set the middle-name element - on the Jane Doe record by obtaining a reference to that record - in the object model and setting the middle-name - value on it. This is a general rule that should be followed - in order to obtain the best performance: if possible, - direct modifications to the object model should be preferred - to modifications on temporaries with subsequent copying. The - following code fragment shows a semantically equivalent but - slightly slower version:

- -
-// Add the Jane Doe record.
-//
-person_t jane ("Jane",           // first-name
-               "Doe",            // last-name
-               gender_t::female, // gender
-               28,               // age
-               2);               // id
-
-jane.middle_name ("Mary");
-
-ps.push_back (jane);
-  
- -

We can also go one step further to reduce copying and improve - the performance of our application by using the non-copying - push_back() function which assumes ownership - of the passed objects:

- -
-// Add the John Doe record.
-//
-auto_ptr<person_t> john_p (
-  new person_t ("John",           // first-name
-                "Doe",            // last-name
-                gender_t::male,   // gender
-                32,               // age
-                1));
-ps.push_back (john_p); // assumes ownership
-
-// Add the Jane Doe record.
-//
-auto_ptr<person_t> jane_p (
-  new person_t ("Jane",           // first-name
-                "Doe",            // last-name
-                gender_t::female, // gender
-                28,               // age
-                2));              // id
-ps.push_back (jane_p); // assumes ownership
-  
- -

For more information on the non-copying modifier functions refer to - Section - 2.8, "Mapping for Local Elements and Attributes" in the C++/Tree Mapping - User Manual. The above application produces the following output:

- -
-<?xml version="1.0" ?>
-<people xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-        xsi:noNamespaceSchemaLocation="people.xsd">
-
-  <person id="1">
-    <first-name>John</first-name>
-    <last-name>Doe</last-name>
-    <gender>male</gender>
-    <age>32</age>
-  </person>
-
-  <person id="2">
-    <first-name>Jane</first-name>
-    <middle-name>Mary</middle-name>
-    <last-name>Doe</last-name>
-    <gender>female</gender>
-    <age>28</age>
-  </person>
-
-</people>
-  
- -

4.5 Mapping for the Built-in XML Schema Types

- -

Our person record vocabulary uses several built-in XML Schema - types: string, short, and - unsignedInt. Until now we haven't talked about - the mapping of built-in XML Schema types to C++ types and how - to work with them. This section provides an overview - of the built-in types. For more detailed information refer - to Section - 2.5, "Mapping for Built-in Data Types" in the C++/Tree Mapping - User Manual.

- -

In XML Schema, built-in types are defined in the XML Schema namespace. - By default, the C++/Tree mapping maps this namespace to C++ - namespace xml_schema (this mapping can be altered - with the --namespace-map option). The following table - summarizes the mapping of XML Schema built-in types to C++ types:

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
XML Schema typeAlias in the xml_schema namespaceC++ type
fixed-length integral types
bytebytesigned char
unsignedByteunsigned_byteunsigned char
shortshort_short
unsignedShortunsigned_shortunsigned short
intint_int
unsignedIntunsigned_intunsigned int
longlong_long long
unsignedLongunsigned_longunsigned long long
arbitrary-length integral types
integerintegerlong long
nonPositiveIntegernon_positive_integerlong long
nonNegativeIntegernon_negative_integerunsigned long long
positiveIntegerpositive_integerunsigned long long
negativeIntegernegative_integerlong long
boolean types
booleanbooleanbool
fixed-precision floating-point types
floatfloat_float
doubledouble_double
arbitrary-precision floating-point types
decimaldecimaldouble
string types
stringstringtype derived from std::basic_string
normalizedStringnormalized_stringtype derived from string
tokentokentype derived from normalized_string
Namenametype derived from token
NMTOKENnmtokentype derived from token
NMTOKENSnmtokenstype derived from sequence<nmtoken>
NCNamencnametype derived from name
languagelanguagetype derived from token
qualified name
QNameqnamexml_schema::qname
ID/IDREF types
IDidtype derived from ncname
IDREFidreftype derived from ncname
IDREFSidrefstype derived from sequence<idref>
URI types
anyURIuritype derived from std::basic_string
binary types
base64Binarybase64_binaryxml_schema::base64_binary
hexBinaryhex_binaryxml_schema::hex_binary
date/time types
datedatexml_schema::date
dateTimedate_timexml_schema::date_time
durationdurationxml_schema::duration
gDaygdayxml_schema::gday
gMonthgmonthxml_schema::gmonth
gMonthDaygmonth_dayxml_schema::gmonth_day
gYeargyearxml_schema::gyear
gYearMonthgyear_monthxml_schema::gyear_month
timetimexml_schema::time
entity types
ENTITYentitytype derived from name
ENTITIESentitiestype derived from sequence<entity>
- -

As you can see from the table above a number of built-in - XML Schema types are mapped to fundamental C++ types such - as int or bool. All string-based - XML Schema types are mapped to C++ types that are derived - from either std::string or - std::wstring, depending on the character - type selected. For access and modification purposes these - types can be treated as std::string. A number - of built-in types, such as qname, the binary - types, and the date/time types do not have suitable - fundamental or standard C++ types to map to. As a result, - these types are implemented from scratch in the XSD runtime. - For more information on their interfaces refer to - Section - 2.5, "Mapping for Built-in Data Types" in the C++/Tree Mapping - User Manual.

- - - - - -

5 Parsing

- -

We have already seen how to parse XML to an object model in this guide - before. In this chapter we will discuss the parsing topic in more - detail.

- -

By default, the C++/Tree mapping provides a total of 14 overloaded - parsing functions. They differ in the input methods used to - read XML as well as the error reporting mechanisms. It is also possible - to generate types for root elements instead of parsing and serialization - functions. This may be useful if your XML vocabulary has multiple - root elements. For more information on element types refer to - Section - 2.9, "Mapping for Global Elements" in the C++/Tree Mapping User - Manual.

- - -

In this section we will discuss the most commonly used versions of - the parsing functions. For a comprehensive description of parsing - refer to Chapter - 3, "Parsing" in the C++/Tree Mapping User Manual. For the people - global element from our person record vocabulary, we will concentrate - on the following three parsing functions:

- -
-std::auto_ptr<people_t>
-people (const std::string& uri,
-	xml_schema::flags f = 0,
-	const xml_schema::properties& p = xml_schema::properties ());
-
-std::auto_ptr<people_t>
-people (std::istream& is,
-        xml_schema::flags f = 0,
-        const xml_schema::properties& p = xml_schema::properties ());
-
-std::auto_ptr<people_t>
-people (std::istream& is,
-        const std::string& resource_id,
-        xml_schema::flags f = 0,
-        const xml_schema::properties& p = ::xml_schema::properties ());
-  
- -

The first function parses a local file or a URI. We have already - used this parsing function in the previous chapters. The second - and third functions read XML from a standard input stream. The - last function also requires a resource id. This id is used to - identify the XML document being parser in diagnostics messages - as well as to resolve relative paths to other documents (for example, - schemas) that might be referenced from the XML document.

- -

The last two arguments to all three parsing functions are parsing - flags and properties. The flags argument provides a number of ways - to fine-tune the parsing process. The properties argument allows - to pass additional information to the parsing functions. We will - use these two arguments in Section 5.1, "XML Schema - Validation and Searching" below. The following example shows - how we can use the above parsing functions:

- -
-using std::auto_ptr;
-
-// Parse a local file or URI.
-//
-auto_ptr<people_t> p1 (people ("people.xml"));
-auto_ptr<people_t> p2 (people ("http://example.com/people.xml"));
-
-// Parse a local file via ifstream.
-//
-std::ifstream ifs ("people.xml");
-auto_ptr<people_t> p3 (people (ifs, "people.xml"));
-
-// Parse an XML string.
-//
-std::string str ("..."); // XML in a string.
-std::istringstream iss (str);
-auto_ptr<people_t> p4 (people (iss));
-  
- - -

5.1 XML Schema Validation and Searching

- -

The C++/Tree mapping relies on the underlying Xerces-C++ XML - parser for full XML document validation. The XML Schema - validation is enabled by default and can be disabled by - passing the xml_schema::flags::dont_validate - flag to the parsing functions, for example:

- -
-auto_ptr<people_t> p (
-  people ("people.xml", xml_schema::flags::dont_validate));
-  
- -

Even when XML Schema validation is disabled, the generated - code still performs a number of checks to prevent - construction of an inconsistent object model (for example, an - object model with missing required attributes or elements).

- -

When XML Schema validation is enabled, the XML parser needs - to locate a schema to validate against. There are several - methods to provide the schema location information to the - parser. The easiest and most commonly used method is to - specify schema locations in the XML document itself - with the schemaLocation or - noNamespaceSchemaLocation attributes, for example:

- -
-<?xml version="1.0" ?>
-<people xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-        xsi:noNamespaceSchemaLocation="people.xsd"
-        xsi:schemaLocation="http://www.w3.org/XML/1998/namespace xml.xsd">
-  
- -

As you might have noticed, we used this method in all the sample XML - documents presented in this guide up until now. Note that the - schema locations specified with these two attributes are relative - to the document's path unless they are absolute URIs (that is - start with http://, file://, etc.). - In particular, if you specify just file names as your schema - locations, as we did above, then the schemas should reside in - the same directory as the XML document itself.

- -

Another method of providing the schema location information - is via the xml_schema::properties argument, as - shown in the following example:

- -
-xml_schema::properties props;
-props.no_namespace_schema_location ("people.xsd");
-props.schema_location ("http://www.w3.org/XML/1998/namespace", "xml.xsd");
-
-auto_ptr<people_t> p (people ("people.xml", 0, props));
-  
- -

The schema locations provided with this method overrides - those specified in the XML document. As with the previous - method, the schema locations specified this way are - relative to the document's path unless they are absolute URIs. - In particular, if you want to use local schemas that are - not related to the document being parsed, then you will - need to use the file:// URI. The following - example shows how to use schemas that reside in the current - working directory:

- -
-#include <unistd.h> // getcwd
-#include <limits.h> // PATH_MAX
-
-char cwd[PATH_MAX];
-if (getcwd (cwd, PATH_MAX) == 0)
-{
-  // Buffer too small?
-}
-
-xml_schema::properties props;
-
-props.no_namespace_schema_location (
-  "file:///" + std::string (cwd) + "people.xsd");
-
-props.schema_location (
-  "http://www.w3.org/XML/1998/namespace",
-  "file:///" + std::string (cwd) + "xml.xsd");
-
-auto_ptr<people_t> p (people ("people.xml", 0, props));
-  
- -

A third method is the most useful if you are planning to parse - several XML documents of the same vocabulary. In that case - it may be beneficial to pre-parse and cache the schemas in - the XML parser which can then be used to parse all documents - without re-parsing the schemas. For more information on - this method refer to the caching example in the - examples/cxx/tree/ directory of the XSD - distribution. It is also possible to convert the schemas into - a pre-compiled binary representation and embed this representation - directly into the application executable. With this approach your - application can perform XML Schema validation without depending on - any external schema files. For more information on how to achieve - this refer to the embedded example in the - examples/cxx/tree/ directory of the XSD distribution.

- -

When the XML parser cannot locate a schema for the - XML document, the validation fails and XML document - elements and attributes for which schema definitions could - not be located are reported in the diagnostics. For - example, if we remove the noNamespaceSchemaLocation - attribute in people.xml from the previous chapter, - then we will get the following diagnostics if we try to parse - this file with validation enabled:

- -
-people.xml:2:63 error: no declaration found for element 'people'
-people.xml:4:18 error: no declaration found for element 'person'
-people.xml:4:18 error: attribute 'id' is not declared for element 'person'
-people.xml:5:17 error: no declaration found for element 'first-name'
-people.xml:6:18 error: no declaration found for element 'middle-name'
-people.xml:7:16 error: no declaration found for element 'last-name'
-people.xml:8:13 error: no declaration found for element 'gender'
-people.xml:9:10 error: no declaration found for element 'age'
-  
- -

5.2 Error Handling

- -

The parsing functions offer a number of ways to handle error conditions - with the C++ exceptions being the most commonly used mechanism. All - C++/Tree exceptions derive from common base xml_schema::exception - which in turn derives from std::exception. The easiest - way to uniformly handle all possible C++/Tree exceptions and print - detailed information about the error is to catch and print - xml_schema::exception, as shown in the following - example:

- -
-try
-{
-  auto_ptr<people_t> p (people ("people.xml"));
-}
-catch (const xml_schema::exception& e)
-{
-  cerr << e << endl;
-}
-  
- -

Each individual C++/Tree exception also allows you to obtain - error details programmatically. For example, the - xml_schema::parsing exception is thrown when - the XML parsing and validation in the underlying XML parser - fails. It encapsulates various diagnostics information - such as the file name, line and column numbers, as well as the - error or warning message for each entry. For more information - about this and other exceptions that can be thrown during - parsing, refer to - Section - 3.3, "Error Handling" in the C++/Tree Mapping - User Manual.

- -

Note that if you are parsing std::istream on which - exceptions are not enabled, then you will need to check the - stream state after the call to the parsing function in order - to detect any possible stream failures, for example:

- -
-std::ifstream ifs ("people.xml");
-
-if (ifs.fail ())
-{
-  cerr << "people.xml: unable to open" << endl;
-  return 1;
-}
-
-auto_ptr<people_t> p (people (ifs, "people.xml"));
-
-if (ifs.fail ())
-{
-  cerr << "people.xml: read error" << endl;
-  return 1;
-}
-  
- -

The above example can be rewritten to use exceptions as - shown below:

- -
-try
-{
-  std::ifstream ifs;
-  ifs.exceptions (std::ifstream::badbit | std::ifstream::failbit);
-  ifs.open ("people.xml");
-
-  auto_ptr<people_t> p (people (ifs, "people.xml"));
-}
-catch (const std::ifstream::failure&)
-{
-  cerr << "people.xml: unable to open or read error" << endl;
-  return 1;
-}
-  
- - - - - -

6 Serialization

- -

We have already seen how to serialize an object model back to XML - in this guide before. In this chapter we will discuss the - serialization topic in more detail.

- -

By default, the C++/Tree mapping provides a total of 8 overloaded - serialization functions. They differ in the output methods used to write - XML as well as the error reporting mechanisms. It is also possible to - generate types for root elements instead of parsing and serialization - functions. This may be useful if your XML vocabulary has multiple - root elements. For more information on element types refer to - Section - 2.9, "Mapping for Global Elements" in the C++/Tree Mapping User - Manual.

- - -

In this section we will discuss the most commonly - used version of serialization functions. For a comprehensive description - of serialization refer to - Chapter - 4, "Serialization" in the C++/Tree Mapping User Manual. For the - people global element from our person record vocabulary, - we will concentrate on the following serialization function:

- -
-void
-people (std::ostream& os,
-        const people_t& x,
-        const xml_schema::namespace_infomap& map =
-          xml_schema::namespace_infomap (),
-        const std::string& encoding = "UTF-8",
-        xml_schema::flags f = 0);
-  
- -

This function serializes the object model passed as the second - argument to the standard output stream passed as the first - argument. The third argument is a namespace information map - which we will discuss in more detail in the next section. - The fourth argument is a character encoding that the resulting - XML document should be in. Possible valid values for this - argument are "US-ASCII", "ISO8859-1", "UTF-8", "UTF-16BE", - "UTF-16LE", "UCS-4BE", and "UCS-4LE". Finally, the flags - argument allows fine-tuning of the serialization process. - The following example shows how we can use the above serialization - function:

- -
-people_t& p = ...
-
-xml_schema::namespace_infomap map;
-map[""].schema = "people.xsd";
-
-// Serialize to stdout.
-//
-people (std::cout, p, map);
-
-// Serialize to a file.
-//
-std::ofstream ofs ("people.xml");
-people (ofs, p, map);
-
-// Serialize to a string.
-//
-std::ostringstream oss;
-people (oss, p, map);
-std::string xml (oss.str ());
-  
- - -

6.1 Namespace and Schema Information

- -

While XML serialization can be done just from the object - model alone, it is often desirable to assign meaningful - prefixes to XML namespaces used in the vocabulary as - well as to provide the schema location information. - This is accomplished by passing the namespace information - map to the serialization function. The key in this map is - a namespace prefix that should be assigned to an XML namespace - specified in the name variable of the - map value. You can also assign an optional schema location for - this namespace in the schema variable. Based - on each key-value entry in this map, the serialization - function adds two attributes to the resulting XML document: - the namespace-prefix mapping attribute and schema location - attribute. The empty prefix indicates that the namespace - should be mapped without a prefix. For example, the following - map:

- -
-xml_schema::namespace_infomap map;
-
-map[""].name = "http://www.example.com/example";
-map[""].schema = "example.xsd";
-
-map["x"].name = "http://www.w3.org/XML/1998/namespace";
-map["x"].schema = "xml.xsd";
-  
- -

Results in the following XML document:

- -
-<?xml version="1.0" ?>
-<example
-  xmlns="http://www.example.com/example"
-  xmlns:x="http://www.w3.org/XML/1998/namespace"
-  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-  xsi:schemaLocation="http://www.example.com/example example.xsd
-                      http://www.w3.org/XML/1998/namespace xml.xsd">
-  
- -

The empty namespace indicates that the vocabulary has no target - namespace. For example, the following map results in only the - noNamespaceSchemaLocation attribute being added:

- -
-xml_schema::namespace_infomap map;
-
-map[""].name = "";
-map[""].schema = "example.xsd";
-  
- -

6.2 Error Handling

- -

Similar to the parsing functions, the serialization functions offer a - number of ways to handle error conditions with the C++ exceptions being - the most commonly used mechanisms. As with parsing, the easiest way to - uniformly handle all possible serialization exceptions and print - detailed information about the error is to catch and print - xml_schema::exception:

- -
-try
-{
-  people_t& p = ...
-
-  xml_schema::namespace_infomap map;
-  map[""].schema = "people.xsd";
-
-  people (std::cout, p, map));
-}
-catch (const xml_schema::exception& e)
-{
-  cerr << e << endl;
-}
-  
- -

The most commonly encountered serialization exception is - xml_schema::serialization. It is thrown - when the XML serialization in the underlying XML writer - fails. It encapsulates various diagnostics information - such as the file name, line and column numbers, as well as the - error or warning message for each entry. For more information - about this and other exceptions that can be thrown during - serialization, refer to - Section - 4.4, "Error Handling" in the C++/Tree Mapping - User Manual.

- -

Note that if you are serializing to std::ostream on - which exceptions are not enabled, then you will need to check the - stream state after the call to the serialization function in order - to detect any possible stream failures, for example:

- -
-std::ofstream ofs ("people.xml");
-
-if (ofs.fail ())
-{
-  cerr << "people.xml: unable to open" << endl;
-  return 1;
-}
-
-people (ofs, p, map));
-
-if (ofs.fail ())
-{
-  cerr << "people.xml: write error" << endl;
-  return 1;
-}
-  
- -

The above example can be rewritten to use exceptions as - shown below:

- -
-try
-{
-  std::ofstream ofs;
-  ofs.exceptions (std::ofstream::badbit | std::ofstream::failbit);
-  ofs.open ("people.xml");
-
-  people (ofs, p, map));
-}
-catch (const std::ofstream::failure&)
-{
-  cerr << "people.xml: unable to open or write error" << endl;
-  return 1;
-}
-  
- -
-
- - - diff --git a/xsd/documentation/cxx/tree/guide/makefile b/xsd/documentation/cxx/tree/guide/makefile deleted file mode 100644 index 521a095..0000000 --- a/xsd/documentation/cxx/tree/guide/makefile +++ /dev/null @@ -1,53 +0,0 @@ -# file : documentation/cxx/tree/guide/makefile -# author : Boris Kolpackov -# copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC -# license : GNU GPL v2 + exceptions; see accompanying LICENSE file - -include $(dir $(lastword $(MAKEFILE_LIST)))../../../../build/bootstrap.make - -default := $(out_base)/ -install := $(out_base)/.install -dist := $(out_base)/.dist -dist-win := $(out_base)/.dist-win -cleandoc := $(out_base)/.cleandoc - -# Build. -# -$(default): $(out_base)/cxx-tree-guide.ps $(out_base)/cxx-tree-guide.pdf - - -$(out_base)/cxx-tree-guide.ps: $(src_base)/index.xhtml \ - $(src_base)/guide.html2ps \ - | $(out_base)/. - $(call message,html2ps $<,html2ps -f $(src_base)/guide.html2ps -o $@ $<) - -$(out_base)/cxx-tree-guide.pdf: $(out_base)/cxx-tree-guide.ps | $(out_base)/. - $(call message,ps2pdf $<,ps2pdf14 $< $@) - -# Install & Dist. -# -$(install): path := $(subst $(src_root)/documentation/,,$(src_base)) -$(dist): path := $(subst $(src_root)/,,$(src_base)) - -$(install): $(out_base)/cxx-tree-guide.ps $(out_base)/cxx-tree-guide.pdf - $(call install-data,$(src_base)/index.xhtml,$(install_doc_dir)/xsd/$(path)/index.xhtml) - $(call install-data,$(out_base)/cxx-tree-guide.ps,$(install_doc_dir)/xsd/$(path)/cxx-tree-guide.ps) - $(call install-data,$(out_base)/cxx-tree-guide.pdf,$(install_doc_dir)/xsd/$(path)/cxx-tree-guide.pdf) - -$(dist): $(out_base)/cxx-tree-guide.ps $(out_base)/cxx-tree-guide.pdf - $(call install-data,$(src_base)/index.xhtml,$(dist_prefix)/$(path)/index.xhtml) - $(call install-data,$(out_base)/cxx-tree-guide.ps,$(dist_prefix)/$(path)/cxx-tree-guide.ps) - $(call install-data,$(out_base)/cxx-tree-guide.pdf,$(dist_prefix)/$(path)/cxx-tree-guide.pdf) - -$(dist-win): $(dist) - - -# Clean -# -$(cleandoc): - $(call message,rm $$1,rm -f $$1,$(out_base)/cxx-tree-guide.ps) - $(call message,rm $$1,rm -f $$1,$(out_base)/cxx-tree-guide.pdf) - -# How to. -# -$(call include,$(bld_root)/install.make) diff --git a/xsd/documentation/cxx/tree/makefile b/xsd/documentation/cxx/tree/makefile deleted file mode 100644 index 1d444fa..0000000 --- a/xsd/documentation/cxx/tree/makefile +++ /dev/null @@ -1,44 +0,0 @@ -# file : documentation/cxx/tree/makefile -# author : Boris Kolpackov -# copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC -# license : GNU GPL v2 + exceptions; see accompanying LICENSE file - -include $(dir $(lastword $(MAKEFILE_LIST)))../../../build/bootstrap.make - -docs := guide manual - -default := $(out_base)/ -install := $(out_base)/.install -dist := $(out_base)/.dist -dist-win := $(out_base)/.dist-win -cleandoc := $(out_base)/.cleandoc - -# Build. -# -$(default): $(addprefix $(out_base)/,$(addsuffix /,$(docs))) - -# Install & Dist. -# -dist-common := $(out_base)/.dist-common - -$(install): path := $(subst $(src_root)/documentation/,,$(src_base)) -$(dist-common): path := $(subst $(src_root)/,,$(src_base)) - -$(install): $(addprefix $(out_base)/,$(addsuffix /.install,$(docs))) - $(call install-dir,$(src_base)/dbxml,$(install_doc_dir)/xsd/$(path)/dbxml) - $(call install-dir,$(src_base)/reference,$(install_doc_dir)/xsd/$(path)/reference) - -$(dist-common): - $(call install-dir,$(src_base)/dbxml,$(dist_prefix)/$(path)/dbxml) - $(call install-dir,$(src_base)/reference,$(dist_prefix)/$(path)/reference) - -$(dist): $(dist-common) $(addprefix $(out_base)/,$(addsuffix /.dist,$(docs))) -$(dist-win): $(dist-common) $(addprefix $(out_base)/,$(addsuffix /.dist-win,$(docs))) - -# Clean. -# -$(cleandoc): $(addprefix $(out_base)/,$(addsuffix /.cleandoc,$(docs))) - -$(call include,$(bld_root)/install.make) - -$(foreach m,$(docs),$(call import,$(src_base)/$m/makefile)) diff --git a/xsd/documentation/cxx/tree/manual/cxx-tree-manual.pdf b/xsd/documentation/cxx/tree/manual/cxx-tree-manual.pdf deleted file mode 100644 index b340c2a..0000000 Binary files a/xsd/documentation/cxx/tree/manual/cxx-tree-manual.pdf and /dev/null differ diff --git a/xsd/documentation/cxx/tree/manual/cxx-tree-manual.ps b/xsd/documentation/cxx/tree/manual/cxx-tree-manual.ps deleted file mode 100644 index 2c43453..0000000 --- a/xsd/documentation/cxx/tree/manual/cxx-tree-manual.ps +++ /dev/null @@ -1,6630 +0,0 @@ -%!PS -%%Title: C++/Tree Mapping User Manual -%%Creator: html2ps version 1.0 beta5 -%%EndComments -save -2000 dict begin -/d {bind def} bind def -/D {def} d -/t true D -/f false D -/FL [/Times-Roman -/Times-Italic -/Times-Bold -/Times-BoldItalic -/Courier -/Courier-Oblique -/Courier-Bold -/Courier-BoldOblique -/Helvetica -/Helvetica-Oblique -/Helvetica-Bold -/Helvetica-BoldOblique] D -/WF t D -/WI 0 D -/F 1 D -/IW 471 F div D -/IL 621 F div D -/PS 791 D -/EF [0 1 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 2 2] D -/EZ [12 10 19 17 15 13 12 11 12 12 12 12 12 12 12 12 12 12 12 12 12 12 8 8] D -/Ey [0 0 2 2 2 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0] D -/EG [-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1] D -/Tm [1 1 0.8 0.8 0.8 0.8 0.8 0.8 0 0 0 0 0 0 0.5 1 1 1 1 0 0 1.3 0 0] D -/Bm [1 1 0.5 0.5 0.5 0.5 0.5 0.5 0 0 0 0 0 0 0.5 1 1 1 1 0 0 1 0 0] D -/Lm [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 2 2 0 0 2 0 0 0] D -/Rm [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0] D -/EU [-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 0 0] D -/NO f D -/YY [[{()}{ h }][{ h }{()}][{()}{()}]] D -/ZZ [[{ (April 2010) }{ Pn }][{ Pn }{ (April 2010) }][{ Ti(, v)join ME 0 get join }{ Ti(, v)join ME 0 get join }]] D -/Ts EZ 0 get D -/TU f D -/Xp t D -/AU f D -/SN 0 D -/Cf t D -/Tp t D -/Fe f D -/TI 2 Ts mul D -/Fm 14 D -/xL 71 D -/xR 71 D -/yL 706 D -/yR 706 D -/Wl 471 F div D -/Wr 471 F div D -/hL 621 F div D -/hR 621 F div D -/FE {newpath Fm neg Fm M CP BB IW Fm add Fm L IW Fm add IL Fm add neg L CP BB - Fm neg IL Fm add neg L closepath} D -/LA {PM 0 eq{/IW Wl D /IL hL D}{/IW Wr D /IL hR D}ie /W IW D /LL W D /LS W D - TU PM 0 eq and{IW 56 F div add SA{Sf div}if 0 translate} - {PM 0 eq{xL yL}{xR yR}ie translate F SA{Sf mul}if dup scale - CS CF FS Cf{CA CL get VC}if /Bb f D}ie 0 0 M - TF not Tc or {Cf{gsave SA{1 Sf div dup scale}if Cb VC FE fill grestore}if}if}D -/Pi 0 Ts mul D -/SG [0.8 1 1] D -/Ab 15 D -/J 0 D -/Tc t D -/NH 6 D -/Nf f D -/Pa f D -/LH 1.2 D -/XR f D -/Xr {/pN E D ( [p ) WB pN WB (] )WB} D -/Db [16#FF 16#FF 16#FF] D -/Dt [16#00 16#00 16#00] D -/eA f D -/Fi f D -/bT f D -/Lc t D -/Dl [16#00 16#00 16#00] D -/LX f D -/Br 0.25 D -/IA ([IMAGE]) D -/DS {/PF f D()WB NL NP()pop RC ZF} D -/Gb f D -/Mb t D -/Hc [16#00 16#00 16#00] D -/Bl 3 D -/MI -15.6 D -/DX (DRAFT) D -/Di 0 D -/Tt 113.385826771654 D -/Th { ( -) 2 Al()BR ( - ) 0 1 -1 H()4 FZ (C++/Tree Mapping User Manual) ES()EH ( - ) 0 1 -1 H ( ) EH ( - ) 0 1 -1 H ( ) EH ( - ) 0 1 -1 H ( ) EH ( - ) 0 1 -1 H ( ) EH ( - ) 0 1 -1 H ( ) EH ( - ) 0 1 -1 H ( ) EH ( - ) 0 1 -1 H ( ) EH ( -) Ea()BR ( - ) 0 P (Revision ) ME 0 get join(     April 2010)join EP ( - ) 0 P (Copyright © 2005-2010 CODE SYNTHESIS TOOLS CC) EP ( - - ) 0 P (Permission is granted to copy, distribute and/or modify this - document under the terms of the - ) R0 2 A (GNU Free - Documentation License, version 1.2) EA (; with no Invariant Sections, - no Front-Cover Texts and no Back-Cover Texts. - ) EP ( - - ) 0 P (This document is available in the following formats: - ) R1 2 A (XHTML) EA (, - ) R2 2 A (PDF) EA (, and - ) R3 2 A (PostScript) EA (.) EP()} D -/tH {()0 1 -1 H (Table of Contents) EH()} D -/FD 2 D -/Dy 2 D -/cD [16#F0 16#F0 16#F0] D -/FW 0.6 D -/FU [16#00 16#00 16#00] D -/ET {/RM f D /A0 3 D /PN SN D /OU t D /Ou t D /W IW D /LL W D D1 - Ms not TP and{Ip}if /TF f D} D - -%-- End of variable part -- -/MySymbol 10 dict dup begin - /FontType 3 D /FontMatrix [.001 0 0 .001 0 0 ] D /FontBBox [25 -10 600 600] D - /Encoding 256 array D 0 1 255{Encoding exch /.notdef put}for - Encoding (e) 0 get /euro put - /Metrics 2 dict D Metrics begin - /.notdef 0 D - /euro 651 D - end - /BBox 2 dict D BBox begin - /.notdef [0 0 0 0] D - /euro [25 -10 600 600] D - end - /CharacterDefs 2 dict D CharacterDefs begin - /.notdef {} D - /euro{newpath 114 600 moveto 631 600 lineto 464 200 lineto 573 200 lineto - 573 0 lineto -94 0 lineto 31 300 lineto -10 300 lineto closepath clip - 50 setlinewidth newpath 656 300 moveto 381 300 275 0 360 arc stroke - -19 350 moveto 600 0 rlineto -19 250 moveto 600 0 rlineto stroke}d - end - /BuildChar{0 begin - /char E D /fontdict E D /charname fontdict /Encoding get char get D - fontdict begin - Metrics charname get 0 BBox charname get aload pop setcachedevice - CharacterDefs charname get exec - end - end}D - /BuildChar load 0 3 dict put /UniqueID 1 D -end -definefont pop - -/Cd {aload length 2 idiv dup dict begin {D} repeat currentdict end} D -/EX {EC cvx exec} D -/DU {} d -/BB {pop pop}d -/ie {ifelse} d -/E {exch} d -/M {moveto} d -/R {rmoveto} d -/L {lineto} d -/RL {rlineto} d -/CP {currentpoint} d -/SW {stringwidth} d -/GI {getinterval} d -/PI {putinterval} d -/Sg {setgray} d -/LW {setlinewidth} d -/S {dup () ne OU and{0 Co R AT 3 eq LB and HF not and A1 0 ne A2 0 ne or and - {A2 0 32 A1 0 6 -1 roll awidthshow}{show}ie 0 Co neg R}{pop}ie - OU PH 3 eq or{/Ms t D}if} D -/U {OU{gsave CP currentfont /FontInfo get /UnderlinePosition get - 0 E currentfont /FontMatrix get dtransform E pop add newpath M dup SW pop - CJ 0 RL stroke grestore}if} D -/B {OU Br 0 gt and{CP Ts neg Ts .33 mul R gsave 0 Sg - CP newpath Ts Br mul 0 360 arc closepath UI 2 mod 0 eq{stroke}{fill}ie - grestore M CP E Ts Br 1 add mul sub E BB /Ms t D}if}D -/NP {Ms TP not or PA and OU and{TP{OR}if f1{mF k2 /mF E D /YC 0 D}if - TP TU not PM 0 eq or and{showpage}if DU Ip TE not{LA}if 0.6 LW - /CI 0 D /TP t D /Hs f D /hl 6 D /Hv 6 D /HI hi D /Ms f D}if Bs XO BO M} D -/Np {LE sub CP E pop gt PL 0 eq and{NP}if}D -/Ip {/PN PN 1 add D /Pn RM{1}{4}ie PN Ns D /PM PN SN sub 2 mod D} D -/GP {E dup 3 -1 roll get PN 1 add 2 mod get dup type /integertype eq - {get 0 get}{E pop}ie}d -/Fc {dup 2 GP exec SW pop /S1 E D dup 1 GP exec SW pop /S2 E D 0 GP exec SW - pop /S3 E D S1 0 gt{S2 2 mul S1 add S3 2 mul S1 add 2 copy lt{E}if pop}{0}ie - S2 S3 add 2 copy lt{E}if pop IW .9 mul div dup 1 gt{1 E div}{pop 1}ie}D -/OR {Df{Sd}if tp not{gsave SA{1 Sf div dup scale}if Fe{Cf{FU VC}if FW LW - 1 setlinejoin FE stroke}if /YO {60 F div dup 40 gt{pop 40}if}D /cs CS D - /cf CF D /CF 0 D /pf PF D /PF f D /Fn FN D /At AT D /AT 0 D /FN EF Hf 1 add - get D Fz Fs FS ZZ Fc Fz mul Fs FS EU Hf 1 add get dup type /arraytype eq - Cf and{VC}{pop 0 Sg}ie IW IL neg YO sub M ZZ 1 GP exec dup SW pop neg 0 R Sh - 0 IL neg YO sub M ZZ 0 GP exec Sh ZZ 2 GP exec dup SW pop IW E sub 2 div - IL neg YO sub M Sh Fz Fs FS NO{/AW IW Pn SW pop sub D AW 2 div IL neg YO sub - S1 0 gt S2 AW .45 mul gt or S3 AW .45 mul gt or{Fz 2 mul sub}if M Pn Sh}if - EU Hf get dup type /arraytype eq Cf and{VC}{pop 0 Sg}ie YY Fc /FN EF Hf get D - Hz mul HS FS IW YO M YY 1 GP exec dup SW pop neg 0 R Sh 0 YO M YY 0 GP exec Sh - YY 2 GP exec dup SW pop IW E sub 2 div YO M Sh /FN Fn D /AT At D t Pb XO SZ - SL get neg R /PF pf D grestore /CF 0 D cs cf FS}if}D -/Sh {dup () ne{CP Hz 4 div sub BB show CP CS add BB}{pop}ie}D -/Pb {/OU E D /Ou OU D /PB t D 0 0 M Ba{/Sa save D /BP t D /Fl t D RC /PL 0 D - /PH 0 D /W IW D /LE IL .7 mul D /EO 0 D SI ZF /YA 0 D /BO 0 D /C1 () D - BA 0 Ts neg R Bb{Xl Yl Xh Yh}if Bb CP Sa restore M - {/Yh E D /Xh E D /Yl E D /Xl E D}if /Fl t D}if - BL /OU t D /HM f D /Ou t D /PB f D} D -/Bs {/BP Ba not D}D -/reencodeISO { - dup dup findfont dup length dict begin{1 index /FID ne{D}{pop pop}ie}forall - /Encoding ISOLatin1Encoding D currentdict end definefont} D -/ISOLatin1Encoding [ -/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef -/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef -/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef -/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef -/space/exclam/quotedbl/numbersign/dollar/percent/ampersand/quoteright -/parenleft/parenright/asterisk/plus/comma/hyphen/period/slash -/zero/one/two/three/four/five/six/seven/eight/nine/colon/semicolon -/less/equal/greater/question/at/A/B/C/D/E/F/G/H/I/J/K/L/M/N -/O/P/Q/R/S/T/U/V/W/X/Y/Z/bracketleft/backslash/bracketright -/asciicircum/underscore/quoteleft/a/b/c/d/e/f/g/h/i/j/k/l/m -/n/o/p/q/r/s/t/u/v/w/x/y/z/braceleft/bar/braceright/asciitilde -/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef -/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef -/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef -/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef -/.notdef/space/exclamdown/cent/sterling/currency/yen/brokenbar -/section/dieresis/copyright/ordfeminine/guillemotleft/logicalnot -/hyphen/registered/macron/degree/plusminus/twosuperior/threesuperior -/acute/mu/paragraph/periodcentered/cedilla/onesuperior/ordmasculine -/guillemotright/onequarter/onehalf/threequarters/questiondown -/Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE/Ccedilla -/Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex -/Idieresis/Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis -/multiply/Oslash/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute -/Thorn/germandbls/agrave/aacute/acircumflex/atilde/adieresis -/aring/ae/ccedilla/egrave/eacute/ecircumflex/edieresis/igrave -/iacute/icircumflex/idieresis/eth/ntilde/ograve/oacute/ocircumflex -/otilde/odieresis/divide/oslash/ugrave/uacute/ucircumflex/udieresis -/yacute/thorn/ydieresis -] D -[128/backslash 129/parenleft 130/parenright 141/circumflex 142/tilde -143/perthousand 144/dagger 145/daggerdbl 146/Ydieresis 147/scaron 148/Scaron -149/oe 150/OE 151/guilsinglleft 152/guilsinglright 153/quotesinglbase -154/quotedblbase 155/quotedblleft 156/quotedblright 157/endash 158/emdash -159/trademark] -aload length 2 idiv 1 1 3 -1 roll{pop ISOLatin1Encoding 3 1 roll put}for -/colorimage where{pop}{ - /colorimage { - pop pop /Pr E D {/Cv Pr D /Gr Cv length 3 idiv string D 0 1 Gr length 1 sub - {Gr E dup /i E 3 mul D Cv i get 0.299 mul Cv i 1 add get 0.587 mul add - Cv i 2 add get 0.114 mul add cvi put}for Gr} image} D -}ie -/pdfmark where{pop}{userdict /pdfmark /cleartomark load put}ie -WF{FL{reencodeISO D}forall}{4 1 FL length 1 sub{FL E get reencodeISO D}for}ie -/Symbol dup dup findfont dup length dict begin - {1 index /FID ne{D}{pop pop}ie}forall /Encoding [Encoding aload pop] - dup 128 /therefore put D currentdict end definefont D - -/SF {/CS E D SZ SL CS put FO SL FN put /YI CS LH neg mul D dup ST cvs ( ) join - CS ST cvs join C1 E join ( NF ) join /C1 E D CS NF /Wf WF FN 0 gt or D - /BW Wf{( ) SW pop}{0}ie D}D -/NF {/cS E D /cF E D cF 0 ge{FL cF get}{cF -1 eq{/Symbol}{/MySymbol}ie}ie - findfont cS scalefont setfont} D -/FS {CF or /CF E D FR SL CF put CF CF 0 ge{FN 4 mul add}if E SF} D -/PC {SH /BP f D fin not GL not and{NL}if /HM t D /LL LS D} D -/BS {/TX E D Wf{/fin f D /CW 0 D /LK 0 D /SC 0 D - /RT TX D {RT ( ) search{/NW E D pop /RT E D /WH NW SW pop D CW WH add LL gt - {TX SC LK SC sub 1 sub NN GI GL{SH cF cS OC - 2 copy cS ne E cF ne or{NF}{pop pop}ie}{PC /CW WH BW add D}ie - /SC LK D} - {GL{JC}if - /CW CW WH add BW add D /HM t D}ie /GL f D /Ph f D - /LK LK NW length 1 add add D}{pop exit}ie}loop - /fin t D TX SC LK SC sub GI SH RT () ne{GL not{CC}if}if - /LC TX length D /WH RT SW pop D CW WH add Hy{HC SW pop add}if LL gt - {RT GL{SH cF cS OC 2 copy cS ne E cF ne or{NF}{pop pop}ie - Hy{/Ph t D}if /LL LS D}{NL /LL LS D SH}ie} - {RT PC Hy{CC}if /Ph Ph Hy or D}ie RT () ne{/GL t D /HM t D}if} - {TX SW pop LL le{TX SH}{/NW () D 0 2 TX length 1 sub - {/CW E D TX 0 CW GI dup SW pop LL gt{pop NW SH /HM t D NL/LL W XO sub MR sub D - /CW CW 2 sub NN D /TX TX CW TX length CW sub GI D TX BS exit} - {/NW E D}ie}for}ie}ie /HM t D}D -/CC {C0 length 0 gt{JC}if /C0 [C1 L1 YA YB Mf NS NB TB AF Bw] D - /C1 () D /L0 L1 D /YA 0 D /YB 0 D /Mf 0 D /NS 0 D /NB 0 D}D -/JC {C0 aload length 0 gt{pop pop pop NB add /NB E D NS add /NS E D - dup Mf gt{/Mf E D}{pop}ie dup YB gt{/YB E D}{pop}ie - dup YA gt{/YA E D}{pop}ie pop C1 join /C1 E D /C0 [] D}if}D -/OC {C0 length 0 gt{C1 L1 L0 sub YA YB Mf NS NB TB AF Bw GL C0 aload pop - /Bw E D /AF E D /TB E D /NB E D /NS E D /Mf E D /YB E D /YA E D /C0 [] D - /L1 E D /C1 E D Ph{HC SH}if NL /GL E D /Bw E D /AF E D /TB E D /NB E D /NS E D - /Mf E D /YB E D /YA E D /L1 E D /LL W L1 sub XO sub MR sub WH sub D /CW 0 D - C1 E join /C1 E D}if}D -/BT {/LB t D dup length string copy RS dup dup () ne E ( ) ne and - {/CI 0 D /LS LL D /LL W L1 sub XO sub MR sub D BS} - {dup ( ) eq{/GL f D}if dup () eq L1 0 eq or{pop}{SH /BP f D /Ph f D}ie}ie - /LB f D} D -/BL {CP E pop XO E M} D -/NL {JC /GL f D /SK W XO sub MR sub L1 sub TB{Bw add}if D - /YA LF{Mf HM Fl not and PF or{LH mul}if}{0 /LF t D}ie YA 2 copy lt{E}if pop D - C1 () ne{/FB YB Mf SA{Sf mul}if 4 div 2 copy lt{E}if pop D}if Fl{/Ya YA D}if - CP E pop YA sub YB sub LE neg lt Fl not and PB not and{NP}if NT TL BL - OU PF not and PB or{/RE L1 TB{Bw sub}if - W XO sub MR sub div YA YB add LE BO add div 2 copy lt{E}if pop D - RE 1 gt{BL 1 RE div dup scale}if}if - AT 2 le{SK AT mul 2 div YA neg R}if - AT 3 eq{0 YA neg R TB{/NB NB 1 sub D /NS NS 1 sub D}if /NB NB 1 sub NN D - /A3 NS 6 mul NB add D NS NB add 0 eq - {/A1 0 D /A2 0 D} - {NS 0 eq{/A1 SK NB div dup J gt{pop 0}if D /A2 0 D}{J A3 mul SK lt - {/A1 J D /A2 SK J NB mul sub NS div dup Ab gt{/A1 0 D pop 0}if D} - {/A1 SK A3 div D /A2 A1 6 mul D}ie}ie}ie /A1 A1 NN D /A2 A2 NN D}if - AT 4 eq{0 YA neg R PH 2 le{PD 0 lt{/PD L1 D}if PD M1 gt{/M1 PD D}if - L1 PD sub M2 gt{/M2 L1 PD sub D}if}{DV ID 1 sub get 0 ge{Lo 0 R}if}ie}if - F0 cF ne Cs cS ne or{F0 Cs NF}if - /ms Ms D /Ms f D CP FB sub - C1 cvx exec XO EO sub L1 add TB{BW sub}if dup LM gt{/LM E D}{pop}ie - PH 0 eq PH 4 eq or Ms and{HF not{/PO t D /AH t D}if - BB CP YA add E AT 3 eq LB and{A1 sub}if TB{BW sub}if E BB} - {pop pop}ie Ms HM PH 3 eq and or{/BP f D /Fl f D}if - /Lo 0 D /L1 0 D /F0 cF D /Cs cS D BP not{0 YB NN neg R}if - OU f1 and mF not and{k2 /f1 f D}if - OU PF not and PB or{RE 1 gt{RE dup scale}if}if /Ms ms Ms or D - /C1 AF{(Cp )}{()}ie D /YA 0 D /YB 0 D BL - AT 4 eq LB not and PH 3 ge and - {ID DV length lt{DV ID get dup 0 ge{DO E sub /Lo E D /L1 Lo D}{pop}ie - /ID ID 1 add D}if}if /T t D CD{/LN LN 1 add D PD}if - /PD -1 D /NS 0 D /NB 0 D /TB f D /Ph f D /Mf 0 D /HM f D} D -/RS {/TM E D /CN 0 D TM{10 eq{TM CN ( ) PI}if /CN CN 1 add D}forall - /CN 0 D /BK HM EN and{0}{1}ie D TM - {dup 32 ne{TM CN 3 2 roll put /CN CN 1 add D /BK 0 D} - {pop BK 0 eq{TM CN 32 put /CN CN 1 add D}if /BK 1 D}ie}forall - TM 0 CN GI dup dup () ne E ( ) ne and - {dup CN 1 sub get 32 eq{/EN f D}{/EN t D}ie}if} D -/join {2 copy length E length add string dup 4 2 roll 2 index 0 3 index - PI E length E PI}d -/WR {(\n) search{dup () ne BP not or - {Li 4 le CP E pop YI Li mul add LE add 0 lt and PL 0 eq and{NP}if - SH NL pop /Li Li 1 sub D WR}{pop pop WR}ie}{SH}ie /CI 0 D /BP f D} D -/SH {dup dup () ne E ( ) ne and PF or CS Mf gt and{/Mf CS D}if - T not Wf and{( ) E join /T t D}if dup BP{/MF CS D}if - AT 3 eq{2 copy length dup 0 gt{/NB E NB add D - {( ) search{/NS NS 1 add D pop pop}{pop exit}ie}loop}{pop pop}ie}if - CD PD 0 lt and{dup DC search{SW pop /PD E L1 add D pop pop}{pop}ie}if - 0 Np dup SW pop L1 add /L1 E D dup () ne - {C1 (\() join E join (\)) join AU AF and UF or Wf and{( U ) join}if - sF{( s ) join}if ( S ) join - /C1 E D dup length 1 sub get 32 eq /TB E D /Bw BW D}{pop pop}ie} D -/BG {AI LG BC add add 0 eq} D -/ON {OU{Ty AR AI NN get dup 1 add Ln Ns Ty 2 mod 0 eq{(. )}{(\) )}ie join - dup SW pop neg 0 R CP E 0 lt{0 E M}{pop}ie CP BB show /Ms t D}if} D -/Ln {AR AI 3 -1 roll put}D -/SP {dup CI lt BP not and{dup CI sub 0 E R /CI E D}{pop}ie} D -/BN {PF{WR /HM f D}{BT NL}ie} D -/NN {dup 0 lt{pop 0}if} D -/h {(h) HI ST cvs join cvx exec dup 1 get E Nf{0 get E join}{pop}ie} D -/H {/fn FN D /Hi E 1 add D 1 sub /HL E D /H2 HL 2 add D /GS EZ H2 get D - E Tm H2 get GS mul BE dup 0 gt{1 sub}{pop EG H2 get dup 0 lt{pop AT}if}ie NA - WW Np /SL SL 1 add D /FN EF H2 get D GS Ey H2 get FS - EU H2 get Sc Hs not HL Hl lt and Hs HL hl lt and or Hi 0 eq or - {/HI Hi D /Hs t D /hl HL D /Hv HL D}if HL Hl lt{/hi Hi D}if - Nf HI 0 gt and{(h) Hi ST cvs join cvx exec 0 get WB}if - /HF t D /AH f D /PO f D} D -/EH {Bm H2 get GS mul BE OA /SL SL 1 sub NN D /CF 0 D /FN fn D - SZ SL get FR SL get FS /HF f D /GS Ts D ()Ec} D -/P {E PF{WR}{PO{EP}{BN}ie Ts 4 mul Np AE not{Tm 0 get Ts mul neg SP}if - dup 0 ge AH and{Pi Pd}if}ie 1 sub dup 0 lt{pop AV AL get}if /AT E D /PO t D} D -/EP {PF{WR}{BN Ts 4 mul Np}ie AE not{Bm 0 get Ts mul neg SP}if - /AT AV AL get D /PO f D} D -/BE {E PO{EP}{BN}ie Ts 4 mul Np neg SP} D -/HR {/Aw W EO sub D /RW E dup 0 gt{Aw mul}{neg}ie dup Aw gt{pop Aw}if D /RZ E D - E BN Ts neg SP 1 sub 2 div Aw RW sub mul EO add CP E pop M PF{0 Ps neg R}if - 0 Np OU{gsave RZ LW Cf{Hc VC}{0 Sg}ie CP BB RW 0 RL CP BB stroke grestore}if - /CI 0 D /BP f D PF not{Ts neg SP}if /Ms t D} D -/AD {I NL EG 14 get dup 0 lt{pop AT}if NA /AE t D Tm 14 get Ts mul neg SP - Cf{EU 14 get dup -1 eq{pop CA CL get}if Sc}if} D -/DA {BN ()ES OA /AE f D ()Ec Bm 14 get Ts mul neg SP} D -/PR {/MW E D /Li E D Tm 1 get Ps mul BE 0 NA /FN Fp D /PF t D SI /SL SL 1 add D - /CF 0 D Ps CS mul Ts div MW WC mul CS mul Ts div dup LL gt PL 0 eq and - {LL div div}{pop}ie Ey 1 get FS CP E pop LE add YI neg div cvi dup Li lt - AH and{4 lt YI Li mul 5 mul LE add 0 gt or PL 0 eq and{NP}if}{pop}ie - EU 1 get Sc /GS Ps D}D -/RP {WR NL () /PF f D SI /FN 0 D ES Bm 1 get Ps mul neg SP OA /GS Ts D} D -/SI {/XO Lm 15 get BC NN mul Lm 16 get AI UI sub NN mul add - Lm 17 get UI NN mul add Lm 20 get LG NN mul add Ts mul - PF{Lm 1 get Ps mul add}if EO add D - /MR Rm 15 get BC NN mul Rm 16 get AI UI sub NN mul add - Rm 17 get UI NN mul add Rm 20 get LG NN mul add Ts mul - PF{Rm 1 get Ps mul add}if D /LL W XO sub MR sub D} D -/DT {/cC E D BN /LG LG 1 sub D SI /LG LG 1 add D WW 2 div Np BL} D -/DD {WB Cc 0 eq cC 0 eq and L1 0 eq or Lm 20 get Ts mul L1 sub TB{BW add}if - Ts 2 div lt or NL /LF E D SI BL /cC 0 D} D -/DL {Dc LG Cc put /Cc E D BG{Tm 18 get Ts mul BE}{BN}ie /LG LG 1 add D BL} D -/LD {BN LG 0 gt{/LG LG 1 sub D}if /Cc Dc LG get D SI - BG{()Bm 18 get Ts mul BE}if BL} D -/UL {BG{Tm 17 get Ts mul BE}{BN}ie NR AI NN 0 put /UI UI 1 add D - /AI AI 1 add D SI BL} D -/LU {BN /UI UI 1 sub D /AI AI 1 sub D SI BG{()Bm 17 get Ts mul BE}if BL} D -/OL {E BG{Tm 16 get Ts mul BE}{BN}ie TR AI NN Ty put /Ty E D NR AI NN 1 put - /AI AI 1 add D SI BL 1 Ln} D -/LO {BN /AI AI 1 sub D /Ty TR AI get D SI BG{()Bm 16 get Ts mul BE}if BL} D -/LI {E BN -1 SP /BP f D /CI 0 D 0 Np NR AI 1 sub NN get 1 eq - {dup dup 0 gt E 4 le and{/Ty E D}{pop}ie - /L1 L1 Ty AR AI NN get Ns SW pop XO sub dup 0 lt{pop 0}if add D ( ON )} - {pop ( B )}ie C1 E join /C1 E D CS Mf gt{/Mf CS D}if BL} D -/BQ {Tm 15 get Ts mul BE /BC BC 1 add D SI BL} D -/QB {Bm 15 get Ts mul BE /BC BC 1 sub D SI BL} D -/Al {E EP 1 sub dup 0 lt{pop AV AL get}if NA} D -/Ea {EP OA} D -/WB {PF{WR}{BT}ie} D -/F1 {WB /FN 0 D CS 0 FS} D -/F2 {WB /FN WI D CS 0 FS} D -/HY {/Hy t D WB /Hy f D} D -/YH {WB} D -/A {/LT E D LT 1 eq{/RN E D}if /Lh E D WB /C1 C1 ( Cp ) join D - Lc AF not and{Cl Sc}if /AF t D} D -/EA {Lc AF and{Ec}{WB}ie TL Pa AF and Lh 0 ne and - {( \() Lh join (\)) join /AF f D WB}if /AF f D} D -/TL {C1 ( Tl ) apa /C1 E D} d -/apa {AF OU and Lh 0 ne LT 1 eq or and{LT 1 eq{RN ( /) E ST cvs join} - {(\() Lh join (\)) join}ie E join join}{pop}ie} d -/Cp {/Xc CP /Yc E D D} D -/SS {Cf{dup 0 ge{EU E get dup -1 eq{pop CA CL get}if}{pop CA CL get}ie Sc} - {pop}ie SZ SL get /SL SL 1 add D} D -/I {WB 8 SS 1 FS} D -/EM {WB 8 SS /CF CF 1 xor D 0 FS} D -/BD {WB 9 SS 2 FS} D -/TT {WB 10 SS /FN Fp D 0 FS} D -/KB {WB 11 SS /FN Fp D 2 FS} D -/CT {WB 12 SS 1 FS} D -/SM {WB 13 SS /FN Fp D 0 FS} D -/Q {/QL QL 1 add D QO QL 2 mod get La get join WB} D -/EQ {QC QL 2 mod get La get join WB /QL QL 1 sub D} D -/RO {WB -1 SS /CF 0 D 0 FS} D -/SY {WB -1 SS -1 FS} D -/MY {WB -1 SS -2 FS} D -/ES {WB /SL SL 1 sub NN D /CF 0 D /FN FO SL get D SZ SL get FR SL get FS ()Ec}D -/FZ {3 sub 1.2 E exp GS mul E WB TL /C1 C1 ( Cp ) join D /SL SL 1 add D 0 FS} D -/Ef {WB TL ()ES /C1 C1 ( Cp ) join D} D -/BZ {dup /Bf E D FZ}D -/Sc {dup -1 ne Cf and{/CL CL 1 add D dup 0 eq{pop [0 0 0]}if - dup CA E CL E put VS ( VC ) join C1 E join /C1 E D}{pop}ie} D -/Ec {WB Cf{/CL CL 1 sub NN D CA CL get VS ( VC ) join C1 E join /C1 E D}if} D -/VS {dup type /arraytype eq{([) E {ST cvs join ( ) join}forall (]) join}if} D -/VC {{255 div}forall setrgbcolor} D -/Sl {dup type /integertype ne{Ds}if /La E D WB}d -/UN {WB /UF t D} D -/NU {WB /UF f D} D -/SE {WB /sF t D} D -/XE {WB /sF f D} D -/sM {/C1 C1 ( k1 ) join D}d -/eM {/C1 C1 ( k2 ) join D}d -/k1 {/YC CP E pop Ts add D /mF t D /f1 t D}d -/k2 {gsave 3 LW -9 CP E pop Ts 0.2 mul sub M -9 YC L stroke grestore /mF f D}d -/Ac {/AC E D WB}d -/Ca {eA{( \()join AC join(\) )join}if WB}d -/s {OU{gsave 0 CS .25 mul R dup SW pop CJ 0 RL stroke grestore}if}D -/CJ {AT 3 eq LB and{E dup dup length 1 sub A1 mul E - {( ) search{pop pop E A2 add E}{pop exit}ie}loop 3 -1 roll add - W CP pop sub 2 copy gt{E}if pop}if}D -/So {/Co E D} D -/SO {C1 Yo ST cvs join ( So ) join /C1 E D (j) SW pop 2 div Pd} D -/Se {E WB CS E div Pd}D -/Pd {dup type /stringtype eq{SW pop}if dup /L1 E L1 add D - ST cvs ( 0 R ) join C1 E join /C1 E D} D -/Sp {0.35 CO} D -/Sb {-0.2 CO} D -/CO {OV Io Yo put /Yo E CS mul Yo add D /Io Io 1 add D -1.5 Io mul 3 add FZ SO - CS Yo add dup YA gt{/YA E D}{pop}ie - Yo neg dup YB gt{/YB E D}{pop}ie} D -/Es {ES /Io Io 1 sub NN D /Yo OV Io get D SO} D -/SB {/N2 0 D 0 1 NI{/N E D{IX N2 get 0 lt{/N2 N2 1 add D}{exit}ie}loop - /K WS N get FC N get mul D /NY AY N2 get D /BV NY array D - 0 1 NY 1 sub{/TM K string D currentfile TM readhexstring pop pop BV E TM put} - for BM N BV put /N2 N2 1 add D}for} D -/IC [{/MA E D /MB 0 D}{2 div /MA E D /MB MA D}{/MB E CS sub D /MA CS D} - {pop /MA YS AB mul D /MB 1 AB sub YS mul D}{pop /MA 0 D /MB 0 D}] D -/IP {BV N get /N N 1 add D} D -/II {/K E D IX K get 0 lt{/EC E D}if /TY E D - TY 4 eq{/Y E D /X E D}if TY 3 eq{/AB E D}if - /XW AX K get D /YW AY K get D /IS SG IT K get get D /XS XW IS mul D - /YS YW IS mul D YS IC TY get exec /MA MA Fl not{3 add}if D} D -/IM {II /ty TY D /xs XS D /ys YS D /ya YA D /yb YB D /ma MA D /mb MB D /k K D - /ec EC D /BP f D /CI 0 D WB TL L1 xs add dup XO add MR add W gt - {pop /ma ma Fl{3 add}if D NL /YA ma D /YB mb D /YS ys D /L1 xs D} - {/L1 E D ma YA gt{/YA ma D}if mb YB gt{/YB mb D}if}ie /TB f D - OU{CP E pop YS sub LE neg lt Fl not and PB not and{NP /YA ma D /YB mb D}if - /BP f D ty ST cvs ( ) join IX k get 0 lt{(\() join ec join (\) ) join}if - k ST cvs join ty 3 eq{AB ST cvs ( ) join E join}if - ty 4 eq{X ST cvs ( ) join Y ST cvs join ( ) join E join}if C1 E join - ( DI ) join FP 2 eq FP 1 eq AF and or{( FM ) join}if - ( Il Cp ) apa /C1 E D /EN f D}if /HM t D /T f D} D -/DI {II /Xc CP /Yc E D D /YN YW neg D /HM t D /CI 0 D /K2 IX K get D gsave - TY 4 eq{OX X IS mul add OY FY add YS sub Y IS mul sub} - {/FY YS D CP MB sub 2 copy /OY E D /OX E D}ie - translate K2 0 ge{/DP AZ K2 get D /BV BM K2 get D XS YS scale /N 0 D XW YW DP - [XW 0 0 YN 0 YW] {IP} FC K2 get 1 eq{image}{f 3 colorimage}ie} - {EX}ie grestore XS 0 R /Ms t D} D -/FM {gsave 0 Sg CP MB sub translate XS neg 0 M 0 YS RL XS 0 RL 0 YS neg RL - XS neg 0 RL stroke grestore} D -/NA {/AT E D /AL AL 1 add D AV AL AT put} D -/OA {AL 0 gt{/AL AL 1 sub D /AT AV AL get D}if} D -/D1 {/BR {CP E pop E BN Mb{CP E pop eq{0 YI R}if}{pop}ie} D - /Sn {OU{C1 E ST cvs join ( Ld ) join /C1 E D}{pop}ie} D} D -/D1 {/BR {BN} D /Sn {OU {C1 E ST cvs join ( Ld ) join /C1 E D} {pop} ie} D} D -/TC {/TF t D /ML 0 D HN{SW pop dup ML gt{/ML E D}{pop}ie}forall NP /RM RM not D - RC /OU Tc D Ep /PN 0 D Ms not TP and{Ip}if /W IW ML sub Ts sub D - /A0 0 D TH{/BR {( ) join BT} D /Sn {pop} D /Au () D}if} D -/TN {0 eq{E EA PF HF or not XR and{HN E get Xr}{pop}ie} - {OU{Tn 0 ge{() BN}if /Tn E D}{pop}ie WB}ie} D -/NT {OU LB not and Tn 0 ge and{PL 0 eq{Ms not{CS CF FS}if CP dup - /y E YA sub D W 9 sub CS -1.8 mul XO L1 add 2 add{y M (.) show}for - HN Tn get dup SW pop IW E sub y M show CP BB M}if /Tn -1 D}if} D -/Ld {/DN E D HN DN Pn put [/View [/XYZ -4 Fl{PS}{CP YA add US E pop}ie null] - /Dest DN ST cvs cvn /DEST pdfmark} D -/C {ND 1 eq{1 sub}if TI mul /XO E D NL Nf not{pop()}if 0 3 -1 roll 1 A} D -/OP {BP not{NP}if PN 2 mod 0 eq{/Ms t D NP}if}D -/Ep {Xp PN 2 mod 0 eq and OU and{/Pn (-) D showpage /PM 1 D LA}if}D -/Dg [73 86 88 76 67 68 77] D -/Rd [0 [1 1 0][2 1 0][3 1 0][2 1 1][1 1 1][2 2 1][3 3 1][4 4 1][2 1 2]] D -/Ns {/m E D /c E 32 mul D /j m 1000 idiv D /p j 12 add string D - c 96 le m 0 gt and{c 32 le {/i 0 D /d 77 D /l 100 D /m m j 1000 mul sub D - j -1 1 {pop p i d c add put /i i 1 add D}for - 4 -2 0 {/j E D /n m l idiv D /m m n l mul sub D /d Dg j get D - n 0 gt {/x Rd n get D x 0 get -1 1 {pop p i d c add put /i i 1 add D}for - p i x 1 get sub Dg x 2 get j add get c add put}if /l l 10 idiv D - }for p 0 i GI} - {/i ST length 1 sub D m {1 sub dup 0 ge{dup 26 mod c add 1 add - ST i 3 -1 roll put 26 idiv dup 0 eq{pop exit}if}if /i i 1 sub D}loop - ST i ST length i sub GI}ie} - {m p cvs}ie} D -/US {matrix currentmatrix matrix defaultmatrix matrix invertmatrix - matrix concatmatrix transform} D -/GB {Gb{US}if}D -/Tl {/Rn E D Xc CP pop ne{ - [/Rect [Xc 1 sub Yc cS 0.25 mul sub GB CP E 1 add E cS 0.85 mul add GB] - /Subtype /Link /Border [0 0 Cf Lc and LX and AU or{0}{1}ie] Rn type - /nametype eq {/Dest Rn}{/Action [/Subtype /URI /URI Rn] Cd}ie - /ANN pdfmark}if} D -/Il {/Rn E D [/Rect [Xc Yc GB Xc XS add Yc YS add GB] /Subtype /Link - /Border [0 0 0] Rn type /nametype eq{/Dest Rn} - {/Action [/Subtype /URI /URI Rn] Cd}ie /ANN pdfmark} D -/XP {[{/Z Bz 2 div D Z 0 R Z Z RL Z neg Z RL Z neg Z neg RL Z Z neg RL - Fi cH 1 eq and{fill}if} {Bz 0 RL 0 Bz RL Bz neg 0 RL 0 Bz neg RL - Fi cH 1 eq and{fill}if} {0 -5 R Bz 0 RL 0 21 RL Bz neg 0 RL 0 -21 RL}]} D -/MS {/Sm E D WB}D -/O {BN()0 Sm BX} D -/BX {/Bt E D Bt 2 lt{/Ch E D CS 0.8 mul}{11 mul}ie W XO sub MR sub - 2 copy gt{E}if pop /HZ E D Bt 2 eq{Fi not{pop()}if ( )E join /Ft E D TT - /PF t D /MW 1 D /Li 1 D /Fw Ft SW pop D Fw HZ gt{/HZ Fw 8 add D}if - HZ ST cvs( )join}{WB Ch ST cvs( )join}ie L1 HZ add XO add MR add W gt{NL}if - Bt 2 eq{Ft ES Fw neg HM{CS sub}if Pd}if Bt ST cvs join( Bx )join - Bt 2 eq HM and{CS Pd}if C1 E join /C1 E D /L1 L1 HZ add D /T f D - ( ) Pd /PF f D Bt 2 lt{YA CS .8 mul lt{/YA CS .8 mul D}if} - {YB 5 lt{/YB 5 D}if YA 21 lt{/YA 21 D}if}ie /CI 0 D} D -/Bx {dup 2 eq{E /Bz E D}{E /cH E D /Bz CS .8 mul D}ie - OU {gsave 0 Sg XP E get exec stroke grestore}{pop}ie Bz 0 R /Ms t D}D -/SD {FD 4 mul Dy add DZ NF newpath 0 0 M DX t charpath pathbbox - 3 -1 roll sub /DY E D E dup /X1 E D sub WM mul WX DY mul add WM DG mul E div - /DF E D /DR WX DF mul DY mul WM div 2 div D} d -/Sd {gsave 0 IL Di mul neg translate IL IW atan Di 0 eq{neg}if rotate - FD 4 mul Dy add DZ NF DR X1 sub DY 2 div neg M cD VC DX show grestore} d -/Pt {/tp t D Tp{NP /Pn (TP) D 0 Tt neg R Th BN NP Ep ET RC ZF}if /tp f D} D -/RC {/AI 0 D /LG 0 D /BC 0 D /UI 0 D /PF f D /Cc 0 D /cC 0 D /Dc 10 array D - /NR [0 1 9{pop 0}for] D /La Ds D /AR 10 array D /TR 10 array D /AV 30 array D - SI /AL -1 D /AT A0 D AT NA /OV 9 array D /Yo 0 D /Co 0 D /Io 0 D /Hy f D - /Ph f D /CL -1 D Ct Sc}D -/ZF {/FR [0 1 30{pop 0}for] D /SZ [0 1 30{pop 0}for] D /FO [0 1 30{pop 0}for] D - /SL 0 D /CF 0 D /FN 0 D 0 Ts SF}D -/QO [[(\234)(\233)(\253\240)(\232)(\273)(\253)][(')(`)(\253\240)(\231)(\273)(\253)]] D -/QC [[(\234)(\234)(\240\273)(\233)(\253)(\273)][(')(')(\240\273)(`)(\253)(\273)]] D -/Hf EF length 2 sub D -/Hz EZ Hf get D -/HS Ey Hf get D -/Fz EZ Hf 1 add get D -/Fs Ey Hf 1 add get D -/LE IL D -/Ps EZ 1 get D -/Fp EF 1 get D -/XO 0 D -/YI 0 D -/CI 0 D -/FP 0 D -/WW Ts 7 mul D -/Mf 0 D -/YA 0 D -/YB 0 D -/Cs Ts D -/GS Ts D -/F0 0 D -/NS 0 D -/NB 0 D -/N 0 D -/C0 [] D -/C1 () D -/Lo 0 D -/L1 0 D -/LM 0 D -/PH 0 D -/EC 0 D -/Lh 0 D -/LT 0 D -/CH 1 string D -/ST 16 string D -/CA 9 array D -/HC (\255) D -/HM f D -/PF f D -/EN f D -/TB f D -/UF f D -/sF f D -/AE f D -/AF f D -/BP t D -/CD f D -/PA t D -/GL f D -/T t D -/HF f D -/AH f D -/SA f D -/PB f D -/f1 f D -/mF f D -/OX 0 D -/OY 0 D -/FY 0 D -/EO 0 D -/FB 0 D -/PL 0 D -/Bw 0 D -/PD -1 D -/TP f D -/tp f D -/TH t D -/Ty 4 D -/Tn -1 D -/Fl t D -/LB t D -/PM 1 D -/Ms f D -/Ba f D -/Bb f D -/Hl 3 D -/hl 6 D -/Hv 6 D -/Hs f D -/HI 0 D -/hi 0 D -/PO t D -/TE f D -/LF t D -/BO 0 D -/Sm 1 D -/Bf 3 D -/A1 0 D -/A2 0 D -/Ds 1 D -/QL -1 D -/Cb Db D -/Ct Dt D -/Cl Dl D -[/Creator (html2ps version 1.0 beta5) /Author () /Keywords (xsd, xml, schema, c++, mapping, data, binding, tree, serialization, guide, manual, examples) /Subject () - /Title (C++/Tree Mapping User Manual) /DOCINFO pdfmark -/ND 1 D -/HN [(1) (1) (1) (1) (1) (1) (1) (2) (2) (2) (3) (3) (3) (4) (5) (5) (5) (5) -(6) (6) (7) (??) (9) (10) (11) (11) (12) (14) (17) (18) (19) (21) (22) (23) -(24) (24) (25) (26) (27) (28) (28) (30) (31) (31) (35) (35) (35) (37) (39) -(43) (45) (46) (48) (50) (50) (53) (54) (56) (59) (64) (69) (69) (72) (72) -(73) (75) (76) (76) (77) (78) (78) (78) (79) (79) (80) (80) (80) (81) (81) -(83) (83) (85) (86) (86) (87) (87) (87) (88) (89) (90) (90) (92) (93) (??) -(1) (1) (1) (1) (2) (2) (2) (3) (3) (3) (4) (5) (5) (5) (5) (6) (6) (7) -(9) (10) (11) (11) (12) (14) (17) (18) (19) (21) (22) (23) (24) (24) (25) -(26) (27) (28) (28) (30) (31) (31) (35) (35) (35) (37) (39) (43) (45) (46) -(48) (50) (50) (53) (54) (56) (59) (64) (69) (69) (72) (72) (73) (75) (76) -(76) (77) (78) (78) (78) (79) (79) (80) (80) (80) (81) (81) (83) (83) (85) -(86) (86) (87) (87) (87) (88) (89) (90) (90) (92) (93)] D -/h0 [()(Table of Contents)] D -/h1 [(1\240\240)(Preface)] D -/h2 [(1.1\240\240)(About This Document)] D -/h3 [(1.2\240\240)(More Information)] D -/h4 [(2\240\240)(1 Introduction)] D -/h5 [(3\240\240)(2 C++/Tree Mapping)] D -/h6 [(3.1\240\240)(2.1 Preliminary Information)] D -/h7 [(3.1.1\240\240)(2.1.1 Identifiers)] D -/h8 [(3.1.2\240\240)(2.1.2 Character Type and Encoding)] D -/h9 [(3.1.3\240\240)(2.1.3 XML Schema Namespace)] D -/h10 [(3.1.4\240\240)(2.1.4 Anonymous Types)] D -/h11 [(3.2\240\240)(2.2 Error Handling)] D -/h12 [(3.2.1\240\240)(2.2.1 xml_schema::duplicate_id)] D -/h13 [(3.3\240\240)(2.3 Mapping for import and include)] D -/h14 [(3.3.1\240\240)(2.3.1 Import)] D -/h15 [(3.3.2\240\240)(2.3.2 Inclusion with Target Namespace)] D -/h16 [(3.3.3\240\240)(2.3.3 Inclusion without Target Namespace)] D -/h17 [(3.4\240\240)(2.4 Mapping for Namespaces)] D -/h18 [(3.5\240\240)(2.5 Mapping for Built-in Data Types)] D -/h19 [(3.5.1\240\240)(2.5.1 Inheritance from Built-in Data Types)] D -/h20 [(3.5.2\240\240)(2.5.2 Mapping for anyType)] D -/h21 [(3.5.3\240\240)(2.5.3 Mapping for anySimpleType)] D -/h22 [(3.5.4\240\240)(2.5.4 Mapping for QName)] D -/h23 [(3.5.5\240\240)(2.5.5 Mapping for IDREF)] D -/h24 [(3.5.6\240\240)(2.5.6 Mapping for base64Binary and hexBinary)] D -/h25 [(3.6\240\240)(2.5.7 Time Zone Representation)] D -/h26 [(3.7\240\240)(2.5.8 Mapping for date)] D -/h27 [(3.8\240\240)(2.5.9 Mapping for dateTime)] D -/h28 [(3.9\240\240)(2.5.10 Mapping for duration)] D -/h29 [(3.10\240\240)(2.5.11 Mapping for gDay)] D -/h30 [(3.11\240\240)(2.5.12 Mapping for gMonth)] D -/h31 [(3.12\240\240)(2.5.13 Mapping for gMonthDay)] D -/h32 [(3.13\240\240)(2.5.14 Mapping for gYear)] D -/h33 [(3.14\240\240)(2.5.15 Mapping for gYearMonth)] D -/h34 [(3.15\240\240)(2.5.16 Mapping for time)] D -/h35 [(3.16\240\240)(2.6 Mapping for Simple Types)] D -/h36 [(3.16.1\240\240)(2.6.1 Mapping for Derivation by Restriction)] D -/h37 [(3.16.2\240\240)(2.6.2 Mapping for Enumerations)] D -/h38 [(3.16.3\240\240)(2.6.3 Mapping for Derivation by List)] D -/h39 [(3.16.4\240\240)(2.6.4 Mapping for Derivation by Union)] D -/h40 [(3.17\240\240)(2.7 Mapping for Complex Types)] D -/h41 [(3.17.1\240\240)(2.7.1 Mapping for Derivation by Extension)] D -/h42 [(3.17.2\240\240)(2.7.2 Mapping for Derivation by Restriction)] D -/h43 [(3.18\240\240)(2.8 Mapping for Local Elements and Attributes)] D -/h44 [(3.18.1\240\240)(2.8.1 Mapping for Members with the One Cardinality Class)] D -/h45 [(3.18.2\240\240)(2.8.2 Mapping for Members with the Optional Cardinality Class)] D -/h46 [(3.18.3\240\240)(2.8.3 Mapping for Members with the Sequence Cardinality Class)] D -/h47 [(3.19\240\240)(2.9 Mapping for Global Elements)] D -/h48 [(3.19.1\240\240)(2.9.1 Element Types)] D -/h49 [(3.19.2\240\240)(2.9.2 Element Map)] D -/h50 [(3.20\240\240)(2.10 Mapping for Global Attributes)] D -/h51 [(3.21\240\240)(2.11 Mapping for xsi:type and Substitution Groups)] D -/h52 [(3.22\240\240)(2.12 Mapping for any and anyAttribute)] D -/h53 [(3.22.1\240\240)(2.12.1 Mapping for any with the One Cardinality Class)] D -/h54 [(3.22.2\240\240)(2.12.2 Mapping for any with the Optional Cardinality Class)] D -/h55 [(3.22.3\240\240)(2.12.3 Mapping for any with the Sequence Cardinality Class)] D -/h56 [(3.22.4\240\240)(2.12.4 Mapping for anyAttribute)] D -/h57 [(3.23\240\240)(2.13 Mapping for Mixed Content Models)] D -/h58 [(4\240\240)(3 Parsing)] D -/h59 [(4.1\240\240)(3.1 Initializing the Xerces-C++ Runtime)] D -/h60 [(4.2\240\240)(3.2 Flags and Properties)] D -/h61 [(4.3\240\240)(3.3 Error Handling)] D -/h62 [(4.3.1\240\240)(3.3.1 xml_schema::parsing)] D -/h63 [(4.3.2\240\240)(3.3.2 xml_schema::expected_element)] D -/h64 [(4.3.3\240\240)(3.3.3 xml_schema::unexpected_element)] D -/h65 [(4.3.4\240\240)(3.3.4 xml_schema::expected_attribute)] D -/h66 [(4.3.5\240\240)(3.3.5 xml_schema::unexpected_enumerator)] D -/h67 [(4.3.6\240\240)(3.3.6 xml_schema::expected_text_content)] D -/h68 [(4.3.7\240\240)(3.3.7 xml_schema::no_type_info)] D -/h69 [(4.3.8\240\240)(3.3.8 xml_schema::not_derived)] D -/h70 [(4.3.9\240\240)(3.3.9 xml_schema::no_prefix_mapping)] D -/h71 [(4.4\240\240)(3.4 Reading from a Local File or URI)] D -/h72 [(4.5\240\240)(3.5 Reading from std::istream)] D -/h73 [(4.6\240\240)(3.6 Reading from xercesc::InputSource)] D -/h74 [(4.7\240\240)(3.7 Reading from DOM)] D -/h75 [(5\240\240)(4 Serialization)] D -/h76 [(5.1\240\240)(4.1 Initializing the Xerces-C++ Runtime)] D -/h77 [(5.2\240\240)(4.2 Namespace Infomap and Character Encoding)] D -/h78 [(5.3\240\240)(4.3 Flags)] D -/h79 [(5.4\240\240)(4.4 Error Handling)] D -/h80 [(5.4.1\240\240)(4.4.1 xml_schema::serialization)] D -/h81 [(5.4.2\240\240)(4.4.2 xml_schema::unexpected_element)] D -/h82 [(5.4.3\240\240)(4.4.3 xml_schema::no_type_info)] D -/h83 [(5.5\240\240)(4.5 Serializing to std::ostream)] D -/h84 [(5.6\240\240)(4.6 Serializing to xercesc::XMLFormatTarget)] D -/h85 [(5.7\240\240)(4.7 Serializing to DOM)] D -/h86 [(6\240\240)(5 Additional Functionality)] D -/h87 [(6.1\240\240)(5.1 DOM Association)] D -/h88 [(6.2\240\240)(5.2 Binary Serialization)] D -/h89 [(7\240\240)(Appendix A \236 Default and Fixed Values)] D -/Hr [94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 -112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 -130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 -148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 -166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182]D -/HV [1 2 2 1 1 2 3 3 3 3 2 3 2 3 3 3 2 2 3 3 3 3 3 3 2 2 2 2 2 2 2 2 2 -2 2 3 3 3 3 2 3 3 2 3 3 3 2 3 3 2 2 2 3 3 3 3 2 1 2 2 2 3 3 3 3 3 3 3 3 -3 2 2 2 2 1 2 2 2 2 3 3 3 2 2 2 1 2 2 1]D -/Cn [2 0 0 0 23 4 0 0 0 0 1 0 3 0 0 0 0 6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 4 0 0 0 0 2 0 0 3 0 0 0 2 0 0 0 0 4 0 0 0 0 0 7 0 0 9 0 0 0 0 0 0 0 0 -0 0 0 0 0 7 0 0 0 3 0 0 0 0 0 0 2 0 0 0]D -Hr length 0 gt{[/PageMode /UseOutlines /DOCVIEW pdfmark}if -/Hn 1 D -0 1 Hr length 1 sub{ - /Bn E D [Cn Bn get dup 0 gt{/Count E HV Bn get Bl ge{neg}if}{pop}ie - /Dest Hr Bn get dup abs ST cvs cvn E 0 ge{(h)Hn ST cvs join cvx exec - dup 1 get E Nf{0 get E join}{pop}ie /Hn Hn 1 add D}{()}ie - /Title E dup length 255 gt{0 255 getinterval}if /OUT pdfmark}for -ZF /FN Fp D Ps 0 FS /WC Wf{( )}{}ie SW pop D -ET RC ZF -/Df f D -/R0 (http://www.codesynthesis.com/licenses/fdl-1.2.txt) D -/R1 (http://www.codesynthesis.com/projects/xsd/documentation/cxx/tree/manual/index.xhtml) D -/R2 (http://www.codesynthesis.com/projects/xsd/documentation/cxx/tree/manual/cxx-tree-manual.pdf) D -/R3 (http://www.codesynthesis.com/projects/xsd/documentation/cxx/tree/manual/cxx-tree-manual.ps) D -/R1 (http://www.codesynthesis.com/products/xsd) D -/R2 (http://codesynthesis.com/projects/xsd/documentation/cxx/tree/manual/index.xhtml) D -/R3 (http://codesynthesis.com/projects/xsd/documentation/cxx/tree/manual/cxx-tree-manual.pdf) D -/R4 (http://codesynthesis.com/projects/xsd/documentation/cxx/tree/manual/cxx-tree-manual.ps) D -/R5 (http://www.codesynthesis.com/projects/xsd/documentation/cxx/tree/guide/) D -/R6 (http://wiki.codesynthesis.com/Tree/Customization_guide) D -/R7 (http://www.codesynthesis.com/projects/xsd/documentation/cxx/tree/dbxml/) D -/R8 (http://wiki.codesynthesis.com/Tree/FAQ) D -/R9 (http://www.codesynthesis.com/projects/xsd/documentation/xsd.xhtml) D -/R10 (http://www.codesynthesis.com/mailman/listinfo/xsd-users) D -/R11 (http://www.codesynthesis.com/pipermail/xsd-users/) D -/R12 (http://en.wikipedia.org/wiki/Character_code) D -/TS { - tables E get /table E D - table aload pop /rdesc E D /cdesc E D /tdesc E D - tdesc aload pop /capalg E D /caption E D /rules E D /frame E D /nfoot E D - /nhead E D /ncol E D /nrow E D /border E D /twid E D /units E D /talign E D - /flow E D /clear E D /tclass E D pop pop - /w W D /eps 0.1 D /OU f D /PL 1 D - /FN EF 21 get D EZ 21 get Ey 21 get FS - 0 1 1{ - /pass E D - 0 1 nrow{ - /irow E D - /cells rdesc irow get 6 get D - 0 1 ncol{ - /icol E D - /cell cells icol get D - cell 0 ne{ - cell aload pop /ang E D /CB E D pop pop pop - /DV E D /bot E D /top E D /right E D /left E D /nowrap E D /valign E D - /dp E D /align E D /rspan E D /cspan E D /cclass E D /ctype E D /cmax E D - /cmin E D /proc E D - rspan 0 eq{/rspan nrow irow sub 1 add D}if - cspan 0 eq{/cspan ncol icol sub 1 add D}if - pass 0 eq cspan 1 eq and pass 1 eq cspan 1 gt and or{ - /W 1e5 D /LL W D /PH 1 D - ctype 1 eq{() BD}if - RC align NA - AT 4 eq{/CD t D /DC dp D /LN 0 D /M1 0 D /M2 0 D}{/CD f D}ie - 0 0 M /LM 0 D proc exec BN - AT 4 eq{ - LN array astore cell 15 3 -1 roll put - cdesc icol get dup dup 5 get M1 lt{5 M1 put}{5 get /M1 E D}ie - dup 6 get M2 lt{6 M2 put}{6 get /M2 E D}ie - /LM M1 M2 add D - }if - /CD f D - ang 0 ne{/LM CP E pop neg D}if - /thiswid LM left add right add eps add D - /oldmin 0 D /oldmax 0 D - 0 1 cspan 1 sub{ - icol add cdesc E get dup 2 get /oldmax E oldmax add D - 1 get /oldmin E oldmin add D - }for - thiswid oldmax ge{ - 0 1 cspan 1 sub{ - icol add cdesc E get dup 2 E 2 get oldmax 0 eq - {pop thiswid cspan div}{thiswid mul oldmax div}ie - put - }for - }if - nowrap 1 eq{ - thiswid oldmin ge{ - 0 1 cspan 1 sub{ - icol add cdesc E get dup 1 E 1 get oldmin 0 eq - {pop thiswid cspan div}{thiswid mul oldmin div}ie - put - }for - }if - }{ - /W 0 D /LL W D /PH 2 D - ctype 1 eq{() ES () BD}if - 0 0 M /LM 0 D RC proc exec BN - /thiswid LM left add right add eps add D - thiswid oldmin ge{ - 0 1 cspan 1 sub{ - icol add cdesc E get dup 1 E 1 get oldmin 0 eq - {pop thiswid cspan div}{thiswid mul oldmin div}ie - put - }for - }if - }ie - ctype 1 eq{() ES}if - }if - }if - }for - }for - }for - /tmin 0 D /tmax 0 D - 0 1 ncol{ - cdesc E get dup 1 get E 2 get 2 copy gt{pop dup}if - tmax add /tmax E D tmin add /tmin E D - }for - twid 0 lt{twid neg IW gt{IW neg}{twid}ie /twid E D}if - tdesc 0 twid neg tmin 2 copy lt{E}if pop put - tdesc 1 twid neg tmax 2 copy lt{E}if pop put - /W w D /LL W D /OU t D /PH 0 D /PL 0 D -} D -/PT { - /PL PL 1 add D - tables E get /table E D Tm 21 get Ts mul BE - PL 2 ge{save}if - /SL SL 1 add D /FN EF 21 get D EZ 21 get Ey 21 get FS - table aload pop /rdesc E D /cdesc E D /tdesc E D - tdesc aload pop /capalg E D /caption E D /rules E D /frame E D /nfoot E D - /nhead E D /ncol E D /nrow E D /border E D /twid E D /units E D /talign E D - /flow E D /clear E D /tclass E D /tmax E D /tmin E D - /w W D /xo XO D /mr MR D /ll LL D /lg LG D /ai AI D /bc BC D /nr NR D /ar AR D - /tr TR D /ui UI D /ph PH D /a0 A0 D /pf PF D /at AT D /av AV D /al AL D - /Le LE D /la La D - talign 0 lt{/talign AL 0 gt{AV AL get}{A0 2 le{A0}{0}ie}ie D}if - ph 1 eq ph 2 eq or{ - NL ph 1 eq{tmax}{tmin}ie dup XO add LM gt{/LM E XO add D}{pop}ie LM E - }{ - /PH 3 D /LE 1e5 D RC %ZF - border 0 gt{/border 1 D}if - /twidth 0 D /avail W xo sub D - twid 0 eq{0 1 ncol{cdesc E get dup 2 get E 3 get dup 0 gt{div neg dup twid lt - {/twid E D}{pop}ie}{pop pop}ie}for}if - /twid twid dup 0 lt{neg avail 2 copy gt{E}if pop}{avail mul}ie D - /OK t D 0 1 ncol{cdesc E get dup 1 get E 3 get twid mul gt{/OK f D}if}for - 0 1 ncol{ - cdesc E get dup 1 get /colmin E D dup 3 get /cwid E twid mul D dup - tmax avail le{2 get}if - tmin avail le tmax avail gt and{ - dup 2 get E 1 get dup 3 1 roll sub avail tmin sub mul tmax tmin sub div add - }if - tmin avail gt{1 get}if - 0 E colmin cwid lt OK and{pop cwid}if dup /twidth E twidth add D put - }for - /OU f D CP - tmin twid le{ - 0 1 ncol{cdesc E get dup 0 get twidth div twid mul 0 E put}for - /twidth twid D - }if - CP printcap CP E pop sub /caphig E D pop - 0 1 1{ - /pass E D - 0 1 nrow{ - /irow E D - /cells rdesc irow get 6 get D - 0 1 ncol{ - /icol E D - /cell cells icol get D - cell 0 ne{ - cell aload pop /ang E D /CB E D pop pop pop - /DV E D /bot E D /top E D /right E D /left E D /nowrap E D /valign E D - /dp E D /align E D /rspan E D /cspan E D /cclass E D /ctype E D /cmax E D - /cmin E D /proc E D - rspan 0 eq{/rspan nrow irow sub 1 add D}if - cspan 0 eq{/cspan ncol icol sub 1 add D}if - /W 0 D - 0 1 cspan 1 sub{icol add cdesc E get 0 get /W E W add D}for - pass 0 eq rspan 1 eq and pass 1 eq rspan 1 gt and or{ - ctype 1 eq{() BD}if - /W W left sub right sub D /XO 0 D /EO 0 D SI - /A0 align D RC align NA - AT 4 eq{ - /DC dp D /DO 0 D /ID 1 D - 0 1 DV length 1 sub{DV E get dup DO gt{/DO E D}{pop}ie}for - /Lo DO DV 0 get sub D /L1 Lo D - }if - 0 0 M /BP t D /Fl t D /MF 0 D /FB 0 D - proc exec T not{/CI 0 D}if BN 0 FB neg R MF 0 eq{/MF CS D}if - CP /thishig E neg bot add top add CI add D pop - ang 0 ne{/thishig LM bot add top add D}if - cell 16 MF put cell 17 Ya put cell 18 thishig put - valign 4 eq{ - /below thishig Ya sub D - rdesc irow get dup dup 4 get Ya lt - {4 Ya put}{4 get /Ya E D}ie - dup 5 get below lt{5 below put}{5 get /below E D}ie - /thishig Ya below add D - }if - ctype 1 eq{()ES}if - /oldhig 0 D - 0 1 rspan 1 sub{ - irow add rdesc E get 0 get /oldhig E oldhig add D - }for - thishig oldhig ge{ - 0 1 rspan 1 sub{ - irow add rdesc E get dup 0 E 0 get oldhig 0 eq - {pop thishig rspan div}{thishig mul oldhig div}ie - put - }for - }if - }if - }if - }for - }for - }for M RC %ZF - /thight 0 D /racc 0 D /maxh 0 D /brk 0 D /rbeg nhead nfoot add D - 0 1 nrow{ - rdesc E get dup 0 get dup /thight E thight add D - brk 0 eq{/racc E D}{/racc E racc add D}ie - racc maxh gt{/maxh racc D}if 2 get /brk E D - }for - ph 3 ge{thight caphig add E}if - ph 0 eq ph 4 eq or{ - /PH 4 D /LE Le D /OU Ou D /yoff 0 D /headsz 0 D - 0 1 nhead 1 sub{rdesc E get 0 get headsz add /headsz E D}for - /footsz 0 D - 0 1 nfoot 1 sub{rdesc E nhead add get 0 get footsz add /footsz E D}for - /ahig LE BO add MI add D /maxh maxh headsz add footsz add D - /thight thight headsz add footsz add D - tmin avail gt maxh ahig gt or - {/Sf avail tmin div dup ahig maxh div gt{pop ahig maxh div}if D /SA t D} - {/Sf 1 D}ie - tclass 1 eq thight LE 15 sub gt and - {/SA t D LE 15 sub thight div dup Sf lt{/Sf E D}{pop}ie}if - SA{Sf Sf scale /ll ll Sf div D /xo xo Sf div D /LE LE Sf div D - /mr mr Sf div D /BO BO Sf div D /ahig ahig Sf div D}if - nhead nfoot add getwid - LE CP E pop add capalg 0 eq{caphig sub}if - bT{f}{dup thight lt thight ahig lt and}ie - E headsz sub footsz sub rwid lt or{NP}if - capalg 0 eq{printcap -8 SP}if - CP /ycur E D pop - printhead - rbeg 1 nrow{/row E D row - getwid - ycur yoff add rwid sub footsz sub LE add 0 lt - {nfoot 0 gt{printfoot}if Tf NP /rbeg irow1 D - Ba{MI /MI MI SA{Sf div}if D MI SP /MI E D}if - CP /ycur E D pop /yoff 0 D printhead}if - irow1 printrow - }for - printfoot /row row 1 add D Tf - 0 ycur yoff add M - capalg 1 eq{/EO 0 D SI -3 SP printcap}if - Sf 1 lt{1 Sf div dup scale /ll ll Sf mul D /xo xo Sf mul D /LE LE Sf mul D - /mr mr Sf mul D /BO BO Sf mul D /SA f D}if - /EO 0 D - }if - }ie - /W w D /XO xo D /MR mr D /LL ll D /LG lg D /AI ai D /BC bc D /NR nr D /AR ar D - /TR tr D /UI ui D /PH ph D /A0 a0 D /PF pf D /AT at D /AV av D /AL al D - /La la D - /SL SL 1 sub NN D /CF 0 D /FN 0 D SZ SL get FR SL get FS Wf not{()F2}if - PL 2 ge{Ms E restore Ms or /Ms E D PH 1 eq PH 2 eq or - {/LM E D}if PH 3 ge{/CI 0 D NL 0 E neg R}if - }if - /PL PL 1 sub D /CI 0 D /BP f D /PO f D () Bm 21 get Ts mul BE BL %CF CS SF -} D -/printcap{ - capalg 0 ge{ - SA{/W w Sf div D} - {talign 1 eq{/XO xo ll twidth sub 2 div add D}if - talign 2 eq{/XO xo ll twidth sub add D}if - /W XO twidth add D - }ie /XO xo D /LL W XO sub MR sub D - /PA f D /Fl capalg 0 eq D - 1 NA BL caption exec BN OA /PA t D - }if -} D -/getwid{ - /irow1 E D - /irow2 irow1 D - /rwid 0 D - {rdesc irow2 get dup 0 get rwid add /rwid E D 2 get 0 eq - {exit}{/irow2 irow2 1 add D}ie - }loop -} D -/printrow{ - /xoff ll twidth PL 2 ge{Sf div}if sub talign mul 2 div D - /xleft xoff xo add D - /irow E D - /cells rdesc irow get 6 get D - 0 1 ncol{ - /icol E D - /cell cells icol get D - cell 0 ne{ - cell aload pop /ang E D /CB E D /cvsize E D /above E D /fontsz E D - /DV E D /bot E D /top E D /right E D /left E D /nowrap E D /valign E D - /dp E D /align E D /rspan E D /cspan E D /cclass E D /ctype E D /cmax E D - /cmin E D /proc E D - rspan 0 eq{/rspan nrow irow sub 1 add D}if - cspan 0 eq{/cspan ncol icol sub 1 add D}if - /width 0 D - 0 1 cspan 1 sub{icol add cdesc E get 0 get /width E width add D}for - /rhight rdesc irow get 0 get D - /hight rhight D - 1 1 rspan 1 sub{irow add rdesc E get 0 get /hight E hight add D}for - /W xo xoff add width add right sub D - ang 0 ne{/W xo xoff add hight add right sub D}if - /EO xo xoff add left add D SI - Cf{ - gsave CB VC xo xoff add ycur yoff add M - 0 hight neg RL width 0 RL 0 hight RL width neg 0 RL fill - grestore - }if - ctype 1 eq{() BD}if - /A0 align D RC - AT 4 eq{ - /DC dp D /ID 1 D /DO cdesc icol get 5 get D /Lo DO DV 0 get sub D /L1 Lo D - }if - ang 0 ne{ - gsave ang 90 eq - {xoff ycur add hight cvsize sub 2 div sub ycur hight sub xoff sub} - {xoff ycur sub width add hight cvsize sub 2 div add ycur xoff add}ie - translate ang rotate - }if - valign 3 le{0 ycur yoff add top sub - hight cvsize sub valign 1 sub mul 2 div sub M} - {0 ycur yoff add top sub above add rdesc irow get 4 get sub M}ie - /PA f D /BP t D /Fl t D - BL proc exec BN - ang 0 ne{grestore}if - /PA t D - ctype 1 eq{() ES}if - }if - /xoff xoff cdesc icol get 0 get add D - }for - /yoff yoff rhight sub D -} D -/printhead {0 1 nhead 1 sub{printrow}for} D -/printfoot {nhead 1 nhead nfoot add 1 sub{printrow}for} D -/Tf { - OU{rules 2 ge{/yoff 0 D - gsave 0 Sg - [0 1 nhead 1 sub{}for rbeg 1 row 1 sub{}for nhead 1 nhead nfoot add 1 sub{}for]{ - /irow E D - /xoff ll twidth PL 2 ge{Sf div}if sub talign mul 2 div D - /cells rdesc irow get 6 get D - 0 1 ncol{ - /icol E D - /cell cells icol get D - cell 0 ne{ - /rspan cell 6 get D - /cspan cell 5 get D - rspan 0 eq{/rspan nrow irow sub 1 add D}if - cspan 0 eq{/cspan ncol icol sub 1 add D}if - /width 0 D - 0 1 cspan 1 sub{icol add cdesc E get 0 get /width E width add D}for - /rhight rdesc irow get 0 get D - /hight rhight D - 1 1 rspan 1 sub{irow add rdesc E get 0 get /hight E hight add D}for - xo xoff add width add ycur yoff add M - 0 hight neg icol cspan add 1 sub ncol lt - {cdesc icol 1 add get 4 get dup rules 3 le{1 eq}{pop t}ie - {1 eq{0.8}{0.3}ie - LW RL CP stroke M}{pop R}ie}{R}ie - irow nhead nfoot add 1 sub ne nfoot 0 eq or - {irow rspan add 1 sub nrow lt - {rdesc irow rspan add get 3 get}{nfoot 0 eq{0}{1}ie}ie - dup rules 2 mod 0 eq{1 eq}{pop t}ie - {1 eq irow rspan add nhead eq or irow rspan add row eq nfoot 0 gt and or - {0.8}{0.3}ie LW width neg 0 RL CP stroke M}{pop}ie}if - }if - /xoff xoff cdesc icol get 0 get add D - }for - /yoff yoff rhight sub D - }forall - grestore - /Ms t D - }if - frame 1 gt{ - gsave - 1 LW 0 Sg - xleft ycur M CP BB - 0 yoff frame 5 eq frame 7 ge or{RL}{R}ie - twidth 0 frame 3 eq frame 4 eq or frame 8 ge or{RL}{R}ie CP BB - 0 yoff neg frame 6 ge{RL}{R}ie - twidth neg 0 frame 2 eq frame 4 eq or frame 8 ge or{RL}{R}ie - closepath stroke - grestore - /Ms t D - }if - }if -} D -/tables [[[0 0 0 0 0 -1 0 0 1 58 2 0 0 9 5 {()} -1] - [[0 0 0 0 0 0 0][0 0 0 0 0 0 0][0 0 0 0 0 0 0]] - [[0 0 0 0 0 0 [[{()1 Sl()WB(XML Schema type)} 0 0 1 0 1 1 1 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB(Alias in the )SM(xml_schema)ES( names)HY(pace)YH()} 0 0 1 0 1 1 1 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB(C++ type - )} 0 0 1 0 1 1 1 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -]] -[0 0 0 0 0 0 [[{()1 Sl()WB(anyType and anySim)HY(ple)HY(Type)YH( types - )} 0 0 1 0 3 1 1 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -0 -0 -]] -[0 0 0 0 0 0 [[{()1 Sl()WB()SM(anyType)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()SM(type)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()0 23 1 A(Section 2.5.2, "Mapping for )SM(anyType)ES(")23 0 TN TL()Ec /AF f D( - )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -]] -[0 0 0 0 0 0 [[{()1 Sl()WB()SM(anySim)HY(ple)HY(Type)YH()ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()SM(simple_type)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()0 24 1 A(Section 2.5.3, "Mapping for )SM(anySim)HY(ple)HY(Type)YH()ES(")24 0 TN TL()Ec /AF f D( - )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -]] -[0 0 0 0 0 0 [[{()1 Sl()WB(fixed-length inte)HY(gral)YH( types - )} 0 0 1 0 3 1 1 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -0 -0 -]] -[0 0 0 0 0 0 [[{()1 Sl()WB()SM(byte)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()SM(byte)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()SM(signed\240char)ES( - )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -]] -[0 0 0 0 0 0 [[{()1 Sl()WB()SM(unsigned)HY(Byte)YH()ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()SM(unsigned_byte)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()SM(unsigned\240char)ES( - )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -]] -[0 0 0 0 0 0 [[{()1 Sl()WB()SM(short)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()SM(short_)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()SM(short)ES( - )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -]] -[0 0 0 0 0 0 [[{()1 Sl()WB()SM(unsigned)HY(Short)YH()ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()SM(unsigned_short)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()SM(unsigned\240short)ES( - )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -]] -[0 0 0 0 0 0 [[{()1 Sl()WB()SM(int)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()SM(int_)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()SM(int)ES( - )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -]] -[0 0 0 0 0 0 [[{()1 Sl()WB()SM(unsignedInt)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()SM(unsigned_int)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()SM(unsigned\240int)ES( - )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -]] -[0 0 0 0 0 0 [[{()1 Sl()WB()SM(long)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()SM(long_)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()SM(long\240long)ES( - )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -]] -[0 0 0 0 0 0 [[{()1 Sl()WB()SM(unsigned)HY(Long)YH()ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()SM(unsigned_long)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()SM(unsigned\240long\240long)ES( - )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -]] -[0 0 0 0 0 0 [[{()1 Sl()WB(arbi)HY(trary)YH(-length inte)HY(gral)YH( types - )} 0 0 1 0 3 1 1 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -0 -0 -]] -[0 0 0 0 0 0 [[{()1 Sl()WB()SM(integer)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()SM(integer)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()SM(long\240long)ES( - )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -]] -[0 0 0 0 0 0 [[{()1 Sl()WB()SM(nonPos)HY(i)HY(tiveIn)HY(te)HY(ger)YH()ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()SM(non_posi)HY(tive)YH(_integer)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()SM(long\240long)ES( - )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -]] -[0 0 0 0 0 0 [[{()1 Sl()WB()SM(nonNeg)HY(a)HY(tiveIn)HY(te)HY(ger)YH()ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()SM(non_nega)HY(tive)YH(_integer)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()SM(unsigned long\240long)ES( - )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -]] -[0 0 0 0 0 0 [[{()1 Sl()WB()SM(posi)HY(tiveIn)HY(te)HY(ger)YH()ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()SM(posi)HY(tive)YH(_integer)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()SM(unsigned long\240long)ES( - )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -]] -[0 0 0 0 0 0 [[{()1 Sl()WB()SM(nega)HY(tiveIn)HY(te)HY(ger)YH()ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()SM(nega)HY(tive)YH(_integer)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()SM(long\240long)ES( - )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -]] -[0 0 0 0 0 0 [[{()1 Sl()WB(boolean types - )} 0 0 1 0 3 1 1 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -0 -0 -]] -[0 0 0 0 0 0 [[{()1 Sl()WB()SM(boolean)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()SM(boolean)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()SM(bool)ES( - )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -]] -[0 0 0 0 0 0 [[{()1 Sl()WB(fixed-preci)HY(sion)YH( float)HY(ing)YH(-point types - )} 0 0 1 0 3 1 1 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -0 -0 -]] -[0 0 0 0 0 0 [[{()1 Sl()WB()SM(float)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()SM(float_)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()SM(float)ES( - )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -]] -[0 0 0 0 0 0 [[{()1 Sl()WB()SM(double)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()SM(double_)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()SM(double)ES( - )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -]] -[0 0 0 0 0 0 [[{()1 Sl()WB(arbi)HY(trary)YH(-preci)HY(sion)YH( float)HY(ing)YH(-point types - )} 0 0 1 0 3 1 1 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -0 -0 -]] -[0 0 0 0 0 0 [[{()1 Sl()WB()SM(decimal)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()SM(decimal)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()SM(double)ES( - )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -]] -[0 0 0 0 0 0 [[{()1 Sl()WB(string types - )} 0 0 1 0 3 1 1 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -0 -0 -]] -[0 0 0 0 0 0 [[{()1 Sl()WB()SM(string)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()SM(string)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB(type derived from )SM(std::basic_string)ES( - )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -]] -[0 0 0 0 0 0 [[{()1 Sl()WB()SM(normal)HY(ized)HY(String)YH()ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()SM(normal)HY(ized)YH(_string)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB(type derived from )SM(string)ES( - )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -]] -[0 0 0 0 0 0 [[{()1 Sl()WB()SM(token)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()SM(token)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB(type\240derived\240from\240)SM(normal)HY(ized)YH(_string)ES( - )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -]] -[0 0 0 0 0 0 [[{()1 Sl()WB()SM(Name)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()SM(name)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB(type derived from )SM(token)ES( - )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -]] -[0 0 0 0 0 0 [[{()1 Sl()WB()SM(NMTOKEN)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()SM(nmtoken)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB(type derived from )SM(token)ES( - )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -]] -[0 0 0 0 0 0 [[{()1 Sl()WB()SM(NMTO)HY(KENS)YH()ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()SM(nmto)HY(kens)YH()ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB(type derived from )SM(sequence)ES( - )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -]] -[0 0 0 0 0 0 [[{()1 Sl()WB()SM(NCName)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()SM(ncname)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB(type derived from )SM(name)ES( - )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -]] -[0 0 0 0 0 0 [[{()1 Sl()WB()SM(language)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()SM(language)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB(type derived from )SM(token)ES( - )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -]] -[0 0 0 0 0 0 [[{()1 Sl()WB(qual)HY(i)HY(fied)YH( name - )} 0 0 1 0 3 1 1 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -0 -0 -]] -[0 0 0 0 0 0 [[{()1 Sl()WB()SM(QName)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()SM(qname)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()0 25 1 A(Section 2.5.4, "Mapping for )SM(QName)ES(")25 0 TN TL()Ec /AF f D( - )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -]] -[0 0 0 0 0 0 [[{()1 Sl()WB(ID/IDREF types - )} 0 0 1 0 3 1 1 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -0 -0 -]] -[0 0 0 0 0 0 [[{()1 Sl()WB()SM(ID)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()SM(id)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB(type derived from )SM(ncname)ES( - )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -]] -[0 0 0 0 0 0 [[{()1 Sl()WB()SM(IDREF)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()SM(idref)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()0 26 1 A(Section 2.5.5, "Mapping for )SM(IDREF)ES(")26 0 TN TL()Ec /AF f D( - )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -]] -[0 0 0 0 0 0 [[{()1 Sl()WB()SM(IDREFS)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()SM(idrefs)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB(type derived from )SM(sequence)ES( - )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -]] -[0 0 0 0 0 0 [[{()1 Sl()WB(URI types - )} 0 0 1 0 3 1 1 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -0 -0 -]] -[0 0 0 0 0 0 [[{()1 Sl()WB()SM(anyURI)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()SM(uri)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB(type derived from )SM(std::basic_string)ES( - )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -]] -[0 0 0 0 0 0 [[{()1 Sl()WB(binary types - )} 0 0 1 0 3 1 1 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -0 -0 -]] -[0 0 1 0 0 0 [[{()1 Sl()WB()SM(base64Binary)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()SM(base64_binary)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()0 27 1 A(Section 2.5.6, "Mapping for - )SM(base64Binary)ES( and )SM(hexBi)HY(nary)YH()ES(")27 0 TN TL()Ec /AF f D( - )} 0 0 0 0 1 2 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -]] -[0 0 0 0 0 0 [[{()1 Sl()WB()SM(hexBi)HY(nary)YH()ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()SM(hex_binary)ES( - )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -0 -]] -[0 0 0 0 0 0 [[{()1 Sl()WB(date/time types - )} 0 0 1 0 3 1 1 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -0 -0 -]] -[0 0 0 0 0 0 [[{()1 Sl()WB()SM(date)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()SM(date)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()0 29 1 A(Section 2.5.8, "Mapping for - )SM(date)ES(")29 0 TN TL()Ec /AF f D( - )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -]] -[0 0 0 0 0 0 [[{()1 Sl()WB()SM(date)HY(Time)YH()ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()SM(date_time)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()0 30 1 A(Section 2.5.9, "Mapping for - )SM(date)HY(Time)YH()ES(")30 0 TN TL()Ec /AF f D( - )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -]] -[0 0 0 0 0 0 [[{()1 Sl()WB()SM(dura)HY(tion)YH()ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()SM(dura)HY(tion)YH()ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()0 31 1 A(Section 2.5.10, "Mapping for - )SM(dura)HY(tion)YH()ES(")31 0 TN TL()Ec /AF f D( - )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -]] -[0 0 0 0 0 0 [[{()1 Sl()WB()SM(gDay)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()SM(gday)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()0 32 1 A(Section 2.5.11, "Mapping for - )SM(gDay)ES(")32 0 TN TL()Ec /AF f D( - )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -]] -[0 0 0 0 0 0 [[{()1 Sl()WB()SM(gMonth)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()SM(gmonth)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()0 33 1 A(Section 2.5.12, "Mapping for - )SM(gMonth)ES(")33 0 TN TL()Ec /AF f D( - )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -]] -[0 0 0 0 0 0 [[{()1 Sl()WB()SM(gMon)HY(th)HY(Day)YH()ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()SM(gmonth_day)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()0 34 1 A(Section 2.5.13, "Mapping for - )SM(gMon)HY(th)HY(Day)YH()ES(")34 0 TN TL()Ec /AF f D( - )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -]] -[0 0 0 0 0 0 [[{()1 Sl()WB()SM(gYear)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()SM(gyear)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()0 35 1 A(Section 2.5.14, "Mapping for - )SM(gYear)ES(")35 0 TN TL()Ec /AF f D( - )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -]] -[0 0 0 0 0 0 [[{()1 Sl()WB()SM(gYear)HY(Month)YH()ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()SM(gyear_month)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()0 36 1 A(Section 2.5.15, "Mapping for - )SM(gYear)HY(Month)YH()ES(")36 0 TN TL()Ec /AF f D( - )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -]] -[0 0 0 0 0 0 [[{()1 Sl()WB()SM(time)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()SM(time)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()0 37 1 A(Section 2.5.16, "Mapping for - )SM(time)ES(")37 0 TN TL()Ec /AF f D( - )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -]] -[0 0 0 0 0 0 [[{()1 Sl()WB(entity types - )} 0 0 1 0 3 1 1 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -0 -0 -]] -[0 0 0 0 0 0 [[{()1 Sl()WB()SM(ENTITY)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()SM(entity)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB(type derived from )SM(name)ES( - )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -]] -[0 0 0 0 0 0 [[{()1 Sl()WB()SM(ENTI)HY(TIES)YH()ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()SM(enti)HY(ties)YH()ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB(type derived from )SM(sequence)ES( - )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -]] -]] -[[0 0 0 0 0 -1 0 0 1 8 5 0 0 9 5 {()} -1] - [[0 0 0 0 0 0 0][0 0 0 0 0 0 0][0 0 0 0 0 0 0][0 0 0 0 0 0 0][0 0 0 0 0 0 0][0 0 0 0 0 0 0]] - [[0 0 0 0 0 0 [[{()1 Sl()WB()} 0 0 1 0 1 1 1 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB()} 0 0 1 0 1 1 1 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB(default)} 0 0 1 0 2 1 1 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -0 -[{()1 Sl()WB(fixed - )} 0 0 1 0 2 1 1 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -0 -]] -[0 0 1 0 0 0 [[{()1 Sl()WB(element)} 0 0 1 0 1 4 1 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB(not present)} 0 0 1 0 1 2 1 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB(optional)} 0 0 1 0 1 1 1 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB(required)} 0 0 1 0 1 1 1 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB(optional)} 0 0 1 0 1 1 1 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB(required - )} 0 0 1 0 1 1 1 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -]] -[0 0 1 0 0 0 [0 -0 -[{()1 Sl()WB(not present)} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB(invalid instance)} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB(not present)} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB(invalid instance - )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -]] -[0 0 1 0 0 0 [0 -[{()1 Sl()WB(empty)} 0 0 1 0 1 1 1 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB(default value is used)} 0 0 0 0 2 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -0 -[{()1 Sl()WB(fixed value is used - )} 0 0 0 0 2 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -0 -]] -[0 0 0 0 0 0 [0 -[{()1 Sl()WB(value)} 0 0 1 0 1 1 1 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB(value is used)} 0 0 0 0 2 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -0 -[{()1 Sl()WB(value is used provided it's the same as fixed - )} 0 0 0 0 2 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -0 -]] -[0 0 1 0 0 0 [[{()1 Sl()WB(attribute)} 0 0 1 0 1 4 1 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB(not present)} 0 0 1 0 1 2 1 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB(optional)} 0 0 1 0 1 1 1 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB(required)} 0 0 1 0 1 1 1 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB(optional)} 0 0 1 0 1 1 1 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB(required - )} 0 0 1 0 1 1 1 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -]] -[0 0 1 0 0 0 [0 -0 -[{()1 Sl()WB(default value is used)} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB(invalid schema)} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB(fixed value is used)} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB(invalid instance - )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -]] -[0 0 1 0 0 0 [0 -[{()1 Sl()WB(empty)} 0 0 1 0 1 1 1 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB(empty value is used)} 0 0 0 0 2 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -0 -[{()1 Sl()WB(empty value is used provided it's the same as fixed - )} 0 0 0 0 2 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -0 -]] -[0 0 0 0 0 0 [0 -[{()1 Sl()WB(value)} 0 0 1 0 1 1 1 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -[{()1 Sl()WB(value is used)} 0 0 0 0 2 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -0 -[{()1 Sl()WB(value is used provided it's the same as fixed - )} 0 0 0 0 2 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] -0 -]] -]] -] D -0 1 1{TS}for RC ZF -/Ba f D /BO 0 D Bs -/UR (/home/boris/work/xsd/xsd/documentation/cxx/tree/manual/index.xhtml) D -/Ti (C++/Tree Mapping User Manual) D -/Au () D -/Df f D -/ME [(2.3.0)] D -Pt -/BO 0 D TC /Ba f D Bs /AU f D /UR () D RC ZF - tH WB -ND 1 gt{Ts 3 mul Np 0()0 C()BD(C++/Tree Mapping User Manual)ES()0 1 TN()EA()BN}if -1 NH le{94(1\240\240)1 C(Preface)WB 3 Sn()94 1 TN()EA()BN}if -2 NH le{95(1.1\240\240)2 C(About)WB 4 Sn( This Docu)HY(ment)YH()95 1 TN()EA()BN}if -2 NH le{96(1.2\240\240)2 C(More)WB 5 Sn( Infor)HY(ma)HY(tion)YH()96 1 TN()EA()BN}if -1 NH le{97(2\240\240)1 C(1)WB 6 Sn( Intro)HY(duc)HY(tion)YH()97 1 TN()EA()BN}if -1 NH le{98(3\240\240)1 C(2)WB 7 Sn( C++/Tree Mapping)98 1 TN()EA()BN}if -2 NH le{99(3.1\240\240)2 C(2.1)WB 8 Sn( Prelim)HY(i)HY(nary)YH( Infor)HY(ma)HY(tion)YH()99 1 TN()EA()BN}if -3 NH le{100(3.1.1\240\240)3 C(2.1.1)WB 9 Sn( Iden)HY(ti)HY(fiers)YH()100 1 TN()EA()BN}if -3 NH le{101(3.1.2\240\240)3 C(2.1.2)WB 10 Sn( Char)HY(ac)HY(ter)YH( Type and Encod)HY(ing)YH()101 1 TN()EA()BN}if -3 NH le{102(3.1.3\240\240)3 C(2.1.3)WB 11 Sn( XML Schema Names)HY(pace)YH()102 1 TN()EA()BN}if -3 NH le{103(3.1.4\240\240)3 C(2.1.4)WB 12 Sn( Anony)HY(mous)YH( Types)103 1 TN()EA()BN}if -2 NH le{104(3.2\240\240)2 C(2.2)WB 13 Sn( Error Handling)104 1 TN()EA()BN}if -3 NH le{105(3.2.1\240\240)3 C(2.2.1)WB 14 Sn( )SM(xml_schema::dupli)HY(cate)YH(_id)ES()105 1 TN()EA()BN}if -2 NH le{106(3.3\240\240)2 C(2.3)WB 15 Sn( Mapping for )SM(import)ES( and )SM(include)ES()106 1 TN()EA()BN}if -3 NH le{107(3.3.1\240\240)3 C(2.3.1)WB 16 Sn( Import)107 1 TN()EA()BN}if -3 NH le{108(3.3.2\240\240)3 C(2.3.2)WB 17 Sn( Inclu)HY(sion)YH( with Target Names)HY(pace)YH()108 1 TN()EA()BN}if -3 NH le{109(3.3.3\240\240)3 C(2.3.3)WB 18 Sn( Inclu)HY(sion)YH( without Target Names)HY(pace)YH()109 1 TN()EA()BN}if -2 NH le{110(3.4\240\240)2 C(2.4)WB 19 Sn( Mapping for Names)HY(paces)YH()110 1 TN()EA()BN}if -2 NH le{111(3.5\240\240)2 C(2.5)WB 20 Sn( Mapping for Built-in Data Types)111 1 TN()EA()BN}if -3 NH le{112(3.5.1\240\240)3 C(2.5.1)WB 22 Sn( Inher)HY(i)HY(tance)YH( from Built-in Data Types)112 1 TN()EA()BN}if -3 NH le{113(3.5.2\240\240)3 C(2.5.2)WB 23 Sn( Mapping for )SM(anyType)ES()113 1 TN()EA()BN}if -3 NH le{114(3.5.3\240\240)3 C(2.5.3)WB 24 Sn( Mapping for )SM(anySim)HY(ple)HY(Type)YH()ES()114 1 TN()EA()BN}if -3 NH le{115(3.5.4\240\240)3 C(2.5.4)WB 25 Sn( Mapping for )SM(QName)ES()115 1 TN()EA()BN}if -3 NH le{116(3.5.5\240\240)3 C(2.5.5)WB 26 Sn( Mapping for )SM(IDREF)ES()116 1 TN()EA()BN}if -3 NH le{117(3.5.6\240\240)3 C(2.5.6)WB 27 Sn( Mapping for )SM(base64Binary)ES( and - )SM(hexBi)HY(nary)YH()ES()117 1 TN()EA()BN}if -2 NH le{118(3.6\240\240)2 C(2.5.7)WB 28 Sn( Time Zone Repre)HY(sen)HY(ta)HY(tion)YH()118 1 TN()EA()BN}if -2 NH le{119(3.7\240\240)2 C(2.5.8)WB 29 Sn( Mapping for )SM(date)ES()119 1 TN()EA()BN}if -2 NH le{120(3.8\240\240)2 C(2.5.9)WB 30 Sn( Mapping for )SM(date)HY(Time)YH()ES()120 1 TN()EA()BN}if -2 NH le{121(3.9\240\240)2 C(2.5.10)WB 31 Sn( Mapping for )SM(dura)HY(tion)YH()ES()121 1 TN()EA()BN}if -2 NH le{122(3.10\240\240)2 C(2.5.11)WB 32 Sn( Mapping for )SM(gDay)ES()122 1 TN()EA()BN}if -2 NH le{123(3.11\240\240)2 C(2.5.12)WB 33 Sn( Mapping for )SM(gMonth)ES()123 1 TN()EA()BN}if -2 NH le{124(3.12\240\240)2 C(2.5.13)WB 34 Sn( Mapping for )SM(gMon)HY(th)HY(Day)YH()ES()124 1 TN()EA()BN}if -2 NH le{125(3.13\240\240)2 C(2.5.14)WB 35 Sn( Mapping for )SM(gYear)ES()125 1 TN()EA()BN}if -2 NH le{126(3.14\240\240)2 C(2.5.15)WB 36 Sn( Mapping for )SM(gYear)HY(Month)YH()ES()126 1 TN()EA()BN}if -2 NH le{127(3.15\240\240)2 C(2.5.16)WB 37 Sn( Mapping for )SM(time)ES()127 1 TN()EA()BN}if -2 NH le{128(3.16\240\240)2 C(2.6)WB 38 Sn( Mapping for Simple Types)128 1 TN()EA()BN}if -3 NH le{129(3.16.1\240\240)3 C(2.6.1)WB 39 Sn( Mapping for Deriva)HY(tion)YH( by Restric)HY(tion)YH()129 1 TN()EA()BN}if -3 NH le{130(3.16.2\240\240)3 C(2.6.2)WB 40 Sn( Mapping for Enumer)HY(a)HY(tions)YH()130 1 TN()EA()BN}if -3 NH le{131(3.16.3\240\240)3 C(2.6.3)WB 41 Sn( Mapping for Deriva)HY(tion)YH( by List)131 1 TN()EA()BN}if -3 NH le{132(3.16.4\240\240)3 C(2.6.4)WB 42 Sn( Mapping for Deriva)HY(tion)YH( by Union)132 1 TN()EA()BN}if -2 NH le{133(3.17\240\240)2 C(2.7)WB 43 Sn( Mapping for Complex Types)133 1 TN()EA()BN}if -3 NH le{134(3.17.1\240\240)3 C(2.7.1)WB 44 Sn( Mapping for Deriva)HY(tion)YH( by Exten)HY(sion)YH()134 1 TN()EA()BN}if -3 NH le{135(3.17.2\240\240)3 C(2.7.2)WB 45 Sn( Mapping for Deriva)HY(tion)YH( by Restric)HY(tion)YH()135 1 TN()EA()BN}if -2 NH le{136(3.18\240\240)2 C(2.8)WB 46 Sn( Mapping for Local Elements and Attributes)136 1 TN()EA()BN}if -3 NH le{137(3.18.1\240\240)3 C(2.8.1)WB 47 Sn( Mapping for Members with the One Cardi)HY(nal)HY(ity)YH( Class)137 1 TN()EA()BN}if -3 NH le{138(3.18.2\240\240)3 C(2.8.2)WB 48 Sn( Mapping for Members with the Optional Cardi)HY(nal)HY(ity)YH( Class)138 1 TN()EA()BN}if -3 NH le{139(3.18.3\240\240)3 C(2.8.3)WB 49 Sn( Mapping for Members with the Sequence Cardi)HY(nal)HY(ity)YH( Class)139 1 TN()EA()BN}if -2 NH le{140(3.19\240\240)2 C(2.9)WB 50 Sn( Mapping for Global Elements)140 1 TN()EA()BN}if -3 NH le{141(3.19.1\240\240)3 C(2.9.1)WB 51 Sn( Element Types)141 1 TN()EA()BN}if -3 NH le{142(3.19.2\240\240)3 C(2.9.2)WB 52 Sn( Element Map)142 1 TN()EA()BN}if -2 NH le{143(3.20\240\240)2 C(2.10)WB 53 Sn( Mapping for Global Attributes)143 1 TN()EA()BN}if -2 NH le{144(3.21\240\240)2 C(2.11)WB 54 Sn( Mapping for )SM(xsi:type)ES( and Substi)HY(tu)HY(tion)YH( - Groups)144 1 TN()EA()BN}if -2 NH le{145(3.22\240\240)2 C(2.12)WB 55 Sn( Mapping for )SM(any)ES( and )SM(anyAt)HY(tribute)YH()ES()145 1 TN()EA()BN}if -3 NH le{146(3.22.1\240\240)3 C(2.12.1)WB 56 Sn( Mapping for )SM(any)ES( with the One Cardi)HY(nal)HY(ity)YH( Class)146 1 TN()EA()BN}if -3 NH le{147(3.22.2\240\240)3 C(2.12.2)WB 57 Sn( Mapping for )SM(any)ES( with the Optional Cardi)HY(nal)HY(ity)YH( Class)147 1 TN()EA()BN}if -3 NH le{148(3.22.3\240\240)3 C(2.12.3)WB 58 Sn( Mapping for )SM(any)ES( with the Sequence Cardi)HY(nal)HY(ity)YH( Class)148 1 TN()EA()BN}if -3 NH le{149(3.22.4\240\240)3 C(2.12.4)WB 59 Sn( Mapping for )SM(anyAt)HY(tribute)YH()ES()149 1 TN()EA()BN}if -2 NH le{150(3.23\240\240)2 C(2.13)WB 60 Sn( Mapping for Mixed Content Models)150 1 TN()EA()BN}if -1 NH le{151(4\240\240)1 C(3)WB 61 Sn( Parsing)151 1 TN()EA()BN}if -2 NH le{152(4.1\240\240)2 C(3.1)WB 62 Sn( Initial)HY(iz)HY(ing)YH( the Xerces-C++ Runtime)152 1 TN()EA()BN}if -2 NH le{153(4.2\240\240)2 C(3.2)WB 63 Sn( Flags and Prop)HY(er)HY(ties)YH()153 1 TN()EA()BN}if -2 NH le{154(4.3\240\240)2 C(3.3)WB 64 Sn( Error Handling)154 1 TN()EA()BN}if -3 NH le{155(4.3.1\240\240)3 C(3.3.1)WB 65 Sn( )SM(xml_schema::parsing)ES()155 1 TN()EA()BN}if -3 NH le{156(4.3.2\240\240)3 C(3.3.2)WB 66 Sn( )SM(xml_schema::expected_element)ES()156 1 TN()EA()BN}if -3 NH le{157(4.3.3\240\240)3 C(3.3.3)WB 67 Sn( )SM(xml_schema::unex)HY(pected)YH(_element)ES()157 1 TN()EA()BN}if -3 NH le{158(4.3.4\240\240)3 C(3.3.4)WB 68 Sn( )SM(xml_schema::expected_attribute)ES()158 1 TN()EA()BN}if -3 NH le{159(4.3.5\240\240)3 C(3.3.5)WB 69 Sn( )SM(xml_schema::unex)HY(pected)YH(_enumer)HY(a)HY(tor)YH()ES()159 1 TN()EA()BN}if -3 NH le{160(4.3.6\240\240)3 C(3.3.6)WB 70 Sn( )SM(xml_schema::expected_text_content)ES()160 1 TN()EA()BN}if -3 NH le{161(4.3.7\240\240)3 C(3.3.7)WB 71 Sn( )SM(xml_schema::no_type_info)ES()161 1 TN()EA()BN}if -3 NH le{162(4.3.8\240\240)3 C(3.3.8)WB 72 Sn( )SM(xml_schema::not_derived)ES()162 1 TN()EA()BN}if -3 NH le{163(4.3.9\240\240)3 C(3.3.9)WB 73 Sn( )SM(xml_schema::no_prefix_mapping)ES()163 1 TN()EA()BN}if -2 NH le{164(4.4\240\240)2 C(3.4)WB 74 Sn( Reading from a Local File or URI)164 1 TN()EA()BN}if -2 NH le{165(4.5\240\240)2 C(3.5)WB 75 Sn( Reading from )SM(std::istream)ES()165 1 TN()EA()BN}if -2 NH le{166(4.6\240\240)2 C(3.6)WB 76 Sn( Reading from )SM(xercesc::Input)HY(Source)YH()ES()166 1 TN()EA()BN}if -2 NH le{167(4.7\240\240)2 C(3.7)WB 77 Sn( Reading from DOM)167 1 TN()EA()BN}if -1 NH le{168(5\240\240)1 C(4)WB 78 Sn( Seri)HY(al)HY(iza)HY(tion)YH()168 1 TN()EA()BN}if -2 NH le{169(5.1\240\240)2 C(4.1)WB 79 Sn( Initial)HY(iz)HY(ing)YH( the Xerces-C++ Runtime)169 1 TN()EA()BN}if -2 NH le{170(5.2\240\240)2 C(4.2)WB 80 Sn( Names)HY(pace)YH( Infomap and Char)HY(ac)HY(ter)YH( Encod)HY(ing)YH()170 1 TN()EA()BN}if -2 NH le{171(5.3\240\240)2 C(4.3)WB 81 Sn( Flags)171 1 TN()EA()BN}if -2 NH le{172(5.4\240\240)2 C(4.4)WB 82 Sn( Error Handling)172 1 TN()EA()BN}if -3 NH le{173(5.4.1\240\240)3 C(4.4.1)WB 83 Sn( )SM(xml_schema::seri)HY(al)HY(iza)HY(tion)YH()ES()173 1 TN()EA()BN}if -3 NH le{174(5.4.2\240\240)3 C(4.4.2)WB 84 Sn( )SM(xml_schema::unex)HY(pected)YH(_element)ES()174 1 TN()EA()BN}if -3 NH le{175(5.4.3\240\240)3 C(4.4.3)WB 85 Sn( )SM(xml_schema::no_type_info)ES()175 1 TN()EA()BN}if -2 NH le{176(5.5\240\240)2 C(4.5)WB 86 Sn( Seri)HY(al)HY(iz)HY(ing)YH( to )SM(std::ostream)ES()176 1 TN()EA()BN}if -2 NH le{177(5.6\240\240)2 C(4.6)WB 87 Sn( Seri)HY(al)HY(iz)HY(ing)YH( to )SM(xercesc::XMLFor)HY(mat)HY(Tar)HY(get)YH()ES()177 1 TN()EA()BN}if -2 NH le{178(5.7\240\240)2 C(4.7)WB 88 Sn( Seri)HY(al)HY(iz)HY(ing)YH( to DOM)178 1 TN()EA()BN}if -1 NH le{179(6\240\240)1 C(5)WB 89 Sn( Addi)HY(tional)YH( Func)HY(tion)HY(al)HY(ity)YH()179 1 TN()EA()BN}if -2 NH le{180(6.1\240\240)2 C(5.1)WB 90 Sn( DOM Asso)HY(ci)HY(a)HY(tion)YH()180 1 TN()EA()BN}if -2 NH le{181(6.2\240\240)2 C(5.2)WB 91 Sn( Binary Seri)HY(al)HY(iza)HY(tion)YH()181 1 TN()EA()BN}if -1 NH le{182(7\240\240)1 C(Appendix)WB 92 Sn( A \236 Default and Fixed Values)182 1 TN()EA()BN}if -/OU t D /Cb Db D NP Ep ET -/Cb Db D /Ct [16#00 16#00 16#00] D /Cl [16#00 16#00 16#00] D /CL -1 D Ct Sc - -/Ba f D /BO 0 D Bs -/UR (/home/boris/work/xsd/xsd/documentation/cxx/tree/manual/index.xhtml) D -/Ti (C++/Tree Mapping User Manual) D -/Au () D -/Df f D -/ME [(2.3.0)] D - -NP RC ZF -()1 Sl()WB 0 Sn( - -)BR()WB 1 Sn( )BR()WB 2 Sn( - - - )0 1 0 H(Preface)WB 94 Sn()WB 3 Sn()EA()EH( - - )0 2 1 H(About)WB 95 Sn()WB 4 Sn( This Docu)HY(ment)YH()EA()EH( - - )0 P(This docu)HY(ment)YH( describes the mapping of W3C XML Schema - to the C++ program)HY(ming)YH( language as imple)HY(mented)YH( by - )R1 2 A(CodeSyn)HY(the)HY(sis)YH( - XSD)EA( - an XML Schema to C++ data binding compiler. The mapping - repre)HY(sents)YH( infor)HY(ma)HY(tion)YH( stored in XML instance docu)HY(ments)YH( as a - stat)HY(i)HY(cally)YH(-typed, tree-like in-memory data struc)HY(ture)YH( and is - called C++/Tree. - )EP( - - )0 P(Revi)HY(sion)YH( 2.3.0)BR( - This revi)HY(sion)YH( of the manual describes the C++/Tree - mapping as imple)HY(mented)YH( by CodeSyn)HY(the)HY(sis)YH( XSD version 3.3.0. - )EP( - - )0 P(This docu)HY(ment)YH( is avail)HY(able)YH( in the follow)HY(ing)YH( formats: - )R2 2 A(XHTML)EA(, - )R3 2 A(PDF)EA(, and - )R4 2 A(PostScript)EA(.)EP( - - )0 2 2 H(More)WB 96 Sn()WB 5 Sn( Infor)HY(ma)HY(tion)YH()EA()EH( - - )0 P(Beyond this manual, you may also find the follow)HY(ing)YH( sources of - infor)HY(ma)HY(tion)YH( useful:)EP( - - )UL( )-1 LI()R5 2 A(C++/Tree - Mapping Getting Started Guide)EA( - - )-1 LI()R6 2 A(C++/Tree - Mapping Customiza)HY(tion)YH( Guide)EA( - - )-1 LI()R7 2 A(C++/Tree - Mapping and Berke)HY(ley)YH( DB XML Inte)HY(gra)HY(tion)YH( Guide)EA( - - )-1 LI()R8 2 A(C++/Tree - Mapping Frequently Asked Ques)HY(tions)YH( \201FAQ\202)EA( - - )-1 LI()R9 2 A(XSD - Compiler Command Line Manual)EA( - - )-1 LI(The )SM(exam)HY(ples)YH(/cxx/tree/)ES( direc)HY(tory)YH( in the XSD - distri)HY(bu)HY(tion)YH( contains a collec)HY(tion)YH( of exam)HY(ples)YH( and a README - file with an overview of each example. - - )-1 LI(The )SM(README)ES( file in the XSD distri)HY(bu)HY(tion)YH( explains - how to compile the exam)HY(ples)YH( on various plat)HY(forms)YH(. - - )-1 LI(The )R10 2 A(xsd-users)EA( - mailing list is a place to ask ques)HY(tions)YH(. Further)HY(more)YH( the - )R11 2 A(archives)EA( - may already have answers to some of your ques)HY(tions)YH(. - - )LU( - - - )0 1 3 H(1)WB 97 Sn()WB 6 Sn( Intro)HY(duc)HY(tion)YH()EA()EH( - - )0 P(C++/Tree is a W3C XML Schema to C++ mapping that repre)HY(sents)YH( the - data stored in XML as a stat)HY(i)HY(cally)YH(-typed, vocab)HY(u)HY(lary)YH(-specific - object model. Based on a formal descrip)HY(tion)YH( of an XML vocab)HY(u)HY(lary)YH( - \201schema\202, the C++/Tree mapping produces a tree-like data struc)HY(ture)YH( - suit)HY(able)YH( for in-memory process)HY(ing)YH( as well as XML parsing and - seri)HY(al)HY(iza)HY(tion)YH( code.)EP( - - )0 P(A typical appli)HY(ca)HY(tion)YH( that processes XML docu)HY(ments)YH( usually - performs the follow)HY(ing)YH( three steps: it first reads \201parses\202 an XML - instance docu)HY(ment)YH( to an object model, it then performs - some useful compu)HY(ta)HY(tions)YH( on that model which may involve - modi)HY(fi)HY(ca)HY(tion)YH( of the model, and finally it may write \201seri)HY(al)HY(ize)YH(\202 - the modi)HY(fied)YH( object model back to XML. - )EP( - - )0 P(The C++/Tree mapping consists of C++ types that repre)HY(sent)YH( the - given vocab)HY(u)HY(lary)YH( \201)0 7 1 A(Chapter 2, "C++/Tree Mapping")7 0 TN TL()Ec /AF f D(\202, - a set of parsing func)HY(tions)YH( that convert XML docu)HY(ments)YH( to - a tree-like in-memory data struc)HY(ture)YH( \201)0 61 1 A(Chapter 3, - "Parsing")61 0 TN TL()Ec /AF f D(\202, and a set of seri)HY(al)HY(iza)HY(tion)YH( func)HY(tions)YH( that convert - the object model back to XML \201)0 78 1 A(Chapter 4, - "Seri)HY(al)HY(iza)HY(tion)YH(")78 0 TN TL()Ec /AF f D(\202. Further)HY(more)YH(, the mapping provides a number - of addi)HY(tional)YH( features, such as DOM asso)HY(ci)HY(a)HY(tion)YH( and binary - seri)HY(al)HY(iza)HY(tion)YH(, that can be useful in some appli)HY(ca)HY(tions)YH( - \201)0 89 1 A(Chapter 5, "Addi)HY(tional)YH( Func)HY(tion)HY(al)HY(ity)YH(")89 0 TN TL()Ec /AF f D(\202. - )EP( - - - - - - )0 1 4 H(2)WB 98 Sn()WB 7 Sn( C++/Tree Mapping)EA()EH( - - )0 2 5 H(2.1)WB 99 Sn()WB 8 Sn( Prelim)HY(i)HY(nary)YH( Infor)HY(ma)HY(tion)YH()EA()EH( - - )0 3 6 H(2.1.1)WB 100 Sn()WB 9 Sn( Iden)HY(ti)HY(fiers)YH()EA()EH( - - )0 P(XML Schema names may happen to be reserved C++ keywords or contain - char)HY(ac)HY(ters)YH( that are illegal in C++ iden)HY(ti)HY(fiers)YH(. To avoid C++ compi)HY(la)HY(tion)YH( - prob)HY(lems)YH(, such names are changed \201escaped\202 when mapped to C++. If an - XML Schema name is a C++ keyword, the "_" suffix is added to it. All - char)HY(ac)HY(ter)YH( of an XML Schema name that are not allowed in C++ iden)HY(ti)HY(fiers)YH( - are replaced with "_". - )EP( - - )0 P(For example, XML Schema name )SM(try)ES( will be mapped to - C++ iden)HY(ti)HY(fier)YH( )SM(try_)ES(. Simi)HY(larly)YH(, XML Schema name - )SM(strange.na-me)ES( will be mapped to C++ iden)HY(ti)HY(fier)YH( - )SM(strange_na_me)ES(. - )EP( - - )0 P(Further)HY(more)YH(, conflicts between type names and func)HY(tion)YH( names in the - same scope are resolved using name escap)HY(ing)YH(. Such conflicts include - both a global element \201which is mapped to a set of parsing and/or - seri)HY(al)HY(iza)HY(tion)YH( func)HY(tions)YH( or element types, see )0 50 1 A(Section - 2.9, "Mapping for Global Elements")50 0 TN TL()Ec /AF f D(\202 and a global type sharing the - same name as well as a local element or attribute inside a type having - the same name as the type itself.)EP( - - )0 P(For example, if we had a global type )SM(catalog)ES( - and a global element with the same name then the type would be - mapped to a C++ class with name )SM(catalog)ES( while the - parsing func)HY(tions)YH( corre)HY(spond)HY(ing)YH( to the global element would have - their names escaped as )SM(catalog_)ES(. - )EP( - - )0 P(By default the mapping uses the so-called K&R \201Kernighan and - Ritchie\202 iden)HY(ti)HY(fier)YH( naming conven)HY(tion)YH( which is also used through)HY(out)YH( - this manual. In this conven)HY(tion)YH( both type and func)HY(tion)YH( names are in - lower case and words are sepa)HY(rated)YH( by under)HY(scores)YH(. If your appli)HY(ca)HY(tion)YH( - code or schemas use a differ)HY(ent)YH( nota)HY(tion)YH(, you may want to change the - naming conven)HY(tion)YH( used by the mapping for consis)HY(tency)YH(. - The compiler supports a set of widely-used naming conven)HY(tions)YH( - that you can select with the )SM(--type-naming)ES( and - )SM(--func)HY(tion)YH(-naming)ES( options. You can also further - refine one of the prede)HY(fined)YH( conven)HY(tions)YH( or create a completely - custom naming scheme by using the )SM(--*-regex)ES( options. - For more detailed infor)HY(ma)HY(tion)YH( on these options refer to the NAMING - CONVEN)HY(TION)YH( section in the )R9 2 A(XSD - Compiler Command Line Manual)EA(.)EP( - - )0 3 7 H(2.1.2)WB 101 Sn()WB 10 Sn( Char)HY(ac)HY(ter)YH( Type and Encod)HY(ing)YH()EA()EH( - - )0 P(The code that imple)HY(ments)YH( the mapping, depend)HY(ing)YH( on the - )SM(--char-type)ES( option, is gener)HY(ated)YH( using either - )SM(char)ES( or )SM(wchar_t)ES( as the char)HY(ac)HY(ter)YH( - type. In this docu)HY(ment)YH( code samples use symbol )SM(C)ES( - to refer to the char)HY(ac)HY(ter)YH( type you have selected when trans)HY(lat)HY(ing)YH( - your schemas, for example )SM(std::basic_string)ES(. - )EP( - - )0 P(Another aspect of the mapping that depends on the char)HY(ac)HY(ter)YH( type - is char)HY(ac)HY(ter)YH( encod)HY(ing)YH(. For the )SM(char)ES( char)HY(ac)HY(ter)YH( type - the default encod)HY(ing)YH( is UTF-8. Other supported encod)HY(ings)YH( are - ISO-8859-1, Xerces-C++ Local Code Page \201LPC\202, as well as - custom encod)HY(ings)YH( and can be selected with the - )SM(--char-encod)HY(ing)YH()ES( command line option.)EP( - - )0 P(For the )SM(wchar_t)ES( char)HY(ac)HY(ter)YH( type the encod)HY(ing)YH( is - auto)HY(mat)HY(i)HY(cally)YH( selected between UTF-16 and UTF-32/UCS-4 depend)HY(ing)YH( - on the size of the )SM(wchar_t)ES( type. On some plat)HY(forms)YH( - \201for example, Windows with Visual C++ and AIX with IBM XL C++\202 - )SM(wchar_t)ES( is 2 bytes long. For these plat)HY(forms)YH( the - encod)HY(ing)YH( is UTF-16. On other plat)HY(forms)YH( )SM(wchar_t)ES( is 4 bytes - long and UTF-32/UCS-4 is used.)EP( - - )0 3 8 H(2.1.3)WB 102 Sn()WB 11 Sn( XML Schema Names)HY(pace)YH()EA()EH( - - )0 P(The mapping relies on some prede)HY(fined)YH( types, classes, and func)HY(tions)YH( - that are logi)HY(cally)YH( defined in the XML Schema names)HY(pace)YH( reserved for - the XML Schema language \201)SM(http://www.w3.org/2001/XMLSchema)ES(\202. - By default, this names)HY(pace)YH( is mapped to C++ names)HY(pace)YH( - )SM(xml_schema)ES(. It is auto)HY(mat)HY(i)HY(cally)YH( acces)HY(si)HY(ble)YH( - from a C++ compi)HY(la)HY(tion)YH( unit that includes a header file gener)HY(ated)YH( - from an XML Schema defi)HY(ni)HY(tion)YH(. - )EP( - - )0 P(Note that, if desired, the default mapping of this names)HY(pace)YH( can be - changed as described in )0 19 1 A(Section 2.4, "Mapping for - Names)HY(paces)YH(")19 0 TN TL()Ec /AF f D(. - )EP( - - - )0 3 9 H(2.1.4)WB 103 Sn()WB 12 Sn( Anony)HY(mous)YH( Types)EA()EH( - - )0 P(For the purpose of code gener)HY(a)HY(tion)YH(, anony)HY(mous)YH( types defined in - XML Schema are auto)HY(mat)HY(i)HY(cally)YH( assigned names that are derived - from enclos)HY(ing)YH( attributes and elements. Other)HY(wise)YH(, such types - follows stan)HY(dard)YH( mapping rules for simple and complex type - defi)HY(ni)HY(tions)YH( \201see )0 38 1 A(Section 2.6, "Mapping for Simple Types")38 0 TN TL()Ec /AF f D( - and )0 43 1 A(Section 2.7, "Mapping for Complex Types")43 0 TN TL()Ec /AF f D(\202. - For example, in the follow)HY(ing)YH( schema frag)HY(ment)YH(: - )EP( - - ) 5 23 PR( - - ... - -)RP( - - )0 P(The anony)HY(mous)YH( type defined inside element )SM(object)ES( will - be given name )SM(object)ES(. The compiler has a number of - options that control the process of anony)HY(mous)YH( type naming. For more - infor)HY(ma)HY(tion)YH( refer to the )R9 2 A(XSD - Compiler Command Line Manual)EA(.)EP( - - - )0 2 10 H(2.2)WB 104 Sn()WB 13 Sn( Error Handling)EA()EH( - - )0 P(The mapping uses the C++ excep)HY(tion)YH( handling mech)HY(a)HY(nism)YH( as a primary way - of report)HY(ing)YH( error condi)HY(tions)YH(. All excep)HY(tions)YH( that are spec)HY(i)HY(fied)YH( in - this mapping derive from )SM(xml_schema::excep)HY(tion)YH()ES( which - itself is derived from )SM(std::excep)HY(tion)YH()ES(: - )EP( - - ) 14 60 PR(struct exception: virtual std::exception -{ - friend - std::basic_ostream& - operator<< \201std::basic_ostream& os, const exception& e\202 - { - e.print \201os\202; - return os; - } - -protected: - virtual void - print \201std::basic_ostream&\202 const = 0; -};)RP( - - )0 P(The excep)HY(tion)YH( hier)HY(ar)HY(chy)YH( supports "virtual" )SM(oper)HY(a)HY(tor)YH(<<)ES( - which allows you to obtain diag)HY(nos)HY(tics)YH( corre)HY(spond)HY(ing)YH( to the thrown - excep)HY(tion)YH( using the base excep)HY(tion)YH( inter)HY(face)YH(. For example:)EP( - - ) 8 38 PR(try -{ - ... -} -catch \201const xml_schema::exception& e\202 -{ - cerr << e << endl; -})RP( - - )0 P(The follow)HY(ing)YH( sub-sections describe excep)HY(tions)YH( thrown by the - types that consti)HY(tute)YH( the object model. - )0 64 1 A(Section 3.3, "Error Handling")64 0 TN TL()Ec /AF f D( of - )0 61 1 A(Chapter 3, "Parsing")61 0 TN TL()Ec /AF f D( describes excep)HY(tions)YH( - and error handling mech)HY(a)HY(nisms)YH( specific to the parsing func)HY(tions)YH(. - )0 82 1 A(Section 4.4, "Error Handling")82 0 TN TL()Ec /AF f D( of - )0 78 1 A(Chapter 4, "Seri)HY(al)HY(iza)HY(tion)YH(")78 0 TN TL()Ec /AF f D( describes excep)HY(tions)YH( - and error handling mech)HY(a)HY(nisms)YH( specific to the seri)HY(al)HY(iza)HY(tion)YH( func)HY(tions)YH(. - )EP( - - - )0 3 11 H(2.2.1)WB 105 Sn()WB 14 Sn( )SM(xml_schema::dupli)HY(cate)YH(_id)ES()EA()EH( - - ) 10 48 PR(struct duplicate_id: virtual exception -{ - duplicate_id \201const std::basic_string& id\202; - - const std::basic_string& - id \201\202 const; - - virtual const char* - what \201\202 const throw \201\202; -};)RP( - - )0 P(The )SM(xml_schema::dupli)HY(cate)YH(_id)ES( is thrown when - a conflict)HY(ing)YH( instance of )SM(xml_schema::id)ES( \201see - )0 20 1 A(Section 2.5, "Mapping for Built-in Data Types")20 0 TN TL()Ec /AF f D(\202 - is added to a tree. The offend)HY(ing)YH( ID value can be obtained using - the )SM(id)ES( func)HY(tion)YH(. - )EP( - - )0 2 12 H(2.3)WB 106 Sn()WB 15 Sn( Mapping for )SM(import)ES( and )SM(include)ES()EA()EH( - - )0 3 13 H(2.3.1)WB 107 Sn()WB 16 Sn( Import)EA()EH( - - )0 P(The XML Schema )SM(import)ES( element is mapped to the C++ - Prepro)HY(ces)HY(sor)YH( )SM(#include)ES( direc)HY(tive)YH(. The value of - the )SM(schemaLo)HY(ca)HY(tion)YH()ES( attribute is used to derive - the name of the header file that appears in the )SM(#include)ES( - direc)HY(tive)YH(. For instance: - )EP( - - ) 2 53 PR()RP( - - )0 P(is mapped to:)EP( - - ) 1 19 PR(#include "test.hxx")RP( - - )0 P(Note that you will need to compile imported schemas sepa)HY(rately)YH( - in order to produce corre)HY(spond)HY(ing)YH( header files.)EP( - - )0 3 14 H(2.3.2)WB 108 Sn()WB 17 Sn( Inclu)HY(sion)YH( with Target Names)HY(pace)YH()EA()EH( - - )0 P(The XML Schema )SM(include)ES( element which refers to a schema - with a target names)HY(pace)YH( or appears in a schema without a target names)HY(pace)YH( - follows the same mapping rules as the )SM(import)ES( element, - see )0 16 1 A(Section 2.3.1, "Import")16 0 TN TL()Ec /AF f D(. - )EP( - - )0 3 15 H(2.3.3)WB 109 Sn()WB 18 Sn( Inclu)HY(sion)YH( without Target Names)HY(pace)YH()EA()EH( - - )0 P(For the XML Schema )SM(include)ES( element which refers to a schema - without a target names)HY(pace)YH( and appears in a schema with a target - names)HY(pace)YH( \201such inclu)HY(sion)YH( some)HY(times)YH( called "chameleon inclu)HY(sion)YH("\202, - decla)HY(ra)HY(tions)YH( and defi)HY(ni)HY(tions)YH( from the included schema are gener)HY(ated)YH( - in-line in the names)HY(pace)YH( of the includ)HY(ing)YH( schema as if they were - declared and defined there verba)HY(tim)YH(. For example, consider the - follow)HY(ing)YH( two schemas: - )EP( - - ) 11 60 PR(<-- common.xsd --> - - - ... - - - -<-- test.xsd --> - - -)RP( - - )0 P(The frag)HY(ment)YH( of inter)HY(est)YH( from the gener)HY(ated)YH( header file for - )SM(text.xsd)ES( would look like this:)EP( - - ) 8 14 PR(// test.hxx -namespace test -{ - class type - { - ... - }; -})RP( - - )0 2 16 H(2.4)WB 110 Sn()WB 19 Sn( Mapping for Names)HY(paces)YH()EA()EH( - - )0 P(An XML Schema names)HY(pace)YH( is mapped to one or more nested C++ - names)HY(paces)YH(. XML Schema names)HY(paces)YH( are iden)HY(ti)HY(fied)YH( by URIs. - By default, a names)HY(pace)YH( URI is mapped to a sequence of - C++ names)HY(pace)YH( names by remov)HY(ing)YH( the proto)HY(col)YH( and host parts - and split)HY(ting)YH( the rest into a sequence of names with ')SM(/)ES(' - as the name sepa)HY(ra)HY(tor)YH(. For instance: - )EP( - - ) 3 67 PR( - ... -)RP( - - )0 P(is mapped to:)EP( - - ) 7 16 PR(namespace system -{ - namespace test - { - ... - } -})RP( - - )0 P(The default mapping of names)HY(pace)YH( URIs to C++ names)HY(pace)YH( names can be - altered using the )SM(--names)HY(pace)YH(-map)ES( and - )SM(--names)HY(pace)YH(-regex)ES( options. See the - )R9 2 A(XSD - Compiler Command Line Manual)EA( for more infor)HY(ma)HY(tion)YH(. - )EP( - - )0 2 17 H(2.5)WB 111 Sn()WB 20 Sn( Mapping for Built-in Data Types)EA()EH( - - )0 P(The mapping of XML Schema built-in data types to C++ types is - summa)HY(rized)YH( in the table below.)EP( - - - )0 PT( - - )0 P(All XML Schema built-in types are mapped to C++ classes that are - derived from the )SM(xml_schema::simple_type)ES( class except - where the mapping is to a funda)HY(men)HY(tal)YH( C++ type.)EP( - - )0 P(The )SM(sequence)ES( class template is defined in an - imple)HY(men)HY(ta)HY(tion)YH(-specific names)HY(pace)YH(. It conforms to the - sequence inter)HY(face)YH( as defined by the ISO/ANSI Stan)HY(dard)YH( for - C++ \201ISO/IEC 14882:1998, Section 23.1.1, "Sequences"\202. - Prac)HY(ti)HY(cally)YH(, this means that you can treat such a sequence - as if it was )SM(std::vector)ES(. One notable exten)HY(sion)YH( - to the stan)HY(dard)YH( inter)HY(face)YH( that is avail)HY(able)YH( only for - sequences of non-funda)HY(men)HY(tal)YH( C++ types is the addi)HY(tion)YH( of - the over)HY(loaded)YH( )SM(push_back)ES( and )SM(insert)ES( - member func)HY(tions)YH( which instead of the constant refer)HY(ence)YH( - to the element type accept auto)HY(matic)YH( pointer to the element - type. These func)HY(tions)YH( assume owner)HY(ship)YH( of the pointed to - object and resets the passed auto)HY(matic)YH( pointer. - )EP( - - )0 3 18 H(2.5.1)WB 112 Sn()WB 22 Sn( Inher)HY(i)HY(tance)YH( from Built-in Data Types)EA()EH( - - )0 P(In cases where the mapping calls for an inher)HY(i)HY(tance)YH( from a built-in - type which is mapped to a funda)HY(men)HY(tal)YH( C++ type, a proxy type is - used instead of the funda)HY(men)HY(tal)YH( C++ type \201C++ does not allow - inher)HY(i)HY(tance)YH( from funda)HY(men)HY(tal)YH( types\202. For instance:)EP( - - ) 3 27 PR( - -)RP( - - )0 P(is mapped to:)EP( - - ) 4 42 PR(class my_int: public fundamental_base -{ - ... -};)RP( - - )0 P(The )SM(funda)HY(men)HY(tal)YH(_base)ES( class template provides a close - emula)HY(tion)YH( \201though not exact\202 of a funda)HY(men)HY(tal)YH( C++ type. - It is defined in an imple)HY(men)HY(ta)HY(tion)YH(-specific names)HY(pace)YH( and has the - follow)HY(ing)YH( inter)HY(face)YH(:)EP( - - ) 22 44 PR(template -class fundamental_base: public simple_type -{ -public: - fundamental_base \201\202; - fundamental_base \201X\202 - fundamental_base \201const fundamental_base&\202 - -public: - fundamental_base& - operator= \201const X&\202; - -public: - operator const X & \201\202 const; - operator X& \201\202; - - template - operator Y \201\202 const; - - template - operator Y \201\202; -};)RP( - - )0 3 19 H(2.5.2)WB 113 Sn()WB 23 Sn( Mapping for )SM(anyType)ES()EA()EH( - - )0 P(The XML Schema )SM(anyType)ES( built-in data type is mapped to the - )SM(xml_schema::type)ES( C++ class:)EP( - - ) 27 26 PR(class type -{ -public: - virtual - ~type \201\202; - -public: - type \201\202; - type \201const type&\202; - -public: - type& - operator= \201const type&\202; - -public: - virtual type* - _clone \201\202 const; - - // DOM association. - // -public: - const xercesc::DOMNode* - _node \201\202 const; - - xercesc::DOMNode* - _node \201\202; -};)RP( - - )0 P(For more infor)HY(ma)HY(tion)YH( about DOM asso)HY(ci)HY(a)HY(tion)YH( refer to - )0 90 1 A(Section 5.1, "DOM Asso)HY(ci)HY(a)HY(tion)YH(")90 0 TN TL()Ec /AF f D(.)EP( - - )0 3 20 H(2.5.3)WB 114 Sn()WB 24 Sn( Mapping for )SM(anySim)HY(ple)HY(Type)YH()ES()EA()EH( - - )0 P(The XML Schema )SM(anySim)HY(ple)HY(Type)YH()ES( built-in data type is mapped - to the )SM(xml_schema::simple_type)ES( C++ class:)EP( - - ) 14 35 PR(class simple_type: public type -{ -public: - simple_type \201\202; - simple_type \201const simple_type&\202; - -public: - simple_type& - operator= \201const simple_type&\202; - -public: - virtual simple_type* - _clone \201\202 const; -};)RP( - - - )0 3 21 H(2.5.4)WB 115 Sn()WB 25 Sn( Mapping for )SM(QName)ES()EA()EH( - - )0 P(The XML Schema )SM(QName)ES( built-in data type is mapped to the - )SM(xml_schema::qname)ES( C++ class:)EP( - - ) 25 36 PR(class qname: public simple_type -{ -public: - qname \201const ncname&\202; - qname \201const uri&, const ncname&\202; - qname \201const qname&\202; - -public: - qname& - operator= \201const qname&\202; - -public: - virtual qname* - _clone \201\202 const; - -public: - bool - qualified \201\202 const; - - const uri& - namespace_ \201\202 const; - - const ncname& - name \201\202 const; -};)RP( - - )0 P(The )SM(qual)HY(i)HY(fied)YH()ES( acces)HY(sor)YH( func)HY(tion)YH( can be used to deter)HY(mine)YH( - if the name is qual)HY(i)HY(fied)YH(.)EP( - - )0 3 22 H(2.5.5)WB 116 Sn()WB 26 Sn( Mapping for )SM(IDREF)ES()EA()EH( - - )0 P(The XML Schema )SM(IDREF)ES( built-in data type is mapped to the - )SM(xml_schema::idref)ES( C++ class. This class imple)HY(ments)YH( the - smart pointer C++ idiom:)EP( - - ) 56 44 PR(class idref: public ncname -{ -public: - idref \201const C* s\202; - idref \201const C* s, std::size_t n\202; - idref \201std::size_t n, C c\202; - idref \201const std::basic_string&\202; - idref \201const std::basic_string&, - std::size_t pos, - std::size_t n = npos\202; - -public: - idref \201const idref&\202; - -public: - virtual idref* - _clone \201\202 const; - -public: - idref& - operator= \201C c\202; - - idref& - operator= \201const C* s\202; - - idref& - operator= \201const std::basic_string&\202 - - idref& - operator= \201const idref&\202; -)WR( -public: - const type* - operator-> \201\202 const; - - type* - operator-> \201\202; - - const type& - operator* \201\202 const; - - type& - operator* \201\202; - - const type* - get \201\202 const; - - type* - get \201\202; - - // Conversion to bool. - // -public: - typedef void \201idref::*bool_convertible\202\201\202; - operator bool_convertible \201\202 const; -};)RP( - - )0 P(The object, )SM(idref)ES( instance refers to, is the imme)HY(di)HY(ate)YH( - container of the match)HY(ing)YH( )SM(id)ES( instance. For example, - with the follow)HY(ing)YH( instance docu)HY(ment)YH( and schema: - )EP( - - - ) 22 49 PR( - - - obj-1 - - - - - - - - - - - - - - - - - -)RP( - - )0 P(The )SM(ref)ES( instance in the code below will refer to - an object of type )SM(object_type)ES(:)EP( - - ) 4 53 PR(root_type& root = ...; -xml_schema::idref& ref \201root.reference \201\202\202; -object_type& obj \201dynamic_cast \201*ref\202\202; -cout << obj.text \201\202 << endl;)RP( - - )0 P(The smart pointer inter)HY(face)YH( of the )SM(idref)ES( class always - returns a pointer or refer)HY(ence)YH( to )SM(xml_schema::type)ES(. - This means that you will need to manu)HY(ally)YH( cast such pointer or - refer)HY(ence)YH( to its real \201dynamic\202 type before you can use it \201unless - all you need is the base inter)HY(face)YH( provided by - )SM(xml_schema::type)ES(\202. As a special exten)HY(sion)YH( to the XML - Schema language, the mapping supports static typing of )SM(idref)ES( - refer)HY(ences)YH( by employ)HY(ing)YH( the )SM(refType)ES( exten)HY(sion)YH( attribute. - The follow)HY(ing)YH( example illus)HY(trates)YH( this mech)HY(a)HY(nism)YH(: - )EP( - - ) 11 72 PR( - - - ... - - - - ... - -)RP( - - )0 P(With this modi)HY(fi)HY(ca)HY(tion)YH( we do not need to do manual casting anymore: - )EP( - - ) 4 51 PR(root_type& root = ...; -root_type::reference_type& ref \201root.reference \201\202\202; -object_type& obj \201*ref\202; -cout << ref->text \201\202 << endl;)RP( - - - )0 3 23 H(2.5.6)WB 117 Sn()WB 27 Sn( Mapping for )SM(base64Binary)ES( and - )SM(hexBi)HY(nary)YH()ES()EA()EH( - - )0 P(The XML Schema )SM(base64Binary)ES( and )SM(hexBi)HY(nary)YH()ES( - built-in data types are mapped to the - )SM(xml_schema::base64_binary)ES( and - )SM(xml_schema::hex_binary)ES( C++ classes, respec)HY(tively)YH(. The - )SM(base64_binary)ES( and )SM(hex_binary)ES( classes - support a simple buffer abstrac)HY(tion)YH( by inher)HY(it)HY(ing)YH( from the - )SM(xml_schema::buffer)ES( class: - )EP( - - ) 64 58 PR(class bounds: public virtual exception -{ -public: - virtual const char* - what \201\202 const throw \201\202; -}; - -class buffer -{ -public: - typedef std::size_t size_t; - -public: - buffer \201size_t size = 0\202; - buffer \201size_t size, size_t capacity\202; - buffer \201const void* data, size_t size\202; - buffer \201const void* data, size_t size, size_t capacity\202; - buffer \201void* data, - size_t size, - size_t capacity, - bool assume_ownership\202; - -public: - buffer \201const buffer&\202; - - buffer& - operator= \201const buffer&\202; - - void - swap \201buffer&\202; -)WR( -public: - size_t - capacity \201\202 const; - - bool - capacity \201size_t\202; - -public: - size_t - size \201\202 const; - - bool - size \201size_t\202; - -public: - const char* - data \201\202 const; - - char* - data \201\202; - - const char* - begin \201\202 const; - - char* - begin \201\202; - - const char* - end \201\202 const; -)WR( - char* - end \201\202; -};)RP( - - )0 P(The last over)HY(loaded)YH( construc)HY(tor)YH( reuses an exist)HY(ing)YH( data buffer instead - of making a copy. If the )SM(assume_owner)HY(ship)YH()ES( argu)HY(ment)YH( is - )SM(true)ES(, the instance assumes owner)HY(ship)YH( of the - memory block pointed to by the )SM(data)ES( argu)HY(ment)YH( and will - even)HY(tu)HY(ally)YH( release it by calling )SM(oper)HY(a)HY(tor)YH( delete)ES(. The - )SM(capac)HY(ity)YH()ES( and )SM(size)ES( modi)HY(fier)YH( func)HY(tions)YH( return - )SM(true)ES( if the under)HY(ly)HY(ing)YH( buffer has moved. - )EP( - - )0 P(The )SM(bounds)ES( excep)HY(tion)YH( is thrown if the construc)HY(tor)YH( - argu)HY(ments)YH( violate the )SM(\201size\240<=\240capac)HY(ity)YH(\202)ES( - constraint.)EP( - - )0 P(The )SM(base64_binary)ES( and )SM(hex_binary)ES( classes - support the )SM(buffer)ES( inter)HY(face)YH( and perform auto)HY(matic)YH( - decod)HY(ing)YH(/encod)HY(ing)YH( from/to the Base64 and Hex formats, respec)HY(tively)YH(: - )EP( - - ) 25 65 PR(class base64_binary: public simple_type, public buffer -{ -public: - base64_binary \201size_t size = 0\202; - base64_binary \201size_t size, size_t capacity\202; - base64_binary \201const void* data, size_t size\202; - base64_binary \201const void* data, size_t size, size_t capacity\202; - base64_binary \201void* data, - size_t size, - size_t capacity, - bool assume_ownership\202; - -public: - base64_binary \201const base64_binary&\202; - - base64_binary& - operator= \201const base64_binary&\202; - - virtual base64_binary* - _clone \201\202 const; - -public: - std::basic_string - encode \201\202 const; -};)RP( - - ) 25 62 PR(class hex_binary: public simple_type, public buffer -{ -public: - hex_binary \201size_t size = 0\202; - hex_binary \201size_t size, size_t capacity\202; - hex_binary \201const void* data, size_t size\202; - hex_binary \201const void* data, size_t size, size_t capacity\202; - hex_binary \201void* data, - size_t size, - size_t capacity, - bool assume_ownership\202; - -public: - hex_binary \201const hex_binary&\202; - - hex_binary& - operator= \201const hex_binary&\202; - - virtual hex_binary* - _clone \201\202 const; - -public: - std::basic_string - encode \201\202 const; -};)RP( - - - )0 2 24 H(2.5.7)WB 118 Sn()WB 28 Sn( Time Zone Repre)HY(sen)HY(ta)HY(tion)YH()EA()EH( - - )0 P(The )SM(date)ES(, )SM(date)HY(Time)YH()ES(, )SM(gDay)ES(, - )SM(gMonth)ES(, )SM(gMon)HY(th)HY(Day)YH()ES(, )SM(gYear)ES(, - )SM(gYear)HY(Month)YH()ES(, and )SM(time)ES( XML Schema built-in - types all include an optional time zone compo)HY(nent)YH(. The follow)HY(ing)YH( - )SM(xml_schema::time_zone)ES( base class is used to repre)HY(sent)YH( - this infor)HY(ma)HY(tion)YH(:)EP( - - ) 30 48 PR(class time_zone -{ -public: - time_zone \201\202; - time_zone \201short hours, short minutes\202; - - bool - zone_present \201\202 const; - - void - zone_reset \201\202; - - short - zone_hours \201\202 const; - - void - zone_hours \201short\202; - - short - zone_minutes \201\202 const; - - void - zone_minutes \201short\202; -}; - -bool -operator== \201const time_zone&, const time_zone&\202; - -bool -operator!= \201const time_zone&, const time_zone&\202;)RP( - - )0 P(The )SM(zone_present\201\202)ES( acces)HY(sor)YH( func)HY(tion)YH( returns )SM(true)ES( - if the time zone is spec)HY(i)HY(fied)YH(. The )SM(zone_reset\201\202)ES( modi)HY(fier)YH( - func)HY(tion)YH( resets the time zone object to the )EM(not spec)HY(i)HY(fied)YH()ES( - state. If the time zone offset is nega)HY(tive)YH( then both hours and - minutes compo)HY(nents)YH( are repre)HY(sented)YH( as nega)HY(tive)YH( inte)HY(gers)YH(.)EP( - - - )0 2 25 H(2.5.8)WB 119 Sn()WB 29 Sn( Mapping for )SM(date)ES()EA()EH( - - )0 P(The XML Schema )SM(date)ES( built-in data type is mapped to the - )SM(xml_schema::date)ES( C++ class which repre)HY(sents)YH( a year, a day, - and a month with an optional time zone. Its inter)HY(face)YH( is presented - below. For more infor)HY(ma)HY(tion)YH( on the base )SM(xml_schema::time_zone)ES( - class refer to )0 28 1 A(Section 2.5.7, "Time Zone - Repre)HY(sen)HY(ta)HY(tion)YH(")28 0 TN TL()Ec /AF f D(.)EP( - - ) 41 60 PR(class date: public simple_type, public time_zone -{ -public: - date \201int year, unsigned short month, unsigned short day\202; - date \201int year, unsigned short month, unsigned short day, - short zone_hours, short zone_minutes\202; - -public: - date \201const date&\202; - - date& - operator= \201const date&\202; - - virtual date* - _clone \201\202 const; - -public: - int - year \201\202 const; - - void - year \201int\202; - - unsigned short - month \201\202 const; - - void - month \201unsigned short\202; - - unsigned short - day \201\202 const;)WR( - - void - day \201unsigned short\202; -}; - -bool -operator== \201const date&, const date&\202; - -bool -operator!= \201const date&, const date&\202;)RP( - - )0 2 26 H(2.5.9)WB 120 Sn()WB 30 Sn( Mapping for )SM(date)HY(Time)YH()ES()EA()EH( - - )0 P(The XML Schema )SM(date)HY(Time)YH()ES( built-in data type is mapped to the - )SM(xml_schema::date_time)ES( C++ class which repre)HY(sents)YH( a year, a month, - a day, hours, minutes, and seconds with an optional time zone. Its inter)HY(face)YH( - is presented below. For more infor)HY(ma)HY(tion)YH( on the base - )SM(xml_schema::time_zone)ES( class refer to )0 28 1 A(Section - 2.5.7, "Time Zone Repre)HY(sen)HY(ta)HY(tion)YH(")28 0 TN TL()Ec /AF f D(.)EP( - - ) 62 67 PR(class date_time: public simple_type, public time_zone -{ -public: - date_time \201int year, unsigned short month, unsigned short day, - unsigned short hours, unsigned short minutes, - double seconds\202; - - date_time \201int year, unsigned short month, unsigned short day, - unsigned short hours, unsigned short minutes, - double seconds, short zone_hours, short zone_minutes\202; -public: - date_time \201const date_time&\202; - - date_time& - operator= \201const date_time&\202; - - virtual date_time* - _clone \201\202 const; - -public: - int - year \201\202 const; - - void - year \201int\202; - - unsigned short - month \201\202 const; - - void - month \201unsigned short\202;)WR( - - unsigned short - day \201\202 const; - - void - day \201unsigned short\202; - - unsigned short - hours \201\202 const; - - void - hours \201unsigned short\202; - - unsigned short - minutes \201\202 const; - - void - minutes \201unsigned short\202; - - double - seconds \201\202 const; - - void - seconds \201double\202; -}; - -bool -operator== \201const date_time&, const date_time&\202; - -bool)WR( -operator!= \201const date_time&, const date_time&\202;)RP( - - - )0 2 27 H(2.5.10)WB 121 Sn()WB 31 Sn( Mapping for )SM(dura)HY(tion)YH()ES()EA()EH( - - )0 P(The XML Schema )SM(dura)HY(tion)YH()ES( built-in data type is mapped to the - )SM(xml_schema::dura)HY(tion)YH()ES( C++ class which repre)HY(sents)YH( a poten)HY(tially)YH( - nega)HY(tive)YH( dura)HY(tion)YH( in the form of years, months, days, hours, minutes, - and seconds. Its inter)HY(face)YH( is presented below.)EP( - - ) 64 71 PR(class duration: public simple_type -{ -public: - duration \201bool negative, - unsigned int years, unsigned int months, unsigned int days, - unsigned int hours, unsigned int minutes, double seconds\202; -public: - duration \201const duration&\202; - - duration& - operator= \201const duration&\202; - - virtual duration* - _clone \201\202 const; - -public: - bool - negative \201\202 const; - - void - negative \201bool\202; - - unsigned int - years \201\202 const; - - void - years \201unsigned int\202; - - unsigned int - months \201\202 const; -)WR( - void - months \201unsigned int\202; - - unsigned int - days \201\202 const; - - void - days \201unsigned int\202; - - unsigned int - hours \201\202 const; - - void - hours \201unsigned int\202; - - unsigned int - minutes \201\202 const; - - void - minutes \201unsigned int\202; - - double - seconds \201\202 const; - - void - seconds \201double\202; -}; - -bool -operator== \201const duration&, const duration&\202;)WR( - -bool -operator!= \201const duration&, const duration&\202;)RP( - - - )0 2 28 H(2.5.11)WB 122 Sn()WB 32 Sn( Mapping for )SM(gDay)ES()EA()EH( - - )0 P(The XML Schema )SM(gDay)ES( built-in data type is mapped to the - )SM(xml_schema::gday)ES( C++ class which repre)HY(sents)YH( a day of the - month with an optional time zone. Its inter)HY(face)YH( is presented below. - For more infor)HY(ma)HY(tion)YH( on the base )SM(xml_schema::time_zone)ES( - class refer to )0 28 1 A(Section 2.5.7, "Time Zone - Repre)HY(sen)HY(ta)HY(tion)YH(")28 0 TN TL()Ec /AF f D(.)EP( - - ) 29 66 PR(class gday: public simple_type, public time_zone -{ -public: - explicit - gday \201unsigned short day\202; - gday \201unsigned short day, short zone_hours, short zone_minutes\202; - -public: - gday \201const gday&\202; - - gday& - operator= \201const gday&\202; - - virtual gday* - _clone \201\202 const; - -public: - unsigned short - day \201\202 const; - - void - day \201unsigned short\202; -}; - -bool -operator== \201const gday&, const gday&\202; - -bool -operator!= \201const gday&, const gday&\202;)RP( - - - )0 2 29 H(2.5.12)WB 123 Sn()WB 33 Sn( Mapping for )SM(gMonth)ES()EA()EH( - - )0 P(The XML Schema )SM(gMonth)ES( built-in data type is mapped to the - )SM(xml_schema::gmonth)ES( C++ class which repre)HY(sents)YH( a month of the - year with an optional time zone. Its inter)HY(face)YH( is presented below. - For more infor)HY(ma)HY(tion)YH( on the base )SM(xml_schema::time_zone)ES( - class refer to )0 28 1 A(Section 2.5.7, "Time Zone - Repre)HY(sen)HY(ta)HY(tion)YH(")28 0 TN TL()Ec /AF f D(.)EP( - - ) 30 50 PR(class gmonth: public simple_type, public time_zone -{ -public: - explicit - gmonth \201unsigned short month\202; - gmonth \201unsigned short month, - short zone_hours, short zone_minutes\202; - -public: - gmonth \201const gmonth&\202; - - gmonth& - operator= \201const gmonth&\202; - - virtual gmonth* - _clone \201\202 const; - -public: - unsigned short - month \201\202 const; - - void - month \201unsigned short\202; -}; - -bool -operator== \201const gmonth&, const gmonth&\202; - -bool -operator!= \201const gmonth&, const gmonth&\202;)RP( - - - )0 2 30 H(2.5.13)WB 124 Sn()WB 34 Sn( Mapping for )SM(gMon)HY(th)HY(Day)YH()ES()EA()EH( - - )0 P(The XML Schema )SM(gMon)HY(th)HY(Day)YH()ES( built-in data type is mapped to the - )SM(xml_schema::gmonth_day)ES( C++ class which repre)HY(sents)YH( a day and - a month of the year with an optional time zone. Its inter)HY(face)YH( is presented - below. For more infor)HY(ma)HY(tion)YH( on the base )SM(xml_schema::time_zone)ES( - class refer to )0 28 1 A(Section 2.5.7, "Time Zone - Repre)HY(sen)HY(ta)HY(tion)YH(")28 0 TN TL()Ec /AF f D(.)EP( - - ) 35 56 PR(class gmonth_day: public simple_type, public time_zone -{ -public: - gmonth_day \201unsigned short month, unsigned short day\202; - gmonth_day \201unsigned short month, unsigned short day, - short zone_hours, short zone_minutes\202; - -public: - gmonth_day \201const gmonth_day&\202; - - gmonth_day& - operator= \201const gmonth_day&\202; - - virtual gmonth_day* - _clone \201\202 const; - -public: - unsigned short - month \201\202 const; - - void - month \201unsigned short\202; - - unsigned short - day \201\202 const; - - void - day \201unsigned short\202; -}; - -bool)WR( -operator== \201const gmonth_day&, const gmonth_day&\202; - -bool -operator!= \201const gmonth_day&, const gmonth_day&\202;)RP( - - - )0 2 31 H(2.5.14)WB 125 Sn()WB 35 Sn( Mapping for )SM(gYear)ES()EA()EH( - - )0 P(The XML Schema )SM(gYear)ES( built-in data type is mapped to the - )SM(xml_schema::gyear)ES( C++ class which repre)HY(sents)YH( a year with - an optional time zone. Its inter)HY(face)YH( is presented below. For more - infor)HY(ma)HY(tion)YH( on the base )SM(xml_schema::time_zone)ES( class refer - to )0 28 1 A(Section 2.5.7, "Time Zone Repre)HY(sen)HY(ta)HY(tion)YH(")28 0 TN TL()Ec /AF f D(.)EP( - - ) 29 57 PR(class gyear: public simple_type, public time_zone -{ -public: - explicit - gyear \201int year\202; - gyear \201int year, short zone_hours, short zone_minutes\202; - -public: - gyear \201const gyear&\202; - - gyear& - operator= \201const gyear&\202; - - virtual gyear* - _clone \201\202 const; - -public: - int - year \201\202 const; - - void - year \201int\202; -}; - -bool -operator== \201const gyear&, const gyear&\202; - -bool -operator!= \201const gyear&, const gyear&\202;)RP( - - - )0 2 32 H(2.5.15)WB 126 Sn()WB 36 Sn( Mapping for )SM(gYear)HY(Month)YH()ES()EA()EH( - - )0 P(The XML Schema )SM(gYear)HY(Month)YH()ES( built-in data type is mapped to - the )SM(xml_schema::gyear_month)ES( C++ class which repre)HY(sents)YH( - a year and a month with an optional time zone. Its inter)HY(face)YH( is presented - below. For more infor)HY(ma)HY(tion)YH( on the base )SM(xml_schema::time_zone)ES( - class refer to )0 28 1 A(Section 2.5.7, "Time Zone - Repre)HY(sen)HY(ta)HY(tion)YH(")28 0 TN TL()Ec /AF f D(.)EP( - - ) 34 55 PR(class gyear_month: public simple_type, public time_zone -{ -public: - gyear_month \201int year, unsigned short month\202; - gyear_month \201int year, unsigned short month, - short zone_hours, short zone_minutes\202; -public: - gyear_month \201const gyear_month&\202; - - gyear_month& - operator= \201const gyear_month&\202; - - virtual gyear_month* - _clone \201\202 const; - -public: - int - year \201\202 const; - - void - year \201int\202; - - unsigned short - month \201\202 const; - - void - month \201unsigned short\202; -}; - -bool -operator== \201const gyear_month&, const gyear_month&\202;)WR( - -bool -operator!= \201const gyear_month&, const gyear_month&\202;)RP( - - - )0 2 33 H(2.5.16)WB 127 Sn()WB 37 Sn( Mapping for )SM(time)ES()EA()EH( - - )0 P(The XML Schema )SM(time)ES( built-in data type is mapped to - the )SM(xml_schema::time)ES( C++ class which repre)HY(sents)YH( hours, - minutes, and seconds with an optional time zone. Its inter)HY(face)YH( is - presented below. For more infor)HY(ma)HY(tion)YH( on the base - )SM(xml_schema::time_zone)ES( class refer to - )0 28 1 A(Section 2.5.7, "Time Zone Repre)HY(sen)HY(ta)HY(tion)YH(")28 0 TN TL()Ec /AF f D(.)EP( - - ) 41 70 PR(class time: public simple_type, public time_zone -{ -public: - time \201unsigned short hours, unsigned short minutes, double seconds\202; - time \201unsigned short hours, unsigned short minutes, double seconds, - short zone_hours, short zone_minutes\202; - -public: - time \201const time&\202; - - time& - operator= \201const time&\202; - - virtual time* - _clone \201\202 const; - -public: - unsigned short - hours \201\202 const; - - void - hours \201unsigned short\202; - - unsigned short - minutes \201\202 const; - - void - minutes \201unsigned short\202; - - double - seconds \201\202 const;)WR( - - void - seconds \201double\202; -}; - -bool -operator== \201const time&, const time&\202; - -bool -operator!= \201const time&, const time&\202;)RP( - - - - - )0 2 34 H(2.6)WB 128 Sn()WB 38 Sn( Mapping for Simple Types)EA()EH( - - )0 P(An XML Schema simple type is mapped to a C++ class with the same - name as the simple type. The class defines a public copy construc)HY(tor)YH(, - a public copy assign)HY(ment)YH( oper)HY(a)HY(tor)YH(, and a public virtual - )SM(_clone)ES( func)HY(tion)YH(. The )SM(_clone)ES( func)HY(tion)YH( is - declared )SM(const)ES(, does not take any argu)HY(ments)YH(, and returns - a pointer to a complete copy of the instance allo)HY(cated)YH( in the free - store. The )SM(_clone)ES( func)HY(tion)YH( shall be used to make copies - when static type and dynamic type of the instance may differ \201see - )0 54 1 A(Section 2.11, "Mapping for )SM(xsi:type)ES( - and Substi)HY(tu)HY(tion)YH( Groups")54 0 TN TL()Ec /AF f D(\202. For instance:)EP( - - ) 3 26 PR( - ... -)RP( - - )0 P(is mapped to:)EP( - - ) 16 28 PR(class object: ... -{ -public: - object \201const object&\202; - -public: - object& - operator= \201const object&\202; - -public: - virtual object* - _clone \201\202 const; - - ... - -};)RP( - - )0 P(The base class spec)HY(i)HY(fi)HY(ca)HY(tion)YH( and the rest of the class defi)HY(ni)HY(tion)YH( - depend on the type of deriva)HY(tion)YH( used to define the simple type. )EP( - - - )0 3 35 H(2.6.1)WB 129 Sn()WB 39 Sn( Mapping for Deriva)HY(tion)YH( by Restric)HY(tion)YH()EA()EH( - - )0 P(XML Schema deriva)HY(tion)YH( by restric)HY(tion)YH( is mapped to C++ public - inher)HY(i)HY(tance)YH(. The base type of the restric)HY(tion)YH( becomes the base - type for the result)HY(ing)YH( C++ class. In addi)HY(tion)YH( to the members described - in )0 38 1 A(Section 2.6, "Mapping for Simple Types")38 0 TN TL()Ec /AF f D(, the - result)HY(ing)YH( C++ class defines a public construc)HY(tor)YH( with the base type - as its single argu)HY(ment)YH(. For instance:)EP( - - ) 5 27 PR( - - ... - -)RP( - - )0 P(is mapped to:)EP( - - ) 14 28 PR(class object: public base -{ -public: - object \201const base&\202; - object \201const object&\202; - -public: - object& - operator= \201const object&\202; - -public: - virtual object* - _clone \201\202 const; -};)RP( - - - )0 3 36 H(2.6.2)WB 130 Sn()WB 40 Sn( Mapping for Enumer)HY(a)HY(tions)YH()EA()EH( - -)0 P(XML Schema restric)HY(tion)YH( by enumer)HY(a)HY(tion)YH( is mapped to a C++ class - with seman)HY(tics)YH( similar to C++ )SM(enum)ES(. Each XML Schema - enumer)HY(a)HY(tion)YH( element is mapped to a C++ enumer)HY(a)HY(tor)YH( with the - name derived from the )SM(value)ES( attribute and defined - in the class scope. In addi)HY(tion)YH( to the members - described in )0 38 1 A(Section 2.6, "Mapping for Simple Types")38 0 TN TL()Ec /AF f D(, - the result)HY(ing)YH( C++ class defines a public construc)HY(tor)YH( that can be called - with one of the enumer)HY(a)HY(tors)YH( as its single argu)HY(ment)YH(, a public construc)HY(tor)YH( - that can be called with enumer)HY(a)HY(tion)YH('s base value as its single - argu)HY(ment)YH(, a public assign)HY(ment)YH( oper)HY(a)HY(tor)YH( that can be used to assign the - value of one of the enumer)HY(a)HY(tors)YH(, and a public implicit conver)HY(sion)YH( - oper)HY(a)HY(tor)YH( to the under)HY(ly)HY(ing)YH( C++ enum type.)EP( - -)0 P(Further)HY(more)YH(, for string-based enumer)HY(a)HY(tion)YH( types, the result)HY(ing)YH( C++ - class defines a public construc)HY(tor)YH( with a single argu)HY(ment)YH( of type - )SM(const C*)ES( and a public construc)HY(tor)YH( with a single - argu)HY(ment)YH( of type )SM(const std::basic_string&)ES(. - For instance:)EP( - - ) 7 32 PR( - - - - - -)RP( - - )0 P(is mapped to:)EP( - - ) 31 38 PR(class color: xml_schema::string -{ -public: - enum value - { - red, - green, - blue - }; - -public: - color \201value\202; - color \201const C*\202; - color \201const std::basic_string&\202; - color \201const xml_schema::string&\202; - color \201const color&\202; - -public: - color& - operator= \201value\202; - - color& - operator= \201const color&\202; - -public: - virtual color* - _clone \201\202 const; - -public: - operator value \201\202 const; -};)WR()RP( - - )0 3 37 H(2.6.3)WB 131 Sn()WB 41 Sn( Mapping for Deriva)HY(tion)YH( by List)EA()EH( - - )0 P(XML Schema deriva)HY(tion)YH( by list is mapped to C++ public - inher)HY(i)HY(tance)YH( from )SM(xml_schema::simple_type)ES( - \201)0 24 1 A(Section 2.5.3, "Mapping for - )SM(anySim)HY(ple)HY(Type)YH()ES(")24 0 TN TL()Ec /AF f D(\202 and a suit)HY(able)YH( sequence type. - The list item type becomes the element type of the sequence. - In addi)HY(tion)YH( to the members described in )0 38 1 A(Section 2.6, - "Mapping for Simple Types")38 0 TN TL()Ec /AF f D(, the result)HY(ing)YH( C++ class defines - a public default construc)HY(tor)YH(, a public construc)HY(tor)YH( - with the first argu)HY(ment)YH( of type )SM(size_type)ES( and - the second argu)HY(ment)YH( of list item type that creates - a list object with the spec)HY(i)HY(fied)YH( number of copies of the spec)HY(i)HY(fied)YH( - element value, and a public construc)HY(tor)YH( with the two argu)HY(ments)YH( - of an input iter)HY(a)HY(tor)YH( type that creates a list object from an - iter)HY(a)HY(tor)YH( range. For instance: - )EP( - - ) 3 28 PR( - -)RP( - - )0 P(is mapped to:)EP( - - ) 19 42 PR(class int_list: public simple_type, - public sequence -{ -public: - int_list \201\202; - int_list \201size_type n, int x\202; - - template - int_list \201const I& begin, const I& end\202; - int_list \201const int_list&\202; - -public: - int_list& - operator= \201const int_list&\202; - -public: - virtual int_list* - _clone \201\202 const; -};)RP( - - )0 P(The )SM(sequence)ES( class template is defined in an - imple)HY(men)HY(ta)HY(tion)YH(-specific names)HY(pace)YH(. It conforms to the - sequence inter)HY(face)YH( as defined by the ISO/ANSI Stan)HY(dard)YH( for - C++ \201ISO/IEC 14882:1998, Section 23.1.1, "Sequences"\202. - Prac)HY(ti)HY(cally)YH(, this means that you can treat such a sequence - as if it was )SM(std::vector)ES(. One notable exten)HY(sion)YH( - to the stan)HY(dard)YH( inter)HY(face)YH( that is avail)HY(able)YH( only for - sequences of non-funda)HY(men)HY(tal)YH( C++ types is the addi)HY(tion)YH( of - the over)HY(loaded)YH( )SM(push_back)ES( and )SM(insert)ES( - member func)HY(tions)YH( which instead of the constant refer)HY(ence)YH( - to the element type accept auto)HY(matic)YH( pointer to the element - type. These func)HY(tions)YH( assume owner)HY(ship)YH( of the pointed to - object and resets the passed auto)HY(matic)YH( pointer. - )EP( - - )0 3 38 H(2.6.4)WB 132 Sn()WB 42 Sn( Mapping for Deriva)HY(tion)YH( by Union)EA()EH( - - )0 P(XML Schema deriva)HY(tion)YH( by union is mapped to C++ public - inher)HY(i)HY(tance)YH( from )SM(xml_schema::simple_type)ES( - \201)0 24 1 A(Section 2.5.3, "Mapping for - )SM(anySim)HY(ple)HY(Type)YH()ES(")24 0 TN TL()Ec /AF f D(\202 and )SM(std::basic_string)ES(. - In addi)HY(tion)YH( to the members described in )0 38 1 A(Section 2.6, - "Mapping for Simple Types")38 0 TN TL()Ec /AF f D(, the result)HY(ing)YH( C++ class defines a - public construc)HY(tor)YH( with a single argu)HY(ment)YH( of type )SM(const C*)ES( - and a public construc)HY(tor)YH( with a single argu)HY(ment)YH( of type - )SM(const std::basic_string&)ES(. For instance: - )EP( - - ) 3 47 PR( - -)RP( - - )0 P(is mapped to:)EP( - - ) 16 51 PR(class int_string_union: public simple_type, - public std::basic_string -{ -public: - int_string_union \201const C*\202; - int_string_union \201const std::basic_string&\202; - int_string_union \201const int_string_union&\202; - -public: - int_string_union& - operator= \201const int_string_union&\202; - -public: - virtual int_string_union* - _clone \201\202 const; -};)RP( - - )0 2 39 H(2.7)WB 133 Sn()WB 43 Sn( Mapping for Complex Types)EA()EH( - - )0 P(An XML Schema complex type is mapped to a C++ class with the same - name as the complex type. The class defines a public copy construc)HY(tor)YH(, - a public copy assign)HY(ment)YH( oper)HY(a)HY(tor)YH(, and a public virtual - )SM(_clone)ES( func)HY(tion)YH(. The )SM(_clone)ES( func)HY(tion)YH( is - declared )SM(const)ES(, does not take any argu)HY(ments)YH(, and returns - a pointer to a complete copy of the instance allo)HY(cated)YH( in the free - store. The )SM(_clone)ES( func)HY(tion)YH( shall be used to make copies - when static type and dynamic type of the instance may differ \201see - )0 54 1 A(Section 2.11, "Mapping for )SM(xsi:type)ES( - and Substi)HY(tu)HY(tion)YH( Groups")54 0 TN TL()Ec /AF f D(\202.)EP( - - )0 P(Addi)HY(tion)HY(ally)YH(, the result)HY(ing)YH( C++ class - defines two public construc)HY(tors)YH( that take an initial)HY(izer)YH( for each - member of the complex type and all its base types that belongs to - the One cardi)HY(nal)HY(ity)YH( class \201see )0 46 1 A(Section 2.8, "Mapping - for Local Elements and Attributes")46 0 TN TL()Ec /AF f D(\202. In the first construc)HY(tor)YH(, - the argu)HY(ments)YH( are passed as constant refer)HY(ences)YH( and the newly created - instance is initial)HY(ized)YH( with copies of the passed objects. In the - second construc)HY(tor)YH(, argu)HY(ments)YH( that are complex types \201that is, - they them)HY(selves)YH( contain elements or attributes\202 are passed as - refer)HY(ences)YH( to )SM(std::auto_ptr)ES(. In this case the newly - created instance is directly initial)HY(ized)YH( with and assumes owner)HY(ship)YH( - of the pointed to objects and the )SM(std::auto_ptr)ES( argu)HY(ments)YH( - are reset to )SM(0)ES(. For instance:)EP( - - ) 15 66 PR( - - - - - - - - - - - - - -)RP( - - )0 P(is mapped to:)EP( - - ) 36 60 PR(class complex: xml_schema::type -{ -public: - object \201const int& a, const xml_schema::string& b\202; - object \201const complex&\202; - -public: - object& - operator= \201const complex&\202; - -public: - virtual complex* - _clone \201\202 const; - - ... - -}; - -class object: xml_schema::type -{ -public: - object \201const bool& s_one, const complex& c_one\202; - object \201const bool& s_one, std::auto_ptr& c_one\202; - object \201const object&\202; - -public: - object& - operator= \201const object&\202; - -public: - virtual object*)WR( - _clone \201\202 const; - - ... - -};)RP( - - )0 P(Notice that the gener)HY(ated)YH( )SM(complex)ES( class does not - have the second \201)SM(std::auto_ptr)ES(\202 version of the - construc)HY(tor)YH( since all its required members are of simple types.)EP( - - )0 P(If an XML Schema complex type has an ulti)HY(mate)YH( base which is an XML - Schema simple type then the result)HY(ing)YH( C++ class also defines a public - construc)HY(tor)YH( that takes an initial)HY(izer)YH( for the base type as well as - for each member of the complex type and all its base types that - belongs to the One cardi)HY(nal)HY(ity)YH( class. For instance:)EP( - - ) 7 61 PR( - - - - - -)RP( - - )0 P(is mapped to:)EP( - - ) 11 44 PR(class object: xml_schema::string -{ -public: - object \201const xml_schema::language& lang\202; - - object \201const xml_schema::date& base, - const xml_schema::language& lang\202; - - ... - -};)RP( - - )0 P(Further)HY(more)YH(, for string-based XML Schema complex types, the result)HY(ing)YH( C++ - class also defines two public construc)HY(tors)YH( with the first argu)HY(ments)YH( - of type )SM(const C*)ES( and )SM(std::basic_string&)ES(, - respec)HY(tively)YH(, followed by argu)HY(ments)YH( for each member of the complex - type and all its base types that belongs to the One cardi)HY(nal)HY(ity)YH( - class. For enumer)HY(a)HY(tion)YH(-based complex types the result)HY(ing)YH( C++ - class also defines a public construc)HY(tor)YH( with the first argu)HY(ments)YH( - of the under)HY(ly)HY(ing)YH( enum type followed by argu)HY(ments)YH( for each member - of the complex type and all its base types that belongs to the One - cardi)HY(nal)HY(ity)YH( class. For instance:)EP( - - ) 15 61 PR( - - - - - - - - - - - - - -)RP( - - )0 P(is mapped to:)EP( - - ) 37 44 PR(class color: xml_schema::string -{ -public: - enum value - { - red, - green, - blue - }; - -public: - color \201value\202; - color \201const C*\202; - color \201const std::basic_string&\202; - - ... - -}; - -class object: color -{ -public: - object \201const color& base, - const xml_schema::language& lang\202; - - object \201const color::value& base, - const xml_schema::language& lang\202; - - object \201const C* base, - const xml_schema::language& lang\202; -)WR( - object \201const std::basic_string& base, - const xml_schema::language& lang\202; - - ... - -};)RP( - - )0 P(Addi)HY(tional)YH( construc)HY(tors)YH( can be requested with the - )SM(--gener)HY(ate)YH(-default-ctor)ES( and - )SM(--gener)HY(ate)YH(-from-base-ctor)ES( options. See the - )R9 2 A(XSD - Compiler Command Line Manual)EA( for details.)EP( - - )0 P(If an XML Schema complex type is not explic)HY(itly)YH( derived from any type, - the result)HY(ing)YH( C++ class is derived from )SM(xml_schema::type)ES(. - In cases where an XML Schema complex type is defined using deriva)HY(tion)YH( - by exten)HY(sion)YH( or restric)HY(tion)YH(, the result)HY(ing)YH( C++ base class spec)HY(i)HY(fi)HY(ca)HY(tion)YH( - depends on the type of deriva)HY(tion)YH( and is described in the subse)HY(quent)YH( - sections. - )EP( - - )0 P(The mapping for elements and attributes that are defined in a complex - type is described in )0 46 1 A(Section 2.8, "Mapping for Local - Elements and Attributes")46 0 TN TL()Ec /AF f D(. - )EP( - - )0 3 40 H(2.7.1)WB 134 Sn()WB 44 Sn( Mapping for Deriva)HY(tion)YH( by Exten)HY(sion)YH()EA()EH( - - )0 P(XML Schema deriva)HY(tion)YH( by exten)HY(sion)YH( is mapped to C++ public - inher)HY(i)HY(tance)YH(. The base type of the exten)HY(sion)YH( becomes the base - type for the result)HY(ing)YH( C++ class. - )EP( - - )0 3 41 H(2.7.2)WB 135 Sn()WB 45 Sn( Mapping for Deriva)HY(tion)YH( by Restric)HY(tion)YH()EA()EH( - - )0 P(XML Schema deriva)HY(tion)YH( by restric)HY(tion)YH( is mapped to C++ public - inher)HY(i)HY(tance)YH(. The base type of the restric)HY(tion)YH( becomes the base - type for the result)HY(ing)YH( C++ class. XML Schema elements and - attributes defined within restric)HY(tion)YH( do not result in any - defi)HY(ni)HY(tions)YH( in the result)HY(ing)YH( C++ class. Instead, corre)HY(spond)HY(ing)YH( - \201unre)HY(stricted)YH(\202 defi)HY(ni)HY(tions)YH( are inher)HY(ited)YH( from the base class. - In the future versions of this mapping, such elements and - attributes may result in redef)HY(i)HY(ni)HY(tions)YH( of acces)HY(sors)YH( and - modi)HY(fiers)YH( to reflect their restricted seman)HY(tics)YH(. - )EP( - - - - )0 2 42 H(2.8)WB 136 Sn()WB 46 Sn( Mapping for Local Elements and Attributes)EA()EH( - - )0 P(XML Schema element and attribute defi)HY(ni)HY(tions)YH( are called local - if they appear within a complex type defi)HY(ni)HY(tion)YH(, an element group - defi)HY(ni)HY(tion)YH(, or an attribute group defi)HY(ni)HY(tions)YH(. - )EP( - - )0 P(Local XML Schema element and attribute defi)HY(ni)HY(tions)YH( have the same - C++ mapping. There)HY(fore)YH(, in this section, local elements and - attributes are collec)HY(tively)YH( called members. - )EP( - - )0 P(While there are many differ)HY(ent)YH( member cardi)HY(nal)HY(ity)YH( combi)HY(na)HY(tions)YH( - \201deter)HY(mined)YH( by the )SM(use)ES( attribute for attributes and - the )SM(minOc)HY(curs)YH()ES( and )SM(maxOc)HY(curs)YH()ES( attributes - for elements\202, the mapping divides all possi)HY(ble)YH( cardi)HY(nal)HY(ity)YH( - combi)HY(na)HY(tions)YH( into three cardi)HY(nal)HY(ity)YH( classes: - )EP( - - )0 DL( )0 DT()I(one)ES( - )DD(attributes: )SM(use == "required")ES( - )DD(attributes: )SM(use == "optional")ES( and has default or fixed value - )DD(elements: )SM(minOc)HY(curs)YH( == "1")ES( and )SM(maxOc)HY(curs)YH( == "1")ES( - - )0 DT()I(optional)ES( - )DD(attributes: )SM(use == "optional")ES( and doesn't have default or fixed value - )DD(elements: )SM(minOc)HY(curs)YH( == "0")ES( and )SM(maxOc)HY(curs)YH( == "1")ES( - - )0 DT()I(sequence)ES( - )DD(elements: )SM(maxOc)HY(curs)YH( > "1")ES( - )LD( - - )0 P(An optional attribute with a default or fixed value acquires this value - if the attribute hasn't been spec)HY(i)HY(fied)YH( in an instance docu)HY(ment)YH( \201see - )0 92 1 A(Appendix A, "Default and Fixed Values")92 0 TN TL()Ec /AF f D(\202. This - mapping places such optional attributes to the One cardi)HY(nal)HY(ity)YH( - class.)EP( - - )0 P(A member is mapped to a set of public type defi)HY(ni)HY(tions)YH( - \201)SM(typedef)ES(s\202 and a set of public acces)HY(sor)YH( and modi)HY(fier)YH( - func)HY(tions)YH(. Type defi)HY(ni)HY(tions)YH( have names derived from the member's - name. The acces)HY(sor)YH( and modi)HY(fier)YH( func)HY(tions)YH( have the same name as the - member. For example: - )EP( - - ) 5 42 PR( - - - -)RP( - - )0 P(is mapped to:)EP( - - ) 11 41 PR(class object: xml_schema::type -{ -public: - typedef xml_schema::string member_type; - - const member_type& - member \201\202 const; - - ... - -};)RP( - - )0 P(In addi)HY(tion)YH(, if a member has a default or fixed value, a static - acces)HY(sor)YH( func)HY(tion)YH( is gener)HY(ated)YH( that returns this value. For - example:)EP( - -) 3 55 PR( - -)RP( - - )0 P(is mapped to:)EP( - - ) 14 39 PR(class object: xml_schema::type -{ -public: - typedef xml_schema::string data_type; - - const data_type& - data \201\202 const; - - static const data_type& - data_default_value \201\202; - - ... - -};)RP( - - )0 P(Names and seman)HY(tics)YH( of type defi)HY(ni)HY(tions)YH( for the member as well - as signa)HY(tures)YH( of the acces)HY(sor)YH( and modi)HY(fier)YH( func)HY(tions)YH( depend on - the member's cardi)HY(nal)HY(ity)YH( class and are described in the follow)HY(ing)YH( - sub-sections. - )EP( - - - )0 3 43 H(2.8.1)WB 137 Sn()WB 47 Sn( Mapping for Members with the One Cardi)HY(nal)HY(ity)YH( Class)EA()EH( - - )0 P(For the One cardi)HY(nal)HY(ity)YH( class, the type defi)HY(ni)HY(tions)YH( consist of - an alias for the member's type with the name created by append)HY(ing)YH( - the )SM(_type)ES( suffix to the member's name. - )EP( - - )0 P(The acces)HY(sor)YH( func)HY(tions)YH( come in constant and non-constant versions. - The constant acces)HY(sor)YH( func)HY(tion)YH( returns a constant refer)HY(ence)YH( to the - member and can be used for read-only access. The non-constant - version returns an unre)HY(stricted)YH( refer)HY(ence)YH( to the member and can - be used for read-write access. - )EP( - - )0 P(The first modi)HY(fier)YH( func)HY(tion)YH( expects an argu)HY(ment)YH( of type refer)HY(ence)YH( to - constant of the member's type. It makes a deep copy of its argu)HY(ment)YH(. - Except for member's types that are mapped to funda)HY(men)HY(tal)YH( C++ types, - the second modi)HY(fier)YH( func)HY(tion)YH( is provided that expects an argu)HY(ment)YH( - of type auto)HY(matic)YH( pointer to the member's type. It assumes owner)HY(ship)YH( - of the pointed to object and resets the passed auto)HY(matic)YH( pointer. - For instance:)EP( - - ) 5 42 PR( - - - -)RP( - - )0 P(is mapped to:)EP( - - ) 25 41 PR(class object: xml_schema::type -{ -public: - // Type definitions. - // - typedef xml_schema::string member_type; - - // Accessors. - // - const member_type& - member \201\202 const; - - member_type& - member \201\202; - - // Modifiers. - // - void - member \201const member_type&\202; - - void - member \201std::auto_ptr\202; - ... - -};)RP( - - )0 P(In addi)HY(tion)YH(, if requested by spec)HY(i)HY(fy)HY(ing)YH( the )SM(--gener)HY(ate)YH(-detach)ES( - option and only for members of non-funda)HY(men)HY(tal)YH( C++ types, the mapping - provides a detach func)HY(tion)YH( that returns an auto)HY(matic)YH( pointer to the - member's type, for example:)EP( - - ) 10 30 PR(class object: xml_schema::type -{ -public: - ... - - std::auto_ptr - detach_member \201\202; - ... - -};)RP( - - )0 P(This func)HY(tion)YH( detaches the value from the tree leaving the member - value unini)HY(tial)HY(ized)YH(. Access)HY(ing)YH( such an unini)HY(tial)HY(ized)YH( value prior to - re-initial)HY(iz)HY(ing)YH( it results in unde)HY(fined)YH( behav)HY(ior)YH(.)EP( - - )0 P(The follow)HY(ing)YH( code shows how one could use this mapping:)EP( - - ) 16 66 PR(void -f \201object& o\202 -{ - using xml_schema::string; - - string s \201o.member \201\202\202; // get - object::member_type& sr \201o.member \201\202\202; // get - - o.member \201"hello"\202; // set, deep copy - o.member \201\202 = "hello"; // set, deep copy - - std::auto_ptr p \201new string \201"hello"\202\202; - o.member \201p\202; // set, assumes ownership - p = o.detach_member \201\202; // detach, member is uninitialized - o.member \201p\202; // re-attach -})RP( - - -)0 3 44 H(2.8.2)WB 138 Sn()WB 48 Sn( Mapping for Members with the Optional Cardi)HY(nal)HY(ity)YH( Class)EA()EH( - - )0 P(For the Optional cardi)HY(nal)HY(ity)YH( class, the type defi)HY(ni)HY(tions)YH( consist of - an alias for the member's type with the name created by append)HY(ing)YH( - the )SM(_type)ES( suffix to the member's name and an alias for - the container type with the name created by append)HY(ing)YH( the - )SM(_optional)ES( suffix to the member's name. - )EP( - - )0 P(Unlike acces)HY(sor)YH( func)HY(tions)YH( for the One cardi)HY(nal)HY(ity)YH( class, acces)HY(sor)YH( - func)HY(tions)YH( for the Optional cardi)HY(nal)HY(ity)YH( class return refer)HY(ences)YH( to - corre)HY(spond)HY(ing)YH( contain)HY(ers)YH( rather than directly to members. The - acces)HY(sor)YH( func)HY(tions)YH( come in constant and non-constant versions. - The constant acces)HY(sor)YH( func)HY(tion)YH( returns a constant refer)HY(ence)YH( to - the container and can be used for read-only access. The non-constant - version returns an unre)HY(stricted)YH( refer)HY(ence)YH( to the container - and can be used for read-write access. - )EP( - - )0 P(The modi)HY(fier)YH( func)HY(tions)YH( are over)HY(loaded)YH( for the member's - type and the container type. The first modi)HY(fier)YH( func)HY(tion)YH( - expects an argu)HY(ment)YH( of type refer)HY(ence)YH( to constant of the - member's type. It makes a deep copy of its argu)HY(ment)YH(. - Except for member's types that are mapped to funda)HY(men)HY(tal)YH( C++ types, - the second modi)HY(fier)YH( func)HY(tion)YH( is provided that expects an argu)HY(ment)YH( - of type auto)HY(matic)YH( pointer to the member's type. It assumes owner)HY(ship)YH( - of the pointed to object and resets the passed auto)HY(matic)YH( pointer. - The last modi)HY(fier)YH( func)HY(tion)YH( expects an argu)HY(ment)YH( of type refer)HY(ence)YH( - to constant of the container type. It makes a deep copy of its - argu)HY(ment)YH(. For instance: - )EP( - - ) 5 56 PR( - - - -)RP( - - )0 P(is mapped to:)EP( - - ) 30 48 PR(class object: xml_schema::type -{ -public: - // Type definitions. - // - typedef xml_schema::string member_type; - typedef optional member_optional; - - // Accessors. - // - const member_optional& - member \201\202 const; - - member_optional& - member \201\202; - - // Modifiers. - // - void - member \201const member_type&\202; - - void - member \201std::auto_ptr\202; - - void - member \201const member_optional&\202; - - ... - -};)RP( - - - )0 P(The )SM(optional)ES( class template is defined in an - imple)HY(men)HY(ta)HY(tion)YH(-specific names)HY(pace)YH( and has the follow)HY(ing)YH( - inter)HY(face)YH(. The )SM(auto_ptr)ES(-based construc)HY(tor)YH( - and modi)HY(fier)YH( func)HY(tion)YH( are only avail)HY(able)YH( if the template - argu)HY(ment)YH( is not a funda)HY(men)HY(tal)YH( C++ type. - )EP( - - ) 97 52 PR(template -class optional -{ -public: - optional \201\202; - - // Makes a deep copy. - // - explicit - optional \201const X&\202; - - // Assumes ownership. - // - explicit - optional \201std::auto_ptr\202; - - optional \201const optional&\202; - -public: - optional& - operator= \201const X&\202; - - optional& - operator= \201const optional&\202; - - // Pointer-like interface. - // -public: - const X* - operator-> \201\202 const; -)WR( - X* - operator-> \201\202; - - const X& - operator* \201\202 const; - - X& - operator* \201\202; - - typedef void \201optional::*bool_convertible\202 \201\202; - operator bool_convertible \201\202 const; - - // Get/set interface. - // -public: - bool - present \201\202 const; - - const X& - get \201\202 const; - - X& - get \201\202; - - // Makes a deep copy. - // - void - set \201const X&\202; - - // Assumes ownership.)WR( - // - void - set \201std::auto_ptr\202; - - // Detach and return the contained value. - // - std::auto_ptr - detach \201\202; - - void - reset \201\202; -}; - -template -bool -operator== \201const optional&, const optional&\202; - -template -bool -operator!= \201const optional&, const optional&\202; - -template -bool -operator< \201const optional&, const optional&\202; - -template -bool -operator> \201const optional&, const optional&\202; - -template )WR( -bool -operator<= \201const optional&, const optional&\202; - -template -bool -operator>= \201const optional&, const optional&\202;)RP( - - - )0 P(The follow)HY(ing)YH( code shows how one could use this mapping:)EP( - - ) 32 62 PR(void -f \201object& o\202 -{ - using xml_schema::string; - - if \201o.member \201\202.present \201\202\202 // test - { - string& s \201o.member \201\202.get \201\202\202; // get - o.member \201"hello"\202; // set, deep copy - o.member \201\202.set \201"hello"\202; // set, deep copy - o.member \201\202.reset \201\202; // reset - } - - // Same as above but using pointer notation: - // - if \201o.member \201\202\202 // test - { - string& s \201*o.member \201\202\202; // get - o.member \201"hello"\202; // set, deep copy - *o.member \201\202 = "hello"; // set, deep copy - o.member \201\202.reset \201\202; // reset - } - - std::auto_ptr p \201new string \201"hello"\202\202; - o.member \201p\202; // set, assumes ownership - - p = new string \201"hello"\202; - o.member \201\202.set \201p\202; // set, assumes ownership - - p = o.member \201\202.detach \201\202; // detach, member is reset - o.member \201\202.set \201p\202; // re-attach)WR( -})RP( - - - )0 3 45 H(2.8.3)WB 139 Sn()WB 49 Sn( Mapping for Members with the Sequence Cardi)HY(nal)HY(ity)YH( Class)EA()EH( - - )0 P(For the Sequence cardi)HY(nal)HY(ity)YH( class, the type defi)HY(ni)HY(tions)YH( consist of an - alias for the member's type with the name created by append)HY(ing)YH( - the )SM(_type)ES( suffix to the member's name, an alias of - the container type with the name created by append)HY(ing)YH( the - )SM(_sequence)ES( suffix to the member's name, an alias of - the iter)HY(a)HY(tor)YH( type with the name created by append)HY(ing)YH( the - )SM(_iter)HY(a)HY(tor)YH()ES( suffix to the member's name, and an alias - of the constant iter)HY(a)HY(tor)YH( type with the name created by append)HY(ing)YH( the - )SM(_const_iter)HY(a)HY(tor)YH()ES( suffix to the member's name. - )EP( - - )0 P(The acces)HY(sor)YH( func)HY(tions)YH( come in constant and non-constant versions. - The constant acces)HY(sor)YH( func)HY(tion)YH( returns a constant refer)HY(ence)YH( to the - container and can be used for read-only access. The non-constant - version returns an unre)HY(stricted)YH( refer)HY(ence)YH( to the container and can - be used for read-write access. - )EP( - - )0 P(The modi)HY(fier)YH( func)HY(tion)YH( expects an argu)HY(ment)YH( of type refer)HY(ence)YH( to - constant of the container type. The modi)HY(fier)YH( func)HY(tion)YH( - makes a deep copy of its argu)HY(ment)YH(. For instance: - )EP( - - - ) 5 64 PR( - - - -)RP( - - )0 P(is mapped to:)EP( - - ) 26 64 PR(class object: xml_schema::type -{ -public: - // Type definitions. - // - typedef xml_schema::string member_type; - typedef sequence member_sequence; - typedef member_sequence::iterator member_iterator; - typedef member_sequence::const_iterator member_const_iterator; - - // Accessors. - // - const member_sequence& - member \201\202 const; - - member_sequence& - member \201\202; - - // Modifier. - // - void - member \201const member_sequence&\202; - - ... - -};)RP( - - )0 P(The )SM(sequence)ES( class template is defined in an - imple)HY(men)HY(ta)HY(tion)YH(-specific names)HY(pace)YH(. It conforms to the - sequence inter)HY(face)YH( as defined by the ISO/ANSI Stan)HY(dard)YH( for - C++ \201ISO/IEC 14882:1998, Section 23.1.1, "Sequences"\202. - Prac)HY(ti)HY(cally)YH(, this means that you can treat such a sequence - as if it was )SM(std::vector)ES(. Two notable exten)HY(sions)YH( - to the stan)HY(dard)YH( inter)HY(face)YH( that are avail)HY(able)YH( only for - sequences of non-funda)HY(men)HY(tal)YH( C++ types are the addi)HY(tion)YH( of - the over)HY(loaded)YH( )SM(push_back)ES( and )SM(insert)ES( - as well as the )SM(detach_back)ES( and )SM(detach)ES( - member func)HY(tions)YH(. The addi)HY(tional)YH( )SM(push_back)ES( and - )SM(insert)ES( func)HY(tions)YH( accept an auto)HY(matic)YH( pointer to the - element type instead of the constant refer)HY(ence)YH(. They assume - owner)HY(ship)YH( of the pointed to object and resets the passed - auto)HY(matic)YH( pointer. The )SM(detach_back)ES( and - )SM(detach)ES( func)HY(tions)YH( detach the element - value from the sequence container and, by default, remove - the element from the sequence. These addi)HY(tional)YH( func)HY(tions)YH( - have the follow)HY(ing)YH( signa)HY(tures)YH(:)EP( - - ) 22 46 PR(template -class sequence -{ -public: - ... - - void - push_back \201std::auto_ptr\202 - - iterator - insert \201iterator position, std::auto_ptr\202 - - std::auto_ptr - detach_back \201bool pop = true\202; - - iterator - detach \201iterator position, - std::auto_ptr& result, - bool erase = true\202 - - ... -})RP( - - )0 P(The follow)HY(ing)YH( code shows how one could use this mapping:)EP( - - ) 30 66 PR(void -f \201object& o\202 -{ - using xml_schema::string; - - object::member_sequence& s \201o.member \201\202\202; - - // Iteration. - // - for \201object::member_iterator i \201s.begin \201\202\202; i != s.end \201\202; ++i\202 - { - string& value \201*i\202; - } - - // Modification. - // - s.push_back \201"hello"\202; // deep copy - - std::auto_ptr p \201new string \201"hello"\202\202; - s.push_back \201p\202; // assumes ownership - p = s.detach_back \201\202; // detach and pop - s.push_back \201p\202; // re-append - - // Setting a new container. - // - object::member_sequence n; - n.push_back \201"one"\202; - n.push_back \201"two"\202; - o.member \201n\202; // deep copy -})RP( - - )0 2 46 H(2.9)WB 140 Sn()WB 50 Sn( Mapping for Global Elements)EA()EH( - - )0 P(An XML Schema element defi)HY(ni)HY(tion)YH( is called global if it appears - directly under the )SM(schema)ES( element. - A global element is a valid root of an instance docu)HY(ment)YH(. By - default, a global element is mapped to a set of over)HY(loaded)YH( - parsing and, option)HY(ally)YH(, seri)HY(al)HY(iza)HY(tion)YH( func)HY(tions)YH( with the - same name as the element. It is also possi)HY(ble)YH( to gener)HY(ate)YH( types - for root elements instead of parsing and seri)HY(al)HY(iza)HY(tion)YH( func)HY(tions)YH(. - This is primar)HY(ily)YH( useful to distin)HY(guish)YH( object models with the - same root type but with differ)HY(ent)YH( root elements. See - )0 51 1 A(Section 2.9.1, "Element Types")51 0 TN TL()Ec /AF f D( for details. - It is also possi)HY(ble)YH( to request the gener)HY(a)HY(tion)YH( of an element map - which allows uniform parsing and seri)HY(al)HY(iza)HY(tion)YH( of multi)HY(ple)YH( root - elements. See )0 52 1 A(Section 2.9.2, "Element Map")52 0 TN TL()Ec /AF f D( - for details. - )EP( - - )0 P(The parsing func)HY(tions)YH( read XML instance docu)HY(ments)YH( and return - corre)HY(spond)HY(ing)YH( object models. Their signa)HY(tures)YH( - have the follow)HY(ing)YH( pattern \201)SM(type)ES( denotes - element's type and )SM(name)ES( denotes element's - name\202: - )EP( - - ) 2 19 PR(std::auto_ptr -name \201....\202;)RP( - - )0 P(The process of parsing, includ)HY(ing)YH( the exact signa)HY(tures)YH( of the parsing - func)HY(tions)YH(, is the subject of )0 61 1 A(Chapter 3, "Parsing")61 0 TN TL()Ec /AF f D(. - )EP( - - )0 P(The seri)HY(al)HY(iza)HY(tion)YH( func)HY(tions)YH( write object models - back to XML instance docu)HY(ments)YH(. Their signa)HY(tures)YH( - have the follow)HY(ing)YH( pattern: - )EP( - - ) 2 41 PR(void -name \201&, const type&, ....\202;)RP( - - )0 P(The process of seri)HY(al)HY(iza)HY(tion)YH(, includ)HY(ing)YH( the exact signa)HY(tures)YH( of the - seri)HY(al)HY(iza)HY(tion)YH( func)HY(tions)YH(, is the subject of )0 78 1 A(Chapter 4, - "Seri)HY(al)HY(iza)HY(tion)YH(")78 0 TN TL()Ec /AF f D(. - )EP( - - - )0 3 47 H(2.9.1)WB 141 Sn()WB 51 Sn( Element Types)EA()EH( - - )0 P(The gener)HY(a)HY(tion)YH( of element types is requested with the - )SM(--gener)HY(ate)YH(-element-map)ES( option. With this option - each global element is mapped to a C++ class with the - same name as the element. Such a class is derived from - )SM(xml_schema::element_type)ES( and contains the same set - of type defi)HY(ni)HY(tions)YH(, construc)HY(tors)YH(, and member func)HY(tion)YH( as would a - type contain)HY(ing)YH( a single element with the One cardi)HY(nal)HY(ity)YH( class - named )SM("value")ES(. In addi)HY(tion)YH(, the element type also - contains a set of member func)HY(tions)YH( for access)HY(ing)YH( the element - name and names)HY(pace)YH( as well as its value in a uniform manner. - For example:)EP( - - ) 7 34 PR( - - ... - - - -)RP( - -)0 P(is mapped to:)EP( - - ) 62 59 PR(class type -{ - ... -}; - -class root: public xml_schema::element_type -{ -public: - // Element value. - // - typedef type value_type; - - const value_type& - value \201\202 const; - - value_type& - value \201\202; - - void - value \201const value_type&\202; - - void - value \201std::auto_ptr\202; - - // Constructors. - // - root \201const value_type&\202; - - root \201std::auto_ptr\202; - - root \201const xercesc::DOMElement&, xml_schema::flags = 0\202;)WR( - - root \201const root&, xml_schema::flags = 0\202; - - virtual root* - _clone \201xml_schema::flags = 0\202 const; - - // Element name and namespace. - // - static const std::string& - name \201\202; - - static const std::string& - namespace_ \201\202; - - virtual const std::string& - _name \201\202 const; - - virtual const std::string& - _namespace \201\202 const; - - // Element value as xml_schema::type. - // - virtual const xml_schema::type* - _value \201\202 const; - - virtual xml_schema::type* - _value \201\202; -}; - -void)WR( -operator<< \201xercesc::DOMElement&, const root&\202;)RP( - - )0 P(The )SM(xml_schema::element_type)ES( class is a common - base type for all element types and is defined as follows:)EP( - - ) 24 39 PR(namespace xml_schema -{ - class element_type - { - public: - virtual - ~element_type \201\202; - - virtual element_type* - _clone \201flags f = 0\202 const = 0; - - virtual const std::basic_string& - _name \201\202 const = 0; - - virtual const std::basic_string& - _namespace \201\202 const = 0; - - virtual xml_schema::type* - _value \201\202 = 0; - - virtual const xml_schema::type* - _value \201\202 const = 0; - }; -})RP( - - )0 P(The )SM(_value\201\202)ES( member func)HY(tion)YH( returns a pointer to - the element value or 0 if the element is of a funda)HY(men)HY(tal)YH( C++ - type and there)HY(fore)YH( is not derived from )SM(xml_schema::type)ES(. - )EP( - - )0 P(Unlike parsing and seri)HY(al)HY(iza)HY(tion)YH( func)HY(tions)YH(, element types - are only capable of parsing and seri)HY(al)HY(iz)HY(ing)YH( from/to a - )SM(DOMEle)HY(ment)YH()ES( object. This means that the appli)HY(ca)HY(tion)YH( - will need to perform its own XML-to-DOM parsing and DOM-to-XML - seri)HY(al)HY(iza)HY(tion)YH(. The follow)HY(ing)YH( section describes a mech)HY(a)HY(nism)YH( - provided by the mapping to uniformly parse and seri)HY(al)HY(ize)YH( - multi)HY(ple)YH( root elements.)EP( - - - )0 3 48 H(2.9.2)WB 142 Sn()WB 52 Sn( Element Map)EA()EH( - - )0 P(When element types are gener)HY(ated)YH( for root elements it is also - possi)HY(ble)YH( to request the gener)HY(a)HY(tion)YH( of an element map with the - )SM(--gener)HY(ate)YH(-element-map)ES( option. The element map - allows uniform parsing and seri)HY(al)HY(iza)HY(tion)YH( of multi)HY(ple)YH( root - elements via the common )SM(xml_schema::element_type)ES( - base type. The )SM(xml_schema::element_map)ES( class is - defined as follows:)EP( - - ) 12 58 PR(namespace xml_schema -{ - class element_map - { - public: - static std::auto_ptr - parse \201const xercesc::DOMElement&, flags = 0\202; - - static void - serialize \201xercesc::DOMElement&, const element_type&\202; - }; -})RP( - - )0 P(The )SM(parse\201\202)ES( func)HY(tion)YH( creates the corre)HY(spond)HY(ing)YH( - element type object based on the element name and names)HY(pace)YH( - and returns it as a pointer to )SM(xml_schema::element_type)ES(. - The )SM(seri)HY(al)HY(ize)YH(\201\202)ES( func)HY(tion)YH( seri)HY(al)HY(izes)YH( the passed element - object to )SM(DOMEle)HY(ment)YH()ES(. Note that in case of - )SM(seri)HY(al)HY(ize)YH(\201\202)ES(, the )SM(DOMEle)HY(ment)YH()ES( object - should have the correct name and names)HY(pace)YH(. If no element type is - avail)HY(able)YH( for an element, both func)HY(tions)YH( throw the - )SM(xml_schema::no_element_info)ES( excep)HY(tion)YH(:)EP( - - ) 14 66 PR(struct no_element_info: virtual exception -{ - no_element_info \201const std::basic_string& element_name, - const std::basic_string& element_namespace\202; - - const std::basic_string& - element_name \201\202 const; - - const std::basic_string& - element_namespace \201\202 const; - - virtual const char* - what \201\202 const throw \201\202; -};)RP( - - )0 P(The appli)HY(ca)HY(tion)YH( can discover the actual type of the element - object returned by )SM(parse\201\202)ES( either using - )SM(dynamic_cast)ES( or by compar)HY(ing)YH( element names and - names)HY(paces)YH(. The follow)HY(ing)YH( code frag)HY(ments)YH( illus)HY(trate)YH( how the - element map can be used:)EP( - - ) 18 50 PR(// Parsing. -// -DOMElement& e = ... // Parse XML to DOM. - -auto_ptr r \201 - xml_schema::element_map::parse \201e\202\202; - -if \201root1 r1 = dynamic_cast \201r.get \201\202\202\202 -{ - ... -} -else if \201r->_name == root2::name \201\202 && - r->_namespace \201\202 == root2::namespace_ \201\202\202 -{ - root2& r2 \201static_cast \201*r\202\202; - - ... -})RP( - - ) 13 68 PR(// Serialization. -// -xml_schema::element_type& r = ... - -string name \201r._name \201\202\202; -string ns \201r._namespace \201\202\202; - -DOMDocument& doc = ... // Create a new DOMDocument with name and ns. -DOMElement& e \201*doc->getDocumentElement \201\202\202; - -xml_schema::element_map::serialize \201e, r\202; - -// Serialize DOMDocument to XML.)RP( - - - - )0 2 49 H(2.10)WB 143 Sn()WB 53 Sn( Mapping for Global Attributes)EA()EH( - - )0 P(An XML Schema attribute defi)HY(ni)HY(tion)YH( is called global if it appears - directly under the )SM(schema)ES( element. A global - attribute does not have any mapping. - )EP( - - - - )0 2 50 H(2.11)WB 144 Sn()WB 54 Sn( Mapping for )SM(xsi:type)ES( and Substi)HY(tu)HY(tion)YH( - Groups)EA()EH( - - )0 P(The mapping provides optional support for the XML Schema poly)HY(mor)HY(phism)YH( - features \201)SM(xsi:type)ES( and substi)HY(tu)HY(tion)YH( groups\202 which can - be requested with the )SM(--gener)HY(ate)YH(-poly)HY(mor)HY(phic)YH()ES( option. - When used, the dynamic type of a member may be differ)HY(ent)YH( from - its static type. Consider the follow)HY(ing)YH( schema defi)HY(ni)HY(tion)YH( and - instance docu)HY(ment)YH(: - )EP( - - ) 28 62 PR( - - - - - - - - - - - - - - - - - - - - - - - - - - -)RP( - - )0 P(In the result)HY(ing)YH( object model, the container for - the )SM(root::item)ES( member will have two elements: - the first element's type will be )SM(base)ES( while - the second element's \201dynamic\202 type will be - )SM(derived)ES(. This can be discov)HY(ered)YH( using the - )SM(dynamic_cast)ES( oper)HY(a)HY(tor)YH( as shown in the follow)HY(ing)YH( - example: - )EP( - - ) 17 56 PR(void -f \201root& r\202 -{ - for \201root::item_const_iterator i \201r.item \201\202.begin \201\202\202; - i != r.item \201\202.end \201\202 - ++i\202 - { - if \201derived* d = dynamic_cast \201&\201*i\202\202\202 - { - // derived - } - else - { - // base - } - } -})RP( - - )0 P(The )SM(_clone)ES( virtual func)HY(tion)YH( should be used instead of - copy construc)HY(tors)YH( to make copies of members that might use - poly)HY(mor)HY(phism)YH(: - )EP( - - ) 10 56 PR(void -f \201root& r\202 -{ - for \201root::item_const_iterator i \201r.item \201\202.begin \201\202\202; - i != r.item \201\202.end \201\202 - ++i\202 - { - std::auto_ptr c \201i->_clone \201\202\202; - } -})RP( - - )0 P(The mapping can often auto)HY(mat)HY(i)HY(cally)YH( deter)HY(mine)YH( which types are - poly)HY(mor)HY(phic)YH( based on the substi)HY(tu)HY(tion)YH( group decla)HY(ra)HY(tions)YH(. However, - if your XML vocab)HY(u)HY(lary)YH( is not using substi)HY(tu)HY(tion)YH( groups or if - substi)HY(tu)HY(tion)YH( groups are defined in a sepa)HY(rate)YH( schema, then you will - need to use the )SM(--poly)HY(mor)HY(phic)YH(-type)ES( option to specify - which types are poly)HY(mor)HY(phic)YH(. When using this option you only need - to specify the root of a poly)HY(mor)HY(phic)YH( type hier)HY(ar)HY(chy)YH( and the mapping - will assume that all the derived types are also poly)HY(mor)HY(phic)YH(. - Also note that you need to specify this option when compil)HY(ing)YH( every - schema file that refer)HY(ences)YH( the poly)HY(mor)HY(phic)YH( type. Consider the follow)HY(ing)YH( - two schemas as an example:)EP( - - ) 13 55 PR( - - - - - - - - - - - -)RP( - - ) 18 70 PR( - - - - - - - - - - - - - - - - -)RP( - - )0 P(In this example we need to specify ")SM(--poly)HY(mor)HY(phic)YH(-type base)ES(" - when compil)HY(ing)YH( both schemas because the substi)HY(tu)HY(tion)YH( group is declared - in a schema other than the one defin)HY(ing)YH( type )SM(base)ES(.)EP( - - )0 P(You can also indi)HY(cate)YH( that all types should be treated as poly)HY(mor)HY(phic)YH( - with the )SM(--poly)HY(mor)HY(phic)YH(-type-all)ES(. However, this may result - in slower gener)HY(ated)YH( code with a greater foot)HY(print)YH(.)EP( - - - - - - )0 2 51 H(2.12)WB 145 Sn()WB 55 Sn( Mapping for )SM(any)ES( and )SM(anyAt)HY(tribute)YH()ES()EA()EH( - - )0 P(For the XML Schema )SM(any)ES( and )SM(anyAt)HY(tribute)YH()ES( - wild)HY(cards)YH( an optional mapping can be requested with the - )SM(--gener)HY(ate)YH(-wild)HY(card)YH()ES( option. The mapping repre)HY(sents)YH( - the content matched by wild)HY(cards)YH( as DOM frag)HY(ments)YH(. Because the - DOM API is used to access such content, the Xerces-C++ runtime - should be initial)HY(ized)YH( by the appli)HY(ca)HY(tion)YH( prior to parsing and - should remain initial)HY(ized)YH( for the life)HY(time)YH( of objects with - the wild)HY(card)YH( content. For more infor)HY(ma)HY(tion)YH( on the Xerces-C++ - runtime initial)HY(iza)HY(tion)YH( see )0 62 1 A(Section 3.1, - "Initial)HY(iz)HY(ing)YH( the Xerces-C++ Runtime")62 0 TN TL()Ec /AF f D(. - )EP( - - )0 P(The mapping for )SM(any)ES( is similar to the mapping for - local elements \201see )0 46 1 A(Section 2.8, "Mapping for Local - Elements and Attributes")46 0 TN TL()Ec /AF f D(\202 except that the type used in the - wild)HY(card)YH( mapping is )SM(xercesc::DOMEle)HY(ment)YH()ES(. As with local - elements, the mapping divides all possi)HY(ble)YH( cardi)HY(nal)HY(ity)YH( combi)HY(na)HY(tions)YH( - into three cardi)HY(nal)HY(ity)YH( classes: )I(one)ES(, )I(optional)ES(, and - )I(sequence)ES(. - )EP( - - )0 P(The mapping for )SM(anyAt)HY(tribute)YH()ES( repre)HY(sents)YH( the attributes - matched by this wild)HY(card)YH( as a set of )SM(xercesc::DOMAttr)ES( - objects with a key being the attribute's name and names)HY(pace)YH(.)EP( - - )0 P(Similar to local elements and attributes, the )SM(any)ES( and - )SM(anyAt)HY(tribute)YH()ES( wild)HY(cards)YH( are mapped to a set of public type - defi)HY(ni)HY(tions)YH( \201type)HY(defs)YH(\202 and a set of public acces)HY(sor)YH( and modi)HY(fier)YH( - func)HY(tions)YH(. Type defi)HY(ni)HY(tions)YH( have names derived from )SM("any")ES( - for the )SM(any)ES( wild)HY(card)YH( and )SM("any_attribute")ES( - for the )SM(anyAt)HY(tribute)YH()ES( wild)HY(card)YH(. The acces)HY(sor)YH( and modi)HY(fier)YH( - func)HY(tions)YH( are named )SM("any")ES( for the )SM(any)ES( wild)HY(card)YH( - and )SM("any_attribute")ES( for the )SM(anyAt)HY(tribute)YH()ES( - wild)HY(card)YH(. Subse)HY(quent)YH( wild)HY(cards)YH( in the same type have escaped names - such as )SM("any1")ES( or )SM("any_attribute1")ES(. - )EP( - - )0 P(Because Xerces-C++ DOM nodes always belong to a )SM(DOMDoc)HY(u)HY(ment)YH()ES(, - each type with a wild)HY(card)YH( has an asso)HY(ci)HY(ated)YH( )SM(DOMDoc)HY(u)HY(ment)YH()ES( - object. The refer)HY(ence)YH( to this object can be obtained using the acces)HY(sor)YH( - func)HY(tion)YH( called )SM(dom_docu)HY(ment)YH()ES(. The access to the docu)HY(ment)YH( - object from the appli)HY(ca)HY(tion)YH( code may be neces)HY(sary)YH( to create or modify - the wild)HY(card)YH( content. For example: - )EP( - - ) 6 37 PR( - - - - -)RP( - - )0 P(is mapped to:)EP( - - ) 37 73 PR(class object: xml_schema::type -{ -public: - // any - // - const xercesc::DOMElement& - any \201\202 const; - - void - any \201const xercesc::DOMElement&\202; - - ... - - // any_attribute - // - typedef attribute_set any_attribute_set; - typedef any_attribute_set::iterator any_attribute_iterator; - typedef any_attribute_set::const_iterator any_attribute_const_iterator; - - const any_attribute_set& - any_attribute \201\202 const; - - any_attribute_set& - any_attribute \201\202; - - ... - - // DOMDocument object for wildcard content. - // - const xercesc::DOMDocument& - dom_document \201\202 const;)WR( - - xercesc::DOMDocument& - dom_document \201\202; - - ... -};)RP( - - - )0 P(Names and seman)HY(tics)YH( of type defi)HY(ni)HY(tions)YH( for the wild)HY(cards)YH( as well - as signa)HY(tures)YH( of the acces)HY(sor)YH( and modi)HY(fier)YH( func)HY(tions)YH( depend on the - wild)HY(card)YH( type as well as the cardi)HY(nal)HY(ity)YH( class for the )SM(any)ES( - wild)HY(card)YH(. They are described in the follow)HY(ing)YH( sub-sections. - )EP( - - - )0 3 52 H(2.12.1)WB 146 Sn()WB 56 Sn( Mapping for )SM(any)ES( with the One Cardi)HY(nal)HY(ity)YH( Class)EA()EH( - - )0 P(For )SM(any)ES( with the One cardi)HY(nal)HY(ity)YH( class, - there are no type defi)HY(ni)HY(tions)YH(. The acces)HY(sor)YH( func)HY(tions)YH( come in - constant and non-constant versions. The constant acces)HY(sor)YH( func)HY(tion)YH( - returns a constant refer)HY(ence)YH( to )SM(xercesc::DOMEle)HY(ment)YH()ES( and - can be used for read-only access. The non-constant version returns - an unre)HY(stricted)YH( refer)HY(ence)YH( to )SM(xercesc::DOMEle)HY(ment)YH()ES( and can - be used for read-write access. - )EP( - - )0 P(The first modi)HY(fier)YH( func)HY(tion)YH( expects an argu)HY(ment)YH( of type refer)HY(ence)YH( - to constant )SM(xercesc::DOMEle)HY(ment)YH()ES( and makes a deep copy - of its argu)HY(ment)YH(. The second modi)HY(fier)YH( func)HY(tion)YH( expects an argu)HY(ment)YH( of - type pointer to )SM(xercesc::DOMEle)HY(ment)YH()ES(. This modi)HY(fier)YH( - func)HY(tion)YH( assumes owner)HY(ship)YH( of its argu)HY(ment)YH( and expects the element - object to be created using the DOM docu)HY(ment)YH( asso)HY(ci)HY(ated)YH( with this - instance. For example: - )EP( - - ) 5 30 PR( - - - -)RP( - - )0 P(is mapped to:)EP( - - ) 22 35 PR(class object: xml_schema::type -{ -public: - // Accessors. - // - const xercesc::DOMElement& - any \201\202 const; - - xercesc::DOMElement& - any \201\202; - - // Modifiers. - // - void - any \201const xercesc::DOMElement&\202; - - void - any \201xercesc::DOMElement*\202; - - ... - -};)RP( - - - )0 P(The follow)HY(ing)YH( code shows how one could use this mapping:)EP( - - ) 10 66 PR(void -f \201object& o, const xercesc::DOMElement& e\202 -{ - using namespace xercesc; - - DOMElement& e1 \201o.any \201\202\202; // get - o.any \201e\202 // set, deep copy - DOMDocument& doc \201o.dom_document \201\202\202; - o.any \201doc.createElement \201...\202\202; // set, assumes ownership -})RP( - - )0 3 53 H(2.12.2)WB 147 Sn()WB 57 Sn( Mapping for )SM(any)ES( with the Optional Cardi)HY(nal)HY(ity)YH( Class)EA()EH( - - )0 P(For )SM(any)ES( with the Optional cardi)HY(nal)HY(ity)YH( class, the type - defi)HY(ni)HY(tions)YH( consist of an alias for the container type with name - )SM(any_optional)ES( \201or )SM(any1_optional)ES(, etc., for - subse)HY(quent)YH( wild)HY(cards)YH( in the type defi)HY(ni)HY(tion)YH(\202. - )EP( - - )0 P(Unlike acces)HY(sor)YH( func)HY(tions)YH( for the One cardi)HY(nal)HY(ity)YH( class, acces)HY(sor)YH( - func)HY(tions)YH( for the Optional cardi)HY(nal)HY(ity)YH( class return refer)HY(ences)YH( to - corre)HY(spond)HY(ing)YH( contain)HY(ers)YH( rather than directly to )SM(DOMEle)HY(ment)YH()ES(. - The acces)HY(sor)YH( func)HY(tions)YH( come in constant and non-constant versions. - The constant acces)HY(sor)YH( func)HY(tion)YH( returns a constant refer)HY(ence)YH( to - the container and can be used for read-only access. The non-constant - version returns an unre)HY(stricted)YH( refer)HY(ence)YH( to the container - and can be used for read-write access. - )EP( - - )0 P(The modi)HY(fier)YH( func)HY(tions)YH( are over)HY(loaded)YH( for )SM(xercesc::DOMEle)HY(ment)YH()ES( - and the container type. The first modi)HY(fier)YH( func)HY(tion)YH( expects an argu)HY(ment)YH( of - type refer)HY(ence)YH( to constant )SM(xercesc::DOMEle)HY(ment)YH()ES( and - makes a deep copy of its argu)HY(ment)YH(. The second modi)HY(fier)YH( func)HY(tion)YH( - expects an argu)HY(ment)YH( of type pointer to )SM(xercesc::DOMEle)HY(ment)YH()ES(. - This modi)HY(fier)YH( func)HY(tion)YH( assumes owner)HY(ship)YH( of its argu)HY(ment)YH( and expects - the element object to be created using the DOM docu)HY(ment)YH( asso)HY(ci)HY(ated)YH( - with this instance. The third modi)HY(fier)YH( func)HY(tion)YH( expects an argu)HY(ment)YH( - of type refer)HY(ence)YH( to constant of the container type and makes a - deep copy of its argu)HY(ment)YH(. For instance: - )EP( - - ) 5 44 PR( - - - -)RP( - - )0 P(is mapped to:)EP( - - ) 29 40 PR(class object: xml_schema::type -{ -public: - // Type definitions. - // - typedef element_optional any_optional; - - // Accessors. - // - const any_optional& - any \201\202 const; - - any_optional& - any \201\202; - - // Modifiers. - // - void - any \201const xercesc::DOMElement&\202; - - void - any \201xercesc::DOMElement*\202; - - void - any \201const any_optional&\202; - - ... - -};)RP( - - - )0 P(The )SM(element_optional)ES( container is a - special)HY(iza)HY(tion)YH( of the )SM(optional)ES( class template described - in )0 48 1 A(Section 2.8.2, "Mapping for Members with the Optional - Cardi)HY(nal)HY(ity)YH( Class")48 0 TN TL()Ec /AF f D(. Its inter)HY(face)YH( is presented below: - )EP( - - ) 72 71 PR(class element_optional -{ -public: - explicit - element_optional \201xercesc::DOMDocument&\202; - - // Makes a deep copy. - // - element_optional \201const xercesc::DOMElement&, xercesc::DOMDocument&\202; - - // Assumes ownership. - // - element_optional \201xercesc::DOMElement*, xercesc::DOMDocument&\202; - - element_optional \201const element_optional&, xercesc::DOMDocument&\202; - -public: - element_optional& - operator= \201const xercesc::DOMElement&\202; - - element_optional& - operator= \201const element_optional&\202; - - // Pointer-like interface. - // -public: - const xercesc::DOMElement* - operator-> \201\202 const; - - xercesc::DOMElement* - operator-> \201\202;)WR( - - const xercesc::DOMElement& - operator* \201\202 const; - - xercesc::DOMElement& - operator* \201\202; - - typedef void \201element_optional::*bool_convertible\202 \201\202; - operator bool_convertible \201\202 const; - - // Get/set interface. - // -public: - bool - present \201\202 const; - - const xercesc::DOMElement& - get \201\202 const; - - xercesc::DOMElement& - get \201\202; - - // Makes a deep copy. - // - void - set \201const xercesc::DOMElement&\202; - - // Assumes ownership. - // - void)WR( - set \201xercesc::DOMElement*\202; - - void - reset \201\202; -}; - -bool -operator== \201const element_optional&, const element_optional&\202; - -bool -operator!= \201const element_optional&, const element_optional&\202;)RP( - - - )0 P(The follow)HY(ing)YH( code shows how one could use this mapping:)EP( - - ) 25 69 PR(void -f \201object& o, const xercesc::DOMElement& e\202 -{ - using namespace xercesc; - - DOMDocument& doc \201o.dom_document \201\202\202; - - if \201o.any \201\202.present \201\202\202 // test - { - DOMElement& e1 \201o.any \201\202.get \201\202\202; // get - o.any \201\202.set \201e\202; // set, deep copy - o.any \201\202.set \201doc.createElement \201...\202\202; // set, assumes ownership - o.any \201\202.reset \201\202; // reset - } - - // Same as above but using pointer notation: - // - if \201o.member \201\202\202 // test - { - DOMElement& e1 \201*o.any \201\202\202; // get - o.any \201e\202; // set, deep copy - o.any \201doc.createElement \201...\202\202; // set, assumes ownership - o.any \201\202.reset \201\202; // reset - } -})RP( - - - - )0 3 54 H(2.12.3)WB 148 Sn()WB 58 Sn( Mapping for )SM(any)ES( with the Sequence Cardi)HY(nal)HY(ity)YH( Class)EA()EH( - - )0 P(For )SM(any)ES( with the Sequence cardi)HY(nal)HY(ity)YH( class, the type - defi)HY(ni)HY(tions)YH( consist of an alias of the container type with name - )SM(any_sequence)ES( \201or )SM(any1_sequence)ES(, etc., for - subse)HY(quent)YH( wild)HY(cards)YH( in the type defi)HY(ni)HY(tion)YH(\202, an alias of the iter)HY(a)HY(tor)YH( - type with name )SM(any_iter)HY(a)HY(tor)YH()ES( \201or )SM(any1_iter)HY(a)HY(tor)YH()ES(, - etc., for subse)HY(quent)YH( wild)HY(cards)YH( in the type defi)HY(ni)HY(tion)YH(\202, and an alias - of the constant iter)HY(a)HY(tor)YH( type with name )SM(any_const_iter)HY(a)HY(tor)YH()ES( - \201or )SM(any1_const_iter)HY(a)HY(tor)YH()ES(, etc., for subse)HY(quent)YH( wild)HY(cards)YH( - in the type defi)HY(ni)HY(tion)YH(\202. - )EP( - - )0 P(The acces)HY(sor)YH( func)HY(tions)YH( come in constant and non-constant versions. - The constant acces)HY(sor)YH( func)HY(tion)YH( returns a constant refer)HY(ence)YH( to the - container and can be used for read-only access. The non-constant - version returns an unre)HY(stricted)YH( refer)HY(ence)YH( to the container and can - be used for read-write access. - )EP( - - )0 P(The modi)HY(fier)YH( func)HY(tion)YH( expects an argu)HY(ment)YH( of type refer)HY(ence)YH( to - constant of the container type. The modi)HY(fier)YH( func)HY(tion)YH( makes - a deep copy of its argu)HY(ment)YH(. For instance: - )EP( - - - ) 5 52 PR( - - - -)RP( - - )0 P(is mapped to:)EP( - - ) 25 58 PR(class object: xml_schema::type -{ -public: - // Type definitions. - // - typedef element_sequence any_sequence; - typedef any_sequence::iterator any_iterator; - typedef any_sequence::const_iterator any_const_iterator; - - // Accessors. - // - const any_sequence& - any \201\202 const; - - any_sequence& - any \201\202; - - // Modifier. - // - void - any \201const any_sequence&\202; - - ... - -};)RP( - - )0 P(The )SM(element_sequence)ES( container is a - special)HY(iza)HY(tion)YH( of the )SM(sequence)ES( class template described - in )0 49 1 A(Section 2.8.3, "Mapping for Members with the - Sequence Cardi)HY(nal)HY(ity)YH( Class")49 0 TN TL()Ec /AF f D(. Its inter)HY(face)YH( is similar to - the sequence inter)HY(face)YH( as defined by the ISO/ANSI Stan)HY(dard)YH( for - C++ \201ISO/IEC 14882:1998, Section 23.1.1, "Sequences"\202 and is - presented below: - )EP( - - ) 178 70 PR(class element_sequence -{ -public: - typedef xercesc::DOMElement value_type; - typedef xercesc::DOMElement* pointer; - typedef const xercesc::DOMElement* const_pointer; - typedef xercesc::DOMElement& reference; - typedef const xercesc::DOMElement& const_reference; - - typedef iterator; - typedef const_iterator; - typedef reverse_iterator; - typedef const_reverse_iterator; - - typedef size_type; - typedef difference_type; - typedef allocator_type; - -public: - explicit - element_sequence \201xercesc::DOMDocument&\202; - - // DOMElement cannot be default-constructed. - // - // explicit - // element_sequence \201size_type n\202; - - element_sequence \201size_type n, - const xercesc::DOMElement&, - xercesc::DOMDocument&\202; -)WR( - template - element_sequence \201const I& begin, - const I& end, - xercesc::DOMDocument&\202; - - element_sequence \201const element_sequence&, xercesc::DOMDocument&\202; - - element_sequence& - operator= \201const element_sequence&\202; - -public: - void - assign \201size_type n, const xercesc::DOMElement&\202; - - template - void - assign \201const I& begin, const I& end\202; - -public: - // This version of resize can only be used to shrink the - // sequence because DOMElement cannot be default-constructed. - // - void - resize \201size_type\202; - - void - resize \201size_type, const xercesc::DOMElement&\202; - -public: - size_type)WR( - size \201\202 const; - - size_type - max_size \201\202 const; - - size_type - capacity \201\202 const; - - bool - empty \201\202 const; - - void - reserve \201size_type\202; - - void - clear \201\202; - -public: - const_iterator - begin \201\202 const; - - const_iterator - end \201\202 const; - - iterator - begin \201\202; - - iterator - end \201\202; -)WR( - const_reverse_iterator - rbegin \201\202 const; - - const_reverse_iterator - rend \201\202 const - - reverse_iterator - rbegin \201\202; - - reverse_iterator - rend \201\202; - -public: - xercesc::DOMElement& - operator[] \201size_type\202; - - const xercesc::DOMElement& - operator[] \201size_type\202 const; - - xercesc::DOMElement& - at \201size_type\202; - - const xercesc::DOMElement& - at \201size_type\202 const; - - xercesc::DOMElement& - front \201\202; - - const xercesc::DOMElement& - front \201\202 const;)WR( - - xercesc::DOMElement& - back \201\202; - - const xercesc::DOMElement& - back \201\202 const; - -public: - // Makes a deep copy. - // - void - push_back \201const xercesc::DOMElement&\202; - - // Assumes ownership. - // - void - push_back \201xercesc::DOMElement*\202; - - void - pop_back \201\202; - - // Makes a deep copy. - // - iterator - insert \201iterator position, const xercesc::DOMElement&\202; - - // Assumes ownership. - // - iterator - insert \201iterator position, xercesc::DOMElement*\202;)WR( - - void - insert \201iterator position, size_type n, const xercesc::DOMElement&\202; - - template - void - insert \201iterator position, const I& begin, const I& end\202; - - iterator - erase \201iterator position\202; - - iterator - erase \201iterator begin, iterator end\202; - -public: - // Note that the DOMDocument object of the two sequences being - // swapped should be the same. - // - void - swap \201sequence& x\202; -}; - -inline bool -operator== \201const element_sequence&, const element_sequence&\202; - -inline bool -operator!= \201const element_sequence&, const element_sequence&\202;)RP( - - - )0 P(The follow)HY(ing)YH( code shows how one could use this mapping:)EP( - - ) 20 63 PR(void -f \201object& o, const xercesc::DOMElement& e\202 -{ - using namespace xercesc; - - object::any_sequence& s \201o.any \201\202\202; - - // Iteration. - // - for \201object::any_iterator i \201s.begin \201\202\202; i != s.end \201\202; ++i\202 - { - DOMElement& e \201*i\202; - } - - // Modification. - // - s.push_back \201e\202; // deep copy - DOMDocument& doc \201o.dom_document \201\202\202; - s.push_back \201doc.createElement \201...\202\202; // assumes ownership -})RP( - - - )0 3 55 H(2.12.4)WB 149 Sn()WB 59 Sn( Mapping for )SM(anyAt)HY(tribute)YH()ES()EA()EH( - - )0 P(For )SM(anyAt)HY(tribute)YH()ES( the type defi)HY(ni)HY(tions)YH( consist of an alias - of the container type with name )SM(any_attribute_set)ES( - \201or )SM(any1_attribute_set)ES(, etc., for subse)HY(quent)YH( wild)HY(cards)YH( - in the type defi)HY(ni)HY(tion)YH(\202, an alias of the iter)HY(a)HY(tor)YH( type with name - )SM(any_attribute_iter)HY(a)HY(tor)YH()ES( \201or )SM(any1_attribute_iter)HY(a)HY(tor)YH()ES(, - etc., for subse)HY(quent)YH( wild)HY(cards)YH( in the type defi)HY(ni)HY(tion)YH(\202, and an alias - of the constant iter)HY(a)HY(tor)YH( type with name )SM(any_attribute_const_iter)HY(a)HY(tor)YH()ES( - \201or )SM(any1_attribute_const_iter)HY(a)HY(tor)YH()ES(, etc., for subse)HY(quent)YH( - wild)HY(cards)YH( in the type defi)HY(ni)HY(tion)YH(\202. - )EP( - - )0 P(The acces)HY(sor)YH( func)HY(tions)YH( come in constant and non-constant versions. - The constant acces)HY(sor)YH( func)HY(tion)YH( returns a constant refer)HY(ence)YH( to the - container and can be used for read-only access. The non-constant - version returns an unre)HY(stricted)YH( refer)HY(ence)YH( to the container and can - be used for read-write access. - )EP( - - )0 P(The modi)HY(fier)YH( func)HY(tion)YH( expects an argu)HY(ment)YH( of type refer)HY(ence)YH( to - constant of the container type. The modi)HY(fier)YH( func)HY(tion)YH( makes - a deep copy of its argu)HY(ment)YH(. For instance: - )EP( - - - ) 6 37 PR( - - ... - - -)RP( - - )0 P(is mapped to:)EP( - - ) 25 73 PR(class object: xml_schema::type -{ -public: - // Type definitions. - // - typedef attribute_set any_attribute_set; - typedef any_attribute_set::iterator any_attribute_iterator; - typedef any_attribute_set::const_iterator any_attribute_const_iterator; - - // Accessors. - // - const any_attribute_set& - any_attribute \201\202 const; - - any_attribute_set& - any_attribute \201\202; - - // Modifier. - // - void - any_attribute \201const any_attribute_set&\202; - - ... - -};)RP( - - )0 P(The )SM(attribute_set)ES( class is an asso)HY(cia)HY(tive)YH( container - similar to the )SM(std::set)ES( class template as defined by - the ISO/ANSI Stan)HY(dard)YH( for C++ \201ISO/IEC 14882:1998, Section 23.3.3, - "Class template set"\202 with the key being the attribute's name - and names)HY(pace)YH(. Unlike )SM(std::set)ES(, )SM(attribute_set)ES( - allows search)HY(ing)YH( using names and names)HY(paces)YH( instead of - )SM(xercesc::DOMAttr)ES( objects. It is defined in an - imple)HY(men)HY(ta)HY(tion)YH(-specific names)HY(pace)YH( and its inter)HY(face)YH( is presented - below: - )EP( - - ) 166 70 PR(class attribute_set -{ -public: - typedef xercesc::DOMAttr key_type; - typedef xercesc::DOMAttr value_type; - typedef xercesc::DOMAttr* pointer; - typedef const xercesc::DOMAttr* const_pointer; - typedef xercesc::DOMAttr& reference; - typedef const xercesc::DOMAttr& const_reference; - - typedef iterator; - typedef const_iterator; - typedef reverse_iterator; - typedef const_reverse_iterator; - - typedef size_type; - typedef difference_type; - typedef allocator_type; - -public: - attribute_set \201xercesc::DOMDocument&\202; - - template - attribute_set \201const I& begin, const I& end, xercesc::DOMDocument&\202; - - attribute_set \201const attribute_set&, xercesc::DOMDocument&\202; - - attribute_set& - operator= \201const attribute_set&\202; - -public:)WR( - const_iterator - begin \201\202 const; - - const_iterator - end \201\202 const; - - iterator - begin \201\202; - - iterator - end \201\202; - - const_reverse_iterator - rbegin \201\202 const; - - const_reverse_iterator - rend \201\202 const; - - reverse_iterator - rbegin \201\202; - - reverse_iterator - rend \201\202; - -public: - size_type - size \201\202 const; - - size_type - max_size \201\202 const;)WR( - - bool - empty \201\202 const; - - void - clear \201\202; - -public: - // Makes a deep copy. - // - std::pair - insert \201const xercesc::DOMAttr&\202; - - // Assumes ownership. - // - std::pair - insert \201xercesc::DOMAttr*\202; - - // Makes a deep copy. - // - iterator - insert \201iterator position, const xercesc::DOMAttr&\202; - - // Assumes ownership. - // - iterator - insert \201iterator position, xercesc::DOMAttr*\202; - - template - void)WR( - insert \201const I& begin, const I& end\202; - -public: - void - erase \201iterator position\202; - - size_type - erase \201const std::basic_string& name\202; - - size_type - erase \201const std::basic_string& namespace_, - const std::basic_string& name\202; - - size_type - erase \201const XMLCh* name\202; - - size_type - erase \201const XMLCh* namespace_, const XMLCh* name\202; - - void - erase \201iterator begin, iterator end\202; - -public: - size_type - count \201const std::basic_string& name\202 const; - - size_type - count \201const std::basic_string& namespace_, - const std::basic_string& name\202 const; -)WR( - size_type - count \201const XMLCh* name\202 const; - - size_type - count \201const XMLCh* namespace_, const XMLCh* name\202 const; - - iterator - find \201const std::basic_string& name\202; - - iterator - find \201const std::basic_string& namespace_, - const std::basic_string& name\202; - - iterator - find \201const XMLCh* name\202; - - iterator - find \201const XMLCh* namespace_, const XMLCh* name\202; - - const_iterator - find \201const std::basic_string& name\202 const; - - const_iterator - find \201const std::basic_string& namespace_, - const std::basic_string& name\202 const; - - const_iterator - find \201const XMLCh* name\202 const; - - const_iterator)WR( - find \201const XMLCh* namespace_, const XMLCh* name\202 const; - -public: - // Note that the DOMDocument object of the two sets being - // swapped should be the same. - // - void - swap \201attribute_set&\202; -}; - -bool -operator== \201const attribute_set&, const attribute_set&\202; - -bool -operator!= \201const attribute_set&, const attribute_set&\202;)RP( - - )0 P(The follow)HY(ing)YH( code shows how one could use this mapping:)EP( - - ) 25 73 PR(void -f \201object& o, const xercesc::DOMAttr& a\202 -{ - using namespace xercesc; - - object::any_attribute_set& s \201o.any_attribute \201\202\202; - - // Iteration. - // - for \201object::any_attribute_iterator i \201s.begin \201\202\202; i != s.end \201\202; ++i\202 - { - DOMAttr& a \201*i\202; - } - - // Modification. - // - s.insert \201a\202; // deep copy - DOMDocument& doc \201o.dom_document \201\202\202; - s.insert \201doc.createAttribute \201...\202\202; // assumes ownership - - // Searching. - // - object::any_attribute_iterator i \201s.find \201"name"\202\202; - i = s.find \201"http://www.w3.org/XML/1998/namespace", "lang"\202; -})RP( - - - - )0 2 56 H(2.13)WB 150 Sn()WB 60 Sn( Mapping for Mixed Content Models)EA()EH( - - )0 P(XML Schema mixed content models do not have a direct C++ mapping. - Instead, infor)HY(ma)HY(tion)YH( in XML instance docu)HY(ments)YH(, corre)HY(spond)HY(ing)YH( to - a mixed content model, can be accessed using generic DOM nodes that - can option)HY(ally)YH( be asso)HY(ci)HY(ated)YH( with object model nodes. See - )0 90 1 A(Section 5.1, "DOM Asso)HY(ci)HY(a)HY(tion)YH(")90 0 TN TL()Ec /AF f D( for more - infor)HY(ma)HY(tion)YH( about keeping asso)HY(ci)HY(a)HY(tion)YH( with DOM nodes. - )EP( - - - - - - )0 1 57 H(3)WB 151 Sn()WB 61 Sn( Parsing)EA()EH( - - )0 P(This chapter covers various aspects of parsing XML instance - docu)HY(ments)YH( in order to obtain corre)HY(spond)HY(ing)YH( tree-like object - model. - )EP( - - )0 P(Each global XML Schema element in the form:)EP( - - ) 1 34 PR()RP( - - )0 P(is mapped to 14 over)HY(loaded)YH( C++ func)HY(tions)YH( in the form:)EP( - - ) 96 65 PR(// Read from a URI or a local file. -// - -std::auto_ptr -name \201const std::basic_string& uri, - xml_schema::flags = 0, - const xml_schema::properties& = xml_schema::properties \201\202\202; - -std::auto_ptr -name \201const std::basic_string& uri, - xml_schema::error_handler&, - xml_schema::flags = 0, - const xml_schema::properties& = xml_schema::properties \201\202\202; - -std::auto_ptr -name \201const std::basic_string& uri, - xercesc::DOMErrorHandler&, - xml_schema::flags = 0, - const xml_schema::properties& = xml_schema::properties \201\202\202; - - -// Read from std::istream. -// - -std::auto_ptr -name \201std::istream&, - xml_schema::flags = 0, - const xml_schema::properties& = xml_schema::properties \201\202\202; - -std::auto_ptr -name \201std::istream&,)WR( - xml_schema::error_handler&, - xml_schema::flags = 0, - const xml_schema::properties& = xml_schema::properties \201\202\202; - -std::auto_ptr -name \201std::istream&, - xercesc::DOMErrorHandler&, - xml_schema::flags = 0, - const xml_schema::properties& = xml_schema::properties \201\202\202; - - -std::auto_ptr -name \201std::istream&, - const std::basic_string& id, - xml_schema::flags = 0, - const xml_schema::properties& = xml_schema::properties \201\202\202; - -std::auto_ptr -name \201std::istream&, - const std::basic_string& id, - xml_schema::error_handler&, - xml_schema::flags = 0, - const xml_schema::properties& = xml_schema::properties \201\202\202; - -std::auto_ptr -name \201std::istream&, - const std::basic_string& id, - xercesc::DOMErrorHandler&, - xml_schema::flags = 0, - const xml_schema::properties& = xml_schema::properties \201\202\202;)WR( - - -// Read from InputSource. -// - -std::auto_ptr -name \201xercesc::InputSource&, - xml_schema::flags = 0, - const xml_schema::properties& = xml_schema::properties \201\202\202; - -std::auto_ptr -name \201xercesc::InputSource&, - xml_schema::error_handler&, - xml_schema::flags = 0, - const xml_schema::properties& = xml_schema::properties \201\202\202; - -std::auto_ptr -name \201xercesc::InputSource&, - xercesc::DOMErrorHandler&, - xml_schema::flags = 0, - const xml_schema::properties& = xml_schema::properties \201\202\202; - - -// Read from DOM. -// - -std::auto_ptr -name \201const xercesc::DOMDocument&, - xml_schema::flags = 0, - const xml_schema::properties& = xml_schema::properties \201\202\202;)WR( - -std::auto_ptr -name \201xml_schema::dom::auto_ptr&, - xml_schema::flags = 0, - const xml_schema::properties& = xml_schema::properties \201\202\202;)RP( - - )0 P(You can choose between reading an XML instance from a local file, - URI, )SM(std::istream)ES(, )SM(xercesc::Input)HY(Source)YH()ES(, - or a pre-parsed DOM instance in the form of - )SM(xercesc::DOMDoc)HY(u)HY(ment)YH()ES(. Each of these parsing func)HY(tions)YH( - is discussed in more detail in the follow)HY(ing)YH( sections. - )EP( - - )0 2 58 H(3.1)WB 152 Sn()WB 62 Sn( Initial)HY(iz)HY(ing)YH( the Xerces-C++ Runtime)EA()EH( - - )0 P(Some parsing func)HY(tions)YH( expect you to initial)HY(ize)YH( the Xerces-C++ - runtime while others initial)HY(ize)YH( and termi)HY(nate)YH( it as part of their - work. The general rule is as follows: if a func)HY(tion)YH( has any argu)HY(ments)YH( - or return a value that is an instance of a Xerces-C++ type, then - this func)HY(tion)YH( expects you to initial)HY(ize)YH( the Xerces-C++ runtime. - Other)HY(wise)YH(, the func)HY(tion)YH( initial)HY(izes)YH( and termi)HY(nates)YH( the runtime for - you. Note that it is legal to have nested calls to the Xerces-C++ - initial)HY(ize)YH( and termi)HY(nate)YH( func)HY(tions)YH( as long as the calls are balanced. - )EP( - - )0 P(You can instruct parsing func)HY(tions)YH( that initial)HY(ize)YH( and termi)HY(nate)YH( - the runtime not to do so by passing the - )SM(xml_schema::flags::dont_initial)HY(ize)YH()ES( flag \201see - )0 63 1 A(Section 3.2, "Flags and Prop)HY(er)HY(ties)YH(")63 0 TN TL()Ec /AF f D(\202. - )EP( - - - )0 2 59 H(3.2)WB 153 Sn()WB 63 Sn( Flags and Prop)HY(er)HY(ties)YH()EA()EH( - - )0 P(Parsing flags and prop)HY(er)HY(ties)YH( are the last two argu)HY(ments)YH( of every - parsing func)HY(tion)YH(. They allow you to fine-tune the process of - instance vali)HY(da)HY(tion)YH( and parsing. Both argu)HY(ments)YH( are optional. - )EP( - - - )0 P(The follow)HY(ing)YH( flags are recog)HY(nized)YH( by the parsing func)HY(tions)YH(:)EP( - - )0 DL( )0 DT()SM(xml_schema::flags::keep_dom)ES( - )DD(Keep asso)HY(ci)HY(a)HY(tion)YH( between DOM nodes and the result)HY(ing)YH( - object model nodes. For more infor)HY(ma)HY(tion)YH( about DOM asso)HY(ci)HY(a)HY(tion)YH( - refer to )0 90 1 A(Section 5.1, "DOM Asso)HY(ci)HY(a)HY(tion)YH(")90 0 TN TL()Ec /AF f D(. - - )0 DT()SM(xml_schema::flags::own_dom)ES( - )DD(Assume owner)HY(ship)YH( of the DOM docu)HY(ment)YH( passed. This flag only - makes sense together with the )SM(keep_dom)ES( flag in - the call to the parsing func)HY(tion)YH( with the - )SM(xml_schema::dom::auto_ptr)ES( - argu)HY(ment)YH(. - - )0 DT()SM(xml_schema::flags::dont_vali)HY(date)YH()ES( - )DD(Do not vali)HY(date)YH( instance docu)HY(ments)YH( against schemas. - - )0 DT()SM(xml_schema::flags::dont_initial)HY(ize)YH()ES( - )DD(Do not initial)HY(ize)YH( the Xerces-C++ runtime. - )LD( - - )0 P(You can pass several flags by combin)HY(ing)YH( them using the bit-wise OR - oper)HY(a)HY(tor)YH(. For example:)EP( - - ) 4 61 PR(using xml_schema::flags; - -std::auto_ptr r \201 - name \201"test.xml", flags::keep_dom | flags::dont_validate\202\202;)RP( - - )0 P(By default, vali)HY(da)HY(tion)YH( of instance docu)HY(ments)YH( is turned on even - though parsers gener)HY(ated)YH( by XSD do not assume instance - docu)HY(ments)YH( are valid. They include a number of checks that prevent - construc)HY(tion)YH( of incon)HY(sis)HY(tent)YH( object models. This, - however, does not mean that an instance docu)HY(ment)YH( that was - success)HY(fully)YH( parsed by the XSD-gener)HY(ated)YH( parsers is - valid per the corre)HY(spond)HY(ing)YH( schema. If an instance docu)HY(ment)YH( is not - "valid enough" for the gener)HY(ated)YH( parsers to construct consis)HY(tent)YH( - object model, one of the excep)HY(tions)YH( defined in - )SM(xml_schema)ES( names)HY(pace)YH( is thrown \201see - )0 64 1 A(Section 3.3, "Error Handling")64 0 TN TL()Ec /AF f D(\202. - )EP( - - )0 P(For more infor)HY(ma)HY(tion)YH( on the Xerces-C++ runtime initial)HY(iza)HY(tion)YH( - refer to )0 62 1 A(Section 3.1, "Initial)HY(iz)HY(ing)YH( the Xerces-C++ - Runtime")62 0 TN TL()Ec /AF f D(. - )EP( - - )0 P(The )SM(xml_schema::prop)HY(er)HY(ties)YH()ES( class allows you to - program)HY(mat)HY(i)HY(cally)YH( specify schema loca)HY(tions)YH( to be used instead - of those spec)HY(i)HY(fied)YH( with the )SM(xsi::schemaLo)HY(ca)HY(tion)YH()ES( - and )SM(xsi::noNames)HY(paceSchemaLo)HY(ca)HY(tion)YH()ES( attributes - in instance docu)HY(ments)YH(. The inter)HY(face)YH( of the )SM(prop)HY(er)HY(ties)YH()ES( - class is presented below: - )EP( - - ) 9 70 PR(class properties -{ -public: - void - schema_location \201const std::basic_string& namespace_, - const std::basic_string& location\202; - void - no_namespace_schema_location \201const std::basic_string& location\202; -};)RP( - - )0 P(Note that all loca)HY(tions)YH( are rela)HY(tive)YH( to an instance docu)HY(ment)YH( unless - they are URIs. For example, if you want to use a local file as your - schema, then you will need to pass - )SM(file:///abso)HY(lute)YH(/path/to/your/schema)ES( as the loca)HY(tion)YH( - argu)HY(ment)YH(. - )EP( - - )0 2 60 H(3.3)WB 154 Sn()WB 64 Sn( Error Handling)EA()EH( - - )0 P(As discussed in )0 13 1 A(Section 2.2, "Error Handling")13 0 TN TL()Ec /AF f D(, - the mapping uses the C++ excep)HY(tion)YH( handling mech)HY(a)HY(nism)YH( as its primary - way of report)HY(ing)YH( error condi)HY(tions)YH(. However, to handle recov)HY(er)HY(able)YH( - parsing and vali)HY(da)HY(tion)YH( errors and warn)HY(ings)YH(, a call)HY(back)YH( inter)HY(face)YH( maybe - preferred by the appli)HY(ca)HY(tion)YH(.)EP( - - )0 P(To better under)HY(stand)YH( error handling and report)HY(ing)YH( strate)HY(gies)YH( employed - by the parsing func)HY(tions)YH(, it is useful to know that the - trans)HY(for)HY(ma)HY(tion)YH( of an XML instance docu)HY(ment)YH( to a stat)HY(i)HY(cally)YH(-typed - tree happens in two stages. The first stage, performed by Xerces-C++, - consists of parsing an XML docu)HY(ment)YH( into a DOM instance. For short, - we will call this stage the XML-DOM stage. Vali)HY(da)HY(tion)YH(, if not disabled, - happens during this stage. The second stage, - performed by the gener)HY(ated)YH( parsers, consist of parsing the DOM - instance into the stat)HY(i)HY(cally)YH(-typed tree. We will call this stage - the DOM-Tree stage. Addi)HY(tional)YH( checks are performed during this - stage in order to prevent construc)HY(tion)YH( of incon)HY(sis)HY(tent)YH( tree which - could other)HY(wise)YH( happen when vali)HY(da)HY(tion)YH( is disabled, for example.)EP( - - )0 P(All parsing func)HY(tions)YH( except the one that oper)HY(ates)YH( on a DOM instance - come in over)HY(loaded)YH( triples. The first func)HY(tion)YH( in such a triple - reports error condi)HY(tions)YH( exclu)HY(sively)YH( by throw)HY(ing)YH( excep)HY(tions)YH(. It - accu)HY(mu)HY(lates)YH( all the parsing and vali)HY(da)HY(tion)YH( errors of the XML-DOM - stage and throws them in a single instance of the - )SM(xml_schema::parsing)ES( excep)HY(tion)YH( \201described below\202. - The second and the third func)HY(tions)YH( in the triple use call)HY(back)YH( - inter)HY(faces)YH( to report parsing and vali)HY(da)HY(tion)YH( errors and warn)HY(ings)YH(. - The two call)HY(back)YH( inter)HY(faces)YH( are )SM(xml_schema::error_handler)ES( - and )SM(xercesc::DOMEr)HY(rorHan)HY(dler)YH()ES(. For more infor)HY(ma)HY(tion)YH( - on the )SM(xercesc::DOMEr)HY(rorHan)HY(dler)YH()ES( inter)HY(face)YH( refer to - the Xerces-C++ docu)HY(men)HY(ta)HY(tion)YH(. The )SM(xml_schema::error_handler)ES( - inter)HY(face)YH( is presented below: - )EP( - - ) 23 51 PR(class error_handler -{ -public: - struct severity - { - enum value - { - warning, - error, - fatal - }; - }; - - virtual bool - handle \201const std::basic_string& id, - unsigned long line, - unsigned long column, - severity, - const std::basic_string& message\202 = 0; - - virtual - ~error_handler \201\202; -};)RP( - - )0 P(The )SM(id)ES( argu)HY(ment)YH( of the )SM(error_handler::handle)ES( - func)HY(tion)YH( iden)HY(ti)HY(fies)YH( the resource being parsed \201e.g., a file name or - URI\202. - )EP( - - )0 P(By return)HY(ing)YH( )SM(true)ES( from the )SM(handle)ES( func)HY(tion)YH( - you instruct the parser to recover and continue parsing. Return)HY(ing)YH( - )SM(false)ES( results in termi)HY(na)HY(tion)YH( of the parsing process. - An error with the )SM(fatal)ES( sever)HY(ity)YH( level results in - termi)HY(na)HY(tion)YH( of the parsing process no matter what is returned from - the )SM(handle)ES( func)HY(tion)YH(. It is safe to throw an excep)HY(tion)YH( - from the )SM(handle)ES( func)HY(tion)YH(. - )EP( - - )0 P(The DOM-Tree stage reports error condi)HY(tions)YH( exclu)HY(sively)YH( by throw)HY(ing)YH( - excep)HY(tions)YH(. Indi)HY(vid)HY(ual)YH( excep)HY(tions)YH( thrown by the parsing func)HY(tions)YH( - are described in the follow)HY(ing)YH( sub-sections. - )EP( - - - )0 3 61 H(3.3.1)WB 155 Sn()WB 65 Sn( )SM(xml_schema::parsing)ES()EA()EH( - - ) 57 56 PR(struct severity -{ - enum value - { - warning, - error - }; - - severity \201value\202; - operator value \201\202 const; -}; - -struct error -{ - error \201severity, - const std::basic_string& id, - unsigned long line, - unsigned long column, - const std::basic_string& message\202; - - severity - severity \201\202 const; - - const std::basic_string& - id \201\202 const; - - unsigned long - line \201\202 const; - - unsigned long - column \201\202 const;)WR( - - const std::basic_string& - message \201\202 const; -}; - -std::basic_ostream& -operator<< \201std::basic_ostream&, const error&\202; - -struct diagnostics: std::vector -{ -}; - -std::basic_ostream& -operator<< \201std::basic_ostream&, const diagnostics&\202; - -struct parsing: virtual exception -{ - parsing \201\202; - parsing \201const diagnostics&\202; - - const diagnostics& - diagnostics \201\202 const; - - virtual const char* - what \201\202 const throw \201\202; -};)RP( - - )0 P(The )SM(xml_schema::parsing)ES( excep)HY(tion)YH( is thrown if there - were parsing or vali)HY(da)HY(tion)YH( errors reported during the XML-DOM stage. - If no call)HY(back)YH( inter)HY(face)YH( was provided to the parsing func)HY(tion)YH(, the - excep)HY(tion)YH( contains a list of errors and warn)HY(ings)YH( acces)HY(si)HY(ble)YH( using - the )SM(diag)HY(nos)HY(tics)YH()ES( func)HY(tion)YH(. The usual condi)HY(tions)YH( when - this excep)HY(tion)YH( is thrown include malformed XML instances and, if - vali)HY(da)HY(tion)YH( is turned on, invalid instance docu)HY(ments)YH(. - )EP( - - )0 3 62 H(3.3.2)WB 156 Sn()WB 66 Sn( )SM(xml_schema::expected_element)ES()EA()EH( - - ) 16 60 PR(struct expected_element: virtual exception -{ - expected_element \201const std::basic_string& name, - const std::basic_string& namespace_\202; - - - const std::basic_string& - name \201\202 const; - - const std::basic_string& - namespace_ \201\202 const; - - - virtual const char* - what \201\202 const throw \201\202; -};)RP( - - )0 P(The )SM(xml_schema::expected_element)ES( excep)HY(tion)YH( is thrown - when an expected element is not encoun)HY(tered)YH( by the DOM-Tree stage. - The name and names)HY(pace)YH( of the expected element can be obtained using - the )SM(name)ES( and )SM(names)HY(pace)YH(_)ES( func)HY(tions)YH( respec)HY(tively)YH(. - )EP( - - - )0 3 63 H(3.3.3)WB 157 Sn()WB 67 Sn( )SM(xml_schema::unex)HY(pected)YH(_element)ES()EA()EH( - - ) 25 72 PR(struct unexpected_element: virtual exception -{ - unexpected_element \201const std::basic_string& encountered_name, - const std::basic_string& encountered_namespace, - const std::basic_string& expected_name, - const std::basic_string& expected_namespace\202 - - - const std::basic_string& - encountered_name \201\202 const; - - const std::basic_string& - encountered_namespace \201\202 const; - - - const std::basic_string& - expected_name \201\202 const; - - const std::basic_string& - expected_namespace \201\202 const; - - - virtual const char* - what \201\202 const throw \201\202; -};)RP( - - )0 P(The )SM(xml_schema::unex)HY(pected)YH(_element)ES( excep)HY(tion)YH( is thrown - when an unex)HY(pected)YH( element is encoun)HY(tered)YH( by the DOM-Tree stage. - The name and names)HY(pace)YH( of the encoun)HY(tered)YH( element can be obtained - using the )SM(encoun)HY(tered)YH(_name)ES( and - )SM(encoun)HY(tered)YH(_names)HY(pace)YH()ES( func)HY(tions)YH( respec)HY(tively)YH(. If an - element was expected instead of the encoun)HY(tered)YH( one, its name - and names)HY(pace)YH( can be obtained using the )SM(expected_name)ES( and - )SM(expected_names)HY(pace)YH()ES( func)HY(tions)YH( respec)HY(tively)YH(. Other)HY(wise)YH( - these func)HY(tions)YH( return empty strings. - )EP( - - )0 3 64 H(3.3.4)WB 158 Sn()WB 68 Sn( )SM(xml_schema::expected_attribute)ES()EA()EH( - - ) 16 62 PR(struct expected_attribute: virtual exception -{ - expected_attribute \201const std::basic_string& name, - const std::basic_string& namespace_\202; - - - const std::basic_string& - name \201\202 const; - - const std::basic_string& - namespace_ \201\202 const; - - - virtual const char* - what \201\202 const throw \201\202; -};)RP( - - )0 P(The )SM(xml_schema::expected_attribute)ES( excep)HY(tion)YH( is thrown - when an expected attribute is not encoun)HY(tered)YH( by the DOM-Tree stage. - The name and names)HY(pace)YH( of the expected attribute can be obtained using - the )SM(name)ES( and )SM(names)HY(pace)YH(_)ES( func)HY(tions)YH( respec)HY(tively)YH(. - )EP( - - - )0 3 65 H(3.3.5)WB 159 Sn()WB 69 Sn( )SM(xml_schema::unex)HY(pected)YH(_enumer)HY(a)HY(tor)YH()ES()EA()EH( - - ) 10 65 PR(struct unexpected_enumerator: virtual exception -{ - unexpected_enumerator \201const std::basic_string& enumerator\202; - - const std::basic_string& - enumerator \201\202 const; - - virtual const char* - what \201\202 const throw \201\202; -};)RP( - - )0 P(The )SM(xml_schema::unex)HY(pected)YH(_enumer)HY(a)HY(tor)YH()ES( excep)HY(tion)YH( is thrown - when an unex)HY(pected)YH( enumer)HY(a)HY(tor)YH( is encoun)HY(tered)YH( by the DOM-Tree stage. - The enumer)HY(a)HY(tor)YH( can be obtained using the )SM(enumer)HY(a)HY(tor)YH()ES( - func)HY(tions)YH(. - )EP( - - )0 3 66 H(3.3.6)WB 160 Sn()WB 70 Sn( )SM(xml_schema::expected_text_content)ES()EA()EH( - - ) 5 47 PR(struct expected_text_content: virtual exception -{ - virtual const char* - what \201\202 const throw \201\202; -};)RP( - - )0 P(The )SM(xml_schema::expected_text_content)ES( excep)HY(tion)YH( is thrown - when a content other than text is encoun)HY(tered)YH( and the text content was - expected by the DOM-Tree stage. - )EP( - - )0 3 67 H(3.3.7)WB 161 Sn()WB 71 Sn( )SM(xml_schema::no_type_info)ES()EA()EH( - - ) 14 60 PR(struct no_type_info: virtual exception -{ - no_type_info \201const std::basic_string& type_name, - const std::basic_string& type_namespace\202; - - const std::basic_string& - type_name \201\202 const; - - const std::basic_string& - type_namespace \201\202 const; - - virtual const char* - what \201\202 const throw \201\202; -};)RP( - - )0 P(The )SM(xml_schema::no_type_info)ES( excep)HY(tion)YH( is thrown - when there is no type infor)HY(ma)HY(tion)YH( asso)HY(ci)HY(ated)YH( with a type spec)HY(i)HY(fied)YH( - by the )SM(xsi:type)ES( attribute. This excep)HY(tion)YH( is thrown - by the DOM-Tree stage. The name and names)HY(pace)YH( of the type in ques)HY(tion)YH( - can be obtained using the )SM(type_name)ES( and - )SM(type_names)HY(pace)YH()ES( func)HY(tions)YH( respec)HY(tively)YH(. Usually, catch)HY(ing)YH( - this excep)HY(tion)YH( means that you haven't linked the code gener)HY(ated)YH( - from the schema defin)HY(ing)YH( the type in ques)HY(tion)YH( with your appli)HY(ca)HY(tion)YH( - or this schema has been compiled without the - )SM(--gener)HY(ate)YH(-poly)HY(mor)HY(phic)YH()ES( option. - )EP( - - - )0 3 68 H(3.3.8)WB 162 Sn()WB 72 Sn( )SM(xml_schema::not_derived)ES()EA()EH( - - ) 23 67 PR(struct not_derived: virtual exception -{ - not_derived \201const std::basic_string& base_type_name, - const std::basic_string& base_type_namespace, - const std::basic_string& derived_type_name, - const std::basic_string& derived_type_namespace\202; - - const std::basic_string& - base_type_name \201\202 const; - - const std::basic_string& - base_type_namespace \201\202 const; - - - const std::basic_string& - derived_type_name \201\202 const; - - const std::basic_string& - derived_type_namespace \201\202 const; - - virtual const char* - what \201\202 const throw \201\202; -};)RP( - - )0 P(The )SM(xml_schema::not_derived)ES( excep)HY(tion)YH( is thrown - when a type spec)HY(i)HY(fied)YH( by the )SM(xsi:type)ES( attribute is - not derived from the expected base type. This excep)HY(tion)YH( is thrown - by the DOM-Tree stage. The name and names)HY(pace)YH( of the expected - base type can be obtained using the )SM(base_type_name)ES( and - )SM(base_type_names)HY(pace)YH()ES( func)HY(tions)YH( respec)HY(tively)YH(. The name - and names)HY(pace)YH( of the offend)HY(ing)YH( type can be obtained using the - )SM(derived_type_name)ES( and - )SM(derived_type_names)HY(pace)YH()ES( func)HY(tions)YH( respec)HY(tively)YH(. - )EP( - - )0 3 69 H(3.3.9)WB 163 Sn()WB 73 Sn( )SM(xml_schema::no_prefix_mapping)ES()EA()EH( - - ) 10 57 PR(struct no_prefix_mapping: virtual exception -{ - no_prefix_mapping \201const std::basic_string& prefix\202; - - const std::basic_string& - prefix \201\202 const; - - virtual const char* - what \201\202 const throw \201\202; -};)RP( - - )0 P(The )SM(xml_schema::no_prefix_mapping)ES( excep)HY(tion)YH( is thrown - during the DOM-Tree stage if a names)HY(pace)YH( prefix is encoun)HY(tered)YH( for - which a prefix-names)HY(pace)YH( mapping hasn't been provided. The names)HY(pace)YH( - prefix in ques)HY(tion)YH( can be obtained using the )SM(prefix)ES( - func)HY(tion)YH(. - )EP( - - )0 2 70 H(3.4)WB 164 Sn()WB 74 Sn( Reading from a Local File or URI)EA()EH( - - )0 P(Using a local file or URI is the simplest way to parse an XML instance. - For example:)EP( - - ) 4 67 PR(using std::auto_ptr; - -auto_ptr r1 \201name \201"test.xml"\202\202; -auto_ptr r2 \201name \201"http://www.codesynthesis.com/test.xml"\202\202;)RP( - - )0 2 71 H(3.5)WB 165 Sn()WB 75 Sn( Reading from )SM(std::istream)ES()EA()EH( - - )0 P(When using an )SM(std::istream)ES( instance, you may also - pass an optional resource id. This id is used to iden)HY(tify)YH( the - resource \201for example in error messages\202 as well as to resolve - rela)HY(tive)YH( paths. For instance:)EP( - - ) 12 48 PR(using std::auto_ptr; - -{ - std::ifstream ifs \201"test.xml"\202; - auto_ptr r \201name \201ifs, "test.xml"\202\202; -} - -{ - std::string str \201"..."\202; // Some XML fragment. - std::istringstream iss \201str\202; - auto_ptr r \201name \201iss\202\202; -})RP( - - )0 2 72 H(3.6)WB 166 Sn()WB 76 Sn( Reading from )SM(xercesc::Input)HY(Source)YH()ES()EA()EH( - - )0 P(Reading from a )SM(xercesc::Input)HY(Source)YH()ES( instance - is similar to the )SM(std::istream)ES( case except - the resource id is main)HY(tained)YH( by the )SM(Input)HY(Source)YH()ES( - object. For instance:)EP( - - ) 2 34 PR(xercesc::StdInInputSource is; -std::auto_ptr r \201name \201is\202\202;)RP( - - )0 2 73 H(3.7)WB 167 Sn()WB 77 Sn( Reading from DOM)EA()EH( - - )0 P(Reading from a )SM(xercesc::DOMDoc)HY(u)HY(ment)YH()ES( instance allows - you to setup a custom XML-DOM stage. Things like DOM - parser reuse, schema pre-parsing, and schema caching can be achieved - with this approach. For more infor)HY(ma)HY(tion)YH( on how to obtain DOM - repre)HY(sen)HY(ta)HY(tion)YH( from an XML instance refer to the Xerces-C++ - docu)HY(men)HY(ta)HY(tion)YH(. In addi)HY(tion)YH(, the - )R8 2 A(C++/Tree Mapping - FAQ)EA( shows how to parse an XML instance to a Xerces-C++ - DOM docu)HY(ment)YH( using the XSD runtime util)HY(i)HY(ties)YH(. - )EP( - - )0 P(The last parsing func)HY(tion)YH( is useful when you would like to perform - your own XML-to-DOM parsing and as)HY(so)HY(ciate)YH( the result)HY(ing)YH( DOM docu)HY(ment)YH( - with the object model nodes. If parsing is successe)HY(ful)YH(, the - auto)HY(matic)YH( )SM(DOMDoc)HY(u)HY(ment)YH()ES( pointer is reset and the - result)HY(ing)YH( object model assumes owner)HY(ship)YH( of the DOM docu)HY(ment)YH( - passed. For example:)EP( - - ) 6 72 PR(xml_schema::dom::auto_ptr doc = ... - -std::auto_ptr r \201 - name \201doc, xml_schema::flags::keep_dom | xml_schema::flags::own_dom\202\202; - -// At this point doc is reset to 0.)RP( - - - - )0 1 74 H(4)WB 168 Sn()WB 78 Sn( Seri)HY(al)HY(iza)HY(tion)YH()EA()EH( - - )0 P(This chapter covers various aspects of seri)HY(al)HY(iz)HY(ing)YH( a - tree-like object model to DOM or XML. - In this regard, seri)HY(al)HY(iza)HY(tion)YH( is compli)HY(men)HY(tary)YH( to the reverse - process of parsing a DOM or XML instance into an object model - which is discussed in )0 61 1 A(Chapter 3, - "Parsing")61 0 TN TL()Ec /AF f D(. Note that the gener)HY(a)HY(tion)YH( of the seri)HY(al)HY(iza)HY(tion)YH( code - is optional and should be explic)HY(itly)YH( requested with the - )SM(--gener)HY(ate)YH(-seri)HY(al)HY(iza)HY(tion)YH()ES( option. See the - )R9 2 A(XSD - Compiler Command Line Manual)EA( for more infor)HY(ma)HY(tion)YH(. - )EP( - - )0 P(Each global XML Schema element in the form: - )EP( - - - ) 1 38 PR()RP( - - )0 P(is mapped to 8 over)HY(loaded)YH( C++ func)HY(tions)YH( in the form:)EP( - - ) 70 53 PR(// Serialize to std::ostream. -// -void -name \201std::ostream&, - const type&, - const xml_schema::namespace_fomap& = - xml_schema::namespace_infomap \201\202, - const std::basic_string& encoding = "UTF-8", - xml_schema::flags = 0\202; - -void -name \201std::ostream&, - const type&, - xml_schema::error_handler&, - const xml_schema::namespace_infomap& = - xml_schema::namespace_infomap \201\202, - const std::basic_string& encoding = "UTF-8", - xml_schema::flags = 0\202; - -void -name \201std::ostream&, - const type&, - xercesc::DOMErrorHandler&, - const xml_schema::namespace_infomap& = - xml_schema::namespace_infomap \201\202, - const std::basic_string& encoding = "UTF-8", - xml_schema::flags = 0\202; - - -// Serialize to XMLFormatTarget. -//)WR( -void -name \201xercesc::XMLFormatTarget&, - const type&, - const xml_schema::namespace_infomap& = - xml_schema::namespace_infomap \201\202, - const std::basic_string& encoding = "UTF-8", - xml_schema::flags = 0\202; - -void -name \201xercesc::XMLFormatTarget&, - const type&, - xml_schema::error_handler&, - const xml_schema::namespace_infomap& = - xml_schema::namespace_infomap \201\202, - const std::basic_string& encoding = "UTF-8", - xml_schema::flags = 0\202; - -void -name \201xercesc::XMLFormatTarget&, - const type&, - xercesc::DOMErrorHandler&, - const xml_schema::namespace_infomap& = - xml_schema::namespace_infomap \201\202, - const std::basic_string& encoding = "UTF-8", - xml_schema::flags = 0\202; - - -// Serialize to DOM. -// -xml_schema::dom::auto_ptr)WR( -name \201const type&, - const xml_schema::namespace_infomap& - xml_schema::namespace_infomap \201\202, - xml_schema::flags = 0\202; - -void -name \201xercesc::DOMDocument&, - const type&, - xml_schema::flags = 0\202;)RP( - - )0 P(You can choose between writing XML to )SM(std::ostream)ES( or - )SM(xercesc::XMLFor)HY(mat)HY(Tar)HY(get)YH()ES( and creat)HY(ing)YH( a DOM instance - in the form of )SM(xercesc::DOMDoc)HY(u)HY(ment)YH()ES(. Seri)HY(al)HY(iza)HY(tion)YH( - to )SM(ostream)ES( or )SM(XMLFor)HY(mat)HY(Tar)HY(get)YH()ES( requires a - consid)HY(er)HY(ably)YH( less work while seri)HY(al)HY(iza)HY(tion)YH( to DOM provides - for greater flex)HY(i)HY(bil)HY(ity)YH(. Each of these seri)HY(al)HY(iza)HY(tion)YH( func)HY(tions)YH( - is discussed in more detail in the follow)HY(ing)YH( sections. - )EP( - - - )0 2 75 H(4.1)WB 169 Sn()WB 79 Sn( Initial)HY(iz)HY(ing)YH( the Xerces-C++ Runtime)EA()EH( - - )0 P(Some seri)HY(al)HY(iza)HY(tion)YH( func)HY(tions)YH( expect you to initial)HY(ize)YH( the Xerces-C++ - runtime while others initial)HY(ize)YH( and termi)HY(nate)YH( it as part of their - work. The general rule is as follows: if a func)HY(tion)YH( has any argu)HY(ments)YH( - or return a value that is an instance of a Xerces-C++ type, then - this func)HY(tion)YH( expects you to initial)HY(ize)YH( the Xerces-C++ runtime. - Other)HY(wise)YH(, the func)HY(tion)YH( initial)HY(izes)YH( and termi)HY(nates)YH( the runtime for - you. Note that it is legal to have nested calls to the Xerces-C++ - initial)HY(ize)YH( and termi)HY(nate)YH( func)HY(tions)YH( as long as the calls are balanced. - )EP( - - )0 P(You can instruct seri)HY(al)HY(iza)HY(tion)YH( func)HY(tions)YH( that initial)HY(ize)YH( and termi)HY(nate)YH( - the runtime not to do so by passing the - )SM(xml_schema::flags::dont_initial)HY(ize)YH()ES( flag \201see - )0 81 1 A(Section 4.3, "Flags")81 0 TN TL()Ec /AF f D(\202. - )EP( - - )0 2 76 H(4.2)WB 170 Sn()WB 80 Sn( Names)HY(pace)YH( Infomap and Char)HY(ac)HY(ter)YH( Encod)HY(ing)YH()EA()EH( - - )0 P(When a docu)HY(ment)YH( being seri)HY(al)HY(ized)YH( uses XML names)HY(paces)YH(, custom - prefix-names)HY(pace)YH( asso)HY(ci)HY(a)HY(tions)YH( can to be estab)HY(lished)YH(. If custom - prefix-names)HY(pace)YH( mapping is not provided then generic prefixes - \201)SM(p1)ES(, )SM(p2)ES(, etc\202 are auto)HY(mat)HY(i)HY(cally)YH( assigned - to names)HY(paces)YH( as needed. Also, if - you would like the result)HY(ing)YH( instance docu)HY(ment)YH( to contain the - )SM(schemaLo)HY(ca)HY(tion)YH()ES( or )SM(noNames)HY(paceSchemaLo)HY(ca)HY(tion)YH()ES( - attributes, you will need to provide names)HY(pace)YH(-schema asso)HY(ci)HY(a)HY(tions)YH(. - The )SM(xml_schema::names)HY(pace)YH(_infomap)ES( class is used - to capture this infor)HY(ma)HY(tion)YH(:)EP( - - ) 16 63 PR(struct namespace_info -{ - namespace_info \201\202; - namespace_info \201const std::basic_string& name, - const std::basic_string& schema\202; - - std::basic_string name; - std::basic_string schema; -}; - -// Map of namespace prefix to namespace_info. -// -struct namespace_infomap: public std::map, - namespace_info> -{ -};)RP( - - )0 P(Consider the follow)HY(ing)YH( asso)HY(ci)HY(a)HY(tions)YH( as an example:)EP( - - ) 4 52 PR(xml_schema::namespace_infomap map; - -map["t"].name = "http://www.codesynthesis.com/test"; -map["t"].schema = "test.xsd";)RP( - - )0 P(This map, if passed to one of the seri)HY(al)HY(iza)HY(tion)YH( func)HY(tions)YH(, - could result in the follow)HY(ing)YH( XML frag)HY(ment)YH(:)EP( - - ) 4 72 PR( -)RP( - - )0 P(As you can see, the seri)HY(al)HY(iza)HY(tion)YH( func)HY(tion)YH( auto)HY(mat)HY(i)HY(cally)YH( added names)HY(pace)YH( - mapping for the )SM(xsi)ES( prefix. You can change this by - provid)HY(ing)YH( your own prefix:)EP( - - ) 6 62 PR(xml_schema::namespace_infomap map; - -map["xsn"].name = "http://www.w3.org/2001/XMLSchema-instance"; - -map["t"].name = "http://www.codesynthesis.com/test"; -map["t"].schema = "test.xsd";)RP( - - )0 P(This could result in the follow)HY(ing)YH( XML frag)HY(ment)YH(:)EP( - - ) 4 72 PR( -)RP( - - )0 P(To specify the loca)HY(tion)YH( of a schema without a names)HY(pace)YH( you can use - an empty prefix as in the example below: )EP( - - ) 3 34 PR(xml_schema::namespace_infomap map; - -map[""].schema = "test.xsd";)RP( - - )0 P(This would result in the follow)HY(ing)YH( XML frag)HY(ment)YH(:)EP( - - ) 3 59 PR( -)RP( - - )0 P(To make a partic)HY(u)HY(lar)YH( names)HY(pace)YH( default you can use an empty - prefix, for example:)EP( - - ) 4 51 PR(xml_schema::namespace_infomap map; - -map[""].name = "http://www.codesynthesis.com/test"; -map[""].schema = "test.xsd";)RP( - - )0 P(This could result in the follow)HY(ing)YH( XML frag)HY(ment)YH(:)EP( - - ) 4 70 PR( -)RP( - - - )0 P(Another bit of infor)HY(ma)HY(tion)YH( that you can pass to the seri)HY(al)HY(iza)HY(tion)YH( - func)HY(tions)YH( is the char)HY(ac)HY(ter)YH( encod)HY(ing)YH( method that you would like to use. - Common values for this argu)HY(ment)YH( are )SM("US-ASCII")ES(, - )SM("ISO8859-1")ES(, )SM("UTF-8")ES(, - )SM("UTF-16BE")ES(, )SM("UTF-16LE")ES(, - )SM("UCS-4BE")ES(, and )SM("UCS-4LE")ES(. The default - encod)HY(ing)YH( is )SM("UTF-8")ES(. For more infor)HY(ma)HY(tion)YH( on - encod)HY(ing)YH( methods see the - ")R12 2 A(Char)HY(ac)HY(ter)YH( - Encod)HY(ing)YH()EA(" article from Wikipedia. - )EP( - - )0 2 77 H(4.3)WB 171 Sn()WB 81 Sn( Flags)EA()EH( - - )0 P(Seri)HY(al)HY(iza)HY(tion)YH( flags are the last argu)HY(ment)YH( of every seri)HY(al)HY(iza)HY(tion)YH( - func)HY(tion)YH(. They allow you to fine-tune the process of seri)HY(al)HY(iza)HY(tion)YH(. - The flags argu)HY(ment)YH( is optional. - )EP( - - - )0 P(The follow)HY(ing)YH( flags are recog)HY(nized)YH( by the seri)HY(al)HY(iza)HY(tion)YH( - func)HY(tions)YH(:)EP( - - )0 DL( )0 DT()SM(xml_schema::flags::dont_initial)HY(ize)YH()ES( - )DD(Do not initial)HY(ize)YH( the Xerces-C++ runtime. - - )0 DT()SM(xml_schema::flags::dont_pretty_print)ES( - )DD(Do not add extra spaces or new lines that make the result)HY(ing)YH( XML - slightly bigger but easier to read. - - )0 DT()SM(xml_schema::flags::no_xml_decla)HY(ra)HY(tion)YH()ES( - )DD(Do not write XML decla)HY(ra)HY(tion)YH( \201\202. - )LD( - - )0 P(You can pass several flags by combin)HY(ing)YH( them using the bit-wise OR - oper)HY(a)HY(tor)YH(. For example:)EP( - - ) 9 45 PR(std::auto_ptr r = ... -std::ofstream ofs \201"test.xml"\202; -xml_schema::namespace_infomap map; -name \201ofs, - *r, - map, - "UTF-8", - xml_schema::flags::no_xml_declaration | - xml_schema::flags::dont_pretty_print\202;)RP( - - )0 P(For more infor)HY(ma)HY(tion)YH( on the Xerces-C++ runtime initial)HY(iza)HY(tion)YH( - refer to )0 79 1 A(Section 4.1, "Initial)HY(iz)HY(ing)YH( the Xerces-C++ - Runtime")79 0 TN TL()Ec /AF f D(. - )EP( - - )0 2 78 H(4.4)WB 172 Sn()WB 82 Sn( Error Handling)EA()EH( - - )0 P(As with the parsing func)HY(tions)YH( \201see )0 64 1 A(Section 3.3, - "Error Handling")64 0 TN TL()Ec /AF f D(\202, to better under)HY(stand)YH( error handling and - report)HY(ing)YH( strate)HY(gies)YH( employed by the seri)HY(al)HY(iza)HY(tion)YH( func)HY(tions)YH(, it - is useful to know that the trans)HY(for)HY(ma)HY(tion)YH( of a stat)HY(i)HY(cally)YH(-typed - tree to an XML instance docu)HY(ment)YH( happens in two stages. The first - stage, performed by the gener)HY(ated)YH( code, consist of build)HY(ing)YH( a DOM - instance from the stat)HY(i)HY(cally)YH(-typed tree . For short, we will call - this stage the Tree-DOM stage. The second stage, performed by - Xerces-C++, consists of seri)HY(al)HY(iz)HY(ing)YH( the DOM instance into the XML - docu)HY(ment)YH(. We will call this stage the DOM-XML stage. - )EP( - - )0 P(All seri)HY(al)HY(iza)HY(tion)YH( func)HY(tions)YH( except the two that seri)HY(al)HY(ize)YH( into - a DOM instance come in over)HY(loaded)YH( triples. The first func)HY(tion)YH( - in such a triple reports error condi)HY(tions)YH( exclu)HY(sively)YH( by throw)HY(ing)YH( - excep)HY(tions)YH(. It accu)HY(mu)HY(lates)YH( all the seri)HY(al)HY(iza)HY(tion)YH( errors of the - DOM-XML stage and throws them in a single instance of the - )SM(xml_schema::seri)HY(al)HY(iza)HY(tion)YH()ES( excep)HY(tion)YH( \201described below\202. - The second and the third func)HY(tions)YH( in the triple use call)HY(back)YH( - inter)HY(faces)YH( to report seri)HY(al)HY(iza)HY(tion)YH( errors and warn)HY(ings)YH(. The two - call)HY(back)YH( inter)HY(faces)YH( are )SM(xml_schema::error_handler)ES( and - )SM(xercesc::DOMEr)HY(rorHan)HY(dler)YH()ES(. The - )SM(xml_schema::error_handler)ES( inter)HY(face)YH( is described in - )0 64 1 A(Section 3.3, "Error Handling")64 0 TN TL()Ec /AF f D(. For more infor)HY(ma)HY(tion)YH( - on the )SM(xercesc::DOMEr)HY(rorHan)HY(dler)YH()ES( inter)HY(face)YH( refer to the - Xerces-C++ docu)HY(men)HY(ta)HY(tion)YH(. - )EP( - - )0 P(The Tree-DOM stage reports error condi)HY(tions)YH( exclu)HY(sively)YH( by throw)HY(ing)YH( - excep)HY(tions)YH(. Indi)HY(vid)HY(ual)YH( excep)HY(tions)YH( thrown by the seri)HY(al)HY(iza)HY(tion)YH( func)HY(tions)YH( - are described in the follow)HY(ing)YH( sub-sections. - )EP( - - )0 3 79 H(4.4.1)WB 173 Sn()WB 83 Sn( )SM(xml_schema::seri)HY(al)HY(iza)HY(tion)YH()ES()EA()EH( - - ) 11 39 PR(struct serialization: virtual exception -{ - serialization \201\202; - serialization \201const diagnostics&\202; - - const diagnostics& - diagnostics \201\202 const; - - virtual const char* - what \201\202 const throw \201\202; -};)RP( - - )0 P(The )SM(xml_schema::diag)HY(nos)HY(tics)YH()ES( class is described in - )0 65 1 A(Section 3.3.1, ")SM(xml_schema::parsing)ES(")65 0 TN TL()Ec /AF f D(. - The )SM(xml_schema::seri)HY(al)HY(iza)HY(tion)YH()ES( excep)HY(tion)YH( is thrown if - there were seri)HY(al)HY(iza)HY(tion)YH( errors reported during the DOM-XML stage. - If no call)HY(back)YH( inter)HY(face)YH( was provided to the seri)HY(al)HY(iza)HY(tion)YH( func)HY(tion)YH(, - the excep)HY(tion)YH( contains a list of errors and warn)HY(ings)YH( acces)HY(si)HY(ble)YH( using - the )SM(diag)HY(nos)HY(tics)YH()ES( func)HY(tion)YH(. - )EP( - - - )0 3 80 H(4.4.2)WB 174 Sn()WB 84 Sn( )SM(xml_schema::unex)HY(pected)YH(_element)ES()EA()EH( - - )0 P(The )SM(xml_schema::unex)HY(pected)YH(_element)ES( excep)HY(tion)YH( is - described in )0 67 1 A(Section 3.3.3, - ")SM(xml_schema::unex)HY(pected)YH(_element)ES(")67 0 TN TL()Ec /AF f D(. It is thrown - by the seri)HY(al)HY(iza)HY(tion)YH( func)HY(tions)YH( during the Tree-DOM stage if the - root element name of the provided DOM instance does not match with - the name of the element this seri)HY(al)HY(iza)HY(tion)YH( func)HY(tion)YH( is for. - )EP( - - )0 3 81 H(4.4.3)WB 175 Sn()WB 85 Sn( )SM(xml_schema::no_type_info)ES()EA()EH( - - )0 P(The )SM(xml_schema::no_type_info)ES( excep)HY(tion)YH( is - described in )0 71 1 A(Section 3.3.7, - ")SM(xml_schema::no_type_info)ES(")71 0 TN TL()Ec /AF f D(. It is thrown - by the seri)HY(al)HY(iza)HY(tion)YH( func)HY(tions)YH( during the Tree-DOM stage when there - is no type infor)HY(ma)HY(tion)YH( asso)HY(ci)HY(ated)YH( with a dynamic type of an - element. Usually, catch)HY(ing)YH( this excep)HY(tion)YH( means that you haven't - linked the code gener)HY(ated)YH( from the schema defin)HY(ing)YH( the type in - ques)HY(tion)YH( with your appli)HY(ca)HY(tion)YH( or this schema has been compiled - without the )SM(--gener)HY(ate)YH(-poly)HY(mor)HY(phic)YH()ES( option. - )EP( - - )0 2 82 H(4.5)WB 176 Sn()WB 86 Sn( Seri)HY(al)HY(iz)HY(ing)YH( to )SM(std::ostream)ES()EA()EH( - - )0 P(In order to seri)HY(al)HY(ize)YH( to )SM(std::ostream)ES( you will need - an object model, an output stream and, option)HY(ally)YH(, a names)HY(pace)YH( - infomap. For instance:)EP( - - ) 14 61 PR(// Obtain the object model. -// -std::auto_ptr r = ... - -// Prepare namespace mapping and schema location information. -// -xml_schema::namespace_infomap map; - -map["t"].name = "http://www.codesynthesis.com/test"; -map["t"].schema = "test.xsd"; - -// Write it out. -// -name \201std::cout, *r, map\202;)RP( - - )0 P(Note that the output stream is treated as a binary stream. This - becomes impor)HY(tant)YH( when you use a char)HY(ac)HY(ter)YH( encod)HY(ing)YH( that is wider - than 8-bit )SM(char)ES(, for instance UTF-16 or UCS-4. For - example, things will most likely break if you try to seri)HY(al)HY(ize)YH( - to )SM(std::ostringstream)ES( with UTF-16 or UCS-4 as an - encod)HY(ing)YH(. This is due to the special value, - )SM('\2000')ES(, that will most likely occur as part of such - seri)HY(al)HY(iza)HY(tion)YH( and it won't have the special meaning assumed by - )SM(std::ostringstream)ES(. - )EP( - - - )0 2 83 H(4.6)WB 177 Sn()WB 87 Sn( Seri)HY(al)HY(iz)HY(ing)YH( to )SM(xercesc::XMLFor)HY(mat)HY(Tar)HY(get)YH()ES()EA()EH( - - )0 P(Seri)HY(al)HY(iz)HY(ing)YH( to an )SM(xercesc::XMLFor)HY(mat)HY(Tar)HY(get)YH()ES( instance - is similar the )SM(std::ostream)ES( case. For instance: - )EP( - - ) 38 63 PR(using std::auto_ptr; - -// Obtain the object model. -// -auto_ptr r = ... - -// Prepare namespace mapping and schema location information. -// -xml_schema::namespace_infomap map; - -map["t"].name = "http://www.codesynthesis.com/test"; -map["t"].schema = "test.xsd"; - -using namespace xercesc; - -XMLPlatformUtils::Initialize \201\202; - -{ - // Choose a target. - // - auto_ptr ft; - - if \201argc != 2\202 - { - ft = auto_ptr \201new StdOutFormatTarget \201\202\202; - } - else - { - ft = auto_ptr \201 - new LocalFileFormatTarget \201argv[1]\202\202; - })WR( - - // Write it out. - // - name \201*ft, *r, map\202; -} - -XMLPlatformUtils::Terminate \201\202;)RP( - - )0 P(Note that we had to initial)HY(ize)YH( the Xerces-C++ runtime before we - could call this seri)HY(al)HY(iza)HY(tion)YH( func)HY(tion)YH(.)EP( - - )0 2 84 H(4.7)WB 178 Sn()WB 88 Sn( Seri)HY(al)HY(iz)HY(ing)YH( to DOM)EA()EH( - - )0 P(The mapping provides two over)HY(loaded)YH( func)HY(tions)YH( that imple)HY(ment)YH( - seri)HY(al)HY(iza)HY(tion)YH( to a DOM instance. The first creates a DOM instance - for you and the second seri)HY(al)HY(izes)YH( to an exist)HY(ing)YH( DOM instance. - While seri)HY(al)HY(iz)HY(ing)YH( to a new DOM instance is similar to seri)HY(al)HY(iz)HY(ing)YH( - to )SM(std::ostream)ES( or )SM(xercesc::XMLFor)HY(mat)HY(Tar)HY(get)YH()ES(, - seri)HY(al)HY(iz)HY(ing)YH( to an exist)HY(ing)YH( DOM instance requires quite a bit of work - from your side. You will need to set all the custom names)HY(pace)YH( mapping - attributes as well as the )SM(schemaLo)HY(ca)HY(tion)YH()ES( and/or - )SM(noNames)HY(paceSchemaLo)HY(ca)HY(tion)YH()ES( attributes. The follow)HY(ing)YH( - listing should give you an idea about what needs to be done: - )EP( - - ) 24 67 PR(// Obtain the object model. -// -std::auto_ptr r = ... - -using namespace xercesc; - -XMLPlatformUtils::Initialize \201\202; - -{ - // Create a DOM instance. Set custom namespace mapping and schema - // location attributes. - // - DOMDocument& doc = ... - - // Serialize to DOM. - // - name \201doc, *r\202; - - // Serialize the DOM document to XML. - // - ... -} - -XMLPlatformUtils::Terminate \201\202;)RP( - - )0 P(For more infor)HY(ma)HY(tion)YH( on how to create and seri)HY(al)HY(ize)YH( a DOM instance - refer to the Xerces-C++ docu)HY(men)HY(ta)HY(tion)YH(. In addi)HY(tion)YH(, the - )R8 2 A(C++/Tree Mapping - FAQ)EA( shows how to imple)HY(ment)YH( these oper)HY(a)HY(tions)YH( using the XSD - runtime util)HY(i)HY(ties)YH(. - )EP( - - )0 1 85 H(5)WB 179 Sn()WB 89 Sn( Addi)HY(tional)YH( Func)HY(tion)HY(al)HY(ity)YH()EA()EH( - - )0 P(The C++/Tree mapping provides a number of optional features - that can be useful in certain situ)HY(a)HY(tions)YH(. They are described - in the follow)HY(ing)YH( sections.)EP( - - )0 2 86 H(5.1)WB 180 Sn()WB 90 Sn( DOM Asso)HY(ci)HY(a)HY(tion)YH()EA()EH( - - )0 P(Normally, after parsing is complete, the DOM docu)HY(ment)YH( which - was used to extract the data is discarded. However, the parsing - func)HY(tions)YH( can be instructed to preserve the DOM docu)HY(ment)YH( - and create an asso)HY(ci)HY(a)HY(tion)YH( between the DOM nodes and object model - nodes. When there is an asso)HY(ci)HY(a)HY(tion)YH( between the DOM and - object model nodes, you can obtain the corre)HY(spond)HY(ing)YH( DOM element - or attribute node from an object model node as well as perform - the reverse tran)HY(si)HY(tion)YH(: obtain the corre)HY(spond)HY(ing)YH( object model - from a DOM element or attribute node.)EP( - - )0 P(Main)HY(tain)HY(ing)YH( DOM asso)HY(ci)HY(a)HY(tion)YH( is normally useful when the appli)HY(ca)HY(tion)YH( - needs access to XML constructs that are not preserved in the - object model, for example, text in the mixed content model. - Another useful aspect of DOM asso)HY(ci)HY(a)HY(tion)YH( is the ability of the - appli)HY(ca)HY(tion)YH( to navi)HY(gate)YH( the docu)HY(ment)YH( tree using the generic DOM - inter)HY(face)YH( \201for example, with the help of an XPath proces)HY(sor)YH(\202 - and then move back to the stat)HY(i)HY(cally)YH(-typed object model. Note - also that while you can change the under)HY(ly)HY(ing)YH( DOM docu)HY(ment)YH(, - these changes are not reflected in the object model and will - be ignored during seri)HY(al)HY(iza)HY(tion)YH(. If you need to not only access - but also modify some aspects of XML that are not preserved in - the object model, then type customiza)HY(tion)YH( with custom parsing - constructs and seri)HY(al)HY(iza)HY(tion)YH( oper)HY(a)HY(tors)YH( should be used instead.)EP( - - )0 P(To request DOM asso)HY(ci)HY(a)HY(tion)YH( you will need to pass the - )SM(xml_schema::flags::keep_dom)ES( flag to one of the - parsing func)HY(tions)YH( \201see )0 63 1 A(Section 3.2, - "Flags and Prop)HY(er)HY(ties)YH(")63 0 TN TL()Ec /AF f D( for more infor)HY(ma)HY(tion)YH(\202. In this case the - DOM docu)HY(ment)YH( is retained and will be released when the object model - is deleted. Note that since DOM nodes "out-live" the parsing func)HY(tion)YH( - call, you need to initial)HY(ize)YH( the Xerces-C++ runtime before calling - one of the parsing func)HY(tions)YH( with the )SM(keep_dom)ES( flag and - termi)HY(nate)YH( it after the object model is destroyed \201see - )0 62 1 A(Section 3.1, "Initial)HY(iz)HY(ing)YH( the Xerces-C++ Runtime")62 0 TN TL()Ec /AF f D(\202. - The DOM asso)HY(ci)HY(a)HY(tion)YH( is also main)HY(tained)YH( in complete copies of the - object model \201that is, the DOM docu)HY(ment)YH( is cloned and asso)HY(ci)HY(a)HY(tions)YH( - are reestab)HY(lished)YH(\202.)EP( - - )0 P(To obtain the corre)HY(spond)HY(ing)YH( DOM node from an object model node - you will need to call the )SM(_node)ES( acces)HY(sor)YH( func)HY(tion)YH( - which returns a pointer to )SM(DOMNode)ES(. You can then query - this DOM node's type and cast it to either )SM(DOMAttr*)ES( - or )SM(DOMEle)HY(ment)YH(*)ES(. To obtain the corre)HY(spond)HY(ing)YH( object - model node from a DOM node, the DOM user data API is used. The - )SM(xml_schema::dom::tree_node_key)ES( vari)HY(able)YH( contains - the key for object model nodes. The follow)HY(ing)YH( schema and code - frag)HY(ment)YH( show how to navi)HY(gate)YH( from DOM to object model nodes - and in the oppo)HY(site)YH( direc)HY(tion)YH(:)EP( - - ) 7 37 PR( - - - - - -)RP( - - ) 42 68 PR(using namespace xercesc; - -XMLPlatformUtils::Initialize \201\202; - -{ - // Parse XML to object model. - // - std::auto_ptr r = root \201 - "root.xml", - xml_schema::flags::keep_dom | - xml_schema::flags::dont_initialize\202; - - DOMNode* n = root->_node \201\202; - assert \201n->getNodeType \201\202 != DOMNode::ELEMENT_NODE\202; - DOMElement* re = static_cast \201n\202; - - // Get the 'a' element. Note that it is not necessarily the - // first child node of 'root' since there could be whitespace - // nodes before it. - // - DOMElement* ae; - - for \201n = re->getFirstChild \201\202; n != 0; n = n->getNextSibling \201\202\202 - { - if \201n->getNodeType \201\202 == DOMNode::ELEMENT_NODE\202 - { - ae = static_cast \201n\202; - break; - } - } -)WR( - // Get from the 'a' DOM element to xml_schema::string object model - // node. - // - xml_schema::type& t \201 - *reinterpret_cast \201 - ae->getUserData \201xml_schema::dom::tree_node_key\202\202\202; - - xml_schema::string& a \201dynamic_cast \201t\202\202; -} - -XMLPlatformUtils::Terminate \201\202;)RP( - - )0 P(The 'mixed' example which can be found in the XSD distri)HY(bu)HY(tion)YH( - shows how to handle the mixed content using DOM asso)HY(ci)HY(a)HY(tion)YH(.)EP( - - )0 2 87 H(5.2)WB 181 Sn()WB 91 Sn( Binary Seri)HY(al)HY(iza)HY(tion)YH()EA()EH( - - )0 P(Besides reading from and writing to XML, the C++/Tree mapping - also allows you to save the object model to and load it from a - number of prede)HY(fined)YH( as well as custom data repre)HY(sen)HY(ta)HY(tion)YH( - formats. The prede)HY(fined)YH( binary formats are CDR \201Common Data - Repre)HY(sen)HY(ta)HY(tion)YH(\202 and XDR \201eXter)HY(nal)YH( Data Repre)HY(sen)HY(ta)HY(tion)YH(\202. A - custom format can easily be supported by provid)HY(ing)YH( - inser)HY(tion)YH( and extrac)HY(tion)YH( oper)HY(a)HY(tors)YH( for basic types.)EP( - - )0 P(Binary seri)HY(al)HY(iza)HY(tion)YH( saves only the data without any meta - infor)HY(ma)HY(tion)YH( or markup. As a result, saving to and loading - from a binary repre)HY(sen)HY(ta)HY(tion)YH( can be an order of magni)HY(tude)YH( - faster than parsing and seri)HY(al)HY(iz)HY(ing)YH( the same data in XML. - Further)HY(more)YH(, the result)HY(ing)YH( repre)HY(sen)HY(ta)HY(tion)YH( is normally several - times smaller than the equiv)HY(a)HY(lent)YH( XML repre)HY(sen)HY(ta)HY(tion)YH(. These - prop)HY(er)HY(ties)YH( make binary seri)HY(al)HY(iza)HY(tion)YH( ideal for inter)HY(nal)YH( data - exchange and storage. A typical appli)HY(ca)HY(tion)YH( that uses this - facil)HY(ity)YH( stores the data and commu)HY(ni)HY(cates)YH( within the - system using a binary format and reads/writes the data - in XML when commu)HY(ni)HY(cat)HY(ing)YH( with the outside world.)EP( - - )0 P(In order to request the gener)HY(a)HY(tion)YH( of inser)HY(tion)YH( oper)HY(a)HY(tors)YH( and - extrac)HY(tion)YH( construc)HY(tors)YH( for a specific prede)HY(fined)YH( or custom - data repre)HY(sen)HY(ta)HY(tion)YH( stream, you will need to use the - )SM(--gener)HY(ate)YH(-inser)HY(tion)YH()ES( and )SM(--gener)HY(ate)YH(-extrac)HY(tion)YH()ES( - compiler options. See the - )R9 2 A(XSD - Compiler Command Line Manual)EA( for more infor)HY(ma)HY(tion)YH(.)EP( - - )0 P(Once the inser)HY(tion)YH( oper)HY(a)HY(tors)YH( and extrac)HY(tion)YH( construc)HY(tors)YH( are - gener)HY(ated)YH(, you can use the )SM(xml_schema::istream)ES( - and )SM(xml_schema::ostream)ES( wrapper stream templates - to save the object model to and load it from a specific format. - The follow)HY(ing)YH( code frag)HY(ment)YH( shows how to do this using ACE - \201Adap)HY(tive)YH( Commu)HY(ni)HY(ca)HY(tion)YH( Envi)HY(ron)HY(ment)YH(\202 CDR streams as an example:)EP( - - ) 8 37 PR( - - - - - - -)RP( - - ) 21 51 PR(// Parse XML to object model. -// -std::auto_ptr r = root \201"root.xml"\202; - -// Save to a CDR stream. -// -ACE_OutputCDR ace_ocdr; -xml_schema::ostream ocdr \201ace_ocdr\202; - -ocdr << *r; - -// Load from a CDR stream. -// -ACE_InputCDR ace_icdr \201buf, size\202; -xml_schema::istream icdr \201ace_icdr\202; - -std::auto_ptr copy \201new object \201icdr\202\202; - -// Serialize to XML. -// -root \201std::cout, *copy\202;)RP( - - )0 P(The XSD distri)HY(bu)HY(tion)YH( contains a number of exam)HY(ples)YH( that - show how to save the object model to and load it from - CDR, XDR, and a custom format.)EP( - - - - - )0 1 88 H(Appendix)WB 182 Sn()WB 92 Sn( A \236 Default and Fixed Values)EA()EH( - - )0 P(The follow)HY(ing)YH( table summa)HY(rizes)YH( the effect of default and fixed - values \201spec)HY(i)HY(fied)YH( with the )SM(default)ES( and )SM(fixed)ES( - attributes, respec)HY(tively)YH(\202 on attribute and element values. The - )SM(default)ES( and )SM(fixed)ES( attributes are mutu)HY(ally)YH( - exclu)HY(sive)YH(. It is also worth)HY(while)YH( to note that the fixed value seman)HY(tics)YH( - is a super)HY(set)YH( of the default value seman)HY(tics)YH(. - )EP( - - - )1 PT( - - )BR( -)BR( - - -)WB NL -/TE t D NP TU PM 0 eq and{/Pn () D showpage}if end restore diff --git a/xsd/documentation/cxx/tree/manual/index.xhtml b/xsd/documentation/cxx/tree/manual/index.xhtml deleted file mode 100644 index 43762b4..0000000 --- a/xsd/documentation/cxx/tree/manual/index.xhtml +++ /dev/null @@ -1,6032 +0,0 @@ - - - - - C++/Tree Mapping User Manual - - - - - - - - - - - - - - - -
-
- -
- -
-
C++/Tree Mapping User Manual
- -

Copyright © 2005-2010 CODE SYNTHESIS TOOLS CC

- -

Permission is granted to copy, distribute and/or modify this - document under the terms of the - GNU Free - Documentation License, version 1.2; with no Invariant Sections, - no Front-Cover Texts and no Back-Cover Texts. -

- -

This document is available in the following formats: - XHTML, - PDF, and - PostScript.

-
- -

Table of Contents

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Preface - - - -
About This Document
More Information
-
1Introduction
2C++/Tree Mapping - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
2.1Preliminary Information - - - - - -
2.1.1Identifiers
2.1.2Character Type and Encoding
2.1.3XML Schema Namespace
2.1.4Anonymous Types
-
2.2Error Handling - - -
2.2.1xml_schema::duplicate_id
-
2.3Mapping for import and include - - - - -
2.3.1Import
2.3.2Inclusion with Target Namespace
2.3.3Inclusion without Target Namespace
-
2.4Mapping for Namespaces
2.5Mapping for Built-in Data Types - - - - - - - - - - - - - - - - - -
2.5.1Inheritance from Built-in Data Types
2.5.2Mapping for anyType
2.5.3Mapping for anySimpleType
2.5.4Mapping for QName
2.5.5Mapping for IDREF
2.5.6Mapping for base64Binary and hexBinary
2.5.7Time Zone Representation
2.5.8Mapping for date
2.5.9Mapping for dateTime
2.5.10Mapping for duration
2.5.11Mapping for gDay
2.5.12Mapping for gMonth
2.5.13Mapping for gMonthDay
2.5.14Mapping for gYear
2.5.15Mapping for gYearMonth
2.5.16Mapping for time
-
2.6Mapping for Simple Types - - - - - -
2.6.1Mapping for Derivation by Restriction
2.6.2Mapping for Enumerations
2.6.3Mapping for Derivation by List
2.6.4Mapping for Derivation by Union
-
2.7Mapping for Complex Types - - - -
2.7.1Mapping for Derivation by Extension
2.7.2Mapping for Derivation by Restriction
-
2.8Mapping for Local Elements and Attributes - - - - -
2.8.1Mapping for Members with the One Cardinality Class
2.8.2Mapping for Members with the Optional Cardinality Class
2.8.3Mapping for Members with the Sequence Cardinality Class
-
2.9Mapping for Global Elements - - - -
2.9.1Element Types
2.9.2Element Map
-
2.10Mapping for Global Attributes
2.11Mapping for xsi:type and Substitution Groups
2.12Mapping for any and anyAttribute - - - - - -
2.12.1Mapping for any with the One Cardinality Class
2.12.2Mapping for any with the Optional Cardinality Class
2.12.3Mapping for any with the Sequence Cardinality Class
2.12.4Mapping for anyAttribute
-
2.13Mapping for Mixed Content Models
-
3Parsing - - - - - - - - - - - - - - - - - - - - - - -
3.1Initializing the Xerces-C++ Runtime
3.2Flags and Properties
3.3Error Handling - - - - - - - - - - -
3.3.1xml_schema::parsing
3.3.2xml_schema::expected_element
3.3.3xml_schema::unexpected_element
3.3.4xml_schema::expected_attribute
3.3.5xml_schema::unexpected_enumerator
3.3.6xml_schema::expected_text_content
3.3.7xml_schema::no_type_info
3.3.8xml_schema::not_derived
3.3.9xml_schema::not_prefix_mapping
-
3.4Reading from a Local File or URI
3.5Reading from std::istream
3.6Reading from xercesc::InputSource
3.7Reading from DOM
-
4Serialization - - - - - - - - - - - - - - - - - - - - - - -
4.1Initializing the Xerces-C++ Runtime
4.2Namespace Infomap and Character Encoding
4.3Flags
4.4Error Handling - - - - -
4.4.1xml_schema::serialization
4.4.2xml_schema::unexpected_element
4.4.3xml_schema::no_type_info
-
4.5Serializing to std::ostream
4.6Serializing to xercesc::XMLFormatTarget
4.7Serializing to DOM
-
5Additional Functionality - - - - - - - -
5.1DOM Association
5.2Binary Serialization
-
Appendix A — Default and Fixed Values
-
- -

Preface

- -

About This Document

- -

This document describes the mapping of W3C XML Schema - to the C++ programming language as implemented by - CodeSynthesis - XSD - an XML Schema to C++ data binding compiler. The mapping - represents information stored in XML instance documents as a - statically-typed, tree-like in-memory data structure and is - called C++/Tree. -

- -

Revision 2.3.0
- This revision of the manual describes the C++/Tree - mapping as implemented by CodeSynthesis XSD version 3.3.0. -

- -

This document is available in the following formats: - XHTML, - PDF, and - PostScript.

- -

More Information

- -

Beyond this manual, you may also find the following sources of - information useful:

- - - - -

1 Introduction

- -

C++/Tree is a W3C XML Schema to C++ mapping that represents the - data stored in XML as a statically-typed, vocabulary-specific - object model. Based on a formal description of an XML vocabulary - (schema), the C++/Tree mapping produces a tree-like data structure - suitable for in-memory processing as well as XML parsing and - serialization code.

- -

A typical application that processes XML documents usually - performs the following three steps: it first reads (parses) an XML - instance document to an object model, it then performs - some useful computations on that model which may involve - modification of the model, and finally it may write (serialize) - the modified object model back to XML. -

- -

The C++/Tree mapping consists of C++ types that represent the - given vocabulary (Chapter 2, "C++/Tree Mapping"), - a set of parsing functions that convert XML documents to - a tree-like in-memory data structure (Chapter 3, - "Parsing"), and a set of serialization functions that convert - the object model back to XML (Chapter 4, - "Serialization"). Furthermore, the mapping provides a number - of additional features, such as DOM association and binary - serialization, that can be useful in some applications - (Chapter 5, "Additional Functionality"). -

- - - - - -

2 C++/Tree Mapping

- -

2.1 Preliminary Information

- -

2.1.1 Identifiers

- -

XML Schema names may happen to be reserved C++ keywords or contain - characters that are illegal in C++ identifiers. To avoid C++ compilation - problems, such names are changed (escaped) when mapped to C++. If an - XML Schema name is a C++ keyword, the "_" suffix is added to it. All - character of an XML Schema name that are not allowed in C++ identifiers - are replaced with "_". -

- -

For example, XML Schema name try will be mapped to - C++ identifier try_. Similarly, XML Schema name - strange.na-me will be mapped to C++ identifier - strange_na_me. -

- -

Furthermore, conflicts between type names and function names in the - same scope are resolved using name escaping. Such conflicts include - both a global element (which is mapped to a set of parsing and/or - serialization functions or element types, see Section - 2.9, "Mapping for Global Elements") and a global type sharing the - same name as well as a local element or attribute inside a type having - the same name as the type itself.

- -

For example, if we had a global type catalog - and a global element with the same name then the type would be - mapped to a C++ class with name catalog while the - parsing functions corresponding to the global element would have - their names escaped as catalog_. -

- -

By default the mapping uses the so-called K&R (Kernighan and - Ritchie) identifier naming convention which is also used throughout - this manual. In this convention both type and function names are in - lower case and words are separated by underscores. If your application - code or schemas use a different notation, you may want to change the - naming convention used by the mapping for consistency. - The compiler supports a set of widely-used naming conventions - that you can select with the --type-naming and - --function-naming options. You can also further - refine one of the predefined conventions or create a completely - custom naming scheme by using the --*-regex options. - For more detailed information on these options refer to the NAMING - CONVENTION section in the XSD - Compiler Command Line Manual.

- -

2.1.2 Character Type and Encoding

- -

The code that implements the mapping, depending on the - --char-type option, is generated using either - char or wchar_t as the character - type. In this document code samples use symbol C - to refer to the character type you have selected when translating - your schemas, for example std::basic_string<C>. -

- -

Another aspect of the mapping that depends on the character type - is character encoding. For the char character type - the default encoding is UTF-8. Other supported encodings are - ISO-8859-1, Xerces-C++ Local Code Page (LPC), as well as - custom encodings and can be selected with the - --char-encoding command line option.

- -

For the wchar_t character type the encoding is - automatically selected between UTF-16 and UTF-32/UCS-4 depending - on the size of the wchar_t type. On some platforms - (for example, Windows with Visual C++ and AIX with IBM XL C++) - wchar_t is 2 bytes long. For these platforms the - encoding is UTF-16. On other platforms wchar_t is 4 bytes - long and UTF-32/UCS-4 is used.

- -

2.1.3 XML Schema Namespace

- -

The mapping relies on some predefined types, classes, and functions - that are logically defined in the XML Schema namespace reserved for - the XML Schema language (http://www.w3.org/2001/XMLSchema). - By default, this namespace is mapped to C++ namespace - xml_schema. It is automatically accessible - from a C++ compilation unit that includes a header file generated - from an XML Schema definition. -

- -

Note that, if desired, the default mapping of this namespace can be - changed as described in Section 2.4, "Mapping for - Namespaces". -

- - -

2.1.4 Anonymous Types

- -

For the purpose of code generation, anonymous types defined in - XML Schema are automatically assigned names that are derived - from enclosing attributes and elements. Otherwise, such types - follows standard mapping rules for simple and complex type - definitions (see Section 2.6, "Mapping for Simple Types" - and Section 2.7, "Mapping for Complex Types"). - For example, in the following schema fragment: -

- -
-<element name="object">
-  <complexType>
-    ...
-  </complexType>
-</element>
-  
- -

The anonymous type defined inside element object will - be given name object. The compiler has a number of - options that control the process of anonymous type naming. For more - information refer to the XSD - Compiler Command Line Manual.

- - -

2.2 Error Handling

- -

The mapping uses the C++ exception handling mechanism as a primary way - of reporting error conditions. All exceptions that are specified in - this mapping derive from xml_schema::exception which - itself is derived from std::exception: -

- -
-struct exception: virtual std::exception
-{
-  friend
-  std::basic_ostream<C>&
-  operator<< (std::basic_ostream<C>& os, const exception& e)
-  {
-    e.print (os);
-    return os;
-  }
-
-protected:
-  virtual void
-  print (std::basic_ostream<C>&) const = 0;
-};
-  
- -

The exception hierarchy supports "virtual" operator<< - which allows you to obtain diagnostics corresponding to the thrown - exception using the base exception interface. For example:

- -
-try
-{
-  ...
-}
-catch (const xml_schema::exception& e)
-{
-  cerr << e << endl;
-}
-  
- -

The following sub-sections describe exceptions thrown by the - types that constitute the object model. - Section 3.3, "Error Handling" of - Chapter 3, "Parsing" describes exceptions - and error handling mechanisms specific to the parsing functions. - Section 4.4, "Error Handling" of - Chapter 4, "Serialization" describes exceptions - and error handling mechanisms specific to the serialization functions. -

- - -

2.2.1 xml_schema::duplicate_id

- -
-struct duplicate_id: virtual exception
-{
-  duplicate_id (const std::basic_string<C>& id);
-
-  const std::basic_string<C>&
-  id () const;
-
-  virtual const char*
-  what () const throw ();
-};
-  
- -

The xml_schema::duplicate_id is thrown when - a conflicting instance of xml_schema::id (see - Section 2.5, "Mapping for Built-in Data Types") - is added to a tree. The offending ID value can be obtained using - the id function. -

- -

2.3 Mapping for import and include

- -

2.3.1 Import

- -

The XML Schema import element is mapped to the C++ - Preprocessor #include directive. The value of - the schemaLocation attribute is used to derive - the name of the header file that appears in the #include - directive. For instance: -

- -
-<import namespace="http://www.codesynthesis.com/test"
-        schemaLocation="test.xsd"/>
-  
- -

is mapped to:

- -
-#include "test.hxx"
-  
- -

Note that you will need to compile imported schemas separately - in order to produce corresponding header files.

- -

2.3.2 Inclusion with Target Namespace

- -

The XML Schema include element which refers to a schema - with a target namespace or appears in a schema without a target namespace - follows the same mapping rules as the import element, - see Section 2.3.1, "Import". -

- -

2.3.3 Inclusion without Target Namespace

- -

For the XML Schema include element which refers to a schema - without a target namespace and appears in a schema with a target - namespace (such inclusion sometimes called "chameleon inclusion"), - declarations and definitions from the included schema are generated - in-line in the namespace of the including schema as if they were - declared and defined there verbatim. For example, consider the - following two schemas: -

- -
-<-- common.xsd -->
-<schema>
-  <complexType name="type">
-  ...
-  </complexType>
-</schema>
-
-<-- test.xsd -->
-<schema targetNamespace="http://www.codesynthesis.com/test">
-  <include schemaLocation="common.xsd"/>
-</schema>
-  
- -

The fragment of interest from the generated header file for - text.xsd would look like this:

- -
-// test.hxx
-namespace test
-{
-  class type
-  {
-    ...
-  };
-}
-  
- -

2.4 Mapping for Namespaces

- -

An XML Schema namespace is mapped to one or more nested C++ - namespaces. XML Schema namespaces are identified by URIs. - By default, a namespace URI is mapped to a sequence of - C++ namespace names by removing the protocol and host parts - and splitting the rest into a sequence of names with '/' - as the name separator. For instance: -

- -
-<schema targetNamespace="http://www.codesynthesis.com/system/test">
-  ...
-</schema>
-  
- -

is mapped to:

- -
-namespace system
-{
-  namespace test
-  {
-    ...
-  }
-}
-  
- -

The default mapping of namespace URIs to C++ namespace names can be - altered using the --namespace-map and - --namespace-regex options. See the - XSD - Compiler Command Line Manual for more information. -

- -

2.5 Mapping for Built-in Data Types

- -

The mapping of XML Schema built-in data types to C++ types is - summarized in the table below.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
XML Schema typeAlias in the xml_schema namespaceC++ type
anyType and anySimpleType types
anyTypetypeSection 2.5.2, "Mapping for anyType"
anySimpleTypesimple_typeSection 2.5.3, "Mapping for anySimpleType"
fixed-length integral types
bytebytesigned char
unsignedByteunsigned_byteunsigned char
shortshort_short
unsignedShortunsigned_shortunsigned short
intint_int
unsignedIntunsigned_intunsigned int
longlong_long long
unsignedLongunsigned_longunsigned long long
arbitrary-length integral types
integerintegerlong long
nonPositiveIntegernon_positive_integerlong long
nonNegativeIntegernon_negative_integerunsigned long long
positiveIntegerpositive_integerunsigned long long
negativeIntegernegative_integerlong long
boolean types
booleanbooleanbool
fixed-precision floating-point types
floatfloat_float
doubledouble_double
arbitrary-precision floating-point types
decimaldecimaldouble
string types
stringstringtype derived from std::basic_string
normalizedStringnormalized_stringtype derived from string
tokentokentype derived from normalized_string
Namenametype derived from token
NMTOKENnmtokentype derived from token
NMTOKENSnmtokenstype derived from sequence<nmtoken>
NCNamencnametype derived from name
languagelanguagetype derived from token
qualified name
QNameqnameSection 2.5.4, "Mapping for QName"
ID/IDREF types
IDidtype derived from ncname
IDREFidrefSection 2.5.5, "Mapping for IDREF"
IDREFSidrefstype derived from sequence<idref>
URI types
anyURIuritype derived from std::basic_string
binary types
base64Binarybase64_binarySection 2.5.6, "Mapping for - base64Binary and hexBinary"
hexBinaryhex_binary
date/time types
datedateSection 2.5.8, "Mapping for - date"
dateTimedate_timeSection 2.5.9, "Mapping for - dateTime"
durationdurationSection 2.5.10, "Mapping for - duration"
gDaygdaySection 2.5.11, "Mapping for - gDay"
gMonthgmonthSection 2.5.12, "Mapping for - gMonth"
gMonthDaygmonth_daySection 2.5.13, "Mapping for - gMonthDay"
gYeargyearSection 2.5.14, "Mapping for - gYear"
gYearMonthgyear_monthSection 2.5.15, "Mapping for - gYearMonth"
timetimeSection 2.5.16, "Mapping for - time"
entity types
ENTITYentitytype derived from name
ENTITIESentitiestype derived from sequence<entity>
- -

All XML Schema built-in types are mapped to C++ classes that are - derived from the xml_schema::simple_type class except - where the mapping is to a fundamental C++ type.

- -

The sequence class template is defined in an - implementation-specific namespace. It conforms to the - sequence interface as defined by the ISO/ANSI Standard for - C++ (ISO/IEC 14882:1998, Section 23.1.1, "Sequences"). - Practically, this means that you can treat such a sequence - as if it was std::vector. One notable extension - to the standard interface that is available only for - sequences of non-fundamental C++ types is the addition of - the overloaded push_back and insert - member functions which instead of the constant reference - to the element type accept automatic pointer to the element - type. These functions assume ownership of the pointed to - object and resets the passed automatic pointer. -

- -

2.5.1 Inheritance from Built-in Data Types

- -

In cases where the mapping calls for an inheritance from a built-in - type which is mapped to a fundamental C++ type, a proxy type is - used instead of the fundamental C++ type (C++ does not allow - inheritance from fundamental types). For instance:

- -
-<simpleType name="my_int">
-  <restriction base="int"/>
-</simpleType>
-  
- -

is mapped to:

- -
-class my_int: public fundamental_base<int>
-{
-  ...
-};
-  
- -

The fundamental_base class template provides a close - emulation (though not exact) of a fundamental C++ type. - It is defined in an implementation-specific namespace and has the - following interface:

- -
-template <typename X>
-class fundamental_base: public simple_type
-{
-public:
-  fundamental_base ();
-  fundamental_base (X)
-  fundamental_base (const fundamental_base&)
-
-public:
-  fundamental_base&
-  operator= (const X&);
-
-public:
-  operator const X & () const;
-  operator X& ();
-
-  template <typename Y>
-  operator Y () const;
-
-  template <typename Y>
-  operator Y ();
-};
-  
- -

2.5.2 Mapping for anyType

- -

The XML Schema anyType built-in data type is mapped to the - xml_schema::type C++ class:

- -
-class type
-{
-public:
-  virtual
-  ~type ();
-
-public:
-  type ();
-  type (const type&);
-
-public:
-  type&
-  operator= (const type&);
-
-public:
-  virtual type*
-  _clone () const;
-
-  // DOM association.
-  //
-public:
-  const xercesc::DOMNode*
-  _node () const;
-
-  xercesc::DOMNode*
-  _node ();
-};
-  
- -

For more information about DOM association refer to - Section 5.1, "DOM Association".

- -

2.5.3 Mapping for anySimpleType

- -

The XML Schema anySimpleType built-in data type is mapped - to the xml_schema::simple_type C++ class:

- -
-class simple_type: public type
-{
-public:
-  simple_type ();
-  simple_type (const simple_type&);
-
-public:
-  simple_type&
-  operator= (const simple_type&);
-
-public:
-  virtual simple_type*
-  _clone () const;
-};
-  
- - -

2.5.4 Mapping for QName

- -

The XML Schema QName built-in data type is mapped to the - xml_schema::qname C++ class:

- -
-class qname: public simple_type
-{
-public:
-  qname (const ncname&);
-  qname (const uri&, const ncname&);
-  qname (const qname&);
-
-public:
-  qname&
-  operator= (const qname&);
-
-public:
-  virtual qname*
-  _clone () const;
-
-public:
-  bool
-  qualified () const;
-
-  const uri&
-  namespace_ () const;
-
-  const ncname&
-  name () const;
-};
-  
- -

The qualified accessor function can be used to determine - if the name is qualified.

- -

2.5.5 Mapping for IDREF

- -

The XML Schema IDREF built-in data type is mapped to the - xml_schema::idref C++ class. This class implements the - smart pointer C++ idiom:

- -
-class idref: public ncname
-{
-public:
-  idref (const C* s);
-  idref (const C* s, std::size_t n);
-  idref (std::size_t n, C c);
-  idref (const std::basic_string<C>&);
-  idref (const std::basic_string<C>&,
-         std::size_t pos,
-         std::size_t n = npos);
-
-public:
-  idref (const idref&);
-
-public:
-  virtual idref*
-  _clone () const;
-
-public:
-  idref&
-  operator= (C c);
-
-  idref&
-  operator= (const C* s);
-
-  idref&
-  operator= (const std::basic_string<C>&)
-
-  idref&
-  operator= (const idref&);
-
-public:
-  const type*
-  operator-> () const;
-
-  type*
-  operator-> ();
-
-  const type&
-  operator* () const;
-
-  type&
-  operator* ();
-
-  const type*
-  get () const;
-
-  type*
-  get ();
-
-  // Conversion to bool.
-  //
-public:
-  typedef void (idref::*bool_convertible)();
-  operator bool_convertible () const;
-};
-  
- -

The object, idref instance refers to, is the immediate - container of the matching id instance. For example, - with the following instance document and schema: -

- - -
-<!-- test.xml -->
-<root>
-  <object id="obj-1" text="hello"/>
-  <reference>obj-1</reference>
-</root>
-
-<!-- test.xsd -->
-<schema>
-  <complexType name="object_type">
-    <attribute name="id" type="ID"/>
-    <attribute name="text" type="string"/>
-  </complexType>
-
-  <complexType name="root_type">
-    <sequence>
-      <element name="object" type="object_type"/>
-      <element name="reference" type="IDREF"/>
-    </sequence>
-  </complexType>
-
-  <element name="root" type="root_type"/>
-</schema>
-  
- -

The ref instance in the code below will refer to - an object of type object_type:

- -
-root_type& root = ...;
-xml_schema::idref& ref (root.reference ());
-object_type& obj (dynamic_cast<object_type&> (*ref));
-cout << obj.text () << endl;
-  
- -

The smart pointer interface of the idref class always - returns a pointer or reference to xml_schema::type. - This means that you will need to manually cast such pointer or - reference to its real (dynamic) type before you can use it (unless - all you need is the base interface provided by - xml_schema::type). As a special extension to the XML - Schema language, the mapping supports static typing of idref - references by employing the refType extension attribute. - The following example illustrates this mechanism: -

- -
-<!-- test.xsd -->
-<schema
-  xmlns:xse="http://www.codesynthesis.com/xmlns/xml-schema-extension">
-
-  ...
-
-      <element name="reference" type="IDREF" xse:refType="object_type"/>
-
-  ...
-
-</schema>
-  
- -

With this modification we do not need to do manual casting anymore: -

- -
-root_type& root = ...;
-root_type::reference_type& ref (root.reference ());
-object_type& obj (*ref);
-cout << ref->text () << endl;
-  
- - -

2.5.6 Mapping for base64Binary and - hexBinary

- -

The XML Schema base64Binary and hexBinary - built-in data types are mapped to the - xml_schema::base64_binary and - xml_schema::hex_binary C++ classes, respectively. The - base64_binary and hex_binary classes - support a simple buffer abstraction by inheriting from the - xml_schema::buffer class: -

- -
-class bounds: public virtual exception
-{
-public:
-  virtual const char*
-  what () const throw ();
-};
-
-class buffer
-{
-public:
-  typedef std::size_t size_t;
-
-public:
-  buffer (size_t size = 0);
-  buffer (size_t size, size_t capacity);
-  buffer (const void* data, size_t size);
-  buffer (const void* data, size_t size, size_t capacity);
-  buffer (void* data,
-          size_t size,
-          size_t capacity,
-          bool assume_ownership);
-
-public:
-  buffer (const buffer&);
-
-  buffer&
-  operator= (const buffer&);
-
-  void
-  swap (buffer&);
-
-public:
-  size_t
-  capacity () const;
-
-  bool
-  capacity (size_t);
-
-public:
-  size_t
-  size () const;
-
-  bool
-  size (size_t);
-
-public:
-  const char*
-  data () const;
-
-  char*
-  data ();
-
-  const char*
-  begin () const;
-
-  char*
-  begin ();
-
-  const char*
-  end () const;
-
-  char*
-  end ();
-};
-  
- -

The last overloaded constructor reuses an existing data buffer instead - of making a copy. If the assume_ownership argument is - true, the instance assumes ownership of the - memory block pointed to by the data argument and will - eventually release it by calling operator delete. The - capacity and size modifier functions return - true if the underlying buffer has moved. -

- -

The bounds exception is thrown if the constructor - arguments violate the (size <= capacity) - constraint.

- -

The base64_binary and hex_binary classes - support the buffer interface and perform automatic - decoding/encoding from/to the Base64 and Hex formats, respectively: -

- -
-class base64_binary: public simple_type, public buffer
-{
-public:
-  base64_binary (size_t size = 0);
-  base64_binary (size_t size, size_t capacity);
-  base64_binary (const void* data, size_t size);
-  base64_binary (const void* data, size_t size, size_t capacity);
-  base64_binary (void* data,
-                 size_t size,
-                 size_t capacity,
-                 bool assume_ownership);
-
-public:
-  base64_binary (const base64_binary&);
-
-  base64_binary&
-  operator= (const base64_binary&);
-
-  virtual base64_binary*
-  _clone () const;
-
-public:
-  std::basic_string<C>
-  encode () const;
-};
-  
- -
-class hex_binary: public simple_type, public buffer
-{
-public:
-  hex_binary (size_t size = 0);
-  hex_binary (size_t size, size_t capacity);
-  hex_binary (const void* data, size_t size);
-  hex_binary (const void* data, size_t size, size_t capacity);
-  hex_binary (void* data,
-              size_t size,
-              size_t capacity,
-              bool assume_ownership);
-
-public:
-  hex_binary (const hex_binary&);
-
-  hex_binary&
-  operator= (const hex_binary&);
-
-  virtual hex_binary*
-  _clone () const;
-
-public:
-  std::basic_string<C>
-  encode () const;
-};
-  
- - -

2.5.7 Time Zone Representation

- -

The date, dateTime, gDay, - gMonth, gMonthDay, gYear, - gYearMonth, and time XML Schema built-in - types all include an optional time zone component. The following - xml_schema::time_zone base class is used to represent - this information:

- -
-class time_zone
-{
-public:
-  time_zone ();
-  time_zone (short hours, short minutes);
-
-  bool
-  zone_present () const;
-
-  void
-  zone_reset ();
-
-  short
-  zone_hours () const;
-
-  void
-  zone_hours (short);
-
-  short
-  zone_minutes () const;
-
-  void
-  zone_minutes (short);
-};
-
-bool
-operator== (const time_zone&, const time_zone&);
-
-bool
-operator!= (const time_zone&, const time_zone&);
-  
- -

The zone_present() accessor function returns true - if the time zone is specified. The zone_reset() modifier - function resets the time zone object to the not specified - state. If the time zone offset is negative then both hours and - minutes components are represented as negative integers.

- - -

2.5.8 Mapping for date

- -

The XML Schema date built-in data type is mapped to the - xml_schema::date C++ class which represents a year, a day, - and a month with an optional time zone. Its interface is presented - below. For more information on the base xml_schema::time_zone - class refer to Section 2.5.7, "Time Zone - Representation".

- -
-class date: public simple_type, public time_zone
-{
-public:
-  date (int year, unsigned short month, unsigned short day);
-  date (int year, unsigned short month, unsigned short day,
-        short zone_hours, short zone_minutes);
-
-public:
-  date (const date&);
-
-  date&
-  operator= (const date&);
-
-  virtual date*
-  _clone () const;
-
-public:
-  int
-  year () const;
-
-  void
-  year (int);
-
-  unsigned short
-  month () const;
-
-  void
-  month (unsigned short);
-
-  unsigned short
-  day () const;
-
-  void
-  day (unsigned short);
-};
-
-bool
-operator== (const date&, const date&);
-
-bool
-operator!= (const date&, const date&);
-  
- -

2.5.9 Mapping for dateTime

- -

The XML Schema dateTime built-in data type is mapped to the - xml_schema::date_time C++ class which represents a year, a month, - a day, hours, minutes, and seconds with an optional time zone. Its interface - is presented below. For more information on the base - xml_schema::time_zone class refer to Section - 2.5.7, "Time Zone Representation".

- -
-class date_time: public simple_type, public time_zone
-{
-public:
-  date_time (int year, unsigned short month, unsigned short day,
-             unsigned short hours, unsigned short minutes,
-             double seconds);
-
-  date_time (int year, unsigned short month, unsigned short day,
-             unsigned short hours, unsigned short minutes,
-             double seconds, short zone_hours, short zone_minutes);
-public:
-  date_time (const date_time&);
-
-  date_time&
-  operator= (const date_time&);
-
-  virtual date_time*
-  _clone () const;
-
-public:
-  int
-  year () const;
-
-  void
-  year (int);
-
-  unsigned short
-  month () const;
-
-  void
-  month (unsigned short);
-
-  unsigned short
-  day () const;
-
-  void
-  day (unsigned short);
-
-  unsigned short
-  hours () const;
-
-  void
-  hours (unsigned short);
-
-  unsigned short
-  minutes () const;
-
-  void
-  minutes (unsigned short);
-
-  double
-  seconds () const;
-
-  void
-  seconds (double);
-};
-
-bool
-operator== (const date_time&, const date_time&);
-
-bool
-operator!= (const date_time&, const date_time&);
-  
- - -

2.5.10 Mapping for duration

- -

The XML Schema duration built-in data type is mapped to the - xml_schema::duration C++ class which represents a potentially - negative duration in the form of years, months, days, hours, minutes, - and seconds. Its interface is presented below.

- -
-class duration: public simple_type
-{
-public:
-  duration (bool negative,
-            unsigned int years, unsigned int months, unsigned int days,
-            unsigned int hours, unsigned int minutes, double seconds);
-public:
-  duration (const duration&);
-
-  duration&
-  operator= (const duration&);
-
-  virtual duration*
-  _clone () const;
-
-public:
-  bool
-  negative () const;
-
-  void
-  negative (bool);
-
-  unsigned int
-  years () const;
-
-  void
-  years (unsigned int);
-
-  unsigned int
-  months () const;
-
-  void
-  months (unsigned int);
-
-  unsigned int
-  days () const;
-
-  void
-  days (unsigned int);
-
-  unsigned int
-  hours () const;
-
-  void
-  hours (unsigned int);
-
-  unsigned int
-  minutes () const;
-
-  void
-  minutes (unsigned int);
-
-  double
-  seconds () const;
-
-  void
-  seconds (double);
-};
-
-bool
-operator== (const duration&, const duration&);
-
-bool
-operator!= (const duration&, const duration&);
-  
- - -

2.5.11 Mapping for gDay

- -

The XML Schema gDay built-in data type is mapped to the - xml_schema::gday C++ class which represents a day of the - month with an optional time zone. Its interface is presented below. - For more information on the base xml_schema::time_zone - class refer to Section 2.5.7, "Time Zone - Representation".

- -
-class gday: public simple_type, public time_zone
-{
-public:
-  explicit
-  gday (unsigned short day);
-  gday (unsigned short day, short zone_hours, short zone_minutes);
-
-public:
-  gday (const gday&);
-
-  gday&
-  operator= (const gday&);
-
-  virtual gday*
-  _clone () const;
-
-public:
-  unsigned short
-  day () const;
-
-  void
-  day (unsigned short);
-};
-
-bool
-operator== (const gday&, const gday&);
-
-bool
-operator!= (const gday&, const gday&);
-  
- - -

2.5.12 Mapping for gMonth

- -

The XML Schema gMonth built-in data type is mapped to the - xml_schema::gmonth C++ class which represents a month of the - year with an optional time zone. Its interface is presented below. - For more information on the base xml_schema::time_zone - class refer to Section 2.5.7, "Time Zone - Representation".

- -
-class gmonth: public simple_type, public time_zone
-{
-public:
-  explicit
-  gmonth (unsigned short month);
-  gmonth (unsigned short month,
-          short zone_hours, short zone_minutes);
-
-public:
-  gmonth (const gmonth&);
-
-  gmonth&
-  operator= (const gmonth&);
-
-  virtual gmonth*
-  _clone () const;
-
-public:
-  unsigned short
-  month () const;
-
-  void
-  month (unsigned short);
-};
-
-bool
-operator== (const gmonth&, const gmonth&);
-
-bool
-operator!= (const gmonth&, const gmonth&);
-  
- - -

2.5.13 Mapping for gMonthDay

- -

The XML Schema gMonthDay built-in data type is mapped to the - xml_schema::gmonth_day C++ class which represents a day and - a month of the year with an optional time zone. Its interface is presented - below. For more information on the base xml_schema::time_zone - class refer to Section 2.5.7, "Time Zone - Representation".

- -
-class gmonth_day: public simple_type, public time_zone
-{
-public:
-  gmonth_day (unsigned short month, unsigned short day);
-  gmonth_day (unsigned short month, unsigned short day,
-              short zone_hours, short zone_minutes);
-
-public:
-  gmonth_day (const gmonth_day&);
-
-  gmonth_day&
-  operator= (const gmonth_day&);
-
-  virtual gmonth_day*
-  _clone () const;
-
-public:
-  unsigned short
-  month () const;
-
-  void
-  month (unsigned short);
-
-  unsigned short
-  day () const;
-
-  void
-  day (unsigned short);
-};
-
-bool
-operator== (const gmonth_day&, const gmonth_day&);
-
-bool
-operator!= (const gmonth_day&, const gmonth_day&);
-  
- - -

2.5.14 Mapping for gYear

- -

The XML Schema gYear built-in data type is mapped to the - xml_schema::gyear C++ class which represents a year with - an optional time zone. Its interface is presented below. For more - information on the base xml_schema::time_zone class refer - to Section 2.5.7, "Time Zone Representation".

- -
-class gyear: public simple_type, public time_zone
-{
-public:
-  explicit
-  gyear (int year);
-  gyear (int year, short zone_hours, short zone_minutes);
-
-public:
-  gyear (const gyear&);
-
-  gyear&
-  operator= (const gyear&);
-
-  virtual gyear*
-  _clone () const;
-
-public:
-  int
-  year () const;
-
-  void
-  year (int);
-};
-
-bool
-operator== (const gyear&, const gyear&);
-
-bool
-operator!= (const gyear&, const gyear&);
-  
- - -

2.5.15 Mapping for gYearMonth

- -

The XML Schema gYearMonth built-in data type is mapped to - the xml_schema::gyear_month C++ class which represents - a year and a month with an optional time zone. Its interface is presented - below. For more information on the base xml_schema::time_zone - class refer to Section 2.5.7, "Time Zone - Representation".

- -
-class gyear_month: public simple_type, public time_zone
-{
-public:
-  gyear_month (int year, unsigned short month);
-  gyear_month (int year, unsigned short month,
-               short zone_hours, short zone_minutes);
-public:
-  gyear_month (const gyear_month&);
-
-  gyear_month&
-  operator= (const gyear_month&);
-
-  virtual gyear_month*
-  _clone () const;
-
-public:
-  int
-  year () const;
-
-  void
-  year (int);
-
-  unsigned short
-  month () const;
-
-  void
-  month (unsigned short);
-};
-
-bool
-operator== (const gyear_month&, const gyear_month&);
-
-bool
-operator!= (const gyear_month&, const gyear_month&);
-  
- - -

2.5.16 Mapping for time

- -

The XML Schema time built-in data type is mapped to - the xml_schema::time C++ class which represents hours, - minutes, and seconds with an optional time zone. Its interface is - presented below. For more information on the base - xml_schema::time_zone class refer to - Section 2.5.7, "Time Zone Representation".

- -
-class time: public simple_type, public time_zone
-{
-public:
-  time (unsigned short hours, unsigned short minutes, double seconds);
-  time (unsigned short hours, unsigned short minutes, double seconds,
-        short zone_hours, short zone_minutes);
-
-public:
-  time (const time&);
-
-  time&
-  operator= (const time&);
-
-  virtual time*
-  _clone () const;
-
-public:
-  unsigned short
-  hours () const;
-
-  void
-  hours (unsigned short);
-
-  unsigned short
-  minutes () const;
-
-  void
-  minutes (unsigned short);
-
-  double
-  seconds () const;
-
-  void
-  seconds (double);
-};
-
-bool
-operator== (const time&, const time&);
-
-bool
-operator!= (const time&, const time&);
-  
- - - - -

2.6 Mapping for Simple Types

- -

An XML Schema simple type is mapped to a C++ class with the same - name as the simple type. The class defines a public copy constructor, - a public copy assignment operator, and a public virtual - _clone function. The _clone function is - declared const, does not take any arguments, and returns - a pointer to a complete copy of the instance allocated in the free - store. The _clone function shall be used to make copies - when static type and dynamic type of the instance may differ (see - Section 2.11, "Mapping for xsi:type - and Substitution Groups"). For instance:

- -
-<simpleType name="object">
-  ...
-</simpleType>
-  
- -

is mapped to:

- -
-class object: ...
-{
-public:
-  object (const object&);
-
-public:
-  object&
-  operator= (const object&);
-
-public:
-  virtual object*
-  _clone () const;
-
-  ...
-
-};
-  
- -

The base class specification and the rest of the class definition - depend on the type of derivation used to define the simple type.

- - -

2.6.1 Mapping for Derivation by Restriction

- -

XML Schema derivation by restriction is mapped to C++ public - inheritance. The base type of the restriction becomes the base - type for the resulting C++ class. In addition to the members described - in Section 2.6, "Mapping for Simple Types", the - resulting C++ class defines a public constructor with the base type - as its single argument. For instance:

- -
-<simpleType name="object">
-  <restriction base="base">
-    ...
-  </restriction>
-</simpleType>
-  
- -

is mapped to:

- -
-class object: public base
-{
-public:
-  object (const base&);
-  object (const object&);
-
-public:
-  object&
-  operator= (const object&);
-
-public:
-  virtual object*
-  _clone () const;
-};
-  
- - -

2.6.2 Mapping for Enumerations

- -

XML Schema restriction by enumeration is mapped to a C++ class - with semantics similar to C++ enum. Each XML Schema - enumeration element is mapped to a C++ enumerator with the - name derived from the value attribute and defined - in the class scope. In addition to the members - described in Section 2.6, "Mapping for Simple Types", - the resulting C++ class defines a public constructor that can be called - with one of the enumerators as its single argument, a public constructor - that can be called with enumeration's base value as its single - argument, a public assignment operator that can be used to assign the - value of one of the enumerators, and a public implicit conversion - operator to the underlying C++ enum type.

- -

Furthermore, for string-based enumeration types, the resulting C++ - class defines a public constructor with a single argument of type - const C* and a public constructor with a single - argument of type const std::basic_string<C>&. - For instance:

- -
-<simpleType name="color">
-  <restriction base="string">
-    <enumeration value="red"/>
-    <enumeration value="green"/>
-    <enumeration value="blue"/>
-  </restriction>
-</simpleType>
-  
- -

is mapped to:

- -
-class color: xml_schema::string
-{
-public:
-  enum value
-  {
-    red,
-    green,
-    blue
-  };
-
-public:
-  color (value);
-  color (const C*);
-  color (const std::basic_string<C>&);
-  color (const xml_schema::string&);
-  color (const color&);
-
-public:
-  color&
-  operator= (value);
-
-  color&
-  operator= (const color&);
-
-public:
-  virtual color*
-  _clone () const;
-
-public:
-  operator value () const;
-};
-  
- -

2.6.3 Mapping for Derivation by List

- -

XML Schema derivation by list is mapped to C++ public - inheritance from xml_schema::simple_type - (Section 2.5.3, "Mapping for - anySimpleType") and a suitable sequence type. - The list item type becomes the element type of the sequence. - In addition to the members described in Section 2.6, - "Mapping for Simple Types", the resulting C++ class defines - a public default constructor, a public constructor - with the first argument of type size_type and - the second argument of list item type that creates - a list object with the specified number of copies of the specified - element value, and a public constructor with the two arguments - of an input iterator type that creates a list object from an - iterator range. For instance: -

- -
-<simpleType name="int_list">
-  <list itemType="int"/>
-</simpleType>
-  
- -

is mapped to:

- -
-class int_list: public simple_type,
-                public sequence<int>
-{
-public:
-  int_list ();
-  int_list (size_type n, int x);
-
-  template <typename I>
-  int_list (const I& begin, const I& end);
-  int_list (const int_list&);
-
-public:
-  int_list&
-  operator= (const int_list&);
-
-public:
-  virtual int_list*
-  _clone () const;
-};
-  
- -

The sequence class template is defined in an - implementation-specific namespace. It conforms to the - sequence interface as defined by the ISO/ANSI Standard for - C++ (ISO/IEC 14882:1998, Section 23.1.1, "Sequences"). - Practically, this means that you can treat such a sequence - as if it was std::vector. One notable extension - to the standard interface that is available only for - sequences of non-fundamental C++ types is the addition of - the overloaded push_back and insert - member functions which instead of the constant reference - to the element type accept automatic pointer to the element - type. These functions assume ownership of the pointed to - object and resets the passed automatic pointer. -

- -

2.6.4 Mapping for Derivation by Union

- -

XML Schema derivation by union is mapped to C++ public - inheritance from xml_schema::simple_type - (Section 2.5.3, "Mapping for - anySimpleType") and std::basic_string<C>. - In addition to the members described in Section 2.6, - "Mapping for Simple Types", the resulting C++ class defines a - public constructor with a single argument of type const C* - and a public constructor with a single argument of type - const std::basic_string<C>&. For instance: -

- -
-<simpleType name="int_string_union">
-  <xsd:union memberTypes="xsd:int xsd:string"/>
-</simpleType>
-  
- -

is mapped to:

- -
-class int_string_union: public simple_type,
-                        public std::basic_string<C>
-{
-public:
-  int_string_union (const C*);
-  int_string_union (const std::basic_string<C>&);
-  int_string_union (const int_string_union&);
-
-public:
-  int_string_union&
-  operator= (const int_string_union&);
-
-public:
-  virtual int_string_union*
-  _clone () const;
-};
-  
- -

2.7 Mapping for Complex Types

- -

An XML Schema complex type is mapped to a C++ class with the same - name as the complex type. The class defines a public copy constructor, - a public copy assignment operator, and a public virtual - _clone function. The _clone function is - declared const, does not take any arguments, and returns - a pointer to a complete copy of the instance allocated in the free - store. The _clone function shall be used to make copies - when static type and dynamic type of the instance may differ (see - Section 2.11, "Mapping for xsi:type - and Substitution Groups").

- -

Additionally, the resulting C++ class - defines two public constructors that take an initializer for each - member of the complex type and all its base types that belongs to - the One cardinality class (see Section 2.8, "Mapping - for Local Elements and Attributes"). In the first constructor, - the arguments are passed as constant references and the newly created - instance is initialized with copies of the passed objects. In the - second constructor, arguments that are complex types (that is, - they themselves contain elements or attributes) are passed as - references to std::auto_ptr. In this case the newly - created instance is directly initialized with and assumes ownership - of the pointed to objects and the std::auto_ptr arguments - are reset to 0. For instance:

- -
-<complexType name="complex">
-  <sequence>
-    <element name="a" type="int"/>
-    <element name="b" type="string"/>
-  </sequence>
-</complexType>
-
-<complexType name="object">
-  <sequence>
-    <element name="s-one" type="boolean"/>
-    <element name="c-one" type="complex"/>
-    <element name="optional" type="int" minOccurs="0"/>
-    <element name="sequence" type="string" maxOccurs="unbounded"/>
-  </sequence>
-</complexType>
-  
- -

is mapped to:

- -
-class complex: xml_schema::type
-{
-public:
-  object (const int& a, const xml_schema::string& b);
-  object (const complex&);
-
-public:
-  object&
-  operator= (const complex&);
-
-public:
-  virtual complex*
-  _clone () const;
-
-  ...
-
-};
-
-class object: xml_schema::type
-{
-public:
-  object (const bool& s_one, const complex& c_one);
-  object (const bool& s_one, std::auto_ptr<complex>& c_one);
-  object (const object&);
-
-public:
-  object&
-  operator= (const object&);
-
-public:
-  virtual object*
-  _clone () const;
-
-  ...
-
-};
-  
- -

Notice that the generated complex class does not - have the second (std::auto_ptr) version of the - constructor since all its required members are of simple types.

- -

If an XML Schema complex type has an ultimate base which is an XML - Schema simple type then the resulting C++ class also defines a public - constructor that takes an initializer for the base type as well as - for each member of the complex type and all its base types that - belongs to the One cardinality class. For instance:

- -
-<complexType name="object">
-  <simpleContent>
-    <extension base="date">
-      <attribute name="lang" type="language" use="required"/>
-    </extension>
-  </simpleContent>
-</complexType>
-  
- -

is mapped to:

- -
-class object: xml_schema::string
-{
-public:
-  object (const xml_schema::language& lang);
-
-  object (const xml_schema::date& base,
-          const xml_schema::language& lang);
-
-  ...
-
-};
-  
- -

Furthermore, for string-based XML Schema complex types, the resulting C++ - class also defines two public constructors with the first arguments - of type const C* and std::basic_string<C>&, - respectively, followed by arguments for each member of the complex - type and all its base types that belongs to the One cardinality - class. For enumeration-based complex types the resulting C++ - class also defines a public constructor with the first arguments - of the underlying enum type followed by arguments for each member - of the complex type and all its base types that belongs to the One - cardinality class. For instance:

- -
-<simpleType name="color">
-  <restriction base="string">
-    <enumeration value="red"/>
-    <enumeration value="green"/>
-    <enumeration value="blue"/>
-  </restriction>
-</simpleType>
-
-<complexType name="object">
-  <simpleContent>
-    <extension base="color">
-      <attribute name="lang" type="language" use="required"/>
-    </extension>
-  </simpleContent>
-</complexType>
-  
- -

is mapped to:

- -
-class color: xml_schema::string
-{
-public:
-  enum value
-  {
-    red,
-    green,
-    blue
-  };
-
-public:
-  color (value);
-  color (const C*);
-  color (const std::basic_string<C>&);
-
-  ...
-
-};
-
-class object: color
-{
-public:
-  object (const color& base,
-          const xml_schema::language& lang);
-
-  object (const color::value& base,
-          const xml_schema::language& lang);
-
-  object (const C* base,
-          const xml_schema::language& lang);
-
-  object (const std::basic_string<C>& base,
-          const xml_schema::language& lang);
-
-  ...
-
-};
-  
- -

Additional constructors can be requested with the - --generate-default-ctor and - --generate-from-base-ctor options. See the - XSD - Compiler Command Line Manual for details.

- -

If an XML Schema complex type is not explicitly derived from any type, - the resulting C++ class is derived from xml_schema::type. - In cases where an XML Schema complex type is defined using derivation - by extension or restriction, the resulting C++ base class specification - depends on the type of derivation and is described in the subsequent - sections. -

- -

The mapping for elements and attributes that are defined in a complex - type is described in Section 2.8, "Mapping for Local - Elements and Attributes". -

- -

2.7.1 Mapping for Derivation by Extension

- -

XML Schema derivation by extension is mapped to C++ public - inheritance. The base type of the extension becomes the base - type for the resulting C++ class. -

- -

2.7.2 Mapping for Derivation by Restriction

- -

XML Schema derivation by restriction is mapped to C++ public - inheritance. The base type of the restriction becomes the base - type for the resulting C++ class. XML Schema elements and - attributes defined within restriction do not result in any - definitions in the resulting C++ class. Instead, corresponding - (unrestricted) definitions are inherited from the base class. - In the future versions of this mapping, such elements and - attributes may result in redefinitions of accessors and - modifiers to reflect their restricted semantics. -

- - - -

2.8 Mapping for Local Elements and Attributes

- -

XML Schema element and attribute definitions are called local - if they appear within a complex type definition, an element group - definition, or an attribute group definitions. -

- -

Local XML Schema element and attribute definitions have the same - C++ mapping. Therefore, in this section, local elements and - attributes are collectively called members. -

- -

While there are many different member cardinality combinations - (determined by the use attribute for attributes and - the minOccurs and maxOccurs attributes - for elements), the mapping divides all possible cardinality - combinations into three cardinality classes: -

- -
-
one
-
attributes: use == "required"
-
attributes: use == "optional" and has default or fixed value
-
elements: minOccurs == "1" and maxOccurs == "1"
- -
optional
-
attributes: use == "optional" and doesn't have default or fixed value
-
elements: minOccurs == "0" and maxOccurs == "1"
- -
sequence
-
elements: maxOccurs > "1"
-
- -

An optional attribute with a default or fixed value acquires this value - if the attribute hasn't been specified in an instance document (see - Appendix A, "Default and Fixed Values"). This - mapping places such optional attributes to the One cardinality - class.

- -

A member is mapped to a set of public type definitions - (typedefs) and a set of public accessor and modifier - functions. Type definitions have names derived from the member's - name. The accessor and modifier functions have the same name as the - member. For example: -

- -
-<complexType name="object">
-  <sequence>
-    <element name="member" type="string"/>
-  </sequence>
-</complexType>
-  
- -

is mapped to:

- -
-class object: xml_schema::type
-{
-public:
-  typedef xml_schema::string member_type;
-
-  const member_type&
-  member () const;
-
-  ...
-
-};
-  
- -

In addition, if a member has a default or fixed value, a static - accessor function is generated that returns this value. For - example:

- -
-<complexType name="object">
-  <attribute name="data" type="string" default="test"/>
-</complexType>
-  
- -

is mapped to:

- -
-class object: xml_schema::type
-{
-public:
-  typedef xml_schema::string data_type;
-
-  const data_type&
-  data () const;
-
-  static const data_type&
-  data_default_value ();
-
-  ...
-
-};
-  
- -

Names and semantics of type definitions for the member as well - as signatures of the accessor and modifier functions depend on - the member's cardinality class and are described in the following - sub-sections. -

- - -

2.8.1 Mapping for Members with the One Cardinality Class

- -

For the One cardinality class, the type definitions consist of - an alias for the member's type with the name created by appending - the _type suffix to the member's name. -

- -

The accessor functions come in constant and non-constant versions. - The constant accessor function returns a constant reference to the - member and can be used for read-only access. The non-constant - version returns an unrestricted reference to the member and can - be used for read-write access. -

- -

The first modifier function expects an argument of type reference to - constant of the member's type. It makes a deep copy of its argument. - Except for member's types that are mapped to fundamental C++ types, - the second modifier function is provided that expects an argument - of type automatic pointer to the member's type. It assumes ownership - of the pointed to object and resets the passed automatic pointer. - For instance:

- -
-<complexType name="object">
-  <sequence>
-    <element name="member" type="string"/>
-  </sequence>
-</complexType>
-  
- -

is mapped to:

- -
-class object: xml_schema::type
-{
-public:
-  // Type definitions.
-  //
-  typedef xml_schema::string member_type;
-
-  // Accessors.
-  //
-  const member_type&
-  member () const;
-
-  member_type&
-  member ();
-
-  // Modifiers.
-  //
-  void
-  member (const member_type&);
-
-  void
-  member (std::auto_ptr<member_type>);
-  ...
-
-};
-  
- -

In addition, if requested by specifying the --generate-detach - option and only for members of non-fundamental C++ types, the mapping - provides a detach function that returns an automatic pointer to the - member's type, for example:

- -
-class object: xml_schema::type
-{
-public:
-  ...
-
-  std::auto_ptr<member_type>
-  detach_member ();
-  ...
-
-};
-  
- -

This function detaches the value from the tree leaving the member - value uninitialized. Accessing such an uninitialized value prior to - re-initializing it results in undefined behavior.

- -

The following code shows how one could use this mapping:

- -
-void
-f (object& o)
-{
-  using xml_schema::string;
-
-  string s (o.member ());                // get
-  object::member_type& sr (o.member ()); // get
-
-  o.member ("hello");           // set, deep copy
-  o.member () = "hello";        // set, deep copy
-
-  std::auto_ptr<string> p (new string ("hello"));
-  o.member (p);                 // set, assumes ownership
-  p = o.detach_member ();       // detach, member is uninitialized
-  o.member (p);                 // re-attach
-}
-  
- - -

2.8.2 Mapping for Members with the Optional Cardinality Class

- -

For the Optional cardinality class, the type definitions consist of - an alias for the member's type with the name created by appending - the _type suffix to the member's name and an alias for - the container type with the name created by appending the - _optional suffix to the member's name. -

- -

Unlike accessor functions for the One cardinality class, accessor - functions for the Optional cardinality class return references to - corresponding containers rather than directly to members. The - accessor functions come in constant and non-constant versions. - The constant accessor function returns a constant reference to - the container and can be used for read-only access. The non-constant - version returns an unrestricted reference to the container - and can be used for read-write access. -

- -

The modifier functions are overloaded for the member's - type and the container type. The first modifier function - expects an argument of type reference to constant of the - member's type. It makes a deep copy of its argument. - Except for member's types that are mapped to fundamental C++ types, - the second modifier function is provided that expects an argument - of type automatic pointer to the member's type. It assumes ownership - of the pointed to object and resets the passed automatic pointer. - The last modifier function expects an argument of type reference - to constant of the container type. It makes a deep copy of its - argument. For instance: -

- -
-<complexType name="object">
-  <sequence>
-    <element name="member" type="string" minOccurs="0"/>
-  </sequence>
-</complexType>
-  
- -

is mapped to:

- -
-class object: xml_schema::type
-{
-public:
-  // Type definitions.
-  //
-  typedef xml_schema::string member_type;
-  typedef optional<member_type> member_optional;
-
-  // Accessors.
-  //
-  const member_optional&
-  member () const;
-
-  member_optional&
-  member ();
-
-  // Modifiers.
-  //
-  void
-  member (const member_type&);
-
-  void
-  member (std::auto_ptr<member_type>);
-
-  void
-  member (const member_optional&);
-
-  ...
-
-};
-  
- - -

The optional class template is defined in an - implementation-specific namespace and has the following - interface. The auto_ptr-based constructor - and modifier function are only available if the template - argument is not a fundamental C++ type. -

- -
-template <typename X>
-class optional
-{
-public:
-  optional ();
-
-  // Makes a deep copy.
-  //
-  explicit
-  optional (const X&);
-
-  // Assumes ownership.
-  //
-  explicit
-  optional (std::auto_ptr<X>);
-
-  optional (const optional&);
-
-public:
-  optional&
-  operator= (const X&);
-
-  optional&
-  operator= (const optional&);
-
-  // Pointer-like interface.
-  //
-public:
-  const X*
-  operator-> () const;
-
-  X*
-  operator-> ();
-
-  const X&
-  operator* () const;
-
-  X&
-  operator* ();
-
-  typedef void (optional::*bool_convertible) ();
-  operator bool_convertible () const;
-
-  // Get/set interface.
-  //
-public:
-  bool
-  present () const;
-
-  const X&
-  get () const;
-
-  X&
-  get ();
-
-  // Makes a deep copy.
-  //
-  void
-  set (const X&);
-
-  // Assumes ownership.
-  //
-  void
-  set (std::auto_ptr<X>);
-
-  // Detach and return the contained value.
-  //
-  std::auto_ptr<X>
-  detach ();
-
-  void
-  reset ();
-};
-
-template <typename X>
-bool
-operator== (const optional<X>&, const optional<X>&);
-
-template <typename X>
-bool
-operator!= (const optional<X>&, const optional<X>&);
-
-template <typename X>
-bool
-operator< (const optional<X>&, const optional<X>&);
-
-template <typename X>
-bool
-operator> (const optional<X>&, const optional<X>&);
-
-template <typename X>
-bool
-operator<= (const optional<X>&, const optional<X>&);
-
-template <typename X>
-bool
-operator>= (const optional<X>&, const optional<X>&);
-  
- - -

The following code shows how one could use this mapping:

- -
-void
-f (object& o)
-{
-  using xml_schema::string;
-
-  if (o.member ().present ())       // test
-  {
-    string& s (o.member ().get ()); // get
-    o.member ("hello");             // set, deep copy
-    o.member ().set ("hello");      // set, deep copy
-    o.member ().reset ();           // reset
-  }
-
-  // Same as above but using pointer notation:
-  //
-  if (o.member ())                  // test
-  {
-    string& s (*o.member ());       // get
-    o.member ("hello");             // set, deep copy
-    *o.member () = "hello";         // set, deep copy
-    o.member ().reset ();           // reset
-  }
-
-  std::auto_ptr<string> p (new string ("hello"));
-  o.member (p);                     // set, assumes ownership
-
-  p = new string ("hello");
-  o.member ().set (p);              // set, assumes ownership
-
-  p = o.member ().detach ();        // detach, member is reset
-  o.member ().set (p);              // re-attach
-}
-  
- - -

2.8.3 Mapping for Members with the Sequence Cardinality Class

- -

For the Sequence cardinality class, the type definitions consist of an - alias for the member's type with the name created by appending - the _type suffix to the member's name, an alias of - the container type with the name created by appending the - _sequence suffix to the member's name, an alias of - the iterator type with the name created by appending the - _iterator suffix to the member's name, and an alias - of the constant iterator type with the name created by appending the - _const_iterator suffix to the member's name. -

- -

The accessor functions come in constant and non-constant versions. - The constant accessor function returns a constant reference to the - container and can be used for read-only access. The non-constant - version returns an unrestricted reference to the container and can - be used for read-write access. -

- -

The modifier function expects an argument of type reference to - constant of the container type. The modifier function - makes a deep copy of its argument. For instance: -

- - -
-<complexType name="object">
-  <sequence>
-    <element name="member" type="string" minOccurs="unbounded"/>
-  </sequence>
-</complexType>
-  
- -

is mapped to:

- -
-class object: xml_schema::type
-{
-public:
-  // Type definitions.
-  //
-  typedef xml_schema::string member_type;
-  typedef sequence<member_type> member_sequence;
-  typedef member_sequence::iterator member_iterator;
-  typedef member_sequence::const_iterator member_const_iterator;
-
-  // Accessors.
-  //
-  const member_sequence&
-  member () const;
-
-  member_sequence&
-  member ();
-
-  // Modifier.
-  //
-  void
-  member (const member_sequence&);
-
-  ...
-
-};
-  
- -

The sequence class template is defined in an - implementation-specific namespace. It conforms to the - sequence interface as defined by the ISO/ANSI Standard for - C++ (ISO/IEC 14882:1998, Section 23.1.1, "Sequences"). - Practically, this means that you can treat such a sequence - as if it was std::vector. Two notable extensions - to the standard interface that are available only for - sequences of non-fundamental C++ types are the addition of - the overloaded push_back and insert - as well as the detach_back and detach - member functions. The additional push_back and - insert functions accept an automatic pointer to the - element type instead of the constant reference. They assume - ownership of the pointed to object and resets the passed - automatic pointer. The detach_back and - detach functions detach the element - value from the sequence container and, by default, remove - the element from the sequence. These additional functions - have the following signatures:

- -
-template <typename X>
-class sequence
-{
-public:
-  ...
-
-  void
-  push_back (std::auto_ptr<X>)
-
-  iterator
-  insert (iterator position, std::auto_ptr<X>)
-
-  std::auto_ptr<X>
-  detach_back (bool pop = true);
-
-  iterator
-  detach (iterator position,
-          std::auto_ptr<X>& result,
-          bool erase = true)
-
-  ...
-}
-  
- -

The following code shows how one could use this mapping:

- -
-void
-f (object& o)
-{
-  using xml_schema::string;
-
-  object::member_sequence& s (o.member ());
-
-  // Iteration.
-  //
-  for (object::member_iterator i (s.begin ()); i != s.end (); ++i)
-  {
-    string& value (*i);
-  }
-
-  // Modification.
-  //
-  s.push_back ("hello");  // deep copy
-
-  std::auto_ptr<string> p (new string ("hello"));
-  s.push_back (p);        // assumes ownership
-  p = s.detach_back ();   // detach and pop
-  s.push_back (p);        // re-append
-
-  // Setting a new container.
-  //
-  object::member_sequence n;
-  n.push_back ("one");
-  n.push_back ("two");
-  o.member (n);           // deep copy
-}
-  
- -

2.9 Mapping for Global Elements

- -

An XML Schema element definition is called global if it appears - directly under the schema element. - A global element is a valid root of an instance document. By - default, a global element is mapped to a set of overloaded - parsing and, optionally, serialization functions with the - same name as the element. It is also possible to generate types - for root elements instead of parsing and serialization functions. - This is primarily useful to distinguish object models with the - same root type but with different root elements. See - Section 2.9.1, "Element Types" for details. - It is also possible to request the generation of an element map - which allows uniform parsing and serialization of multiple root - elements. See Section 2.9.2, "Element Map" - for details. -

- -

The parsing functions read XML instance documents and return - corresponding object models. Their signatures - have the following pattern (type denotes - element's type and name denotes element's - name): -

- -
-std::auto_ptr<type>
-name (....);
-  
- -

The process of parsing, including the exact signatures of the parsing - functions, is the subject of Chapter 3, "Parsing". -

- -

The serialization functions write object models - back to XML instance documents. Their signatures - have the following pattern: -

- -
-void
-name (<stream type>&, const type&, ....);
-  
- -

The process of serialization, including the exact signatures of the - serialization functions, is the subject of Chapter 4, - "Serialization". -

- - -

2.9.1 Element Types

- -

The generation of element types is requested with the - --generate-element-map option. With this option - each global element is mapped to a C++ class with the - same name as the element. Such a class is derived from - xml_schema::element_type and contains the same set - of type definitions, constructors, and member function as would a - type containing a single element with the One cardinality class - named "value". In addition, the element type also - contains a set of member functions for accessing the element - name and namespace as well as its value in a uniform manner. - For example:

- -
-<complexType name="type">
-  <sequence>
-    ...
-  </sequence>
-</complexType>
-
-<element name="root" type="type"/>
-  
- -

is mapped to:

- -
-class type
-{
-  ...
-};
-
-class root: public xml_schema::element_type
-{
-public:
-  // Element value.
-  //
-  typedef type value_type;
-
-  const value_type&
-  value () const;
-
-  value_type&
-  value ();
-
-  void
-  value (const value_type&);
-
-  void
-  value (std::auto_ptr<value_type>);
-
-  // Constructors.
-  //
-  root (const value_type&);
-
-  root (std::auto_ptr<value_type>);
-
-  root (const xercesc::DOMElement&, xml_schema::flags = 0);
-
-  root (const root&, xml_schema::flags = 0);
-
-  virtual root*
-  _clone (xml_schema::flags = 0) const;
-
-  // Element name and namespace.
-  //
-  static const std::string&
-  name ();
-
-  static const std::string&
-  namespace_ ();
-
-  virtual const std::string&
-  _name () const;
-
-  virtual const std::string&
-  _namespace () const;
-
-  // Element value as xml_schema::type.
-  //
-  virtual const xml_schema::type*
-  _value () const;
-
-  virtual xml_schema::type*
-  _value ();
-};
-
-void
-operator<< (xercesc::DOMElement&, const root&);
-  
- -

The xml_schema::element_type class is a common - base type for all element types and is defined as follows:

- -
-namespace xml_schema
-{
-  class element_type
-  {
-  public:
-    virtual
-    ~element_type ();
-
-    virtual element_type*
-    _clone (flags f = 0) const = 0;
-
-    virtual const std::basic_string<C>&
-    _name () const = 0;
-
-    virtual const std::basic_string<C>&
-    _namespace () const = 0;
-
-    virtual xml_schema::type*
-    _value () = 0;
-
-    virtual const xml_schema::type*
-    _value () const = 0;
-  };
-}
-  
- -

The _value() member function returns a pointer to - the element value or 0 if the element is of a fundamental C++ - type and therefore is not derived from xml_schema::type. -

- -

Unlike parsing and serialization functions, element types - are only capable of parsing and serializing from/to a - DOMElement object. This means that the application - will need to perform its own XML-to-DOM parsing and DOM-to-XML - serialization. The following section describes a mechanism - provided by the mapping to uniformly parse and serialize - multiple root elements.

- - -

2.9.2 Element Map

- -

When element types are generated for root elements it is also - possible to request the generation of an element map with the - --generate-element-map option. The element map - allows uniform parsing and serialization of multiple root - elements via the common xml_schema::element_type - base type. The xml_schema::element_map class is - defined as follows:

- -
-namespace xml_schema
-{
-  class element_map
-  {
-  public:
-    static std::auto_ptr<xml_schema::element_type>
-    parse (const xercesc::DOMElement&, flags = 0);
-
-    static void
-    serialize (xercesc::DOMElement&, const element_type&);
-  };
-}
-  
- -

The parse() function creates the corresponding - element type object based on the element name and namespace - and returns it as a pointer to xml_schema::element_type. - The serialize() function serializes the passed element - object to DOMElement. Note that in case of - serialize(), the DOMElement object - should have the correct name and namespace. If no element type is - available for an element, both functions throw the - xml_schema::no_element_info exception:

- -
-struct no_element_info: virtual exception
-{
-  no_element_info (const std::basic_string<C>& element_name,
-                   const std::basic_string<C>& element_namespace);
-
-  const std::basic_string<C>&
-  element_name () const;
-
-  const std::basic_string<C>&
-  element_namespace () const;
-
-  virtual const char*
-  what () const throw ();
-};
-  
- -

The application can discover the actual type of the element - object returned by parse() either using - dynamic_cast or by comparing element names and - namespaces. The following code fragments illustrate how the - element map can be used:

- -
-// Parsing.
-//
-DOMElement& e = ... // Parse XML to DOM.
-
-auto_ptr<xml_schema::element_type> r (
-  xml_schema::element_map::parse (e));
-
-if (root1 r1 = dynamic_cast<root1*> (r.get ()))
-{
-  ...
-}
-else if (r->_name == root2::name () &&
-         r->_namespace () == root2::namespace_ ())
-{
-  root2& r2 (static_cast<root2&> (*r));
-
-  ...
-}
-  
- -
-// Serialization.
-//
-xml_schema::element_type& r = ...
-
-string name (r._name ());
-string ns (r._namespace ());
-
-DOMDocument& doc = ... // Create a new DOMDocument with name and ns.
-DOMElement& e (*doc->getDocumentElement ());
-
-xml_schema::element_map::serialize (e, r);
-
-// Serialize DOMDocument to XML.
-  
- - - -

2.10 Mapping for Global Attributes

- -

An XML Schema attribute definition is called global if it appears - directly under the schema element. A global - attribute does not have any mapping. -

- - - -

2.11 Mapping for xsi:type and Substitution - Groups

- -

The mapping provides optional support for the XML Schema polymorphism - features (xsi:type and substitution groups) which can - be requested with the --generate-polymorphic option. - When used, the dynamic type of a member may be different from - its static type. Consider the following schema definition and - instance document: -

- -
-<!-- test.xsd -->
-<schema>
-  <complexType name="base">
-    <attribute name="text" type="string"/>
-  </complexType>
-
-  <complexType name="derived">
-    <complexContent>
-      <extension base="base">
-        <attribute name="extra-text" type="string"/>
-      </extension>
-    </complexContent>
-  </complexType>
-
-  <complexType name="root_type">
-    <sequence>
-      <element name="item" type="base" maxOccurs="unbounded"/>
-    </sequence>
-  </complexType>
-
-  <element name="root" type="root_type"/>
-</schema>
-
-<!-- test.xml -->
-<root xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
-  <item text="hello"/>
-  <item text="hello" extra-text="world" xsi:type="derived"/>
-</root>
-  
- -

In the resulting object model, the container for - the root::item member will have two elements: - the first element's type will be base while - the second element's (dynamic) type will be - derived. This can be discovered using the - dynamic_cast operator as shown in the following - example: -

- -
-void
-f (root& r)
-{
-  for (root::item_const_iterator i (r.item ().begin ());
-       i != r.item ().end ()
-       ++i)
-  {
-    if (derived* d = dynamic_cast<derived*> (&(*i)))
-    {
-      // derived
-    }
-    else
-    {
-      // base
-    }
-  }
-}
-  
- -

The _clone virtual function should be used instead of - copy constructors to make copies of members that might use - polymorphism: -

- -
-void
-f (root& r)
-{
-  for (root::item_const_iterator i (r.item ().begin ());
-       i != r.item ().end ()
-       ++i)
-  {
-    std::auto_ptr<base> c (i->_clone ());
-  }
-}
-  
- -

The mapping can often automatically determine which types are - polymorphic based on the substitution group declarations. However, - if your XML vocabulary is not using substitution groups or if - substitution groups are defined in a separate schema, then you will - need to use the --polymorphic-type option to specify - which types are polymorphic. When using this option you only need - to specify the root of a polymorphic type hierarchy and the mapping - will assume that all the derived types are also polymorphic. - Also note that you need to specify this option when compiling every - schema file that references the polymorphic type. Consider the following - two schemas as an example:

- -
-<!-- base.xsd -->
-<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
-
-  <xs:complexType name="base">
-    <xs:sequence>
-      <xs:element name="b" type="xs:int"/>
-    </xs:sequence>
-  </xs:complexType>
-
-  <!-- substitution group root -->
-  <xs:element name="base" type="base"/>
-
-</xs:schema>
-  
- -
-<!-- derived.xsd -->
-<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
-
-  <include schemaLocation="base.xsd"/>
-
-  <xs:complexType name="derived">
-    <xs:complexContent>
-      <xs:extension base="base">
-        <xs:sequence>
-          <xs:element name="d" type="xs:string"/>
-        </xs:sequence>
-      </xs:extension>
-    </xs:complexContent>
-  </xs:complexType>
-
-  <xs:element name="derived" type="derived" substitutionGroup="base"/>
-
-</xs:schema>
-  
- -

In this example we need to specify "--polymorphic-type base" - when compiling both schemas because the substitution group is declared - in a schema other than the one defining type base.

- -

You can also indicate that all types should be treated as polymorphic - with the --polymorphic-type-all. However, this may result - in slower generated code with a greater footprint.

- - - - - -

2.12 Mapping for any and anyAttribute

- -

For the XML Schema any and anyAttribute - wildcards an optional mapping can be requested with the - --generate-wildcard option. The mapping represents - the content matched by wildcards as DOM fragments. Because the - DOM API is used to access such content, the Xerces-C++ runtime - should be initialized by the application prior to parsing and - should remain initialized for the lifetime of objects with - the wildcard content. For more information on the Xerces-C++ - runtime initialization see Section 3.1, - "Initializing the Xerces-C++ Runtime". -

- -

The mapping for any is similar to the mapping for - local elements (see Section 2.8, "Mapping for Local - Elements and Attributes") except that the type used in the - wildcard mapping is xercesc::DOMElement. As with local - elements, the mapping divides all possible cardinality combinations - into three cardinality classes: one, optional, and - sequence. -

- -

The mapping for anyAttribute represents the attributes - matched by this wildcard as a set of xercesc::DOMAttr - objects with a key being the attribute's name and namespace.

- -

Similar to local elements and attributes, the any and - anyAttribute wildcards are mapped to a set of public type - definitions (typedefs) and a set of public accessor and modifier - functions. Type definitions have names derived from "any" - for the any wildcard and "any_attribute" - for the anyAttribute wildcard. The accessor and modifier - functions are named "any" for the any wildcard - and "any_attribute" for the anyAttribute - wildcard. Subsequent wildcards in the same type have escaped names - such as "any1" or "any_attribute1". -

- -

Because Xerces-C++ DOM nodes always belong to a DOMDocument, - each type with a wildcard has an associated DOMDocument - object. The reference to this object can be obtained using the accessor - function called dom_document. The access to the document - object from the application code may be necessary to create or modify - the wildcard content. For example: -

- -
-<complexType name="object">
-  <sequence>
-    <any namespace="##other"/>
-  </sequence>
-  <anyAttribute namespace="##other"/>
-</complexType>
-  
- -

is mapped to:

- -
-class object: xml_schema::type
-{
-public:
-  // any
-  //
-  const xercesc::DOMElement&
-  any () const;
-
-  void
-  any (const xercesc::DOMElement&);
-
-  ...
-
-  // any_attribute
-  //
-  typedef attribute_set any_attribute_set;
-  typedef any_attribute_set::iterator any_attribute_iterator;
-  typedef any_attribute_set::const_iterator any_attribute_const_iterator;
-
-  const any_attribute_set&
-  any_attribute () const;
-
-  any_attribute_set&
-  any_attribute ();
-
-  ...
-
-  // DOMDocument object for wildcard content.
-  //
-  const xercesc::DOMDocument&
-  dom_document () const;
-
-  xercesc::DOMDocument&
-  dom_document ();
-
-  ...
-};
-  
- - -

Names and semantics of type definitions for the wildcards as well - as signatures of the accessor and modifier functions depend on the - wildcard type as well as the cardinality class for the any - wildcard. They are described in the following sub-sections. -

- - -

2.12.1 Mapping for any with the One Cardinality Class

- -

For any with the One cardinality class, - there are no type definitions. The accessor functions come in - constant and non-constant versions. The constant accessor function - returns a constant reference to xercesc::DOMElement and - can be used for read-only access. The non-constant version returns - an unrestricted reference to xercesc::DOMElement and can - be used for read-write access. -

- -

The first modifier function expects an argument of type reference - to constant xercesc::DOMElement and makes a deep copy - of its argument. The second modifier function expects an argument of - type pointer to xercesc::DOMElement. This modifier - function assumes ownership of its argument and expects the element - object to be created using the DOM document associated with this - instance. For example: -

- -
-<complexType name="object">
-  <sequence>
-    <any namespace="##other"/>
-  </sequence>
-</complexType>
-  
- -

is mapped to:

- -
-class object: xml_schema::type
-{
-public:
-  // Accessors.
-  //
-  const xercesc::DOMElement&
-  any () const;
-
-  xercesc::DOMElement&
-  any ();
-
-  // Modifiers.
-  //
-  void
-  any (const xercesc::DOMElement&);
-
-  void
-  any (xercesc::DOMElement*);
-
-  ...
-
-};
-  
- - -

The following code shows how one could use this mapping:

- -
-void
-f (object& o, const xercesc::DOMElement& e)
-{
-  using namespace xercesc;
-
-  DOMElement& e1 (o.any ());             // get
-  o.any (e)                              // set, deep copy
-  DOMDocument& doc (o.dom_document ());
-  o.any (doc.createElement (...));       // set, assumes ownership
-}
-  
- -

2.12.2 Mapping for any with the Optional Cardinality Class

- -

For any with the Optional cardinality class, the type - definitions consist of an alias for the container type with name - any_optional (or any1_optional, etc., for - subsequent wildcards in the type definition). -

- -

Unlike accessor functions for the One cardinality class, accessor - functions for the Optional cardinality class return references to - corresponding containers rather than directly to DOMElement. - The accessor functions come in constant and non-constant versions. - The constant accessor function returns a constant reference to - the container and can be used for read-only access. The non-constant - version returns an unrestricted reference to the container - and can be used for read-write access. -

- -

The modifier functions are overloaded for xercesc::DOMElement - and the container type. The first modifier function expects an argument of - type reference to constant xercesc::DOMElement and - makes a deep copy of its argument. The second modifier function - expects an argument of type pointer to xercesc::DOMElement. - This modifier function assumes ownership of its argument and expects - the element object to be created using the DOM document associated - with this instance. The third modifier function expects an argument - of type reference to constant of the container type and makes a - deep copy of its argument. For instance: -

- -
-<complexType name="object">
-  <sequence>
-    <any namespace="##other" minOccurs="0"/>
-  </sequence>
-</complexType>
-  
- -

is mapped to:

- -
-class object: xml_schema::type
-{
-public:
-  // Type definitions.
-  //
-  typedef element_optional any_optional;
-
-  // Accessors.
-  //
-  const any_optional&
-  any () const;
-
-  any_optional&
-  any ();
-
-  // Modifiers.
-  //
-  void
-  any (const xercesc::DOMElement&);
-
-  void
-  any (xercesc::DOMElement*);
-
-  void
-  any (const any_optional&);
-
-  ...
-
-};
-  
- - -

The element_optional container is a - specialization of the optional class template described - in Section 2.8.2, "Mapping for Members with the Optional - Cardinality Class". Its interface is presented below: -

- -
-class element_optional
-{
-public:
-  explicit
-  element_optional (xercesc::DOMDocument&);
-
-  // Makes a deep copy.
-  //
-  element_optional (const xercesc::DOMElement&, xercesc::DOMDocument&);
-
-  // Assumes ownership.
-  //
-  element_optional (xercesc::DOMElement*, xercesc::DOMDocument&);
-
-  element_optional (const element_optional&, xercesc::DOMDocument&);
-
-public:
-  element_optional&
-  operator= (const xercesc::DOMElement&);
-
-  element_optional&
-  operator= (const element_optional&);
-
-  // Pointer-like interface.
-  //
-public:
-  const xercesc::DOMElement*
-  operator-> () const;
-
-  xercesc::DOMElement*
-  operator-> ();
-
-  const xercesc::DOMElement&
-  operator* () const;
-
-  xercesc::DOMElement&
-  operator* ();
-
-  typedef void (element_optional::*bool_convertible) ();
-  operator bool_convertible () const;
-
-  // Get/set interface.
-  //
-public:
-  bool
-  present () const;
-
-  const xercesc::DOMElement&
-  get () const;
-
-  xercesc::DOMElement&
-  get ();
-
-  // Makes a deep copy.
-  //
-  void
-  set (const xercesc::DOMElement&);
-
-  // Assumes ownership.
-  //
-  void
-  set (xercesc::DOMElement*);
-
-  void
-  reset ();
-};
-
-bool
-operator== (const element_optional&, const element_optional&);
-
-bool
-operator!= (const element_optional&, const element_optional&);
-  
- - -

The following code shows how one could use this mapping:

- -
-void
-f (object& o, const xercesc::DOMElement& e)
-{
-  using namespace xercesc;
-
-  DOMDocument& doc (o.dom_document ());
-
-  if (o.any ().present ())                  // test
-  {
-    DOMElement& e1 (o.any ().get ());       // get
-    o.any ().set (e);                       // set, deep copy
-    o.any ().set (doc.createElement (...)); // set, assumes ownership
-    o.any ().reset ();                      // reset
-  }
-
-  // Same as above but using pointer notation:
-  //
-  if (o.member ())                          // test
-  {
-    DOMElement& e1 (*o.any ());             // get
-    o.any (e);                              // set, deep copy
-    o.any (doc.createElement (...));        // set, assumes ownership
-    o.any ().reset ();                      // reset
-  }
-}
-  
- - - -

2.12.3 Mapping for any with the Sequence Cardinality Class

- -

For any with the Sequence cardinality class, the type - definitions consist of an alias of the container type with name - any_sequence (or any1_sequence, etc., for - subsequent wildcards in the type definition), an alias of the iterator - type with name any_iterator (or any1_iterator, - etc., for subsequent wildcards in the type definition), and an alias - of the constant iterator type with name any_const_iterator - (or any1_const_iterator, etc., for subsequent wildcards - in the type definition). -

- -

The accessor functions come in constant and non-constant versions. - The constant accessor function returns a constant reference to the - container and can be used for read-only access. The non-constant - version returns an unrestricted reference to the container and can - be used for read-write access. -

- -

The modifier function expects an argument of type reference to - constant of the container type. The modifier function makes - a deep copy of its argument. For instance: -

- - -
-<complexType name="object">
-  <sequence>
-    <any namespace="##other" minOccurs="unbounded"/>
-  </sequence>
-</complexType>
-  
- -

is mapped to:

- -
-class object: xml_schema::type
-{
-public:
-  // Type definitions.
-  //
-  typedef element_sequence any_sequence;
-  typedef any_sequence::iterator any_iterator;
-  typedef any_sequence::const_iterator any_const_iterator;
-
-  // Accessors.
-  //
-  const any_sequence&
-  any () const;
-
-  any_sequence&
-  any ();
-
-  // Modifier.
-  //
-  void
-  any (const any_sequence&);
-
-  ...
-
-};
-  
- -

The element_sequence container is a - specialization of the sequence class template described - in Section 2.8.3, "Mapping for Members with the - Sequence Cardinality Class". Its interface is similar to - the sequence interface as defined by the ISO/ANSI Standard for - C++ (ISO/IEC 14882:1998, Section 23.1.1, "Sequences") and is - presented below: -

- -
-class element_sequence
-{
-public:
-  typedef xercesc::DOMElement        value_type;
-  typedef xercesc::DOMElement*       pointer;
-  typedef const xercesc::DOMElement* const_pointer;
-  typedef xercesc::DOMElement&       reference;
-  typedef const xercesc::DOMElement& const_reference;
-
-  typedef <implementation-defined>   iterator;
-  typedef <implementation-defined>   const_iterator;
-  typedef <implementation-defined>   reverse_iterator;
-  typedef <implementation-defined>   const_reverse_iterator;
-
-  typedef <implementation-defined>   size_type;
-  typedef <implementation-defined>   difference_type;
-  typedef <implementation-defined>   allocator_type;
-
-public:
-  explicit
-  element_sequence (xercesc::DOMDocument&);
-
-  // DOMElement cannot be default-constructed.
-  //
-  // explicit
-  // element_sequence (size_type n);
-
-  element_sequence (size_type n,
-                    const xercesc::DOMElement&,
-                    xercesc::DOMDocument&);
-
-  template <typename I>
-  element_sequence (const I& begin,
-                    const I& end,
-                    xercesc::DOMDocument&);
-
-  element_sequence (const element_sequence&, xercesc::DOMDocument&);
-
-  element_sequence&
-  operator= (const element_sequence&);
-
-public:
-  void
-  assign (size_type n, const xercesc::DOMElement&);
-
-  template <typename I>
-  void
-  assign (const I& begin, const I& end);
-
-public:
-  // This version of resize can only be used to shrink the
-  // sequence because DOMElement cannot be default-constructed.
-  //
-  void
-  resize (size_type);
-
-  void
-  resize (size_type, const xercesc::DOMElement&);
-
-public:
-  size_type
-  size () const;
-
-  size_type
-  max_size () const;
-
-  size_type
-  capacity () const;
-
-  bool
-  empty () const;
-
-  void
-  reserve (size_type);
-
-  void
-  clear ();
-
-public:
-  const_iterator
-  begin () const;
-
-  const_iterator
-  end () const;
-
-  iterator
-  begin ();
-
-  iterator
-  end ();
-
-  const_reverse_iterator
-  rbegin () const;
-
-  const_reverse_iterator
-  rend () const
-
-    reverse_iterator
-  rbegin ();
-
-  reverse_iterator
-  rend ();
-
-public:
-  xercesc::DOMElement&
-  operator[] (size_type);
-
-  const xercesc::DOMElement&
-  operator[] (size_type) const;
-
-  xercesc::DOMElement&
-  at (size_type);
-
-  const xercesc::DOMElement&
-  at (size_type) const;
-
-  xercesc::DOMElement&
-  front ();
-
-  const xercesc::DOMElement&
-  front () const;
-
-  xercesc::DOMElement&
-  back ();
-
-  const xercesc::DOMElement&
-  back () const;
-
-public:
-  // Makes a deep copy.
-  //
-  void
-  push_back (const xercesc::DOMElement&);
-
-  // Assumes ownership.
-  //
-  void
-  push_back (xercesc::DOMElement*);
-
-  void
-  pop_back ();
-
-  // Makes a deep copy.
-  //
-  iterator
-  insert (iterator position, const xercesc::DOMElement&);
-
-  // Assumes ownership.
-  //
-  iterator
-  insert (iterator position, xercesc::DOMElement*);
-
-  void
-  insert (iterator position, size_type n, const xercesc::DOMElement&);
-
-  template <typename I>
-  void
-  insert (iterator position, const I& begin, const I& end);
-
-  iterator
-  erase (iterator position);
-
-  iterator
-  erase (iterator begin, iterator end);
-
-public:
-  // Note that the DOMDocument object of the two sequences being
-  // swapped should be the same.
-  //
-  void
-  swap (sequence& x);
-};
-
-inline bool
-operator== (const element_sequence&, const element_sequence&);
-
-inline bool
-operator!= (const element_sequence&, const element_sequence&);
-  
- - -

The following code shows how one could use this mapping:

- -
-void
-f (object& o, const xercesc::DOMElement& e)
-{
-  using namespace xercesc;
-
-  object::any_sequence& s (o.any ());
-
-  // Iteration.
-  //
-  for (object::any_iterator i (s.begin ()); i != s.end (); ++i)
-  {
-    DOMElement& e (*i);
-  }
-
-  // Modification.
-  //
-  s.push_back (e);                       // deep copy
-  DOMDocument& doc (o.dom_document ());
-  s.push_back (doc.createElement (...)); // assumes ownership
-}
-  
- - -

2.12.4 Mapping for anyAttribute

- -

For anyAttribute the type definitions consist of an alias - of the container type with name any_attribute_set - (or any1_attribute_set, etc., for subsequent wildcards - in the type definition), an alias of the iterator type with name - any_attribute_iterator (or any1_attribute_iterator, - etc., for subsequent wildcards in the type definition), and an alias - of the constant iterator type with name any_attribute_const_iterator - (or any1_attribute_const_iterator, etc., for subsequent - wildcards in the type definition). -

- -

The accessor functions come in constant and non-constant versions. - The constant accessor function returns a constant reference to the - container and can be used for read-only access. The non-constant - version returns an unrestricted reference to the container and can - be used for read-write access. -

- -

The modifier function expects an argument of type reference to - constant of the container type. The modifier function makes - a deep copy of its argument. For instance: -

- - -
-<complexType name="object">
-  <sequence>
-    ...
-  </sequence>
-  <anyAttribute namespace="##other"/>
-</complexType>
-  
- -

is mapped to:

- -
-class object: xml_schema::type
-{
-public:
-  // Type definitions.
-  //
-  typedef attribute_set any_attribute_set;
-  typedef any_attribute_set::iterator any_attribute_iterator;
-  typedef any_attribute_set::const_iterator any_attribute_const_iterator;
-
-  // Accessors.
-  //
-  const any_attribute_set&
-  any_attribute () const;
-
-  any_attribute_set&
-  any_attribute ();
-
-  // Modifier.
-  //
-  void
-  any_attribute (const any_attribute_set&);
-
-  ...
-
-};
-  
- -

The attribute_set class is an associative container - similar to the std::set class template as defined by - the ISO/ANSI Standard for C++ (ISO/IEC 14882:1998, Section 23.3.3, - "Class template set") with the key being the attribute's name - and namespace. Unlike std::set, attribute_set - allows searching using names and namespaces instead of - xercesc::DOMAttr objects. It is defined in an - implementation-specific namespace and its interface is presented - below: -

- -
-class attribute_set
-{
-public:
-  typedef xercesc::DOMAttr         key_type;
-  typedef xercesc::DOMAttr         value_type;
-  typedef xercesc::DOMAttr*        pointer;
-  typedef const xercesc::DOMAttr*  const_pointer;
-  typedef xercesc::DOMAttr&        reference;
-  typedef const xercesc::DOMAttr&  const_reference;
-
-  typedef <implementation-defined> iterator;
-  typedef <implementation-defined> const_iterator;
-  typedef <implementation-defined> reverse_iterator;
-  typedef <implementation-defined> const_reverse_iterator;
-
-  typedef <implementation-defined> size_type;
-  typedef <implementation-defined> difference_type;
-  typedef <implementation-defined> allocator_type;
-
-public:
-  attribute_set (xercesc::DOMDocument&);
-
-  template <typename I>
-  attribute_set (const I& begin, const I& end, xercesc::DOMDocument&);
-
-  attribute_set (const attribute_set&, xercesc::DOMDocument&);
-
-  attribute_set&
-  operator= (const attribute_set&);
-
-public:
-  const_iterator
-  begin () const;
-
-  const_iterator
-  end () const;
-
-  iterator
-  begin ();
-
-  iterator
-  end ();
-
-  const_reverse_iterator
-  rbegin () const;
-
-  const_reverse_iterator
-  rend () const;
-
-  reverse_iterator
-  rbegin ();
-
-  reverse_iterator
-  rend ();
-
-public:
-  size_type
-  size () const;
-
-  size_type
-  max_size () const;
-
-  bool
-  empty () const;
-
-  void
-  clear ();
-
-public:
-  // Makes a deep copy.
-  //
-  std::pair<iterator, bool>
-  insert (const xercesc::DOMAttr&);
-
-  // Assumes ownership.
-  //
-  std::pair<iterator, bool>
-  insert (xercesc::DOMAttr*);
-
-  // Makes a deep copy.
-  //
-  iterator
-  insert (iterator position, const xercesc::DOMAttr&);
-
-  // Assumes ownership.
-  //
-  iterator
-  insert (iterator position, xercesc::DOMAttr*);
-
-  template <typename I>
-  void
-  insert (const I& begin, const I& end);
-
-public:
-  void
-  erase (iterator position);
-
-  size_type
-  erase (const std::basic_string<C>& name);
-
-  size_type
-  erase (const std::basic_string<C>& namespace_,
-         const std::basic_string<C>& name);
-
-  size_type
-  erase (const XMLCh* name);
-
-  size_type
-  erase (const XMLCh* namespace_, const XMLCh* name);
-
-  void
-  erase (iterator begin, iterator end);
-
-public:
-  size_type
-  count (const std::basic_string<C>& name) const;
-
-  size_type
-  count (const std::basic_string<C>& namespace_,
-         const std::basic_string<C>& name) const;
-
-  size_type
-  count (const XMLCh* name) const;
-
-  size_type
-  count (const XMLCh* namespace_, const XMLCh* name) const;
-
-  iterator
-  find (const std::basic_string<C>& name);
-
-  iterator
-  find (const std::basic_string<C>& namespace_,
-        const std::basic_string<C>& name);
-
-  iterator
-  find (const XMLCh* name);
-
-  iterator
-  find (const XMLCh* namespace_, const XMLCh* name);
-
-  const_iterator
-  find (const std::basic_string<C>& name) const;
-
-  const_iterator
-  find (const std::basic_string<C>& namespace_,
-        const std::basic_string<C>& name) const;
-
-  const_iterator
-  find (const XMLCh* name) const;
-
-  const_iterator
-  find (const XMLCh* namespace_, const XMLCh* name) const;
-
-public:
-  // Note that the DOMDocument object of the two sets being
-  // swapped should be the same.
-  //
-  void
-  swap (attribute_set&);
-};
-
-bool
-operator== (const attribute_set&, const attribute_set&);
-
-bool
-operator!= (const attribute_set&, const attribute_set&);
-  
- -

The following code shows how one could use this mapping:

- -
-void
-f (object& o, const xercesc::DOMAttr& a)
-{
-  using namespace xercesc;
-
-  object::any_attribute_set& s (o.any_attribute ());
-
-  // Iteration.
-  //
-  for (object::any_attribute_iterator i (s.begin ()); i != s.end (); ++i)
-  {
-    DOMAttr& a (*i);
-  }
-
-  // Modification.
-  //
-  s.insert (a);                         // deep copy
-  DOMDocument& doc (o.dom_document ());
-  s.insert (doc.createAttribute (...)); // assumes ownership
-
-  // Searching.
-  //
-  object::any_attribute_iterator i (s.find ("name"));
-  i = s.find ("http://www.w3.org/XML/1998/namespace", "lang");
-}
-  
- - - -

2.13 Mapping for Mixed Content Models

- -

XML Schema mixed content models do not have a direct C++ mapping. - Instead, information in XML instance documents, corresponding to - a mixed content model, can be accessed using generic DOM nodes that - can optionally be associated with object model nodes. See - Section 5.1, "DOM Association" for more - information about keeping association with DOM nodes. -

- - - - - -

3 Parsing

- -

This chapter covers various aspects of parsing XML instance - documents in order to obtain corresponding tree-like object - model. -

- -

Each global XML Schema element in the form:

- -
-<element name="name" type="type"/>
-  
- -

is mapped to 14 overloaded C++ functions in the form:

- -
-// Read from a URI or a local file.
-//
-
-std::auto_ptr<type>
-name (const std::basic_string<C>& uri,
-      xml_schema::flags = 0,
-      const xml_schema::properties& = xml_schema::properties ());
-
-std::auto_ptr<type>
-name (const std::basic_string<C>& uri,
-      xml_schema::error_handler&,
-      xml_schema::flags = 0,
-      const xml_schema::properties& = xml_schema::properties ());
-
-std::auto_ptr<type>
-name (const std::basic_string<C>& uri,
-      xercesc::DOMErrorHandler&,
-      xml_schema::flags = 0,
-      const xml_schema::properties& = xml_schema::properties ());
-
-
-// Read from std::istream.
-//
-
-std::auto_ptr<type>
-name (std::istream&,
-      xml_schema::flags = 0,
-      const xml_schema::properties& = xml_schema::properties ());
-
-std::auto_ptr<type>
-name (std::istream&,
-      xml_schema::error_handler&,
-      xml_schema::flags = 0,
-      const xml_schema::properties& = xml_schema::properties ());
-
-std::auto_ptr<type>
-name (std::istream&,
-      xercesc::DOMErrorHandler&,
-      xml_schema::flags = 0,
-      const xml_schema::properties& = xml_schema::properties ());
-
-
-std::auto_ptr<type>
-name (std::istream&,
-      const std::basic_string<C>& id,
-      xml_schema::flags = 0,
-      const xml_schema::properties& = xml_schema::properties ());
-
-std::auto_ptr<type>
-name (std::istream&,
-      const std::basic_string<C>& id,
-      xml_schema::error_handler&,
-      xml_schema::flags = 0,
-      const xml_schema::properties& = xml_schema::properties ());
-
-std::auto_ptr<type>
-name (std::istream&,
-      const std::basic_string<C>& id,
-      xercesc::DOMErrorHandler&,
-      xml_schema::flags = 0,
-      const xml_schema::properties& = xml_schema::properties ());
-
-
-// Read from InputSource.
-//
-
-std::auto_ptr<type>
-name (xercesc::InputSource&,
-      xml_schema::flags = 0,
-      const xml_schema::properties& = xml_schema::properties ());
-
-std::auto_ptr<type>
-name (xercesc::InputSource&,
-      xml_schema::error_handler&,
-      xml_schema::flags = 0,
-      const xml_schema::properties& = xml_schema::properties ());
-
-std::auto_ptr<type>
-name (xercesc::InputSource&,
-      xercesc::DOMErrorHandler&,
-      xml_schema::flags = 0,
-      const xml_schema::properties& = xml_schema::properties ());
-
-
-// Read from DOM.
-//
-
-std::auto_ptr<type>
-name (const xercesc::DOMDocument&,
-      xml_schema::flags = 0,
-      const xml_schema::properties& = xml_schema::properties ());
-
-std::auto_ptr<type>
-name (xml_schema::dom::auto_ptr<xercesc::DOMDocument>&,
-      xml_schema::flags = 0,
-      const xml_schema::properties& = xml_schema::properties ());
-  
- -

You can choose between reading an XML instance from a local file, - URI, std::istream, xercesc::InputSource, - or a pre-parsed DOM instance in the form of - xercesc::DOMDocument. Each of these parsing functions - is discussed in more detail in the following sections. -

- -

3.1 Initializing the Xerces-C++ Runtime

- -

Some parsing functions expect you to initialize the Xerces-C++ - runtime while others initialize and terminate it as part of their - work. The general rule is as follows: if a function has any arguments - or return a value that is an instance of a Xerces-C++ type, then - this function expects you to initialize the Xerces-C++ runtime. - Otherwise, the function initializes and terminates the runtime for - you. Note that it is legal to have nested calls to the Xerces-C++ - initialize and terminate functions as long as the calls are balanced. -

- -

You can instruct parsing functions that initialize and terminate - the runtime not to do so by passing the - xml_schema::flags::dont_initialize flag (see - Section 3.2, "Flags and Properties"). -

- - -

3.2 Flags and Properties

- -

Parsing flags and properties are the last two arguments of every - parsing function. They allow you to fine-tune the process of - instance validation and parsing. Both arguments are optional. -

- - -

The following flags are recognized by the parsing functions:

- -
-
xml_schema::flags::keep_dom
-
Keep association between DOM nodes and the resulting - object model nodes. For more information about DOM association - refer to Section 5.1, "DOM Association".
- -
xml_schema::flags::own_dom
-
Assume ownership of the DOM document passed. This flag only - makes sense together with the keep_dom flag in - the call to the parsing function with the - xml_schema::dom::auto_ptr<DOMDocument> - argument.
- -
xml_schema::flags::dont_validate
-
Do not validate instance documents against schemas.
- -
xml_schema::flags::dont_initialize
-
Do not initialize the Xerces-C++ runtime.
-
- -

You can pass several flags by combining them using the bit-wise OR - operator. For example:

- -
-using xml_schema::flags;
-
-std::auto_ptr<type> r (
-  name ("test.xml", flags::keep_dom | flags::dont_validate));
-  
- -

By default, validation of instance documents is turned on even - though parsers generated by XSD do not assume instance - documents are valid. They include a number of checks that prevent - construction of inconsistent object models. This, - however, does not mean that an instance document that was - successfully parsed by the XSD-generated parsers is - valid per the corresponding schema. If an instance document is not - "valid enough" for the generated parsers to construct consistent - object model, one of the exceptions defined in - xml_schema namespace is thrown (see - Section 3.3, "Error Handling"). -

- -

For more information on the Xerces-C++ runtime initialization - refer to Section 3.1, "Initializing the Xerces-C++ - Runtime". -

- -

The xml_schema::properties class allows you to - programmatically specify schema locations to be used instead - of those specified with the xsi::schemaLocation - and xsi::noNamespaceSchemaLocation attributes - in instance documents. The interface of the properties - class is presented below: -

- -
-class properties
-{
-public:
-  void
-  schema_location (const std::basic_string<C>& namespace_,
-                   const std::basic_string<C>& location);
-  void
-  no_namespace_schema_location (const std::basic_string<C>& location);
-};
-  
- -

Note that all locations are relative to an instance document unless - they are URIs. For example, if you want to use a local file as your - schema, then you will need to pass - file:///absolute/path/to/your/schema as the location - argument. -

- -

3.3 Error Handling

- -

As discussed in Section 2.2, "Error Handling", - the mapping uses the C++ exception handling mechanism as its primary - way of reporting error conditions. However, to handle recoverable - parsing and validation errors and warnings, a callback interface maybe - preferred by the application.

- -

To better understand error handling and reporting strategies employed - by the parsing functions, it is useful to know that the - transformation of an XML instance document to a statically-typed - tree happens in two stages. The first stage, performed by Xerces-C++, - consists of parsing an XML document into a DOM instance. For short, - we will call this stage the XML-DOM stage. Validation, if not disabled, - happens during this stage. The second stage, - performed by the generated parsers, consist of parsing the DOM - instance into the statically-typed tree. We will call this stage - the DOM-Tree stage. Additional checks are performed during this - stage in order to prevent construction of inconsistent tree which - could otherwise happen when validation is disabled, for example.

- -

All parsing functions except the one that operates on a DOM instance - come in overloaded triples. The first function in such a triple - reports error conditions exclusively by throwing exceptions. It - accumulates all the parsing and validation errors of the XML-DOM - stage and throws them in a single instance of the - xml_schema::parsing exception (described below). - The second and the third functions in the triple use callback - interfaces to report parsing and validation errors and warnings. - The two callback interfaces are xml_schema::error_handler - and xercesc::DOMErrorHandler. For more information - on the xercesc::DOMErrorHandler interface refer to - the Xerces-C++ documentation. The xml_schema::error_handler - interface is presented below: -

- -
-class error_handler
-{
-public:
-  struct severity
-  {
-    enum value
-    {
-      warning,
-      error,
-      fatal
-    };
-  };
-
-  virtual bool
-  handle (const std::basic_string<C>& id,
-          unsigned long line,
-          unsigned long column,
-          severity,
-          const std::basic_string<C>& message) = 0;
-
-  virtual
-  ~error_handler ();
-};
-  
- -

The id argument of the error_handler::handle - function identifies the resource being parsed (e.g., a file name or - URI). -

- -

By returning true from the handle function - you instruct the parser to recover and continue parsing. Returning - false results in termination of the parsing process. - An error with the fatal severity level results in - termination of the parsing process no matter what is returned from - the handle function. It is safe to throw an exception - from the handle function. -

- -

The DOM-Tree stage reports error conditions exclusively by throwing - exceptions. Individual exceptions thrown by the parsing functions - are described in the following sub-sections. -

- - -

3.3.1 xml_schema::parsing

- -
-struct severity
-{
-  enum value
-  {
-    warning,
-    error
-  };
-
-  severity (value);
-  operator value () const;
-};
-
-struct error
-{
-  error (severity,
-         const std::basic_string<C>& id,
-         unsigned long line,
-         unsigned long column,
-         const std::basic_string<C>& message);
-
-  severity
-  severity () const;
-
-  const std::basic_string<C>&
-  id () const;
-
-  unsigned long
-  line () const;
-
-  unsigned long
-  column () const;
-
-  const std::basic_string<C>&
-  message () const;
-};
-
-std::basic_ostream<C>&
-operator<< (std::basic_ostream<C>&, const error&);
-
-struct diagnostics: std::vector<error>
-{
-};
-
-std::basic_ostream<C>&
-operator<< (std::basic_ostream<C>&, const diagnostics&);
-
-struct parsing: virtual exception
-{
-  parsing ();
-  parsing (const diagnostics&);
-
-  const diagnostics&
-  diagnostics () const;
-
-  virtual const char*
-  what () const throw ();
-};
-  
- -

The xml_schema::parsing exception is thrown if there - were parsing or validation errors reported during the XML-DOM stage. - If no callback interface was provided to the parsing function, the - exception contains a list of errors and warnings accessible using - the diagnostics function. The usual conditions when - this exception is thrown include malformed XML instances and, if - validation is turned on, invalid instance documents. -

- -

3.3.2 xml_schema::expected_element

- -
-struct expected_element: virtual exception
-{
-  expected_element (const std::basic_string<C>& name,
-                    const std::basic_string<C>& namespace_);
-
-
-  const std::basic_string<C>&
-  name () const;
-
-  const std::basic_string<C>&
-  namespace_ () const;
-
-
-  virtual const char*
-  what () const throw ();
-};
-  
- -

The xml_schema::expected_element exception is thrown - when an expected element is not encountered by the DOM-Tree stage. - The name and namespace of the expected element can be obtained using - the name and namespace_ functions respectively. -

- - -

3.3.3 xml_schema::unexpected_element

- -
-struct unexpected_element: virtual exception
-{
-  unexpected_element (const std::basic_string<C>& encountered_name,
-                      const std::basic_string<C>& encountered_namespace,
-                      const std::basic_string<C>& expected_name,
-                      const std::basic_string<C>& expected_namespace)
-
-
-  const std::basic_string<C>&
-  encountered_name () const;
-
-  const std::basic_string<C>&
-  encountered_namespace () const;
-
-
-  const std::basic_string<C>&
-  expected_name () const;
-
-  const std::basic_string<C>&
-  expected_namespace () const;
-
-
-  virtual const char*
-  what () const throw ();
-};
-  
- -

The xml_schema::unexpected_element exception is thrown - when an unexpected element is encountered by the DOM-Tree stage. - The name and namespace of the encountered element can be obtained - using the encountered_name and - encountered_namespace functions respectively. If an - element was expected instead of the encountered one, its name - and namespace can be obtained using the expected_name and - expected_namespace functions respectively. Otherwise - these functions return empty strings. -

- -

3.3.4 xml_schema::expected_attribute

- -
-struct expected_attribute: virtual exception
-{
-  expected_attribute (const std::basic_string<C>& name,
-                      const std::basic_string<C>& namespace_);
-
-
-  const std::basic_string<C>&
-  name () const;
-
-  const std::basic_string<C>&
-  namespace_ () const;
-
-
-  virtual const char*
-  what () const throw ();
-};
-  
- -

The xml_schema::expected_attribute exception is thrown - when an expected attribute is not encountered by the DOM-Tree stage. - The name and namespace of the expected attribute can be obtained using - the name and namespace_ functions respectively. -

- - -

3.3.5 xml_schema::unexpected_enumerator

- -
-struct unexpected_enumerator: virtual exception
-{
-  unexpected_enumerator (const std::basic_string<C>& enumerator);
-
-  const std::basic_string<C>&
-  enumerator () const;
-
-  virtual const char*
-  what () const throw ();
-};
-  
- -

The xml_schema::unexpected_enumerator exception is thrown - when an unexpected enumerator is encountered by the DOM-Tree stage. - The enumerator can be obtained using the enumerator - functions. -

- -

3.3.6 xml_schema::expected_text_content

- -
-struct expected_text_content: virtual exception
-{
-  virtual const char*
-  what () const throw ();
-};
-  
- -

The xml_schema::expected_text_content exception is thrown - when a content other than text is encountered and the text content was - expected by the DOM-Tree stage. -

- -

3.3.7 xml_schema::no_type_info

- -
-struct no_type_info: virtual exception
-{
-  no_type_info (const std::basic_string<C>& type_name,
-                const std::basic_string<C>& type_namespace);
-
-  const std::basic_string<C>&
-  type_name () const;
-
-  const std::basic_string<C>&
-  type_namespace () const;
-
-  virtual const char*
-  what () const throw ();
-};
-  
- -

The xml_schema::no_type_info exception is thrown - when there is no type information associated with a type specified - by the xsi:type attribute. This exception is thrown - by the DOM-Tree stage. The name and namespace of the type in question - can be obtained using the type_name and - type_namespace functions respectively. Usually, catching - this exception means that you haven't linked the code generated - from the schema defining the type in question with your application - or this schema has been compiled without the - --generate-polymorphic option. -

- - -

3.3.8 xml_schema::not_derived

- -
-struct not_derived: virtual exception
-{
-  not_derived (const std::basic_string<C>& base_type_name,
-               const std::basic_string<C>& base_type_namespace,
-               const std::basic_string<C>& derived_type_name,
-               const std::basic_string<C>& derived_type_namespace);
-
-  const std::basic_string<C>&
-  base_type_name () const;
-
-  const std::basic_string<C>&
-  base_type_namespace () const;
-
-
-  const std::basic_string<C>&
-  derived_type_name () const;
-
-  const std::basic_string<C>&
-  derived_type_namespace () const;
-
-  virtual const char*
-  what () const throw ();
-};
-  
- -

The xml_schema::not_derived exception is thrown - when a type specified by the xsi:type attribute is - not derived from the expected base type. This exception is thrown - by the DOM-Tree stage. The name and namespace of the expected - base type can be obtained using the base_type_name and - base_type_namespace functions respectively. The name - and namespace of the offending type can be obtained using the - derived_type_name and - derived_type_namespace functions respectively. -

- -

3.3.9 xml_schema::no_prefix_mapping

- -
-struct no_prefix_mapping: virtual exception
-{
-  no_prefix_mapping (const std::basic_string<C>& prefix);
-
-  const std::basic_string<C>&
-  prefix () const;
-
-  virtual const char*
-  what () const throw ();
-};
-  
- -

The xml_schema::no_prefix_mapping exception is thrown - during the DOM-Tree stage if a namespace prefix is encountered for - which a prefix-namespace mapping hasn't been provided. The namespace - prefix in question can be obtained using the prefix - function. -

- -

3.4 Reading from a Local File or URI

- -

Using a local file or URI is the simplest way to parse an XML instance. - For example:

- -
-using std::auto_ptr;
-
-auto_ptr<type> r1 (name ("test.xml"));
-auto_ptr<type> r2 (name ("http://www.codesynthesis.com/test.xml"));
-  
- -

3.5 Reading from std::istream

- -

When using an std::istream instance, you may also - pass an optional resource id. This id is used to identify the - resource (for example in error messages) as well as to resolve - relative paths. For instance:

- -
-using std::auto_ptr;
-
-{
-  std::ifstream ifs ("test.xml");
-  auto_ptr<type> r (name (ifs, "test.xml"));
-}
-
-{
-  std::string str ("..."); // Some XML fragment.
-  std::istringstream iss (str);
-  auto_ptr<type> r (name (iss));
-}
-  
- -

3.6 Reading from xercesc::InputSource

- -

Reading from a xercesc::InputSource instance - is similar to the std::istream case except - the resource id is maintained by the InputSource - object. For instance:

- -
-xercesc::StdInInputSource is;
-std::auto_ptr<type> r (name (is));
-  
- -

3.7 Reading from DOM

- -

Reading from a xercesc::DOMDocument instance allows - you to setup a custom XML-DOM stage. Things like DOM - parser reuse, schema pre-parsing, and schema caching can be achieved - with this approach. For more information on how to obtain DOM - representation from an XML instance refer to the Xerces-C++ - documentation. In addition, the - C++/Tree Mapping - FAQ shows how to parse an XML instance to a Xerces-C++ - DOM document using the XSD runtime utilities. -

- -

The last parsing function is useful when you would like to perform - your own XML-to-DOM parsing and associate the resulting DOM document - with the object model nodes. If parsing is successeful, the - automatic DOMDocument pointer is reset and the - resulting object model assumes ownership of the DOM document - passed. For example:

- -
-xml_schema::dom::auto_ptr<xercesc::DOMDocument> doc = ...
-
-std::auto_ptr<type> r (
-  name (doc, xml_schema::flags::keep_dom | xml_schema::flags::own_dom));
-
-// At this point doc is reset to 0.
-  
- - - -

4 Serialization

- -

This chapter covers various aspects of serializing a - tree-like object model to DOM or XML. - In this regard, serialization is complimentary to the reverse - process of parsing a DOM or XML instance into an object model - which is discussed in Chapter 3, - "Parsing". Note that the generation of the serialization code - is optional and should be explicitly requested with the - --generate-serialization option. See the - XSD - Compiler Command Line Manual for more information. -

- -

Each global XML Schema element in the form: -

- - -
-<xsd:element name="name" type="type"/>
-  
- -

is mapped to 8 overloaded C++ functions in the form:

- -
-// Serialize to std::ostream.
-//
-void
-name (std::ostream&,
-      const type&,
-      const xml_schema::namespace_fomap& =
-        xml_schema::namespace_infomap (),
-      const std::basic_string<C>& encoding = "UTF-8",
-      xml_schema::flags = 0);
-
-void
-name (std::ostream&,
-      const type&,
-      xml_schema::error_handler&,
-      const xml_schema::namespace_infomap& =
-        xml_schema::namespace_infomap (),
-      const std::basic_string<C>& encoding = "UTF-8",
-      xml_schema::flags = 0);
-
-void
-name (std::ostream&,
-      const type&,
-      xercesc::DOMErrorHandler&,
-      const xml_schema::namespace_infomap& =
-        xml_schema::namespace_infomap (),
-      const std::basic_string<C>& encoding = "UTF-8",
-      xml_schema::flags = 0);
-
-
-// Serialize to XMLFormatTarget.
-//
-void
-name (xercesc::XMLFormatTarget&,
-      const type&,
-      const xml_schema::namespace_infomap& =
-        xml_schema::namespace_infomap (),
-      const std::basic_string<C>& encoding = "UTF-8",
-      xml_schema::flags = 0);
-
-void
-name (xercesc::XMLFormatTarget&,
-      const type&,
-      xml_schema::error_handler&,
-      const xml_schema::namespace_infomap& =
-        xml_schema::namespace_infomap (),
-      const std::basic_string<C>& encoding = "UTF-8",
-      xml_schema::flags = 0);
-
-void
-name (xercesc::XMLFormatTarget&,
-      const type&,
-      xercesc::DOMErrorHandler&,
-      const xml_schema::namespace_infomap& =
-        xml_schema::namespace_infomap (),
-      const std::basic_string<C>& encoding = "UTF-8",
-      xml_schema::flags = 0);
-
-
-// Serialize to DOM.
-//
-xml_schema::dom::auto_ptr<xercesc::DOMDocument>
-name (const type&,
-      const xml_schema::namespace_infomap&
-        xml_schema::namespace_infomap (),
-      xml_schema::flags = 0);
-
-void
-name (xercesc::DOMDocument&,
-      const type&,
-      xml_schema::flags = 0);
-  
- -

You can choose between writing XML to std::ostream or - xercesc::XMLFormatTarget and creating a DOM instance - in the form of xercesc::DOMDocument. Serialization - to ostream or XMLFormatTarget requires a - considerably less work while serialization to DOM provides - for greater flexibility. Each of these serialization functions - is discussed in more detail in the following sections. -

- - -

4.1 Initializing the Xerces-C++ Runtime

- -

Some serialization functions expect you to initialize the Xerces-C++ - runtime while others initialize and terminate it as part of their - work. The general rule is as follows: if a function has any arguments - or return a value that is an instance of a Xerces-C++ type, then - this function expects you to initialize the Xerces-C++ runtime. - Otherwise, the function initializes and terminates the runtime for - you. Note that it is legal to have nested calls to the Xerces-C++ - initialize and terminate functions as long as the calls are balanced. -

- -

You can instruct serialization functions that initialize and terminate - the runtime not to do so by passing the - xml_schema::flags::dont_initialize flag (see - Section 4.3, "Flags"). -

- -

4.2 Namespace Infomap and Character Encoding

- -

When a document being serialized uses XML namespaces, custom - prefix-namespace associations can to be established. If custom - prefix-namespace mapping is not provided then generic prefixes - (p1, p2, etc) are automatically assigned - to namespaces as needed. Also, if - you would like the resulting instance document to contain the - schemaLocation or noNamespaceSchemaLocation - attributes, you will need to provide namespace-schema associations. - The xml_schema::namespace_infomap class is used - to capture this information:

- -
-struct namespace_info
-{
-  namespace_info ();
-  namespace_info (const std::basic_string<C>& name,
-                  const std::basic_string<C>& schema);
-
-  std::basic_string<C> name;
-  std::basic_string<C> schema;
-};
-
-// Map of namespace prefix to namespace_info.
-//
-struct namespace_infomap: public std::map<std::basic_string<C>,
-                                          namespace_info>
-{
-};
-  
- -

Consider the following associations as an example:

- -
-xml_schema::namespace_infomap map;
-
-map["t"].name = "http://www.codesynthesis.com/test";
-map["t"].schema = "test.xsd";
-  
- -

This map, if passed to one of the serialization functions, - could result in the following XML fragment:

- -
-<?xml version="1.0" ?>
-<t:name xmlns:t="http://www.codesynthesis.com/test"
-        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-        xsi:schemaLocation="http://www.codesynthesis.com/test test.xsd">
-  
- -

As you can see, the serialization function automatically added namespace - mapping for the xsi prefix. You can change this by - providing your own prefix:

- -
-xml_schema::namespace_infomap map;
-
-map["xsn"].name = "http://www.w3.org/2001/XMLSchema-instance";
-
-map["t"].name = "http://www.codesynthesis.com/test";
-map["t"].schema = "test.xsd";
-  
- -

This could result in the following XML fragment:

- -
-<?xml version="1.0" ?>
-<t:name xmlns:t="http://www.codesynthesis.com/test"
-        xmlns:xsn="http://www.w3.org/2001/XMLSchema-instance"
-        xsn:schemaLocation="http://www.codesynthesis.com/test test.xsd">
-  
- -

To specify the location of a schema without a namespace you can use - an empty prefix as in the example below:

- -
-xml_schema::namespace_infomap map;
-
-map[""].schema = "test.xsd";
-  
- -

This would result in the following XML fragment:

- -
-<?xml version="1.0" ?>
-<name xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-      xsi:noNamespaceSchemaLocation="test.xsd">
-  
- -

To make a particular namespace default you can use an empty - prefix, for example:

- -
-xml_schema::namespace_infomap map;
-
-map[""].name = "http://www.codesynthesis.com/test";
-map[""].schema = "test.xsd";
-  
- -

This could result in the following XML fragment:

- -
-<?xml version="1.0" ?>
-<name xmlns="http://www.codesynthesis.com/test"
-      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-      xsi:schemaLocation="http://www.codesynthesis.com/test test.xsd">
-  
- - -

Another bit of information that you can pass to the serialization - functions is the character encoding method that you would like to use. - Common values for this argument are "US-ASCII", - "ISO8859-1", "UTF-8", - "UTF-16BE", "UTF-16LE", - "UCS-4BE", and "UCS-4LE". The default - encoding is "UTF-8". For more information on - encoding methods see the - "Character - Encoding" article from Wikipedia. -

- -

4.3 Flags

- -

Serialization flags are the last argument of every serialization - function. They allow you to fine-tune the process of serialization. - The flags argument is optional. -

- - -

The following flags are recognized by the serialization - functions:

- -
-
xml_schema::flags::dont_initialize
-
Do not initialize the Xerces-C++ runtime.
- -
xml_schema::flags::dont_pretty_print
-
Do not add extra spaces or new lines that make the resulting XML - slightly bigger but easier to read.
- -
xml_schema::flags::no_xml_declaration
-
Do not write XML declaration (<?xml ... ?>).
-
- -

You can pass several flags by combining them using the bit-wise OR - operator. For example:

- -
-std::auto_ptr<type> r = ...
-std::ofstream ofs ("test.xml");
-xml_schema::namespace_infomap map;
-name (ofs,
-      *r,
-      map,
-      "UTF-8",
-      xml_schema::flags::no_xml_declaration |
-      xml_schema::flags::dont_pretty_print);
-  
- -

For more information on the Xerces-C++ runtime initialization - refer to Section 4.1, "Initializing the Xerces-C++ - Runtime". -

- -

4.4 Error Handling

- -

As with the parsing functions (see Section 3.3, - "Error Handling"), to better understand error handling and - reporting strategies employed by the serialization functions, it - is useful to know that the transformation of a statically-typed - tree to an XML instance document happens in two stages. The first - stage, performed by the generated code, consist of building a DOM - instance from the statically-typed tree . For short, we will call - this stage the Tree-DOM stage. The second stage, performed by - Xerces-C++, consists of serializing the DOM instance into the XML - document. We will call this stage the DOM-XML stage. -

- -

All serialization functions except the two that serialize into - a DOM instance come in overloaded triples. The first function - in such a triple reports error conditions exclusively by throwing - exceptions. It accumulates all the serialization errors of the - DOM-XML stage and throws them in a single instance of the - xml_schema::serialization exception (described below). - The second and the third functions in the triple use callback - interfaces to report serialization errors and warnings. The two - callback interfaces are xml_schema::error_handler and - xercesc::DOMErrorHandler. The - xml_schema::error_handler interface is described in - Section 3.3, "Error Handling". For more information - on the xercesc::DOMErrorHandler interface refer to the - Xerces-C++ documentation. -

- -

The Tree-DOM stage reports error conditions exclusively by throwing - exceptions. Individual exceptions thrown by the serialization functions - are described in the following sub-sections. -

- -

4.4.1 xml_schema::serialization

- -
-struct serialization: virtual exception
-{
-  serialization ();
-  serialization (const diagnostics&);
-
-  const diagnostics&
-  diagnostics () const;
-
-  virtual const char*
-  what () const throw ();
-};
-  
- -

The xml_schema::diagnostics class is described in - Section 3.3.1, "xml_schema::parsing". - The xml_schema::serialization exception is thrown if - there were serialization errors reported during the DOM-XML stage. - If no callback interface was provided to the serialization function, - the exception contains a list of errors and warnings accessible using - the diagnostics function. -

- - -

4.4.2 xml_schema::unexpected_element

- -

The xml_schema::unexpected_element exception is - described in Section 3.3.3, - "xml_schema::unexpected_element". It is thrown - by the serialization functions during the Tree-DOM stage if the - root element name of the provided DOM instance does not match with - the name of the element this serialization function is for. -

- -

4.4.3 xml_schema::no_type_info

- -

The xml_schema::no_type_info exception is - described in Section 3.3.7, - "xml_schema::no_type_info". It is thrown - by the serialization functions during the Tree-DOM stage when there - is no type information associated with a dynamic type of an - element. Usually, catching this exception means that you haven't - linked the code generated from the schema defining the type in - question with your application or this schema has been compiled - without the --generate-polymorphic option. -

- -

4.5 Serializing to std::ostream

- -

In order to serialize to std::ostream you will need - an object model, an output stream and, optionally, a namespace - infomap. For instance:

- -
-// Obtain the object model.
-//
-std::auto_ptr<type> r = ...
-
-// Prepare namespace mapping and schema location information.
-//
-xml_schema::namespace_infomap map;
-
-map["t"].name = "http://www.codesynthesis.com/test";
-map["t"].schema = "test.xsd";
-
-// Write it out.
-//
-name (std::cout, *r, map);
-  
- -

Note that the output stream is treated as a binary stream. This - becomes important when you use a character encoding that is wider - than 8-bit char, for instance UTF-16 or UCS-4. For - example, things will most likely break if you try to serialize - to std::ostringstream with UTF-16 or UCS-4 as an - encoding. This is due to the special value, - '\0', that will most likely occur as part of such - serialization and it won't have the special meaning assumed by - std::ostringstream. -

- - -

4.6 Serializing to xercesc::XMLFormatTarget

- -

Serializing to an xercesc::XMLFormatTarget instance - is similar the std::ostream case. For instance: -

- -
-using std::auto_ptr;
-
-// Obtain the object model.
-//
-auto_ptr<type> r = ...
-
-// Prepare namespace mapping and schema location information.
-//
-xml_schema::namespace_infomap map;
-
-map["t"].name = "http://www.codesynthesis.com/test";
-map["t"].schema = "test.xsd";
-
-using namespace xercesc;
-
-XMLPlatformUtils::Initialize ();
-
-{
-  // Choose a target.
-  //
-  auto_ptr<XMLFormatTarget> ft;
-
-  if (argc != 2)
-  {
-    ft = auto_ptr<XMLFormatTarget> (new StdOutFormatTarget ());
-  }
-  else
-  {
-    ft = auto_ptr<XMLFormatTarget> (
-      new LocalFileFormatTarget (argv[1]));
-  }
-
-  // Write it out.
-  //
-  name (*ft, *r, map);
-}
-
-XMLPlatformUtils::Terminate ();
-  
- -

Note that we had to initialize the Xerces-C++ runtime before we - could call this serialization function.

- -

4.7 Serializing to DOM

- -

The mapping provides two overloaded functions that implement - serialization to a DOM instance. The first creates a DOM instance - for you and the second serializes to an existing DOM instance. - While serializing to a new DOM instance is similar to serializing - to std::ostream or xercesc::XMLFormatTarget, - serializing to an existing DOM instance requires quite a bit of work - from your side. You will need to set all the custom namespace mapping - attributes as well as the schemaLocation and/or - noNamespaceSchemaLocation attributes. The following - listing should give you an idea about what needs to be done: -

- -
-// Obtain the object model.
-//
-std::auto_ptr<type> r = ...
-
-using namespace xercesc;
-
-XMLPlatformUtils::Initialize ();
-
-{
-  // Create a DOM instance. Set custom namespace mapping and schema
-  // location attributes.
-  //
-  DOMDocument& doc = ...
-
-  // Serialize to DOM.
-  //
-  name (doc, *r);
-
-  // Serialize the DOM document to XML.
-  //
-  ...
-}
-
-XMLPlatformUtils::Terminate ();
-  
- -

For more information on how to create and serialize a DOM instance - refer to the Xerces-C++ documentation. In addition, the - C++/Tree Mapping - FAQ shows how to implement these operations using the XSD - runtime utilities. -

- -

5 Additional Functionality

- -

The C++/Tree mapping provides a number of optional features - that can be useful in certain situations. They are described - in the following sections.

- -

5.1 DOM Association

- -

Normally, after parsing is complete, the DOM document which - was used to extract the data is discarded. However, the parsing - functions can be instructed to preserve the DOM document - and create an association between the DOM nodes and object model - nodes. When there is an association between the DOM and - object model nodes, you can obtain the corresponding DOM element - or attribute node from an object model node as well as perform - the reverse transition: obtain the corresponding object model - from a DOM element or attribute node.

- -

Maintaining DOM association is normally useful when the application - needs access to XML constructs that are not preserved in the - object model, for example, text in the mixed content model. - Another useful aspect of DOM association is the ability of the - application to navigate the document tree using the generic DOM - interface (for example, with the help of an XPath processor) - and then move back to the statically-typed object model. Note - also that while you can change the underlying DOM document, - these changes are not reflected in the object model and will - be ignored during serialization. If you need to not only access - but also modify some aspects of XML that are not preserved in - the object model, then type customization with custom parsing - constructs and serialization operators should be used instead.

- -

To request DOM association you will need to pass the - xml_schema::flags::keep_dom flag to one of the - parsing functions (see Section 3.2, - "Flags and Properties" for more information). In this case the - DOM document is retained and will be released when the object model - is deleted. Note that since DOM nodes "out-live" the parsing function - call, you need to initialize the Xerces-C++ runtime before calling - one of the parsing functions with the keep_dom flag and - terminate it after the object model is destroyed (see - Section 3.1, "Initializing the Xerces-C++ Runtime"). - The DOM association is also maintained in complete copies of the - object model (that is, the DOM document is cloned and associations - are reestablished).

- -

To obtain the corresponding DOM node from an object model node - you will need to call the _node accessor function - which returns a pointer to DOMNode. You can then query - this DOM node's type and cast it to either DOMAttr* - or DOMElement*. To obtain the corresponding object - model node from a DOM node, the DOM user data API is used. The - xml_schema::dom::tree_node_key variable contains - the key for object model nodes. The following schema and code - fragment show how to navigate from DOM to object model nodes - and in the opposite direction:

- -
-<complexType name="object">
-  <sequence>
-    <element name="a" type="string"/>
-  </sequence>
-</complexType>
-
-<element name="root" type="object"/>
-  
- -
-using namespace xercesc;
-
-XMLPlatformUtils::Initialize ();
-
-{
-  // Parse XML to object model.
-  //
-  std::auto_ptr<type> r = root (
-    "root.xml",
-     xml_schema::flags::keep_dom |
-     xml_schema::flags::dont_initialize);
-
-  DOMNode* n = root->_node ();
-  assert (n->getNodeType () != DOMNode::ELEMENT_NODE);
-  DOMElement* re = static_cast<DOMElement*> (n);
-
-  // Get the 'a' element. Note that it is not necessarily the
-  // first child node of 'root' since there could be whitespace
-  // nodes before it.
-  //
-  DOMElement* ae;
-
-  for (n = re->getFirstChild (); n != 0; n = n->getNextSibling ())
-  {
-    if (n->getNodeType () == DOMNode::ELEMENT_NODE)
-    {
-      ae = static_cast<DOMElement*> (n);
-      break;
-    }
-  }
-
-  // Get from the 'a' DOM element to xml_schema::string object model
-  // node.
-  //
-  xml_schema::type& t (
-    *reinterpret_cast<xml_schema::type*> (
-       ae->getUserData (xml_schema::dom::tree_node_key)));
-
-  xml_schema::string& a (dynamic_cast<xml_schema::string&> (t));
-}
-
-XMLPlatformUtils::Terminate ();
-  
- -

The 'mixed' example which can be found in the XSD distribution - shows how to handle the mixed content using DOM association.

- -

5.2 Binary Serialization

- -

Besides reading from and writing to XML, the C++/Tree mapping - also allows you to save the object model to and load it from a - number of predefined as well as custom data representation - formats. The predefined binary formats are CDR (Common Data - Representation) and XDR (eXternal Data Representation). A - custom format can easily be supported by providing - insertion and extraction operators for basic types.

- -

Binary serialization saves only the data without any meta - information or markup. As a result, saving to and loading - from a binary representation can be an order of magnitude - faster than parsing and serializing the same data in XML. - Furthermore, the resulting representation is normally several - times smaller than the equivalent XML representation. These - properties make binary serialization ideal for internal data - exchange and storage. A typical application that uses this - facility stores the data and communicates within the - system using a binary format and reads/writes the data - in XML when communicating with the outside world.

- -

In order to request the generation of insertion operators and - extraction constructors for a specific predefined or custom - data representation stream, you will need to use the - --generate-insertion and --generate-extraction - compiler options. See the - XSD - Compiler Command Line Manual for more information.

- -

Once the insertion operators and extraction constructors are - generated, you can use the xml_schema::istream - and xml_schema::ostream wrapper stream templates - to save the object model to and load it from a specific format. - The following code fragment shows how to do this using ACE - (Adaptive Communication Environment) CDR streams as an example:

- -
-<complexType name="object">
-  <sequence>
-    <element name="a" type="string"/>
-    <element name="b" type="int"/>
-  </sequence>
-</complexType>
-
-<element name="root" type="object"/>
-  
- -
-// Parse XML to object model.
-//
-std::auto_ptr<type> r = root ("root.xml");
-
-// Save to a CDR stream.
-//
-ACE_OutputCDR ace_ocdr;
-xml_schema::ostream<ACE_OutputCDR> ocdr (ace_ocdr);
-
-ocdr << *r;
-
-// Load from a CDR stream.
-//
-ACE_InputCDR ace_icdr (buf, size);
-xml_schema::istream<ACE_InputCDR> icdr (ace_icdr);
-
-std::auto_ptr<object> copy (new object (icdr));
-
-// Serialize to XML.
-//
-root (std::cout, *copy);
-  
- -

The XSD distribution contains a number of examples that - show how to save the object model to and load it from - CDR, XDR, and a custom format.

- - - - -

Appendix A — Default and Fixed Values

- -

The following table summarizes the effect of default and fixed - values (specified with the default and fixed - attributes, respectively) on attribute and element values. The - default and fixed attributes are mutually - exclusive. It is also worthwhile to note that the fixed value semantics - is a superset of the default value semantics. -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
defaultfixed
elementnot presentoptionalrequiredoptionalrequired
not presentinvalid instancenot presentinvalid instance
emptydefault value is usedfixed value is used
valuevalue is usedvalue is used provided it's the same as fixed
attributenot presentoptionalrequiredoptionalrequired
default value is usedinvalid schemafixed value is usedinvalid instance
emptyempty value is usedempty value is used provided it's the same as fixed
valuevalue is usedvalue is used provided it's the same as fixed
- -
-
- - - - diff --git a/xsd/documentation/cxx/tree/manual/makefile b/xsd/documentation/cxx/tree/manual/makefile deleted file mode 100644 index 398c002..0000000 --- a/xsd/documentation/cxx/tree/manual/makefile +++ /dev/null @@ -1,53 +0,0 @@ -# file : documentation/cxx/tree/manual/makefile -# author : Boris Kolpackov -# copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC -# license : GNU GPL v2 + exceptions; see accompanying LICENSE file - -include $(dir $(lastword $(MAKEFILE_LIST)))../../../../build/bootstrap.make - -default := $(out_base)/ -install := $(out_base)/.install -dist := $(out_base)/.dist -dist-win := $(out_base)/.dist-win -cleandoc := $(out_base)/.cleandoc - -# Build. -# -$(default): $(out_base)/cxx-tree-manual.ps $(out_base)/cxx-tree-manual.pdf - - -$(out_base)/cxx-tree-manual.ps: $(src_base)/index.xhtml \ - $(src_base)/manual.html2ps \ - | $(out_base)/. - $(call message,html2ps $<,html2ps -f $(src_base)/manual.html2ps -o $@ $<) - -$(out_base)/cxx-tree-manual.pdf: $(out_base)/cxx-tree-manual.ps | $(out_base)/. - $(call message,ps2pdf $<,ps2pdf14 $< $@) - -# Install & Dist. -# -$(install): path := $(subst $(src_root)/documentation/,,$(src_base)) -$(dist): path := $(subst $(src_root)/,,$(src_base)) - -$(install): $(out_base)/cxx-tree-manual.ps $(out_base)/cxx-tree-manual.pdf - $(call install-data,$(src_base)/index.xhtml,$(install_doc_dir)/xsd/$(path)/index.xhtml) - $(call install-data,$(out_base)/cxx-tree-manual.ps,$(install_doc_dir)/xsd/$(path)/cxx-tree-manual.ps) - $(call install-data,$(out_base)/cxx-tree-manual.pdf,$(install_doc_dir)/xsd/$(path)/cxx-tree-manual.pdf) - -$(dist): $(out_base)/cxx-tree-manual.ps $(out_base)/cxx-tree-manual.pdf - $(call install-data,$(src_base)/index.xhtml,$(dist_prefix)/$(path)/index.xhtml) - $(call install-data,$(out_base)/cxx-tree-manual.ps,$(dist_prefix)/$(path)/cxx-tree-manual.ps) - $(call install-data,$(out_base)/cxx-tree-manual.pdf,$(dist_prefix)/$(path)/cxx-tree-manual.pdf) - -$(dist-win): $(dist) - - -# Clean -# -$(cleandoc): - $(call message,rm $$1,rm -f $$1,$(out_base)/cxx-tree-manual.ps) - $(call message,rm $$1,rm -f $$1,$(out_base)/cxx-tree-manual.pdf) - -# How to. -# -$(call include,$(bld_root)/install.make) diff --git a/xsd/documentation/cxx/tree/manual/manual.html2ps b/xsd/documentation/cxx/tree/manual/manual.html2ps deleted file mode 100644 index ac010b5..0000000 --- a/xsd/documentation/cxx/tree/manual/manual.html2ps +++ /dev/null @@ -1,66 +0,0 @@ -@html2ps { - option { - toc: hb; - colour: 1; - hyphenate: 1; - titlepage: 1; - } - - datefmt: "%B %Y"; - - titlepage { - content: " -
-

C++/Tree Mapping User Manual

-

 

-

 

-

 

-

 

-

 

-

 

-

 

-
-

Revision $[revision]     $D

-

Copyright © 2005-2010 CODE SYNTHESIS TOOLS CC

- -

Permission is granted to copy, distribute and/or modify this - document under the terms of the - GNU Free - Documentation License, version 1.2; with no Invariant Sections, - no Front-Cover Texts and no Back-Cover Texts. -

- -

This document is available in the following formats: - XHTML, - PDF, and - PostScript.

"; - } - - toc { - indent: 2em; - } - - header { - odd-right: $H; - even-left: $H; - } - - footer { - odd-left: $D; - odd-center: $T, v$[revision]; - odd-right: $N; - - even-left: $N; - even-center: $T, v$[revision]; - even-right: $D; - } -} - -body { - font-size: 12pt; - text-align: justify; -} - -pre { - font-size: 10pt; -} diff --git a/xsd/documentation/cxx/tree/reference/footer.html b/xsd/documentation/cxx/tree/reference/footer.html deleted file mode 100644 index 3e5cc1e..0000000 --- a/xsd/documentation/cxx/tree/reference/footer.html +++ /dev/null @@ -1,6 +0,0 @@ -
-
- Copyright © 2005-2010 CODE SYNTHESIS TOOLS CC -
- - diff --git a/xsd/documentation/cxx/tree/reference/libxsd.doxygen b/xsd/documentation/cxx/tree/reference/libxsd.doxygen deleted file mode 100644 index 3f524d1..0000000 --- a/xsd/documentation/cxx/tree/reference/libxsd.doxygen +++ /dev/null @@ -1,1316 +0,0 @@ -# Doxyfile 1.5.4 - -# This file describes the settings to be used by the documentation system -# doxygen (www.doxygen.org) for a project -# -# All text after a hash (#) is considered a comment and will be ignored -# The format is: -# TAG = value [value, ...] -# For lists items can also be appended using: -# TAG += value [value, ...] -# Values that contain spaces should be placed between quotes (" ") - -#--------------------------------------------------------------------------- -# Project related configuration options -#--------------------------------------------------------------------------- - -# This tag specifies the encoding used for all characters in the config file that -# follow. The default is UTF-8 which is also the encoding used for all text before -# the first occurrence of this tag. Doxygen uses libiconv (or the iconv built into -# libc) for the transcoding. See http://www.gnu.org/software/libiconv for the list of -# possible encodings. - -DOXYFILE_ENCODING = UTF-8 - -# The PROJECT_NAME tag is a single word (or a sequence of words surrounded -# by quotes) that should identify the project. - -PROJECT_NAME = "C++/Tree Mapping Runtime Library" - -# The PROJECT_NUMBER tag can be used to enter a project or revision number. -# This could be handy for archiving the generated documentation or -# if some version control system is used. - -PROJECT_NUMBER = - -# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) -# base path where the generated documentation will be put. -# If a relative path is entered, it will be relative to the location -# where doxygen was started. If left blank the current directory will be used. - -OUTPUT_DIRECTORY = - -# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create -# 4096 sub-directories (in 2 levels) under the output directory of each output -# format and will distribute the generated files over these directories. -# Enabling this option can be useful when feeding doxygen a huge amount of -# source files, where putting all generated files in the same directory would -# otherwise cause performance problems for the file system. - -CREATE_SUBDIRS = NO - -# The OUTPUT_LANGUAGE tag is used to specify the language in which all -# documentation generated by doxygen is written. Doxygen will use this -# information to generate all constant output in the proper language. -# The default language is English, other supported languages are: -# Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, -# Croatian, Czech, Danish, Dutch, Finnish, French, German, Greek, Hungarian, -# Italian, Japanese, Japanese-en (Japanese with English messages), Korean, -# Korean-en, Lithuanian, Norwegian, Polish, Portuguese, Romanian, Russian, -# Serbian, Slovak, Slovene, Spanish, Swedish, and Ukrainian. - -OUTPUT_LANGUAGE = English - -# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will -# include brief member descriptions after the members that are listed in -# the file and class documentation (similar to JavaDoc). -# Set to NO to disable this. - -BRIEF_MEMBER_DESC = YES - -# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend -# the brief description of a member or function before the detailed description. -# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the -# brief descriptions will be completely suppressed. - -REPEAT_BRIEF = YES - -# This tag implements a quasi-intelligent brief description abbreviator -# that is used to form the text in various listings. Each string -# in this list, if found as the leading text of the brief description, will be -# stripped from the text and the result after processing the whole list, is -# used as the annotated text. Otherwise, the brief description is used as-is. -# If left blank, the following values are used ("$name" is automatically -# replaced with the name of the entity): "The $name class" "The $name widget" -# "The $name file" "is" "provides" "specifies" "contains" -# "represents" "a" "an" "the" - -ABBREVIATE_BRIEF = - -# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then -# Doxygen will generate a detailed section even if there is only a brief -# description. - -ALWAYS_DETAILED_SEC = NO - -# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all -# inherited members of a class in the documentation of that class as if those -# members were ordinary class members. Constructors, destructors and assignment -# operators of the base classes will not be shown. - -INLINE_INHERITED_MEMB = NO - -# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full -# path before files name in the file list and in the header files. If set -# to NO the shortest path that makes the file name unique will be used. - -FULL_PATH_NAMES = NO - -# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag -# can be used to strip a user-defined part of the path. Stripping is -# only done if one of the specified strings matches the left-hand part of -# the path. The tag can be used to show relative paths in the file list. -# If left blank the directory from which doxygen is run is used as the -# path to strip. - -STRIP_FROM_PATH = - -# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of -# the path mentioned in the documentation of a class, which tells -# the reader which header file to include in order to use a class. -# If left blank only the name of the header file containing the class -# definition is used. Otherwise one should specify the include paths that -# are normally passed to the compiler using the -I flag. - -STRIP_FROM_INC_PATH = - -# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter -# (but less readable) file names. This can be useful is your file systems -# doesn't support long names like on DOS, Mac, or CD-ROM. - -SHORT_NAMES = NO - -# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen -# will interpret the first line (until the first dot) of a JavaDoc-style -# comment as the brief description. If set to NO, the JavaDoc -# comments will behave just like regular Qt-style comments -# (thus requiring an explicit @brief command for a brief description.) - -JAVADOC_AUTOBRIEF = NO - -# If the QT_AUTOBRIEF tag is set to YES then Doxygen will -# interpret the first line (until the first dot) of a Qt-style -# comment as the brief description. If set to NO, the comments -# will behave just like regular Qt-style comments (thus requiring -# an explicit \brief command for a brief description.) - -QT_AUTOBRIEF = NO - -# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen -# treat a multi-line C++ special comment block (i.e. a block of //! or /// -# comments) as a brief description. This used to be the default behaviour. -# The new default is to treat a multi-line C++ comment block as a detailed -# description. Set this tag to YES if you prefer the old behaviour instead. - -MULTILINE_CPP_IS_BRIEF = NO - -# If the DETAILS_AT_TOP tag is set to YES then Doxygen -# will output the detailed description near the top, like JavaDoc. -# If set to NO, the detailed description appears after the member -# documentation. - -DETAILS_AT_TOP = NO - -# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented -# member inherits the documentation from any documented member that it -# re-implements. - -INHERIT_DOCS = YES - -# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce -# a new page for each member. If set to NO, the documentation of a member will -# be part of the file/class/namespace that contains it. - -SEPARATE_MEMBER_PAGES = NO - -# The TAB_SIZE tag can be used to set the number of spaces in a tab. -# Doxygen uses this value to replace tabs by spaces in code fragments. - -TAB_SIZE = 8 - -# This tag can be used to specify a number of aliases that acts -# as commands in the documentation. An alias has the form "name=value". -# For example adding "sideeffect=\par Side Effects:\n" will allow you to -# put the command \sideeffect (or @sideeffect) in the documentation, which -# will result in a user-defined paragraph with heading "Side Effects:". -# You can put \n's in the value part of an alias to insert newlines. - -ALIASES = - -# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C -# sources only. Doxygen will then generate output that is more tailored for C. -# For instance, some of the names that are used will be different. The list -# of all members will be omitted, etc. - -OPTIMIZE_OUTPUT_FOR_C = NO - -# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java -# sources only. Doxygen will then generate output that is more tailored for Java. -# For instance, namespaces will be presented as packages, qualified scopes -# will look different, etc. - -OPTIMIZE_OUTPUT_JAVA = NO - -# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want to -# include (a tag file for) the STL sources as input, then you should -# set this tag to YES in order to let doxygen match functions declarations and -# definitions whose arguments contain STL classes (e.g. func(std::string); v.s. -# func(std::string) {}). This also make the inheritance and collaboration -# diagrams that involve STL classes more complete and accurate. - -BUILTIN_STL_SUPPORT = YES - -# If you use Microsoft's C++/CLI language, you should set this option to YES to -# enable parsing support. - -CPP_CLI_SUPPORT = NO - -# Set the SIP_SUPPORT tag to YES if your project consists of sip sources only. -# Doxygen will parse them like normal C++ but will assume all classes use public -# instead of private inheritance when no explicit protection keyword is present. - -SIP_SUPPORT = NO - -# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC -# tag is set to YES, then doxygen will reuse the documentation of the first -# member in the group (if any) for the other members of the group. By default -# all members of a group must be documented explicitly. - -DISTRIBUTE_GROUP_DOC = NO - -# Set the SUBGROUPING tag to YES (the default) to allow class member groups of -# the same type (for instance a group of public functions) to be put as a -# subgroup of that type (e.g. under the Public Functions section). Set it to -# NO to prevent subgrouping. Alternatively, this can be done per class using -# the \nosubgrouping command. - -SUBGROUPING = YES - -# When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct (or union) is -# documented as struct with the name of the typedef. So -# typedef struct TypeS {} TypeT, will appear in the documentation as a struct -# with name TypeT. When disabled the typedef will appear as a member of a file, -# namespace, or class. And the struct will be named TypeS. This can typically -# be useful for C code where the coding convention is that all structs are -# typedef'ed and only the typedef is referenced never the struct's name. - -TYPEDEF_HIDES_STRUCT = NO - -#--------------------------------------------------------------------------- -# Build related configuration options -#--------------------------------------------------------------------------- - -# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in -# documentation are documented, even if no documentation was available. -# Private class members and static file members will be hidden unless -# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES - -EXTRACT_ALL = NO - -# If the EXTRACT_PRIVATE tag is set to YES all private members of a class -# will be included in the documentation. - -EXTRACT_PRIVATE = NO - -# If the EXTRACT_STATIC tag is set to YES all static members of a file -# will be included in the documentation. - -EXTRACT_STATIC = NO - -# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) -# defined locally in source files will be included in the documentation. -# If set to NO only classes defined in header files are included. - -EXTRACT_LOCAL_CLASSES = YES - -# This flag is only useful for Objective-C code. When set to YES local -# methods, which are defined in the implementation section but not in -# the interface are included in the documentation. -# If set to NO (the default) only methods in the interface are included. - -EXTRACT_LOCAL_METHODS = NO - -# If this flag is set to YES, the members of anonymous namespaces will be extracted -# and appear in the documentation as a namespace called 'anonymous_namespace{file}', -# where file will be replaced with the base name of the file that contains the anonymous -# namespace. By default anonymous namespace are hidden. - -EXTRACT_ANON_NSPACES = NO - -# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all -# undocumented members of documented classes, files or namespaces. -# If set to NO (the default) these members will be included in the -# various overviews, but no documentation section is generated. -# This option has no effect if EXTRACT_ALL is enabled. - -HIDE_UNDOC_MEMBERS = NO - -# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all -# undocumented classes that are normally visible in the class hierarchy. -# If set to NO (the default) these classes will be included in the various -# overviews. This option has no effect if EXTRACT_ALL is enabled. - -HIDE_UNDOC_CLASSES = NO - -# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all -# friend (class|struct|union) declarations. -# If set to NO (the default) these declarations will be included in the -# documentation. - -HIDE_FRIEND_COMPOUNDS = NO - -# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any -# documentation blocks found inside the body of a function. -# If set to NO (the default) these blocks will be appended to the -# function's detailed documentation block. - -HIDE_IN_BODY_DOCS = NO - -# The INTERNAL_DOCS tag determines if documentation -# that is typed after a \internal command is included. If the tag is set -# to NO (the default) then the documentation will be excluded. -# Set it to YES to include the internal documentation. - -INTERNAL_DOCS = NO - -# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate -# file names in lower-case letters. If set to YES upper-case letters are also -# allowed. This is useful if you have classes or files whose names only differ -# in case and if your file system supports case sensitive file names. Windows -# and Mac users are advised to set this option to NO. - -CASE_SENSE_NAMES = YES - -# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen -# will show members with their full class and namespace scopes in the -# documentation. If set to YES the scope will be hidden. - -HIDE_SCOPE_NAMES = YES - -# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen -# will put a list of the files that are included by a file in the documentation -# of that file. - -SHOW_INCLUDE_FILES = NO - -# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] -# is inserted in the documentation for inline members. - -INLINE_INFO = YES - -# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen -# will sort the (detailed) documentation of file and class members -# alphabetically by member name. If set to NO the members will appear in -# declaration order. - -SORT_MEMBER_DOCS = NO - -# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the -# brief documentation of file, namespace and class members alphabetically -# by member name. If set to NO (the default) the members will appear in -# declaration order. - -SORT_BRIEF_DOCS = NO - -# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be -# sorted by fully-qualified names, including namespaces. If set to -# NO (the default), the class list will be sorted only by class name, -# not including the namespace part. -# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. -# Note: This option applies only to the class list, not to the -# alphabetical list. - -SORT_BY_SCOPE_NAME = NO - -# The GENERATE_TODOLIST tag can be used to enable (YES) or -# disable (NO) the todo list. This list is created by putting \todo -# commands in the documentation. - -GENERATE_TODOLIST = YES - -# The GENERATE_TESTLIST tag can be used to enable (YES) or -# disable (NO) the test list. This list is created by putting \test -# commands in the documentation. - -GENERATE_TESTLIST = YES - -# The GENERATE_BUGLIST tag can be used to enable (YES) or -# disable (NO) the bug list. This list is created by putting \bug -# commands in the documentation. - -GENERATE_BUGLIST = YES - -# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or -# disable (NO) the deprecated list. This list is created by putting -# \deprecated commands in the documentation. - -GENERATE_DEPRECATEDLIST= YES - -# The ENABLED_SECTIONS tag can be used to enable conditional -# documentation sections, marked by \if sectionname ... \endif. - -ENABLED_SECTIONS = - -# The MAX_INITIALIZER_LINES tag determines the maximum number of lines -# the initial value of a variable or define consists of for it to appear in -# the documentation. If the initializer consists of more lines than specified -# here it will be hidden. Use a value of 0 to hide initializers completely. -# The appearance of the initializer of individual variables and defines in the -# documentation can be controlled using \showinitializer or \hideinitializer -# command in the documentation regardless of this setting. - -MAX_INITIALIZER_LINES = 30 - -# Set the SHOW_USED_FILES tag to NO to disable the list of files generated -# at the bottom of the documentation of classes and structs. If set to YES the -# list will mention the files that were used to generate the documentation. - -SHOW_USED_FILES = YES - -# If the sources in your project are distributed over multiple directories -# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy -# in the documentation. The default is NO. - -SHOW_DIRECTORIES = NO - -# The FILE_VERSION_FILTER tag can be used to specify a program or script that -# doxygen should invoke to get the current version for each file (typically from the -# version control system). Doxygen will invoke the program by executing (via -# popen()) the command , where is the value of -# the FILE_VERSION_FILTER tag, and is the name of an input file -# provided by doxygen. Whatever the program writes to standard output -# is used as the file version. See the manual for examples. - -FILE_VERSION_FILTER = - -#--------------------------------------------------------------------------- -# configuration options related to warning and progress messages -#--------------------------------------------------------------------------- - -# The QUIET tag can be used to turn on/off the messages that are generated -# by doxygen. Possible values are YES and NO. If left blank NO is used. - -QUIET = NO - -# The WARNINGS tag can be used to turn on/off the warning messages that are -# generated by doxygen. Possible values are YES and NO. If left blank -# NO is used. - -WARNINGS = YES - -# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings -# for undocumented members. If EXTRACT_ALL is set to YES then this flag will -# automatically be disabled. - -WARN_IF_UNDOCUMENTED = YES - -# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for -# potential errors in the documentation, such as not documenting some -# parameters in a documented function, or documenting parameters that -# don't exist or using markup commands wrongly. - -WARN_IF_DOC_ERROR = YES - -# This WARN_NO_PARAMDOC option can be abled to get warnings for -# functions that are documented, but have no documentation for their parameters -# or return value. If set to NO (the default) doxygen will only warn about -# wrong or incomplete parameter documentation, but not about the absence of -# documentation. - -WARN_NO_PARAMDOC = NO - -# The WARN_FORMAT tag determines the format of the warning messages that -# doxygen can produce. The string should contain the $file, $line, and $text -# tags, which will be replaced by the file and line number from which the -# warning originated and the warning text. Optionally the format may contain -# $version, which will be replaced by the version of the file (if it could -# be obtained via FILE_VERSION_FILTER) - -WARN_FORMAT = "$file:$line: $text" - -# The WARN_LOGFILE tag can be used to specify a file to which warning -# and error messages should be written. If left blank the output is written -# to stderr. - -WARN_LOGFILE = - -#--------------------------------------------------------------------------- -# configuration options related to the input files -#--------------------------------------------------------------------------- - -# The INPUT tag can be used to specify the files and/or directories that contain -# documented source files. You may enter file names like "myfile.cpp" or -# directories like "/usr/src/myproject". Separate the files or directories -# with spaces. - -INPUT = \ -../../../../libxsd/xsd/cxx/tree/buffer.hxx \ -../../../../libxsd/xsd/cxx/tree/types.hxx \ -../../../../libxsd/xsd/cxx/tree/date-time.hxx \ -../../../../libxsd/xsd/cxx/tree/elements.hxx \ -../../../../libxsd/xsd/cxx/tree/element-map.hxx \ -../../../../libxsd/xsd/cxx/tree/exceptions.hxx - -# This tag can be used to specify the character encoding of the source files that -# doxygen parses. Internally doxygen uses the UTF-8 encoding, which is also the default -# input encoding. Doxygen uses libiconv (or the iconv built into libc) for the transcoding. -# See http://www.gnu.org/software/libiconv for the list of possible encodings. - -INPUT_ENCODING = UTF-8 - -# If the value of the INPUT tag contains directories, you can use the -# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp -# and *.h) to filter out the source-files in the directories. If left -# blank the following patterns are tested: -# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx -# *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py *.f90 - -FILE_PATTERNS = - -# The RECURSIVE tag can be used to turn specify whether or not subdirectories -# should be searched for input files as well. Possible values are YES and NO. -# If left blank NO is used. - -RECURSIVE = NO - -# The EXCLUDE tag can be used to specify files and/or directories that should -# excluded from the INPUT source files. This way you can easily exclude a -# subdirectory from a directory tree whose root is specified with the INPUT tag. - -EXCLUDE = - -# The EXCLUDE_SYMLINKS tag can be used select whether or not files or -# directories that are symbolic links (a Unix filesystem feature) are excluded -# from the input. - -EXCLUDE_SYMLINKS = NO - -# If the value of the INPUT tag contains directories, you can use the -# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude -# certain files from those directories. Note that the wildcards are matched -# against the file with absolute path, so to exclude all test directories -# for example use the pattern */test/* - -EXCLUDE_PATTERNS = - -# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names -# (namespaces, classes, functions, etc.) that should be excluded from the output. -# The symbol name can be a fully qualified name, a word, or if the wildcard * is used, -# a substring. Examples: ANamespace, AClass, AClass::ANamespace, ANamespace::*Test - -EXCLUDE_SYMBOLS = - -# The EXAMPLE_PATH tag can be used to specify one or more files or -# directories that contain example code fragments that are included (see -# the \include command). - -EXAMPLE_PATH = - -# If the value of the EXAMPLE_PATH tag contains directories, you can use the -# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp -# and *.h) to filter out the source-files in the directories. If left -# blank all files are included. - -EXAMPLE_PATTERNS = - -# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be -# searched for input files to be used with the \include or \dontinclude -# commands irrespective of the value of the RECURSIVE tag. -# Possible values are YES and NO. If left blank NO is used. - -EXAMPLE_RECURSIVE = NO - -# The IMAGE_PATH tag can be used to specify one or more files or -# directories that contain image that are included in the documentation (see -# the \image command). - -IMAGE_PATH = - -# The INPUT_FILTER tag can be used to specify a program that doxygen should -# invoke to filter for each input file. Doxygen will invoke the filter program -# by executing (via popen()) the command , where -# is the value of the INPUT_FILTER tag, and is the name of an -# input file. Doxygen will then use the output that the filter program writes -# to standard output. If FILTER_PATTERNS is specified, this tag will be -# ignored. - -INPUT_FILTER = - -# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern -# basis. Doxygen will compare the file name with each pattern and apply the -# filter if there is a match. The filters are a list of the form: -# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further -# info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER -# is applied to all files. - -FILTER_PATTERNS = - -# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using -# INPUT_FILTER) will be used to filter the input files when producing source -# files to browse (i.e. when SOURCE_BROWSER is set to YES). - -FILTER_SOURCE_FILES = NO - -#--------------------------------------------------------------------------- -# configuration options related to source browsing -#--------------------------------------------------------------------------- - -# If the SOURCE_BROWSER tag is set to YES then a list of source files will -# be generated. Documented entities will be cross-referenced with these sources. -# Note: To get rid of all source code in the generated output, make sure also -# VERBATIM_HEADERS is set to NO. If you have enabled CALL_GRAPH or CALLER_GRAPH -# then you must also enable this option. If you don't then doxygen will produce -# a warning and turn it on anyway - -SOURCE_BROWSER = NO - -# Setting the INLINE_SOURCES tag to YES will include the body -# of functions and classes directly in the documentation. - -INLINE_SOURCES = NO - -# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct -# doxygen to hide any special comment blocks from generated source code -# fragments. Normal C and C++ comments will always remain visible. - -STRIP_CODE_COMMENTS = YES - -# If the REFERENCED_BY_RELATION tag is set to YES (the default) -# then for each documented function all documented -# functions referencing it will be listed. - -REFERENCED_BY_RELATION = YES - -# If the REFERENCES_RELATION tag is set to YES (the default) -# then for each documented function all documented entities -# called/used by that function will be listed. - -REFERENCES_RELATION = YES - -# If the REFERENCES_LINK_SOURCE tag is set to YES (the default) -# and SOURCE_BROWSER tag is set to YES, then the hyperlinks from -# functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will -# link to the source code. Otherwise they will link to the documentstion. - -REFERENCES_LINK_SOURCE = YES - -# If the USE_HTAGS tag is set to YES then the references to source code -# will point to the HTML generated by the htags(1) tool instead of doxygen -# built-in source browser. The htags tool is part of GNU's global source -# tagging system (see http://www.gnu.org/software/global/global.html). You -# will need version 4.8.6 or higher. - -USE_HTAGS = NO - -# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen -# will generate a verbatim copy of the header file for each class for -# which an include is specified. Set to NO to disable this. - -VERBATIM_HEADERS = YES - -#--------------------------------------------------------------------------- -# configuration options related to the alphabetical class index -#--------------------------------------------------------------------------- - -# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index -# of all compounds will be generated. Enable this if the project -# contains a lot of classes, structs, unions or interfaces. - -ALPHABETICAL_INDEX = NO - -# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then -# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns -# in which this list will be split (can be a number in the range [1..20]) - -COLS_IN_ALPHA_INDEX = 5 - -# In case all classes in a project start with a common prefix, all -# classes will be put under the same header in the alphabetical index. -# The IGNORE_PREFIX tag can be used to specify one or more prefixes that -# should be ignored while generating the index headers. - -IGNORE_PREFIX = - -#--------------------------------------------------------------------------- -# configuration options related to the HTML output -#--------------------------------------------------------------------------- - -# If the GENERATE_HTML tag is set to YES (the default) Doxygen will -# generate HTML output. - -GENERATE_HTML = YES - -# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `html' will be used as the default path. - -HTML_OUTPUT = html - -# The HTML_FILE_EXTENSION tag can be used to specify the file extension for -# each generated HTML page (for example: .htm,.php,.asp). If it is left blank -# doxygen will generate files with .html extension. - -HTML_FILE_EXTENSION = .html - -# The HTML_HEADER tag can be used to specify a personal HTML header for -# each generated HTML page. If it is left blank doxygen will generate a -# standard header. - -HTML_HEADER = - -# The HTML_FOOTER tag can be used to specify a personal HTML footer for -# each generated HTML page. If it is left blank doxygen will generate a -# standard footer. - -HTML_FOOTER = footer.html - -# The HTML_STYLESHEET tag can be used to specify a user-defined cascading -# style sheet that is used by each HTML page. It can be used to -# fine-tune the look of the HTML output. If the tag is left blank doxygen -# will generate a default style sheet. Note that doxygen will try to copy -# the style sheet file to the HTML output directory, so don't put your own -# stylesheet in the HTML output directory as well, or it will be erased! - -HTML_STYLESHEET = - -# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, -# files or namespaces will be aligned in HTML using tables. If set to -# NO a bullet list will be used. - -HTML_ALIGN_MEMBERS = YES - -# If the GENERATE_HTMLHELP tag is set to YES, additional index files -# will be generated that can be used as input for tools like the -# Microsoft HTML help workshop to generate a compressed HTML help file (.chm) -# of the generated HTML documentation. - -GENERATE_HTMLHELP = NO - -# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML -# documentation will contain sections that can be hidden and shown after the -# page has loaded. For this to work a browser that supports -# JavaScript and DHTML is required (for instance Mozilla 1.0+, Firefox -# Netscape 6.0+, Internet explorer 5.0+, Konqueror, or Safari). - -HTML_DYNAMIC_SECTIONS = NO - -# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can -# be used to specify the file name of the resulting .chm file. You -# can add a path in front of the file if the result should not be -# written to the html output directory. - -CHM_FILE = - -# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can -# be used to specify the location (absolute path including file name) of -# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run -# the HTML help compiler on the generated index.hhp. - -HHC_LOCATION = - -# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag -# controls if a separate .chi index file is generated (YES) or that -# it should be included in the master .chm file (NO). - -GENERATE_CHI = NO - -# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag -# controls whether a binary table of contents is generated (YES) or a -# normal table of contents (NO) in the .chm file. - -BINARY_TOC = NO - -# The TOC_EXPAND flag can be set to YES to add extra items for group members -# to the contents of the HTML help documentation and to the tree view. - -TOC_EXPAND = NO - -# The DISABLE_INDEX tag can be used to turn on/off the condensed index at -# top of each HTML page. The value NO (the default) enables the index and -# the value YES disables it. - -DISABLE_INDEX = NO - -# This tag can be used to set the number of enum values (range [1..20]) -# that doxygen will group on one line in the generated HTML documentation. - -ENUM_VALUES_PER_LINE = 4 - -# If the GENERATE_TREEVIEW tag is set to YES, a side panel will be -# generated containing a tree-like index structure (just like the one that -# is generated for HTML Help). For this to work a browser that supports -# JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+, -# Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are -# probably better off using the HTML help feature. - -GENERATE_TREEVIEW = NO - -# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be -# used to set the initial width (in pixels) of the frame in which the tree -# is shown. - -TREEVIEW_WIDTH = 250 - -#--------------------------------------------------------------------------- -# configuration options related to the LaTeX output -#--------------------------------------------------------------------------- - -# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will -# generate Latex output. - -GENERATE_LATEX = NO - -# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `latex' will be used as the default path. - -LATEX_OUTPUT = latex - -# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be -# invoked. If left blank `latex' will be used as the default command name. - -LATEX_CMD_NAME = latex - -# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to -# generate index for LaTeX. If left blank `makeindex' will be used as the -# default command name. - -MAKEINDEX_CMD_NAME = makeindex - -# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact -# LaTeX documents. This may be useful for small projects and may help to -# save some trees in general. - -COMPACT_LATEX = NO - -# The PAPER_TYPE tag can be used to set the paper type that is used -# by the printer. Possible values are: a4, a4wide, letter, legal and -# executive. If left blank a4wide will be used. - -PAPER_TYPE = a4wide - -# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX -# packages that should be included in the LaTeX output. - -EXTRA_PACKAGES = - -# The LATEX_HEADER tag can be used to specify a personal LaTeX header for -# the generated latex document. The header should contain everything until -# the first chapter. If it is left blank doxygen will generate a -# standard header. Notice: only use this tag if you know what you are doing! - -LATEX_HEADER = - -# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated -# is prepared for conversion to pdf (using ps2pdf). The pdf file will -# contain links (just like the HTML output) instead of page references -# This makes the output suitable for online browsing using a pdf viewer. - -PDF_HYPERLINKS = NO - -# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of -# plain latex in the generated Makefile. Set this option to YES to get a -# higher quality PDF documentation. - -USE_PDFLATEX = NO - -# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. -# command to the generated LaTeX files. This will instruct LaTeX to keep -# running if errors occur, instead of asking the user for help. -# This option is also used when generating formulas in HTML. - -LATEX_BATCHMODE = NO - -# If LATEX_HIDE_INDICES is set to YES then doxygen will not -# include the index chapters (such as File Index, Compound Index, etc.) -# in the output. - -LATEX_HIDE_INDICES = NO - -#--------------------------------------------------------------------------- -# configuration options related to the RTF output -#--------------------------------------------------------------------------- - -# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output -# The RTF output is optimized for Word 97 and may not look very pretty with -# other RTF readers or editors. - -GENERATE_RTF = NO - -# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `rtf' will be used as the default path. - -RTF_OUTPUT = rtf - -# If the COMPACT_RTF tag is set to YES Doxygen generates more compact -# RTF documents. This may be useful for small projects and may help to -# save some trees in general. - -COMPACT_RTF = NO - -# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated -# will contain hyperlink fields. The RTF file will -# contain links (just like the HTML output) instead of page references. -# This makes the output suitable for online browsing using WORD or other -# programs which support those fields. -# Note: wordpad (write) and others do not support links. - -RTF_HYPERLINKS = NO - -# Load stylesheet definitions from file. Syntax is similar to doxygen's -# config file, i.e. a series of assignments. You only have to provide -# replacements, missing definitions are set to their default value. - -RTF_STYLESHEET_FILE = - -# Set optional variables used in the generation of an rtf document. -# Syntax is similar to doxygen's config file. - -RTF_EXTENSIONS_FILE = - -#--------------------------------------------------------------------------- -# configuration options related to the man page output -#--------------------------------------------------------------------------- - -# If the GENERATE_MAN tag is set to YES (the default) Doxygen will -# generate man pages - -GENERATE_MAN = NO - -# The MAN_OUTPUT tag is used to specify where the man pages will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `man' will be used as the default path. - -MAN_OUTPUT = man - -# The MAN_EXTENSION tag determines the extension that is added to -# the generated man pages (default is the subroutine's section .3) - -MAN_EXTENSION = .3 - -# If the MAN_LINKS tag is set to YES and Doxygen generates man output, -# then it will generate one additional man file for each entity -# documented in the real man page(s). These additional files -# only source the real man page, but without them the man command -# would be unable to find the correct page. The default is NO. - -MAN_LINKS = NO - -#--------------------------------------------------------------------------- -# configuration options related to the XML output -#--------------------------------------------------------------------------- - -# If the GENERATE_XML tag is set to YES Doxygen will -# generate an XML file that captures the structure of -# the code including all documentation. - -GENERATE_XML = NO - -# The XML_OUTPUT tag is used to specify where the XML pages will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `xml' will be used as the default path. - -XML_OUTPUT = xml - -# The XML_SCHEMA tag can be used to specify an XML schema, -# which can be used by a validating XML parser to check the -# syntax of the XML files. - -XML_SCHEMA = - -# The XML_DTD tag can be used to specify an XML DTD, -# which can be used by a validating XML parser to check the -# syntax of the XML files. - -XML_DTD = - -# If the XML_PROGRAMLISTING tag is set to YES Doxygen will -# dump the program listings (including syntax highlighting -# and cross-referencing information) to the XML output. Note that -# enabling this will significantly increase the size of the XML output. - -XML_PROGRAMLISTING = YES - -#--------------------------------------------------------------------------- -# configuration options for the AutoGen Definitions output -#--------------------------------------------------------------------------- - -# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will -# generate an AutoGen Definitions (see autogen.sf.net) file -# that captures the structure of the code including all -# documentation. Note that this feature is still experimental -# and incomplete at the moment. - -GENERATE_AUTOGEN_DEF = NO - -#--------------------------------------------------------------------------- -# configuration options related to the Perl module output -#--------------------------------------------------------------------------- - -# If the GENERATE_PERLMOD tag is set to YES Doxygen will -# generate a Perl module file that captures the structure of -# the code including all documentation. Note that this -# feature is still experimental and incomplete at the -# moment. - -GENERATE_PERLMOD = NO - -# If the PERLMOD_LATEX tag is set to YES Doxygen will generate -# the necessary Makefile rules, Perl scripts and LaTeX code to be able -# to generate PDF and DVI output from the Perl module output. - -PERLMOD_LATEX = NO - -# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be -# nicely formatted so it can be parsed by a human reader. This is useful -# if you want to understand what is going on. On the other hand, if this -# tag is set to NO the size of the Perl module output will be much smaller -# and Perl will parse it just the same. - -PERLMOD_PRETTY = YES - -# The names of the make variables in the generated doxyrules.make file -# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. -# This is useful so different doxyrules.make files included by the same -# Makefile don't overwrite each other's variables. - -PERLMOD_MAKEVAR_PREFIX = - -#--------------------------------------------------------------------------- -# Configuration options related to the preprocessor -#--------------------------------------------------------------------------- - -# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will -# evaluate all C-preprocessor directives found in the sources and include -# files. - -ENABLE_PREPROCESSING = YES - -# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro -# names in the source code. If set to NO (the default) only conditional -# compilation will be performed. Macro expansion can be done in a controlled -# way by setting EXPAND_ONLY_PREDEF to YES. - -MACRO_EXPANSION = NO - -# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES -# then the macro expansion is limited to the macros specified with the -# PREDEFINED and EXPAND_AS_DEFINED tags. - -EXPAND_ONLY_PREDEF = NO - -# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files -# in the INCLUDE_PATH (see below) will be search if a #include is found. - -SEARCH_INCLUDES = YES - -# The INCLUDE_PATH tag can be used to specify one or more directories that -# contain include files that are not input files but should be processed by -# the preprocessor. - -INCLUDE_PATH = - -# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard -# patterns (like *.h and *.hpp) to filter out the header-files in the -# directories. If left blank, the patterns specified with FILE_PATTERNS will -# be used. - -INCLUDE_FILE_PATTERNS = - -# The PREDEFINED tag can be used to specify one or more macro names that -# are defined before the preprocessor is started (similar to the -D option of -# gcc). The argument of the tag is a list of macros of the form: name -# or name=definition (no spaces). If the definition and the = are -# omitted =1 is assumed. To prevent a macro definition from being -# undefined via #undef or recursively expanded use the := operator -# instead of the = operator. - -PREDEFINED = - -# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then -# this tag can be used to specify a list of macro names that should be expanded. -# The macro definition that is found in the sources will be used. -# Use the PREDEFINED tag if you want to use a different macro definition. - -EXPAND_AS_DEFINED = - -# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then -# doxygen's preprocessor will remove all function-like macros that are alone -# on a line, have an all uppercase name, and do not end with a semicolon. Such -# function macros are typically used for boiler-plate code, and will confuse -# the parser if not removed. - -SKIP_FUNCTION_MACROS = YES - -#--------------------------------------------------------------------------- -# Configuration::additions related to external references -#--------------------------------------------------------------------------- - -# The TAGFILES option can be used to specify one or more tagfiles. -# Optionally an initial location of the external documentation -# can be added for each tagfile. The format of a tag file without -# this location is as follows: -# TAGFILES = file1 file2 ... -# Adding location for the tag files is done as follows: -# TAGFILES = file1=loc1 "file2 = loc2" ... -# where "loc1" and "loc2" can be relative or absolute paths or -# URLs. If a location is present for each tag, the installdox tool -# does not have to be run to correct the links. -# Note that each tag file must have a unique name -# (where the name does NOT include the path) -# If a tag file is not located in the directory in which doxygen -# is run, you must also specify the path to the tagfile here. - -TAGFILES = - -# When a file name is specified after GENERATE_TAGFILE, doxygen will create -# a tag file that is based on the input files it reads. - -GENERATE_TAGFILE = libxsd.doxytag - -# If the ALLEXTERNALS tag is set to YES all external classes will be listed -# in the class index. If set to NO only the inherited external classes -# will be listed. - -ALLEXTERNALS = NO - -# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed -# in the modules index. If set to NO, only the current project's groups will -# be listed. - -EXTERNAL_GROUPS = YES - -# The PERL_PATH should be the absolute path and name of the perl script -# interpreter (i.e. the result of `which perl'). - -PERL_PATH = /usr/bin/perl - -#--------------------------------------------------------------------------- -# Configuration options related to the dot tool -#--------------------------------------------------------------------------- - -# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will -# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base -# or super classes. Setting the tag to NO turns the diagrams off. Note that -# this option is superseded by the HAVE_DOT option below. This is only a -# fallback. It is recommended to install and use dot, since it yields more -# powerful graphs. - -CLASS_DIAGRAMS = YES - -# You can define message sequence charts within doxygen comments using the \msc -# command. Doxygen will then run the mscgen tool (see http://www.mcternan.me.uk/mscgen/) to -# produce the chart and insert it in the documentation. The MSCGEN_PATH tag allows you to -# specify the directory where the mscgen tool resides. If left empty the tool is assumed to -# be found in the default search path. - -MSCGEN_PATH = - -# If set to YES, the inheritance and collaboration graphs will hide -# inheritance and usage relations if the target is undocumented -# or is not a class. - -HIDE_UNDOC_RELATIONS = YES - -# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is -# available from the path. This tool is part of Graphviz, a graph visualization -# toolkit from AT&T and Lucent Bell Labs. The other options in this section -# have no effect if this option is set to NO (the default) - -HAVE_DOT = NO - -# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen -# will generate a graph for each documented class showing the direct and -# indirect inheritance relations. Setting this tag to YES will force the -# the CLASS_DIAGRAMS tag to NO. - -CLASS_GRAPH = YES - -# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen -# will generate a graph for each documented class showing the direct and -# indirect implementation dependencies (inheritance, containment, and -# class references variables) of the class with other documented classes. - -COLLABORATION_GRAPH = YES - -# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen -# will generate a graph for groups, showing the direct groups dependencies - -GROUP_GRAPHS = YES - -# If the UML_LOOK tag is set to YES doxygen will generate inheritance and -# collaboration diagrams in a style similar to the OMG's Unified Modeling -# Language. - -UML_LOOK = NO - -# If set to YES, the inheritance and collaboration graphs will show the -# relations between templates and their instances. - -TEMPLATE_RELATIONS = NO - -# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT -# tags are set to YES then doxygen will generate a graph for each documented -# file showing the direct and indirect include dependencies of the file with -# other documented files. - -INCLUDE_GRAPH = YES - -# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and -# HAVE_DOT tags are set to YES then doxygen will generate a graph for each -# documented header file showing the documented files that directly or -# indirectly include this file. - -INCLUDED_BY_GRAPH = YES - -# If the CALL_GRAPH, SOURCE_BROWSER and HAVE_DOT tags are set to YES then doxygen will -# generate a call dependency graph for every global function or class method. -# Note that enabling this option will significantly increase the time of a run. -# So in most cases it will be better to enable call graphs for selected -# functions only using the \callgraph command. - -CALL_GRAPH = NO - -# If the CALLER_GRAPH, SOURCE_BROWSER and HAVE_DOT tags are set to YES then doxygen will -# generate a caller dependency graph for every global function or class method. -# Note that enabling this option will significantly increase the time of a run. -# So in most cases it will be better to enable caller graphs for selected -# functions only using the \callergraph command. - -CALLER_GRAPH = NO - -# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen -# will graphical hierarchy of all classes instead of a textual one. - -GRAPHICAL_HIERARCHY = YES - -# If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES -# then doxygen will show the dependencies a directory has on other directories -# in a graphical way. The dependency relations are determined by the #include -# relations between the files in the directories. - -DIRECTORY_GRAPH = YES - -# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images -# generated by dot. Possible values are png, jpg, or gif -# If left blank png will be used. - -DOT_IMAGE_FORMAT = png - -# The tag DOT_PATH can be used to specify the path where the dot tool can be -# found. If left blank, it is assumed the dot tool can be found in the path. - -DOT_PATH = - -# The DOTFILE_DIRS tag can be used to specify one or more directories that -# contain dot files that are included in the documentation (see the -# \dotfile command). - -DOTFILE_DIRS = - -# The MAX_DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of -# nodes that will be shown in the graph. If the number of nodes in a graph -# becomes larger than this value, doxygen will truncate the graph, which is -# visualized by representing a node as a red box. Note that doxygen if the number -# of direct children of the root node in a graph is already larger than -# MAX_DOT_GRAPH_NOTES then the graph will not be shown at all. Also note -# that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH. - -DOT_GRAPH_MAX_NODES = 50 - -# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the -# graphs generated by dot. A depth value of 3 means that only nodes reachable -# from the root by following a path via at most 3 edges will be shown. Nodes -# that lay further from the root node will be omitted. Note that setting this -# option to 1 or 2 may greatly reduce the computation time needed for large -# code bases. Also note that the size of a graph can be further restricted by -# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction. - -MAX_DOT_GRAPH_DEPTH = 0 - -# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent -# background. This is disabled by default, which results in a white background. -# Warning: Depending on the platform used, enabling this option may lead to -# badly anti-aliased labels on the edges of a graph (i.e. they become hard to -# read). - -DOT_TRANSPARENT = YES - -# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output -# files in one run (i.e. multiple -o and -T options on the command line). This -# makes dot run faster, but since only newer versions of dot (>1.8.10) -# support this, this feature is disabled by default. - -DOT_MULTI_TARGETS = NO - -# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will -# generate a legend page explaining the meaning of the various boxes and -# arrows in the dot generated graphs. - -GENERATE_LEGEND = YES - -# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will -# remove the intermediate dot files that are used to generate -# the various graphs. - -DOT_CLEANUP = YES - -#--------------------------------------------------------------------------- -# Configuration::additions related to the search engine -#--------------------------------------------------------------------------- - -# The SEARCHENGINE tag specifies whether or not a search engine should be -# used. If set to NO the values of all tags below this one will be ignored. - -SEARCHENGINE = NO diff --git a/xsd/documentation/cxx/tree/reference/makefile b/xsd/documentation/cxx/tree/reference/makefile deleted file mode 100644 index 5df62c9..0000000 --- a/xsd/documentation/cxx/tree/reference/makefile +++ /dev/null @@ -1,18 +0,0 @@ -.PHONY: all -all: libxsd.doxytag - -headers := \ -../../../../libxsd/xsd/cxx/tree/buffer.hxx \ -../../../../libxsd/xsd/cxx/tree/types.hxx \ -../../../../libxsd/xsd/cxx/tree/date-time.hxx \ -../../../../libxsd/xsd/cxx/tree/elements.hxx \ -../../../../libxsd/xsd/cxx/tree/exceptions.hxx - -libxsd.doxytag: libxsd.doxygen footer.html $(headers) - doxygen $< - -.PHONY: clean -clean: - rm -f libxsd.doxytag - rm -rf html - diff --git a/xsd/documentation/default.css b/xsd/documentation/default.css deleted file mode 100644 index bb3805b..0000000 --- a/xsd/documentation/default.css +++ /dev/null @@ -1,319 +0,0 @@ -html { - margin : 0; - padding : 0; - background : white; -} - -body { - font-family : "Lucida Grande", Verdana, "Bitstream Vera Sans", sans-serif; - font-weight : normal; - font-size : 13px; - line-height : 19px; - - color : black; - - margin : 0 2em 0 2em; - padding : 0; -} - - -body { - min-width: 40em; -} - -#container { - max-width : 46em; - margin : 0 auto; - padding : 0 1em 0 1em; -} - - - -/* - * Footer - * - */ -#footer { - color : #3a84a7; - - padding : 1em 0 0.5em 0; - - font-size : 10px; - line-height : 15px; - - text-align: center; -} - -#footer a:link, #footer a:visited { - - color:#1d6699; - text-decoration: underline; -} - -#footer a { - margin-left: 0.7em; - margin-right: 0.7em; -} - -#footer p { - padding: 0; - margin: 0.3em 0 0 0; -} - -/* Distribution terms. */ -#footer #terms { - text-align: justify; - - font-size : 110%; - font-family : monospace; - - padding : 1em 0 0.5em 0; -} - - -/* - * Content - * - */ - -#content { - padding : 0em 0.1em 0 1.3em; - margin : 1.4em 0 0 0; -} - -#content p, -#content ol, -#content ul, -#content dl { - text-align: justify; -} - -#content h1 { - margin-left: -0.89em; -} - -a:link { - color:#0536d2; -} - - -/* - * Headings - * - */ - -h1, h2, h3, h4, h5, h6 { - font-weight : 500; -} - -h1 { font-size : 155%; } -h2 { font-size : 130%; } -h3 { font-size : 125%; } -h4 { font-size : 110%; } -h5 { font-size : 106%; } -h6 { font-size : 100%; } - -h1 { margin : 1.8em 0 0.8em 0;} -h2 { margin-top : 1.4em;} -h3 { margin-top : 1em;} - -p.indent { - margin-left : 1.5em; -} - - -/* - * Fix for IE 5.5 table font problem - * - */ - -table { - font-size : 13px; -} - - -/* - * table of content - * - */ - -ul.toc li { - padding : .4em 0em 0em 0em; -} - - -/* Toc links don't need to show when they are visited. */ -.toc a:visited { - color:#0536d2; -} - - -/* - * lists - * - */ - - -/* list of links */ -ul.menu { - list-style-type : none; -} - -ul.menu li { - padding-top : 0.3em; - padding-bottom : 0.3em; -} - - - -/* @@ I should probably use child selector here */ -/* list with multiline list-elements */ -ul.multiline li, ol.multiline li, dl.multiline dd { - padding-top : 0.16em; - padding-bottom : 0.16em; - - font-size : 11px; - line-height : 15px; -} - - - -/* C++ code snippet */ -pre.cxx { - margin-top : 0em; - margin-bottom : 2em; - - margin-left : 1em; -} - - - -/* make code snippet */ -pre.make { - margin-top : 0em; - margin-bottom : 2em; - - margin-left : 1em; -} - - - -/* terminal output */ -pre.term { - margin-top : 0em; - margin-bottom : 2em; - - margin-left : 1em; -} - - -/* Images */ -div.center { - text-align: center; -} - -/* Document info. */ -#docinfo { - margin-top: 4em; - border-top: 1px dashed #000000; - font-size: 70%; -} - - -/* Footnote */ - -#footnote { - margin-top : 2.5em; -} - -#footnote hr, hr.footnote { - margin-left: 0; - margin-bottom: 0.6em; - width: 8em; - border-top: 1px solid #000000; - border-right: none; - border-bottom: none; - border-left: none; - -} - -#footnote ol { - margin-left: 0; - padding-left: 1.45em; -} - -#footnote li { - text-align : left; - font-size : 11px; - line-height : 15px; - - padding : .4em 0 .4em 0; -} - - -/* Normal table with borders, etc. */ - -table.std { - margin: 2em 0 2em 0; - - border-collapse : collapse; - border : 1px solid; - border-color : #000000; - - font-size : 11px; - line-height : 14px; -} - -table.std th, table.std td { - border : 1px solid; - padding : 0.6em 0.8em 0.6em 0.8em; -} - -table.std th { - background : #cde8f6; -} - -table.std td { - text-align: left; -} - - -/* - * "item | description" table. - * - */ - -table.description { - border-style : none; - border-collapse : separate; - border-spacing : 0; - - font-size : 13px; - - margin : 0.6em 0 0.6em 0; - padding : 0 0 0 0; -} - -table.description tr { - padding : 0 0 0 0; - margin : 0 0 0 0; -} - -table.description * td, table.description * th { - border-style : none; - margin : 0 0 0 0; - vertical-align : top; -} - -table.description * th { - font-weight : normal; - padding : 0.4em 1em 0.4em 0; - text-align : left; - white-space : nowrap; - background : none; -} - -table.description * td { - padding : 0.4em 0 0.4em 1em; - text-align : justify; -} diff --git a/xsd/documentation/future.xhtml b/xsd/documentation/future.xhtml deleted file mode 100644 index 812de0c..0000000 --- a/xsd/documentation/future.xhtml +++ /dev/null @@ -1,103 +0,0 @@ - - - - - - XSD Planned Features List - - - - - - - - - -
-
- -

Below is the list of features that we plan to implement in the - future. They are divided into two sections: ones that will - likely appear in the forthcoming releases and those that we - have no definite time-line for. Send an email to - xsd-users@codesynthesis.com - if you are interested in a particular feature or would like to suggest - one.

- -

Forthcoming Releases

- -

C++/Serializer

- -
    -
  • New mapping that will support event-driven XML serialization.
  • -
- -

C++/Hybrid

- -
    -
  • New mapping that will support hybrid, event-driven/in-memory - XML processing.
  • -
- -

No Definite Time-line

- -

IDL

- -
    -
  • New mapping that will produce CORBA IDL from XML Schema.
  • -
- -

IDL/C++

- -
    -
  • New co-mapping that will produce C++ parsing/serialization - code for the C++ types produced from CORBA IDL.
  • -
- -

C++/Tree

- -
    -
  • Mapping for xsd:unique, xsd:key, - and xsd:keyref.
  • - -
  • Option to select between std::vector and - std::list as an underlying sequence type.
  • - -
  • Special attribute in XML Schema definition that would - instruct code generators to use a different container type - such as associative containers (std::set and - std::multiset). This will allow you to - construct a light-weight, object-oriented database with XML Schema - as a specification language and XML as an underlying - representation. -
  • - -
  • Make dependency generator.
  • - -
  • Generate typedef instead of inheritance for some cases of - inheritance from fundamental types.
  • - -
  • Option to suppress the generation of enum mapping.
  • - -
  • Map arbitrary-length integers to a suitable user-defined types.
  • - -
  • Option to map xsd:long to C++ long instead - of long long for 64-bit architectures (can be achieved - now with --custom-type).
  • -
- -
- -
- - diff --git a/xsd/documentation/makefile b/xsd/documentation/makefile deleted file mode 100644 index 0b39bdb..0000000 --- a/xsd/documentation/makefile +++ /dev/null @@ -1,47 +0,0 @@ -# file : documentation/makefile -# author : Boris Kolpackov -# copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC -# license : GNU GPL v2 + exceptions; see accompanying LICENSE file - -include $(dir $(lastword $(MAKEFILE_LIST)))../build/bootstrap.make - -default := $(out_base)/ -install := $(out_base)/.install -dist := $(out_base)/.dist -dist-win := $(out_base)/.dist-win -cleandoc := $(out_base)/.cleandoc - -$(default): $(out_base)/cxx/ - -# Install. -# -$(install): $(out_base)/cxx/.install - $(call install-data,$(src_base)/default.css,$(install_doc_dir)/xsd/default.css) - $(call install-data,$(src_base)/future.xhtml,$(install_doc_dir)/xsd/future.xhtml) - $(call install-data,$(src_base)/schema-authoring-guide.xhtml,$(install_doc_dir)/xsd/schema-authoring-guide.xhtml) - $(call install-data,$(src_base)/xsd.xhtml,$(install_doc_dir)/xsd/xsd.xhtml) - $(call install-data,$(src_base)/custom-literals.xsd,$(install_doc_dir)/xsd/custom-literals.xsd) - $(call install-data,$(src_base)/xsd.1,$(install_man_dir)/man1/xsd.1) - -# Dist. -# -dist-common := $(out_base)/.dist-common - -$(dist-common): - $(call install-data,$(src_base)/default.css,$(dist_prefix)/documentation/default.css) - $(call install-data,$(src_base)/xsd.xhtml,$(dist_prefix)/documentation/xsd.xhtml) - $(call install-data,$(src_base)/xsd.1,$(dist_prefix)/documentation/xsd.1) - $(call install-data,$(src_base)/future.xhtml,$(dist_prefix)/documentation/future.xhtml) - $(call install-data,$(src_base)/schema-authoring-guide.xhtml,$(dist_prefix)/documentation/schema-authoring-guide.xhtml) - $(call install-data,$(src_base)/custom-literals.xsd,$(dist_prefix)/documentation/custom-literals.xsd) - -$(dist): $(dist-common) $(out_base)/cxx/.dist -$(dist-win): $(dist-common) $(out_base)/cxx/.dist-win - -# Clean. -# -$(cleandoc): $(src_base)/cxx/.cleandoc - -$(call include,$(bld_root)/install.make) - -$(call import,$(src_base)/cxx/makefile) diff --git a/xsd/documentation/schema-authoring-guide.xhtml b/xsd/documentation/schema-authoring-guide.xhtml deleted file mode 100644 index 2eaab14..0000000 --- a/xsd/documentation/schema-authoring-guide.xhtml +++ /dev/null @@ -1,187 +0,0 @@ - - - - - - XML Schema Authoring Guide - - - - - - - - - - - - - -
-
- -

Table of Contents

- - - -

Introduction

- -

Making it possible to cleanly map W3C XML Schema to programming languages - was never a goal of the XML Schema Working Group. As a result there - is a number of Schema constructs, techniques, and styles that don't - have appropriate counterparts in C++. This document presents a list - of do's and don'ts that will help ensure your schemas, when translated - by XSD, result in C++ code that is enjoyable to work with.

- - -

Don't define a global element which is not - a valid document root

- -

Instead of

- -
-<xsd:element name="author" type="Author"/>
-
-<xsd:complexType name="Book">
-  <xsd:sequence>
-    <xsd:element ref="author"/>
-  </xsd:sequence>
-</xsd:complexType>
-  
- -

Write

- -
-<xsd:complexType name="Book">
-  <xsd:sequence>
-    <xsd:element name="author" type="Author"/>
-  </xsd:sequence>
-</xsd:complexType>
-  
- -

Any globally-defined element is a potential document root. For every - such element XSD generates a set of overloaded parsing - functions. If you cannot change your schema, consider using the - --root-element-* options to specify which global - element(s) are actual document root(s).

- - - -

Don't name a type and an element/attribute of - this type with the same name

- -

Instead of

- -
-<xsd:complexType name="name">
-  <xsd:sequence>
-    <xsd:element name="name" type="xsd:string"/>
-  </xsd:sequence>
-  <xsd:attribute name="lang" type="xsd:language"/>
-</xsd:complexType>
-  
- -

Write

- -
-<xsd:complexType name="Name">
-  <xsd:sequence>
-    <xsd:element name="name" type="xsd:string"/>
-  </xsd:sequence>
-  <xsd:attribute name="lang" type="xsd:language"/>
-</xsd:complexType>
-  
- -

Use of a class name as a member function name within this class is - illegal in C++. XSD will resolve such conflicts by renaming - the conflicting member function. In the example above, you will end - up with the following generated code:

- -
-  class name
-  {
-  public:
-    string
-    name1 () const;
-
-    language
-    lang () const;
-
-    ...
-
-  };
-  
- -

Don't use xsd:integer and - friends

- -

XML Schema built-in types integer, - nonPositiveInteger, nonNegativeInteger, - positiveInteger, and negativeInteger - are arbitrary-length integral types. XSD maps them to the - long long and unsigned long long C++ - types. In most cases you would prefer to use either - xsd:int/xsd:unsignedInt (32 bit, maps to C++ - int/unsigned int) or - xsd:long/xsd:unsignedLong (64 bit, maps to C++ - long long/unsigned long long). -

- -

Use xsd:int/xsd:unsignedInt for 32 bit - integers

- -

XML Schema built-in types long and - unsignedLong are 64 bit wide so use 32 bit int - and unsignedInt unless you meant 64 bit.

- -
- - -
- - - - diff --git a/xsd/documentation/xsd.1 b/xsd/documentation/xsd.1 deleted file mode 100644 index 8b97b14..0000000 --- a/xsd/documentation/xsd.1 +++ /dev/null @@ -1,1893 +0,0 @@ -.\" Process this file with -.\" groff -man -Tascii xsd.1 -.\" -.TH XSD 1 "April 2010" "XSD 3.3.0" -.SH NAME -xsd \- W3C XML Schema to C++ Compiler -.\" -.\" -.\" -.\"-------------------------------------------------------------------- -.SH SYNOPSIS -.\"-------------------------------------------------------------------- -.B xsd -.I command -.B [ -.I options -.B ] -.I file -.B [ -.I file -.B ...] -.in -.B xsd help -.B [ -.I command -.B ] -.in -.B xsd version -.\" -.\" -.\" -.\"-------------------------------------------------------------------- -.SH DESCRIPTION -.\"-------------------------------------------------------------------- -.B xsd -generates vocabulary-specific, statically-typed C++ mapping from W3C XML -Schema definitions. Particular mapping to produce is selected by a -.IR command . -Each mapping has a number of mapping-specific -.I options -that should appear, if any, after the -.IR command . -Input files should be W3C XML Schema definitions. The exact set of the -generated files depends on the selected mapping and options. -.\" -.\" -.\" -.\"-------------------------------------------------------------------- -.SH COMMANDS -.\"-------------------------------------------------------------------- -.IP \fBcxx-tree\fR -Generate the C++/Tree mapping. For each input file in the form -.B name.xsd -the following C++ files are generated: -.B name.hxx -(header file), -.B name.ixx -(inline file, generated only if the -.B --generate-inline -option is specified), -.B name.cxx -(source file), and -.B name-fwd.hxx -(forward declaration file, generated only if the -.B --generate-forward -option is specified). - -.IP \fBcxx-parser\fR -Generate the C++/Parser mapping. For each input file in the form -.B name.xsd -the following C++ files are generated: -.B name-pskel.hxx -(parser skeleton header file), -.B name-pskel.ixx -(parser skeleton inline file, generated only if the -.B --generate-inline -option is specified), and -.B name-pskel.cxx -(parser skeleton source file). If the -.B --generate-noop-impl -or -.B --generate-print-impl -option is specified, the following additional sample implementation files -are generated: -.B name-pimpl.hxx -(parser implementation header file) and -.B name-pimpl.cxx -(parser implementation source file). If the -.B --generate-test-driver -option is specified, the additional -.B name-driver.cxx -test driver file is generated. - -.IP \fBhelp\fR -Print usage information and exit. Use -.PP -.RS -.RS 3 -.B xsd help -.I command -.RE -.PP -for command-specific help. -.RE -.IP \fBversion\fR -Print version and exit. -.\"-------------------------------------------------------------------- -.SH OPTIONS -.\"-------------------------------------------------------------------- -Command-specific -.IR options , -if any, should appear after the corresponding -.IR command . - -.\" -.\" Common options. -.\" -.SS common options -. -.IP "\fB\--char-type \fItype\fR" -Generate code using the provided character -.I type -instead of the default -.BR char . -Valid values are -.B char -and -.BR wchar_t . -. -.IP "\fB\--char-encoding \fIenc\fR" -Specify the character encoding that should be used in the generated code. -Valid values for the -.B char -character type are -.B utf8 -(default), -.BR iso8859-1 , lcp -(Xerces-C++ local code page), -and -.BR custom . -If you pass -.B custom -as the value then you will need to include the transcoder implementation -header for your encoding at the beginning of the generated header files -(see the -.B --hxx-prologue -option). - -For the -.B wchar_t -character type the only valid value is -.B auto -and the encoding is automatically selected between UTF-16 and UTF-32/UCS-4, -depending on the -.B wchar_t -type size. -. -.IP "\fB\--output-dir \fIdir\fR" -Write generated files to -.I dir -instead of the current directory. - -.IP "\fB\--namespace-map \fIxns\fB=\fIcns" -Map XML Schema namespace -.I xns -to C++ namespace -.IR cns . -Repeat this option to specify mapping for more than one XML Schema namespace. -For example, the following option: - -.B --namespace-map http://example.com/foo/bar=foo::bar - -will map the -.B http://example.com/foo/bar -XML Schema namespace to the -.B foo::bar -C++ namespace. -. -.IP "\fB\--namespace-regex \fIregex\fR" -Add -.I regex -to the list of regular expressions used to translate XML Schema namespace -names to C++ namespace names. -.I regex -is a perl-like regular expression in the form -.BI / pattern / replacement /\fR. -Any character can be used as a delimiter instead of -.BR / . -Escaping of the delimiter character in -.I pattern -or -.I replacement -is not supported. - -All the regular expressions are pushed into a stack with the last specified -expression considered first. The first match that succeeds is used. Regular -expressions are applied to a string in the form - -.I filename namespace - -For example, if you have file -.B hello.xsd -with namespace -.B http://example.com/hello -and you run -.B xsd -on this file, then the string in question will be: - -.B hello.xsd. http://example.com/hello - -For the built-in XML Schema namespace the string is: - -.B XMLSchema.xsd http://www.w3.org/2001/XMLSchema - -The following three steps are performed for each regular expression until -the match is found: -.RS -.RS 3 -.TP 3 -1. -The expression is applied and if the result is empty the next expression -is considered. -.TP 3 -2. -All -.B / -are replaced with -.BR :: . -.TP 3 -3. -The result is verified to be a valid C++ scope name (e.g., -.BR foo::bar ). -If this test succeeds, the result is used as a C++ namespace name. -.RE -.PP -As an example, the following expression maps XML Schema namespaces in the -form -.B http://example.com/foo/bar -to C++ namespaces in the form -.BR foo::bar : -.PP -.B "%.* http://example.com/(.+)%$1%" - -See also the REGEX AND SHELL QUOTING section below. -.RE - -.IP "\fB\--namespace-regex-trace\fR" -Trace the process of applying regular expressions specified with -the -.B --namespace-regex -option. Use this option to find out why your regular expressions -don't do what you expected them to do. - -\" -\" Reserved names. -\" - -.IP "\fB\--reserved-name \fIname\fR[\fB=\fIrep\fR]" -Add -.I name -to the list of names that should not be used as identifiers. The name -can optionally be followed by -.B = -and the replacement name that should be used instead. All the C++ keywords -are already in this list. - -\" -\" Include -\" - -.IP "\fB\--include-with-brackets\fR" -Use angle brackets (<>) instead of quotes ("") in generated -.B #include -directives. - -.IP "\fB\--include-prefix \fIprefix\fR" -Add -.I prefix -to generated -.B #include -directive paths. - -For example, if you had the following import element in your schema - -.B - -and compiled this fragment with -.B --include-prefix schemas/\fR, -then the include directive in the generated code would be: - -.B #include "schemas/base.hxx" - -.IP "\fB\--include-regex \fIregex\fR" -Add -.I regex -to the list of regular expressions used to transform -.B #include -directive paths. -.I regex -is a perl-like regular expression in the form -.BI / pattern / replacement /\fR. -Any character can be used as a delimiter instead of -.BR / . -Escaping of the delimiter character in -.I pattern -or -.I replacement -is not supported. - -All the regular expressions are pushed into a stack with the last specified -expression considered first. The first match that succeeds is used. - -As an example, the following expression transforms paths in the form -.B schemas/foo/bar -to paths in the form -.BR generated/foo/bar : - -.B "%schemas/(.+)%generated/$1%" - -See also the REGEX AND SHELL QUOTING section below. - -.IP "\fB\--include-regex-trace\fR" -Trace the process of applying regular expressions specified with -the -.B --include-regex -option. Use this option to find out why your regular expressions -don't do what you expected them to do. - -.IP "\fB\--guard-prefix \fIprefix\fR" -Add -.I prefix -to generated header inclusion guards. The prefix is transformed to upper -case and characters that are illegal in a preprocessor macro name are -replaced with underscores. If this option is not specified then the -directory part of the input schema file is used as a prefix. - -.\" -.\" Suffixes. -.\" - -.IP "\fB\--hxx-suffix \fIsuffix\fR" -Use the provided -.I suffix -instead of the default -.B .hxx -to construct the name of the header file. Note that this suffix is also -used to construct names for included/imported schemas. - -.IP "\fB\--ixx-suffix \fIsuffix\fR" -Use the provided -.I suffix -instead of the default -.B .ixx -to construct the name of the inline file. - -.IP "\fB\--cxx-suffix \fIsuffix\fR" -Use the provided -.I suffix -instead of the default -.B .cxx -to construct the name of the source file. - -.IP "\fB\--hxx-regex \fIregex\fR" -Use the provided expression to construct the name of the header file. -.I regex -is a perl-like regular expression in the form -.BI / pattern / replacement /\fR. -Note that this expression is also used to construct names for -included/imported schemas. See also the REGEX AND SHELL QUOTING section -below. - -.IP "\fB\--ixx-regex \fIregex\fR" -Use the provided expression to construct the name of the inline file. -.I regex -is a perl-like regular expression in the form -.BI / pattern / replacement /\fR. -See also the REGEX AND SHELL QUOTING section below. - -.IP "\fB\--cxx-regex \fIregex\fR" -Use the provided expression to construct the name of the source file. -.I regex -is a perl-like regular expression in the form -.BI / pattern / replacement /\fR. -See also the REGEX AND SHELL QUOTING section below. - -.IP "\fB\--hxx-prologue \fItext\fR" -Insert -.I text -at the beginning of the header file. - -.IP "\fB\--ixx-prologue \fItext\fR" -Insert -.I text -at the beginning of the inline file. - -.IP "\fB\--cxx-prologue \fItext\fR" -Insert -.I text -at the beginning of the source file. - -.IP "\fB\--prologue \fItext\fR" -Insert -.I text -at the beginning of each generated file for which there is no file-specific -prologue. - -.IP "\fB\--hxx-epilogue \fItext\fR" -Insert -.I text -at the end of the header file. - -.IP "\fB\--ixx-epilogue \fItext\fR" -Insert -.I text -at the end of the inline file. - -.IP "\fB\--cxx-epilogue \fItext\fR" -Insert -.I text -at the end of the source file. - -.IP "\fB\--epilogue \fItext\fR" -Insert -.I text -at the end of each generated file for which there is no file-specific -epilogue. - -.IP "\fB\--hxx-prologue-file \fIfile\fR" -Insert the content of the -.I file -at the beginning of the header file. - -.IP "\fB\--ixx-prologue-file \fIfile\fR" -Insert the content of the -.I file -at the beginning of the inline file. - -.IP "\fB\--cxx-prologue-file \fIfile\fR" -Insert the content of the -.I file -at the beginning of the source file. - -.IP "\fB\--prologue-file \fIfile\fR" -Insert the content of the -.I file -at the beginning of each generated file for which there is no file-specific -prologue file. - -.IP "\fB\--hxx-epilogue-file \fIfile\fR" -Insert the content of the -.I file -at the end of the header file. - -.IP "\fB\--ixx-epilogue-file \fIfile\fR" -Insert the content of the -.I file -at the end of the inline file. - -.IP "\fB\--cxx-epilogue-file \fIfile\fR" -Insert the content of the -.I file -at the end of the source file. - -.IP "\fB\--epilogue-file \fIfile\fR" -Insert the content of the -.I file -at the end of each generated file for which there is no file-specific -epilogue file. - -.IP "\fB\--custom-literals \fIfile\fR" -Load custom XML string to C++ literal mappings from -.IR file . -This mechanism can be useful if you are using a custom character encoding -and some of the strings in your schemas, for example element/attribute -names or enumeration values, contain non-ASCII characters. In this case -you will need to provide a custom mapping to C++ literals for such -strings. The format of this file is specified in the -.B custom-literals.xsd -XML Schema file that can be found in the documentation directory. - -.IP "\fB\--export-symbol \fIsymbol\fR" -Insert -.I symbol -in places where DLL export/import control statements ( -.BR __declspec(dllexport/dllimport) ) -are necessary. - -.IP "\fB\--export-xml-schema\fR" -Export/import types in the XML Schema namespace using the export -symbol provided with the -.B --export-symbol -option. The -.B XSD_NO_EXPORT -macro can be used to omit this code during C++ compilation, which may be -useful if you would like to use the same generated code across multiple -platforms. - -.IP "\fB\--export-maps\fR" -Export polymorphism support maps from a Win32 DLL into which this generated -code is linked. This is necessary when your type hierarchy is split across -several DLLs since otherwise each DLL will have its own set of maps. In -this situation the generated code for the DLL which contains base types -and/or substitution group heads should be compiled with this option and -the generated code for all other DLLs should be compiled with -.BR --import-maps . -This option is only valid together with -.BR --generate-polymorphic. -The -.B XSD_NO_EXPORT -macro can be used to omit this code during C++ compilation, which may be -useful if you would like to use the same generated code across multiple -platforms. - -.IP "\fB\--import-maps\fR" -Import polymorphism support maps to a Win32 DLL or executable into which -this generated code is linked. See the -.B --export-maps -option documentation for details. This option is only valid together with -.BR --generate-polymorphic. -The -.B XSD_NO_EXPORT -macro can be used to omit this code during C++ compilation, which may be -useful if you would like to use the same generated code across multiple -platforms. - -.IP "\fB\--disable-warning \fIwarn\fR" -Disable printing warning with id -.IR warn . -If -.B all -is specified for the warning id then all warnings are disabled. - -.IP "\fB\--show-sloc\fR" -Show the number of generated physical source lines of code (SLOC). - -.IP "\fB\--sloc-limit \fInum\fR" -Check that the number of generated physical source lines of code (SLOC) -does not exceed -.I num. - -.IP "\fB\--options-file \fIfile\fR" -Read additional options from -.IR file . -Each option should appear on a separate line optionally followed by -space and an argument. Empty lines and lines starting with -.B # -are ignored. The semantics of providing options in a file is equivalent -to providing the same set of options in the same order in the command -line at the point where the -.B --options-file -option is specified except that shell escaping and quoting is not -required. Repeat this option to specify more than one options files. - -.IP "\fB\--proprietary-license\fR" -Indicate that the generated code is licensed under a proprietary license -instead of the GPL. - -.IP "\fB\--preserve-anonymous\fR" -Preserve anonymous types. By default anonymous types are -automatically named with names derived from the enclosing -elements/attributes. Because mappings implemented by this -compiler require all types to be named, this option is only -useful if you want to make sure your schemas don't have -anonymous types. - -.IP "\fB\--show-anonymous\fR" -Show elements and attributes that are of anonymous types. This option -only makes sense together with the -.B --preserve-anonymous -option. - -.IP "\fB\--anonymous-regex \fIregex\fR" -Add -.I regex -to the list of regular expressions used to derive names for anonymous -types from the enclosing attributes/elements. -.I regex -is a perl-like regular expression in the form -.BI / pattern / replacement /\fR. -Any character can be used as a delimiter instead of -.BR / . -Escaping of the delimiter character in -.I pattern -or -.I replacement -is not supported. - -All the regular expressions are pushed into a stack with the last -specified expression considered first. The first match that -succeeds is used. Regular expressions are applied to a string -in the form - -.I filename namespace xpath - -For instance: - -.B hello.xsd http://example.com/hello element - -.B hello.xsd http://example.com/hello type/element - -As an example, the following expression makes all the derived -names start with capital letters. This could be useful when -your naming convention requires type names to start with -capital letters: - -.B %.* .* (.+/)*(.+)%\\\\u$2% - -See also the REGEX AND SHELL QUOTING section below. - -.IP "\fB\--anonymous-regex-trace\fR" -Trace the process of applying regular expressions specified with -the -.B --anonymous-regex -option. Use this option to find out why your regular expressions -don't do what you expected them to do. - -.IP "\fB\--location-map \fIol\fB=\fInl" -Map the original schema location -.I ol -that is specified in the XML Schema include or import elements to new -schema location -.IR nl . -Repeat this option to map more than one schema location. For example, -the following option maps the -.B http://example.com/foo.xsd -URL to the -.B foo.xsd -local file. - -.B --location-map http://example.com/foo.xsd=foo.xsd - -.IP "\fB\--location-regex \fIregex\fR" -Add -.I regex -to the list of regular expressions used to map schema locations that are -specified in the XML Schema include or import elements. -.I regex -is a perl-like regular expression in the form -.BI / pattern / replacement /\fR. -Any character can be used as a delimiter instead of -.BR / . -Escaping of the delimiter character in -.I pattern -or -.I replacement -is not supported. All the regular expressions are pushed into a stack with the -last specified expression considered first. The first match that succeeds -is used. - -For example, the following expression maps URL locations in the form -.B http://example.com/foo/bar.xsd -to local files in the form -.BR bar.xsd : - -.B %http://.+/(.+)%$1% - -See also the REGEX AND SHELL QUOTING section below. - -.IP "\fB\--location-regex-trace\fR" -Trace the process of applying regular expressions specified with -the -.B --location-regex -option. Use this option to find out why your regular expressions -don't do what you expected them to do. - -.IP "\fB\--file-per-type\fR" -Generate a separate set of C++ files for each type defined in XML Schema. -Note that in this mode you only need to compile the root schema(s) and the -code will be generated for all included and imported schemas. This -compilation mode is primarily useful when some of your schemas cannot be -compiled separately or have cyclic dependencies which involve type -inheritance. Other options related to this mode are: -.BR --type-file-regex , -.BR --schema-file-regex, -and -.BR --file-list . - -.IP "\fB\--type-file-regex \fIregex\fR" -Add -.I regex -to the list of regular expressions used to translate type names to file -names when the -.B --file-per-type -option is specified. -.I regex -is a perl-like regular expression in the form -.BI / pattern / replacement /\fR. -Any character can be used as a delimiter instead of -.BR / . -Escaping of the delimiter character in -.I pattern -or -.I replacement -is not supported. All the regular expressions are pushed into a stack with -the last specified expression considered first. The first match that -succeeds is used. Regular expressions are applied to a string -in the form - -.I namespace type-name - -For example, the following expression maps type -.B foo -that is defined in the -.B http://example.com/bar -namespace to file name -.BR bar-foo : - -.B %http://example.com/(.+) (.+)%$1-$2% - -See also the REGEX AND SHELL QUOTING section below. - -.IP "\fB\--type-file-regex-trace\fR" -Trace the process of applying regular expressions specified with -the -.B --type-file-regex -option. Use this option to find out why your regular expressions -don't do what you expected them to do. - -.IP "\fB\--schema-file-regex \fIregex\fR" -Add -.I regex -to the list of regular expressions used to translate schema file names -when the -.B --file-per-type -option is specified. -.I regex -is a perl-like regular expression in the form -.BI / pattern / replacement /\fR. -Any character can be used as a delimiter instead of -.BR / . -Escaping of the delimiter character in -.I pattern -or -.I replacement -is not supported. All the regular expressions are pushed into a stack -with the last specified expression considered first. The first match -that succeeds is used. Regular expressions are applied to the absolute -filesystem path of a schema file and the result, including the directory -part, if any, is used to derive the -.B #include -directive paths as well as the generated C++ file paths. This option, along -with -.B --type-file-regex -are primarily used to place the generated files into subdirectories or to -resolve file name conflicts. - -For example, the following expression maps schema files in the -.B foo/1.0.0/ -subdirectory to the files in the -.B foo/ -subdirectory. As a result, the -.B #include -directive paths for such schemas will be in the -.B foo/schema.hxx -form and the generated C++ files will be placed into the -.B foo/ -subdirectory: - -.B %.*/foo/1.0.0/(.+)%foo/$1% - -See also the REGEX AND SHELL QUOTING section below. - -.IP "\fB\--schema-file-regex-trace\fR" -Trace the process of applying regular expressions specified with -the -.B --schema-file-regex -option. Use this option to find out why your regular expressions -don't do what you expected them to do. - -.IP "\fB\--file-list \fIfile\fR" -Write a list of generated C++ files to -.IR file . -This option is primarily useful in the file-per-type compilation mode -.RB ( --file-per-type ) -to create a list of generated C++ files, for example, as a makefile fragment. - -.IP "\fB\--file-list-prologue \fItext\fR" -Insert -.I text -at the beginning of the file list. As a convenience, all occurrences of the -\\n character sequence in -.I text -are replaced with new lines. This option can, for example, be used to assign -the generated file list to a makefile variable. - -.IP "\fB\--file-list-epilogue \fItext\fR" -Insert -.I text -at the end of the file list. As a convenience, all occurrences of the -\\n character sequence in -.I text -are replaced with new lines. - -.IP "\fB\--file-list-delim \fItext\fR" -Delimit file names written to the file list with -.I text -instead of new lines. As a convenience, all occurrences of the \\n character -sequence in -.I text -are replaced with new lines. - -.\" -.\" C++/Tree options. -.\" -.SS cxx-tree command options - -.IP "\fB\--generate-polymorphic\fR" -Generate polymorphism-aware code. Specify this option if you use substitution -groups or -.BR xsi:type . -Use the -.B --polymorphic-type -or -.B --polymorphic-type-all -option to specify which type hierarchies are polymorphic. - -.IP "\fB\--polymorphic-type \fItype\fR" -Indicate that -.I type -is a root of a polymorphic type hierarchy. The compiler can often -automatically determine which types are polymorphic based on the -substitution group declarations. However, you may need to use this -option if you are not using substitution groups or if substitution -groups are defined in another schema. You need to specify this option -when compiling every schema file that references -.IR type . -The -.I type -argument is an XML Schema type name that can be optionally qualified -with a namespace in the -.IB namespace # name -form. - -.IP "\fB\--polymorphic-type-all\fR" -Indicate that all types should be treated as polymorphic. - -.IP "\fB\--generate-serialization\fR" -Generate serialization functions. Serialization functions convert -the object model back to XML. - -.IP "\fB\--generate-inline\fR" -Generate simple functions inline. This option triggers creation of the -inline file. - -.IP "\fB\--generate-ostream\fR" -Generate ostream insertion operators -.RB ( operator<< ) -for generated types. This allows to easily print a fragment or the whole -object model for debugging or logging. - -.IP "\fB\--generate-doxygen\fR" -Generate documentation comments suitable for extraction by the Doxygen -documentation system. Documentation from annotations is added to the -comments if present in the schema. - -.IP "\fB\--generate-comparison\fR" -Generate comparison operators -.RB ( operator== -and -.BR operator!= ) -for complex types. Comparison is performed memberwise. - -.IP "\fB\--generate-default-ctor\fR" -Generate default constructors even for types that have required members. -Required members of an instance constructed using such a constructor are -not initialized and accessing them results in undefined behavior. - -.IP "\fB\--generate-from-base-ctor\fR" -Generate constructors that expect an instance of a base type followed by all -required members. - -.IP "\fB\--generate-detach\fR" -Generate detach functions for required elements and attributes (detach -functions for optional and sequence cardinalities are provided by the -respective containers). These functions, for example, allow you to move -sub-trees in the object model either within the same tree or between -different trees. - -.IP "\fB\--generate-wildcard\fR" -Generate accessors and modifiers as well as parsing and serialization code -for XML Schema wildcards -.RB ( any -and -.BR anyAttribute ). -XML content matched by wildcards is presented as DOM fragments. Note that -you need to initialize the Xerces-C++ runtime if you are using this option. - -.IP "\fB\--generate-insertion \fIos\fR" -Generate data representation stream insertion operators for the -.I os -output stream type. Repeat this option to specify more than one stream -type. The ACE CDR stream -.RB ( ACE_OutputCDR ) -and RPC XDR are recognized by the compiler and the necessary -.B #include -directives are automatically generated. For custom stream types use the -.B --hxx-prologue* -options to provide the necessary declarations. - -.IP "\fB\--generate-extraction \fIis\fR" -Generate data representation stream extraction constructors for the -.I is -input stream type. Repeat this option to specify more than one stream -type. The ACE CDR stream -.RB ( ACE_InputCDR ) -and RPC XDR are recognized by the compiler and the necessary -.B #include -directives are automatically generated. For custom stream types use the -.B --hxx-prologue* -options to provide the necessary declarations. - -.IP "\fB\--generate-forward\fR" -Generate a separate header file with forward declarations for the types -being generated. - -.IP "\fB\--generate-xml-schema\fR" -Generate a C++ header file as if the schema being compiled defines the -XML Schema namespace. In particular, the resulting file will have -definitions for all XML Schema built-in types. The schema file provided -to the compiler need not exist and is only used to derive the name of the -resulting header file. Use the -.B --extern-xml-schema -option to include this file in the generated files for other schemas. - -.IP "\fB\--extern-xml-schema \fIfile\fR" -Include a header file derived from -.I file -instead of generating the XML Schema namespace mapping inline. The provided -file need not exist and is only used to derive the name of the included -header file. Use the -.B --generate-xml-schema -option to generate this header file. - -.IP "\fB\--suppress-parsing\fR" -Suppress the generation of the parsing functions and constructors. Use this -option to reduce the generated code size when parsing from XML is not -needed. - -.IP "\fB\--generate-element-type\fR" -Generate types instead of parsing and serialization functions for root -elements. This is primarily useful to distinguish object models with the -same root type but with different root elements. - -.IP "\fB\--generate-element-map\fR" -Generate a root element map that allows uniform parsing and serialization -of multiple root elements. This option is only valid together with -.BR --generate-element-type . - -.IP "\fB\--generate-intellisense\fR" -Generate workarounds for IntelliSense bugs in Visual Studio 2005 (8.0). When -this option is used, the resulting code is slightly more verbose. IntelliSense -in Visual Studio 2008 (9.0) does not require these workarounds. Support for -IntelliSense in Visual Studio 2003 (7.1) is improved with this option but -is still incomplete. - -.IP "\fB\--omit-default-attributes\fR" -Omit attributes with default and fixed values from serialized XML -documents. - -\" -\" Naming -\" - -.IP "\fB\--type-naming \fIstyle\fR" -Specify the type naming convention that should be used in the generated code. -Valid styles are -.B knr -(default), -.BR ucc , -and -.BR java . -See the NAMING CONVENTION section below for more information. - -.IP "\fB\--function-naming \fIstyle\fR" -Specify the function naming convention that should be used in the generated -code. Valid styles are -.B knr -(default), -.BR lcc , -and -.BR java. -See the NAMING CONVENTION section below for more information. - -.IP "\fB\--type-regex \fIregex\fR" -Add -.I regex -to the list of regular expressions used to translate XML Schema -type names to C++ type names. See the NAMING CONVENTION section below for -more information. - -.IP "\fB\--accessor-regex \fIregex\fR" -Add -.I regex -to the list of regular expressions used to translate XML Schema -names of elements/attributes to C++ accessor function names. See the NAMING -CONVENTION section below for more information. - -.IP "\fB\--one-accessor-regex \fIregex\fR" -Add -.I regex -to the list of regular expressions used to translate XML Schema -names of elements/attributes with cardinality one to C++ accessor function -names. See the NAMING CONVENTION section below for more information. - -.IP "\fB\--opt-accessor-regex \fIregex\fR" -Add -.I regex -to the list of regular expressions used to translate XML Schema -names of elements/attributes with cardinality optional to C++ accessor -function names. See the NAMING CONVENTION section below for more information. - -.IP "\fB\--seq-accessor-regex \fIregex\fR" -Add -.I regex -to the list of regular expressions used to translate XML Schema -names of elements/attributes with cardinality sequence to C++ accessor -function names. See the NAMING CONVENTION section below for more information. - -.IP "\fB\--modifier-regex \fIregex\fR" -Add -.I regex -to the list of regular expressions used to translate XML Schema -names of elements/attributes to C++ modifier function names. See the NAMING -CONVENTION section below for more information. - -.IP "\fB\--one-modifier-regex \fIregex\fR" -Add -.I regex -to the list of regular expressions used to translate XML Schema -names of elements/attributes with cardinality one to C++ modifier function -names. See the NAMING CONVENTION section below for more information. - -.IP "\fB\--opt-modifier-regex \fIregex\fR" -Add -.I regex -to the list of regular expressions used to translate XML Schema -names of elements/attributes with cardinality optional to C++ modifier -function names. See the NAMING CONVENTION section below for more information. - -.IP "\fB\--seq-modifier-regex \fIregex\fR" -Add -.I regex -to the list of regular expressions used to translate XML Schema -names of elements/attributes with cardinality sequence to C++ modifier -function names. See the NAMING CONVENTION section below for more information. - -.IP "\fB\--parser-regex \fIregex\fR" -Add -.I regex -to the list of regular expressions used to translate XML Schema -element names to C++ parsing function names. See the NAMING CONVENTION -section below for more information. - -.IP "\fB\--serializer-regex \fIregex\fR" -Add -.I regex -to the list of regular expressions used to translate XML Schema -element names to C++ serialization function names. See the NAMING -CONVENTION section below for more information. - -.IP "\fB\--enumerator-regex \fIregex\fR" -Add -.I regex -to the list of regular expressions used to translate XML Schema -enumeration values to C++ enumerator names. See the NAMING CONVENTION -section below for more information. - -.IP "\fB\--element-type-regex \fIregex\fR" -Add -.I regex -to the list of regular expressions used to translate XML Schema -element names to C++ element type names. See the NAMING CONVENTION section -below for more information. - -.IP "\fB\--name-regex-trace\fR" -Trace the process of applying regular expressions specified with the name -transformation options. Use this option to find out why your regular -expressions don't do what you expected them to do. - -\" -\" Root element. -\" - -.IP "\fB\--root-element-first\fR" -Treat only the first global element as a document root. By default all -global elements are considered document roots. - -.IP "\fB\--root-element-last\fR" -Treat only the last global element as a document root. By default all -global elements are considered document roots. - -.IP "\fB\--root-element-all\fR" -Treat all global elements as document roots. This is the default behavior. -By explicitly specifying this option you can suppress the warning that is -issued if more than one global element is defined. - -.IP "\fB\--root-element-none\fR" -Do not treat any global elements as document roots. By default all global -elements are considered document roots. - -.IP "\fB\--root-element \fIelement\fR" -Treat only -.I element -as a document root. Repeat this option to specify more than one root element. - -\" -\" Custom type. -\" - -.IP "\fB\--custom-type \fIname\fR[\fB=\fItype\fR[\fB/\fIbase\fR]]" -Use a custom C++ type -.I type -instead of the generated class for XML Schema type -.IR name . -If -.I type -is not present or empty then the custom type is assumed to have the same name -and be defined in the same namespace as the generated class would have. If -.I base -is specified then the generated class is still generated but with that name. - -.IP "\fB\--custom-type-regex \fB/\fIname-pat\fB/\fR[\fItype-sub\fB/\fR[\fIbase-sub\fB/\fR]]" -For each type defined in XML Schema that matches the -.I name-pat -pattern use a custom C++ type instead of the generated class. The -name of the custom type is obtained by substituting -.IR type-sub . -If -.I type-sub -is not present or its substitution results in an empty string then the -custom type is assumed to have the same name and be defined in the same -namespace as the generated class would have. If -.I base-sub -is present and its substitution results in a non-empty string then the -generated class is still generated but with the result of substitution -as its name. The pattern and substitutions are in the perl regular -expression format. See also the REGEX AND SHELL QUOTING section below. - -\" -\" Suffixes. -\" - -.IP "\fB\--fwd-suffix \fIsuffix\fR" -Use the provided -.I suffix -instead of the default -.B -fwd.hxx -to construct the name of the forward declaration file. - -.IP "\fB\--fwd-regex \fIregex\fR" -Use the provided expression to construct the name of the forward -declaration file. -.I regex -is a perl-like regular expression in the form -.BI / pattern / replacement /\fR. -See also the REGEX AND SHELL QUOTING section below. - -.IP "\fB\--fwd-prologue \fItext\fR" -Insert -.I text -at the beginning of the forward declaration file. - -.IP "\fB\--fwd-epilogue \fItext\fR" -Insert -.I text -at the end of the forward declaration file. - -.IP "\fB\--fwd-prologue-file \fIfile\fR" -Insert the content of the -.I file -at the beginning of the forward declaration file. - -.IP "\fB\--fwd-epilogue-file \fIfile\fR" -Insert the content of the -.I file -at the end of the forward declaration file. - -\" -\" Parts. -\" - -.IP "\fB\--parts \fInum\fR" -Split generated source code into -.I num -parts. This is useful when translating large, monolithic schemas and a C++ -compiler is not able to compile the resulting source code at once (usually -due to insufficient memory). - -.IP "\fB\--parts-suffix \fIsuffix\fR" -Use -.I suffix -instead of the default '\fB-\fR' to separate the file name from the part -number. - -\" -\" C++/Parser -\" - -.SS cxx-parser command options - -.IP "\fB\--type-map \fImapfile\fR" -Read XML Schema to C++ type mapping information from -.I mapfile -Repeat this option to specify several type maps. Type maps are -considered in order of appearance and the first match is used. -By default all user-defined types are mapped to -.BR void . -See the TYPE MAP section below for more information. - -.IP "\fB\--xml-parser \fIparser\fR" -Use -.I parser -as the underlying XML parser. Valid values are -.B xerces -for Xerces-C++ (default) and -.B expat -for Expat. - -.IP "\fB\--generate-inline\fR" -Generate simple functions inline. This option triggers creation of the -inline file. - -.IP "\fB\--generate-validation\fR" -Generate validation code ("perfect" parser) which ensures that instance -documents conform to the schema. Validation code is generated by default -when the selected underlying XML parser is non-validating (\fBexpat\fR). - -.IP "\fB\--suppress-validation\fR" -Suppress the generation of validation code ("perfect" parser). Validation is -suppressed by default when the selected underlying XML parser is -validating (\fBxerces\fR). - -.IP "\fB\--generate-polymorphic\fR" -Generate polymorphism-aware code. Specify this option if you use substitution -groups or -.BR xsi:type . - -.IP "\fB\--generate-noop-impl\fR" -Generate a sample parser implementation that does nothing (no operation). -The sample implementation can then be filled with the application-specific -code. For an input file in the form -.B name.xsd -this option triggers the generation of the two additional C++ files in the form: -.B name-pimpl.hxx -(parser implementation header file) and -.B name-pimpl.cxx -(parser implementation source file). - -.IP "\fB\--generate-print-impl\fR" -Generate a sample parser implementation that prints the XML data to STDOUT. -For an input file in the form -.B name.xsd -this option triggers the generation of the two additional C++ files in the form: -.B name-pimpl.hxx -(parser implementation header file) and -.B name-pimpl.cxx -(parser implementation source file). - -.IP "\fB\--generate-test-driver\fR" -Generate a test driver for the sample parser implementation. For an input -file in the form -.B name.xsd -this option triggers the generation of an additional C++ file in the form -.BR name-driver.cxx . - -.IP "\fB\--force-overwrite\fR" -Force overwriting of the existing implementation and test driver files. -Use this option only if you do not mind loosing the changes you have made -in the sample implementation or test driver files. - -.IP "\fB\--root-element-first\fR" -Indicate that the first global element is the document root. This information -is used to generate the test driver for the sample implementation. - -.IP "\fB\--root-element-last\fR" -Indicate that the last global element is the document root. This information -is used to generate the test driver for the sample implementation. - -.IP "\fB\--root-element \fIelement\fR" -Indicate that -.I element -is the document root. This information is used to generate the test driver -for the sample implementation. - -.IP "\fB\--generate-xml-schema\fR" -Generate a C++ header file as if the schema being compiled defines the -XML Schema namespace. In particular, the resulting file will have -definitions for all parser skeletons and implementations corresponding -to the XML Schema built-in types. The schema file provided to the compiler -need not exist and is only used to derive the name of the resulting header -file. Use the -.B --extern-xml-schema -option to include this file in the generated files for other schemas. - -.IP "\fB\--extern-xml-schema \fIfile\fR" -Include a header file derived from -.I file -instead of generating the XML Schema namespace mapping inline. The provided -file need not exist and is only used to derive the name of the included -header file. Use the -.B --generate-xml-schema -option to generate this header file. - -.IP "\fB\--skel-type-suffix \fIsuffix\fR" -Use the provided -.I suffix -instead of the default -.B _pskel -to construct the names of generated parser skeletons. - -.IP "\fB\--skel-file-suffix \fIsuffix\fR" -Use the provided -.I suffix -instead of the default -.B -pskel -to construct the names of generated parser skeleton files. - -.IP "\fB\--impl-type-suffix \fIsuffix\fR" -Use the provided -.I suffix -instead of the default -.B _pimpl -to construct the names of parser implementations for the built-in XML -Schema types and sample parser implementations. - -.IP "\fB\--impl-file-suffix \fIsuffix\fR" -Use the provided -.I suffix -instead of the default -.B -pimpl -to construct the names of generated sample parser implementation files. - -\" -\" NAMING CONVENTION -\" - -.SH NAMING CONVENTION -The compiler can be instructed to use a particular naming convention in -the generated code. A number of widely-used conventions can be selected -using the -.B --type-naming -and -.B --function-naming -options. A custom naming convention can be achieved using the -.BR --type-regex , -.BR --accessor-regex , -.BR --one-accessor-regex , -.BR --opt-accessor-regex , -.BR --seq-accessor-regex , -.BR --modifier-regex , -.BR --one-modifier-regex , -.BR --opt-modifier-regex , -.BR --seq-modifier-regex , -.BR --parser-regex , -.BR --serializer-regex , -.BR --enumerator-regex , -and -.B --element-type-regex -options. - -The -.B --type-naming -option specifies the convention that should be used for naming C++ types. -Possible values for this option are -.B knr -(default), -.BR ucc , -and -.BR java . -The -.B knr -value (stands for K&R) signifies the standard, lower-case naming convention -with the underscore used as a word delimiter, for example: foo, foo_bar. -The -.B ucc -(stands for upper-camel-case) and -.B java -values a synonyms for the same naming convention where the first letter -of each word in the name is capitalized, for example: Foo, FooBar. - -Similarly, the -.B --function-naming -option specifies the convention that should be used for naming C++ functions. -Possible values for this option are -.B knr -(default), -.BR lcc , -and -.BR java . -The -.B knr -value (stands for K&R) signifies the standard, lower-case naming convention -with the underscore used as a word delimiter, for example: foo(), foo_bar(). -The -.B lcc -value (stands for lower-camel-case) signifies a naming convention where the -first letter of each word except the first is capitalized, for example: foo(), -fooBar(). The -.B java -naming convention is similar to the lower-camel-case one except that accessor -functions are prefixed with get, modifier functions are prefixed with set, -parsing functions are prefixed with parse, and serialization functions are -prefixed with serialize, for example: getFoo(), setFooBar(), parseRoot(), -serializeRoot(). - -Note that the naming conventions specified with the -.B --type-naming -and -.B --function-naming -options perform only limited transformations on the -names that come from the schema in the form of type, attribute, and element -names. In other words, to get consistent results, your schemas should follow -a similar naming convention as the one you would like to have in the generated -code. Alternatively, you can use the -.B --*-regex -options (discussed below) to perform further transformations on the names -that come from the schema. - -The -.BR --type-regex , -.BR --accessor-regex , -.BR --one-accessor-regex , -.BR --opt-accessor-regex , -.BR --seq-accessor-regex , -.BR --modifier-regex , -.BR --one-modifier-regex , -.BR --opt-modifier-regex , -.BR --seq-modifier-regex , -.BR --parser-regex , -.BR --serializer-regex , -.BR --enumerator-regex , -and -.B --element-type-regex -options allow you to specify extra regular expressions for each name -category in addition to the predefined set that is added depending on -the -.B --type-naming -and -.B --function-naming -options. Expressions that are provided with the -.B --*-regex -options are evaluated prior to any predefined expressions. This allows -you to selectively override some or all of the predefined transformations. -When debugging your own expressions, it is often useful to see which -expressions match which names. The -.B --name-regex-trace -option allows you to trace the process of applying -regular expressions to names. - -The value for the -.B --*-regex -options should be a perl-like regular expression in the form -.BI / pattern / replacement /\fR. -Any character can be used as a delimiter instead of -.BR / . -Escaping of the delimiter character in -.I pattern -or -.I replacement -is not supported. All the regular expressions for each category are pushed -into a category-specific stack with the last specified expression -considered first. The first match that succeeds is used. For the -.B --one-accessor-regex -(accessors with cardinality one), -.B --opt-accessor-regex -(accessors with cardinality optional), and -.B --seq-accessor-regex -(accessors with cardinality sequence) categories the -.B --accessor-regex -expressions are used as a fallback. For the -.BR --one-modifier-regex , -.BR --opt-modifier-regex , -and -.B --seq-modifier-regex -categories the -.B --modifier-regex -expressions are used as a fallback. For the -.B --element-type-regex -category the -.B --type-regex -expressions are used as a fallback. - -The type name expressions -.RB ( --type-regex ) -are evaluated on the name string that has the following format: - -[\fInamespace \fR]\fIname\fR[\fB,\fIname\fR][\fB,\fIname\fR][\fB,\fIname\fR] - -The element type name expressions -.RB ( --element-type-regex ), -effective only when the -.B --generate-element-type -option is specified, are evaluated on the name string that has the following -format: - -.I namespace name - -In the type name format the -.I namespace -part followed by a space is only present for global type names. For global -types and elements defined in schemas without a target namespace, the -.I namespace -part is empty but the space is still present. In the type name format after -the initial -.I name -component, up to three additional -.I name -components can be present, separated by commas. For example: - -.B http://example.com/hello type - -.B foo - -.B foo,iterator - -.B foo,const,iterator - -The following set of predefined regular expressions is used to transform -type names when the upper-camel-case naming convention is selected: - -.B /(?:[^ ]* )?([^,]+)/\\\\u$1/ - -.B /(?:[^ ]* )?([^,]+),([^,]+)/\\\\u$1\\\\u$2/ - -.B /(?:[^ ]* )?([^,]+),([^,]+),([^,]+)/\\\\u$1\\\\u$2\\\\u$3/ - -.B /(?:[^ ]* )?([^,]+),([^,]+),([^,]+),([^,]+)/\\\\u$1\\\\u$2\\\\u$3\\\\u$4/ - -The accessor and modifier expressions -.RB ( --*accessor-regex -and -.BR --*modifier-regex ) -are evaluated on the name string that has the following format: - -\fIname\fR[\fB,\fIname\fR][\fB,\fIname\fR] - -After the initial -.I name -component, up to two additional -.I name -components can be present, separated by commas. For example: - -.B foo - -.B dom,document - -.B foo,default,value - -The following set of predefined regular expressions is used to transform -accessor names when the -.B java -naming convention is selected: - -.B /([^,]+)/get\\\\u$1/ - -.B /([^,]+),([^,]+)/get\\\\u$1\\\\u$2/ - -.B /([^,]+),([^,]+),([^,]+)/get\\\\u$1\\\\u$2\\\\u$3/ - -For the parser, serializer, and enumerator categories, the corresponding -regular expressions are evaluated on local names of elements and on -enumeration values, respectively. For example, the following predefined -regular expression is used to transform parsing function names when the -.B java -naming convention is selected: - -.B /(.+)/parse\\\\u$1/ - -See also the REGEX AND SHELL QUOTING section below. - -\" -\" TYPE MAP -\" -.SH TYPE MAP -Type map files are used in C++/Parser to define a mapping between XML -Schema and C++ types. The compiler uses this information to determine -the return types of -.B post_* -functions in parser skeletons corresponding to XML Schema types -as well as argument types for callbacks corresponding to elements -and attributes of these types. - -The compiler has a set of predefined mapping rules that map built-in -XML Schema types to suitable C++ types (discussed below) and all -other types to -.BR void . -By providing your own type maps you can override these predefined rules. -The format of the type map file is presented below: - -.RS -.B namespace -.I schema-namespace -[ -.I cxx-namespace -] -.br -.B { -.br - ( -.B include -.IB file-name ; -)* -.br - ([ -.B type -] -.I schema-type cxx-ret-type -[ -.I cxx-arg-type -.RB ] ; -)* -.br -.B } -.br -.RE - -Both -.I schema-namespace -and -.I schema-type -are regex patterns while -.IR cxx-namespace , -.IR cxx-ret-type , -and -.I cxx-arg-type -are regex pattern substitutions. All names can be optionally enclosed -in \fR" "\fR, for example, to include white-spaces. - -.I schema-namespace -determines XML Schema namespace. Optional -.I cxx-namespace -is prefixed to every C++ type name in this namespace declaration. -.I cxx-ret-type -is a C++ type name that is used as a return type for the -.B post_* -functions. Optional -.I cxx-arg-type -is an argument type for callback functions corresponding to elements and -attributes of this type. If -.I cxx-arg-type -is not specified, it defaults to -.I cxx-ret-type -if -.I cxx-ret-type -ends with -.B * -or -.B & -(that is, it is a pointer or a reference) and -.B const -\fIcxx-ret-type\fB&\fR otherwise. -.I file-name -is a file name either in the \fR" "\fR or < > format and is added with the -.B #include -directive to the generated code. - -The \fB#\fR character starts a comment that ends with a new line or end of -file. To specify a name that contains \fB#\fR enclose it in \fR" "\fR. For -example: - -.RS -namespace http://www.example.com/xmlns/my my -.br -{ -.br - include "my.hxx"; -.br - - # Pass apples by value. - # - apple apple; -.br - - # Pass oranges as pointers. - # - orange orange_t*; -.br -} -.br -.RE - -In the example above, for the -.B http://www.example.com/xmlns/my#orange -XML Schema type, the -.B my::orange_t* -C++ type will be used as both return and argument types. - -Several namespace declarations can be specified in a single file. -The namespace declaration can also be completely omitted to map -types in a schema without a namespace. For instance: - -.RS -include "my.hxx"; -.br -apple apple; -.br - -namespace http://www.example.com/xmlns/my -.br -{ -.br - orange "const orange_t*"; -.br -} -.br -.RE - - -The compiler has a number of predefined mapping rules that can be -presented as the following map files. The string-based XML Schema -built-in types are mapped to either -.B std::string -or -.B std::wstring -depending on the character type selected with the -.B --char-type -option -.RB ( char -by default). - -.RS -namespace http://www.w3.org/2001/XMLSchema -.br -{ -.br - boolean bool bool; -.br - - byte "signed char" "signed char"; -.br - unsignedByte "unsigned char" "unsigned char"; -.br - - short short short; -.br - unsignedShort "unsigned short" "unsigned short"; -.br - - int int int; -.br - unsignedInt "unsigned int" "unsigned int"; -.br - - long "long long" "long long"; -.br - unsignedLong "unsigned long long" "unsigned long long"; -.br - - integer "long long" "long long"; -.br - - negativeInteger "long long" "long long"; -.br - nonPositiveInteger "long long" "long long"; -.br - - positiveInteger "unsigned long long" "unsigned long long"; -.br - nonNegativeInteger "unsigned long long" "unsigned long long"; -.br - - float float float; -.br - double double double; -.br - decimal double double; -.br - - string std::string; -.br - normalizedString std::string; -.br - token std::string; -.br - Name std::string; -.br - NMTOKEN std::string; -.br - NCName std::string; -.br - ID std::string; -.br - IDREF std::string; -.br - language std::string; -.br - anyURI std::string; -.br - - NMTOKENS xml_schema::string_sequence; -.br - IDREFS xml_schema::string_sequence; -.br - - QName xml_schema::qname; -.br - - base64Binary std::auto_ptr -.br - std::auto_ptr; -.br - hexBinary std::auto_ptr -.br - std::auto_ptr; -.br - - date xml_schema::date; -.br - dateTime xml_schema::date_time; -.br - duration xml_schema::duration; -.br - gDay xml_schema::gday; -.br - gMonth xml_schema::gmonth; -.br - gMonthDay xml_schema::gmonth_day; -.br - gYear xml_schema::gyear; -.br - gYearMonth xml_schema::gyear_month; -.br - time xml_schema::time; -.br -} -.br -.RE - - -The last predefined rule maps anything that wasn't mapped by previous -rules to -.BR void : - -.RS -namespace .* -.br -{ -.br - .* void void; -.br -} -.br -.RE - -When you provide your own type maps with the -.B --type-map -option, they are evaluated first. This allows you to selectively override -predefined rules. - -.\" -.\" REGEX AND SHELL QUOTING -.\" -.SH REGEX AND SHELL QUOTING -When entering a regular expression argument in the shell command line -it is often necessary to use quoting (enclosing the argument in " " -or ' ') in order to prevent the shell from interpreting certain -characters, for example, spaces as argument separators and $ as -variable expansions. - -Unfortunately it is hard to achieve this in a manner that is portable -across POSIX shells, such as those found on GNU/Linux and UNIX, and -Windows shell. For example, if you use " " for quoting you will get -a wrong result with POSIX shells if your expression contains $. The -standard way of dealing with this on POSIX systems is to use ' ' -instead. Unfortunately, Windows shell does not remove ' ' from -arguments when they are passed to applications. As a result you may -have to use ' ' for POSIX and " " for Windows ($ is not treated as -a special character on Windows). - -Alternatively, you can save regular expression options into a file, -one option per line, and use this file with the -.B --options-file -option. With this approach you don't need to worry about shell quoting. - -.\" -.\" DIAGNOSTICS -.\" -.SH DIAGNOSTICS -If the input file is not a valid W3C XML Schema definition, -.B xsd -will issue diagnostic messages to -.B STDERR -and exit with non-zero exit code. -.SH BUGS -Send bug reports to the xsd-users@codesynthesis.com mailing list. -.SH COPYRIGHT -Copyright (c) 2005-2010 Code Synthesis Tools CC. - -Permission is granted to copy, distribute and/or modify this -document under the terms of the GNU Free Documentation License, -version 1.2; with no Invariant Sections, no Front-Cover Texts and -no Back-Cover Texts. Copy of the license can be obtained from -http://codesynthesis.com/licenses/fdl-1.2.txt diff --git a/xsd/documentation/xsd.xhtml b/xsd/documentation/xsd.xhtml deleted file mode 100644 index 4acf822..0000000 --- a/xsd/documentation/xsd.xhtml +++ /dev/null @@ -1,1600 +0,0 @@ - - - - - - XSD 3.3.0 Compiler Command Line Manual - - - - - - - - - - - -
-
- -

NAME

- -

xsd - W3C XML Schema to C++ Compiler

- -

SYNOPSIS

- -
-
xsd command [options] file [file ...]
-
xsd help [command]
-
xsd version
-
- -

DESCRIPTION

- -

xsd generates vocabulary-specific, statically-typed - C++ mapping from W3C XML Schema definitions. Particular mapping to - produce is selected by a command. Each mapping has - a number of mapping-specific options that should - appear, if any, after the command. Input files should - be W3C XML Schema definitions. The exact set of the generated files depends - on the selected mapping and options.

- -

COMMANDS

- -
-
cxx-tree
-
Generate the C++/Tree mapping. For each input file in the form - name.xsd the following C++ files are generated: - name.hxx (header file), - name.ixx (inline file, generated only if the - --generate-inline option is specified), - name.cxx (source file), and - name-fwd.hxx (forward declaration file, generated - only if the --generate-forward option is - specified).
- -
cxx-parser
-
Generate the C++/Parser mapping. For each input file in the form - name.xsd the following C++ files are generated: - name-pskel.hxx (parser skeleton header file), - name-pskel.ixx (parser skeleton inline file, - generated only if the --generate-inline - option is specified), and - name-pskel.cxx (parser skeleton source file). - If the --generate-noop-impl or - --generate-print-impl option is specified, - the following additional sample implementation files are generated: - name-pimpl.hxx (parser implementation header - file) and - name-pimpl.cxx (parser implementation source - file). If the --generate-test-driver option - is specified, the additional name-driver.cxx - test driver file is generated.
- -
help
-
Print usage information and exit. Use -

xsd help command

- for command-specific help. -
- -
version
-
Print version and exit.
-
- -

OPTIONS

- -

Command-specific options, if any, should appear - after the corresponding command.

- -

COMMON OPTIONS

- -
-
--char-type type
-
Generate code using the provided character type - instead of the default char. Valid values - are char and wchar_t.
- -
--char-encoding enc
-
Specify the character encoding that should be used in the generated - code. Valid values for the char character type - are utf8 (default), iso8859-1, - lcp (Xerces-C++ local code page), and - custom. If you pass custom as - the value then you will need to include the transcoder implementation - header for your encoding at the beginning of the generated header - files (see the --hxx-prologue option). - -

For the wchar_t character type the only valid - value is auto and the encoding is automatically - selected between UTF-16 and UTF-32/UCS-4, depending on the - wchar_t type size.

- -
--output-dir dir
-
Write generated files to dir instead of - the current directory.
- -
--namespace-map xns=cns
-
Map XML Schema namespace xns to C++ namespace cns. - Repeat this option to specify mapping for more than one XML Schema - namespace. For example, the following option: - -

--namespace-map http://example.com/foo/bar=foo::bar

- -

will map the http://example.com/foo/bar - XML Schema namespace to the foo::bar C++ - namespace.

-
- -
--namespace-regex regex
-
Add regex to the list of regular expressions - used to translate XML Schema namespace names to C++ namespace - names. regex is a perl-like regular expression in - the form /pattern/replacement/. - Any character can be used as a delimiter instead of /. - Escaping of the delimiter character in pattern or - replacement is not supported. - -

All the regular expressions are pushed into a stack with the last - specified expression considered first. The first match that - succeeds is used. Regular expressions are applied to a string - in the form

- -

filename namespace

- -

For example, if you have file hello.xsd - with namespace http://example.com/hello and you run - xsd on this file, then the string in question - will be:

- -

hello.xsd. http://example.com/hello

- -

For the built-in XML Schema namespace the string is:

- -

XMLSchema.xsd http://www.w3.org/2001/XMLSchema

- -

The following three steps are performed for each regular expression - until the match is found:

- -
    -
  1. The expression is applied and if the result is empty the - next expression is considered.
  2. - -
  3. All / are replaced with - ::.
  4. - -
  5. The result is verified to be a valid C++ scope name (e.g., - foo::bar). If this test succeeds, the - result is used as a C++ namespace name.
  6. -
- -

As an example, the following expression maps XML Schema - namespaces in the form - http://example.com/foo/bar to C++ - namespaces in the form foo::bar:

- -

%.* http://example.com/(.+)%$1%

- -

See also the REGEX AND SHELL QUOTING section below.

-
- -
--namespace-regex-trace
-
Trace the process of applying regular expressions specified with - the --namespace-regex option. Use this option - to find out why your regular expressions don't do what you expected - them to do. -
- - - -
--reserved-name name[=rep]
-
Add name to the list of names that should not - be used as identifiers. The name can optionally be followed by - = and the replacement name that should be - used instead. All the C++ keywords are already in this list. -
- - - -
--include-with-brackets
-
Use angle brackets (<>) instead of quotes ("") in - generated #include directives. -
- -
--include-prefix prefix
-
Add prefix to generated #include - directive paths. - -

For example, if you had the following import element in your - schema

- -

<import namespace="..." schemaLocation="base.xsd"/>

- -

and compiled this fragment with --include-prefix schemas/, - then the include directive in the generated code would be:

- -

#include "schemas/base.hxx"

-
- -
--include-regex regex
-
Add regex to the list of regular expressions - used to transform #include directive paths. - regex is a perl-like regular expression in - the form /pattern/replacement/. - Any character can be used as a delimiter instead of /. - Escaping of the delimiter character in pattern or - replacement is not supported. - -

All the regular expressions are pushed into a stack with the last - specified expression considered first. The first match that - succeeds is used.

- -

As an example, the following expression transforms paths - in the form schemas/foo/bar to paths - in the form generated/foo/bar:

- -

%schemas/(.+)%generated/$1%

- -

See also the REGEX AND SHELL QUOTING section below.

-
- -
--include-regex-trace
-
Trace the process of applying regular expressions specified with - the --include-regex option. Use this option - to find out why your regular expressions don't do what you expected - them to do. -
- -
--guard-prefix prefix
-
Add prefix to generated header inclusion guards. - The prefix is transformed to upper case and characters that are - illegal in a preprocessor macro name are replaced with underscores. - If this option is not specified then the directory part of the - input schema file is used as a prefix. -
- - - -
--hxx-suffix suffix
-
Use the provided suffix instead of the default - .hxx to construct the name of the header file. - Note that this suffix is also used to construct names for - included/imported schemas. -
- -
--ixx-suffix suffix
-
Use the provided suffix instead of the default - .ixx to construct the name of the inline file. -
- -
--cxx-suffix suffix
-
Use the provided suffix instead of the default - .cxx to construct the name of the source file. -
- -
--hxx-regex regex
-
Use the provided expression to construct the name of the header - file. regex is a perl-like regular expression - in the form - /pattern/replacement/. - Note that this expression is also used to construct names for - included/imported schemas. See also the REGEX AND SHELL QUOTING - section below. -
- -
--ixx-regex regex
-
Use the provided expression to construct the name of the inline - file. regex is a perl-like regular expression - in the form - /pattern/replacement/. - See also the REGEX AND SHELL QUOTING section below. -
- -
--cxx-regex regex
-
Use the provided expression to construct the name of the source - file. regex is a perl-like regular expression - in the form - /pattern/replacement/. - See also the REGEX AND SHELL QUOTING section below. -
- - -
--hxx-prologue text
-
Insert text at the beginning of the header file. -
- -
--ixx-prologue text
-
Insert text at the beginning of the inline file. -
- -
--cxx-prologue text
-
Insert text at the beginning of the source file. -
- -
--prologue text
-
Insert text at the beginning of each generated - file for which there is no file-specific prologue. -
- -
--hxx-epilogue text
-
Insert text at the end of the header file. -
- -
--ixx-epilogue text
-
Insert text at the end of the inline file. -
- -
--cxx-epilogue text
-
Insert text at the end of the source file. -
- -
--epilogue text
-
Insert text at the end of each generated - file for which there is no file-specific epilogue. -
- - -
--hxx-prologue-file file
-
Insert the content of the file at the beginning - of the header file. -
- -
--ixx-prologue-file file
-
Insert the content of the file at the beginning - of the inline file. -
- -
--cxx-prologue-file file
-
Insert the content of the file at the beginning - of the source file. -
- -
--prologue-file file
-
Insert the content of the file at the beginning - of each generated file for which there is no file-specific prologue - file. -
- -
--hxx-epilogue-file file
-
Insert the content of the file at the end of the - header file. -
- -
--ixx-epilogue-file file
-
Insert the content of the file at the end of the - inline file. -
- -
--cxx-epilogue-file file
-
Insert the content of the file at the end of the - source file. -
- -
--epilogue-file file
-
Insert the content of the file at the end of each - generated file for which there is no file-specific epilogue file. -
- -
--custom-literals file
-
Load custom XML string to C++ literal mappings from - file. This mechanism can be useful if you - are using a custom character encoding and some of the strings - in your schemas, for example element/attribute names or enumeration - values, contain non-ASCII characters. In this case you will need - to provide a custom mapping to C++ literals for such - strings. The format of this file is specified in the - custom-literals.xsd XML Schema file that - can be found in the documentation directory. -
- -
--export-symbol symbol
-
Insert symbol in places where DLL - export/import control statements - (__declspec(dllexport/dllimport)) are necessary. -
- -
--export-xml-schema
-
Export/import types in the XML Schema namespace using the export - symbol provided with the --export-symbol option. - The XSD_NO_EXPORT macro can be used to omit - this code during C++ compilation, which may be useful if you - would like to use the same generated code across multiple platforms. -
- -
--export-maps
-
Export polymorphism support maps from a Win32 DLL into which this - generated code is linked. This is necessary when your type hierarchy - is split across several DLLs since otherwise each DLL will have its - own set of maps. In this situation the generated code for the DLL - which contains base types and/or substitution group heads should be - compiled with this option and the generated code for all other - DLLs should be compiled with --import-maps. - This option is only valid together with - --generate-polymorphic. - The XSD_NO_EXPORT macro can be used to omit - this code during C++ compilation, which may be useful if you - would like to use the same generated code across multiple platforms. -
- -
--import-maps
-
Import polymorphism support maps to a Win32 DLL or executable into - which this generated code is linked. See the --export-maps - option documentation for details. This options is only valid together - with --generate-polymorphic. - The XSD_NO_EXPORT macro can be used to omit - this code during C++ compilation, which may be useful if you - would like to use the same generated code across multiple platforms. -
- -
--disable-warning warn
-
Disable printing warning with id warn. If all - is specified for the warning id then all warnings are disabled. -
- - - -
--show-sloc
-
Show the number of generated physical source lines of code (SLOC). -
- -
--sloc-limit num
-
Check that the number of generated physical source lines of code - (SLOC) does not exceed num. -
- -
--options-file file
-
Read additional options from file. Each option - should appear on a separate line optionally followed by space and - an argument. Empty lines and lines starting with # - are ignored. The semantics of providing options in a - file is equivalent to providing the same set of options in - the same order in the command line at the point where the - --options-file option is specified - except that shell escaping and quoting is not required. - Repeat this option to specify more than one options files. -
- -
--proprietary-license
-
Indicate that the generated code is licensed under a proprietary - license instead of the GPL. -
- - - -
--preserve-anonymous
-
Preserve anonymous types. By default anonymous types are - automatically named with names derived from the enclosing - elements/attributes. Because mappings implemented by this - compiler require all types to be named, this option is only - useful if you want to make sure your schemas don't have - anonymous types. -
- -
--show-anonymous
-
Show elements and attributes that are of anonymous types. - This option only makes sense together with the - --preserve-anonymous option. -
- -
--anonymous-regex regex
-
Add regex to the list of regular expressions - used to derive names for anonymous types from the enclosing - attributes/elements. regex is a perl-like regular - expression in the form - /pattern/replacement/. - Any character can be used as a delimiter instead of /. - Escaping of the delimiter character in pattern or - replacement is not supported. - -

All the regular expressions are pushed into a stack with the last - specified expression considered first. The first match that - succeeds is used. Regular expressions are applied to a string - in the form

- -

filename namespace xpath

- -

For instance:

- -

hello.xsd http://example.com/hello element

-

hello.xsd http://example.com/hello type/element

- -

As an example, the following expression makes all the derived - names start with capital letters. This could be useful when - your naming convention requires type names to start with - capital letters:

- -

%.* .* (.+/)*(.+)%\u$2%

- -

See also the REGEX AND SHELL QUOTING section below.

-
- -
--anonymous-regex-trace
-
Trace the process of applying regular expressions specified with - the --anonymous-regex option. Use this option - to find out why your regular expressions don't do what you expected - them to do. -
- - - -
--location-map ol=nl
-
Map the original schema location ol that is specified in - the XML Schema include or import elements to new schema - location nl. Repeat this option to map more than one - schema location. For example, the following option maps the - http://example.com/foo.xsd URL to the - foo.xsd local file. - -

--location-map http://example.com/foo.xsd=foo.xsd

-
- -
--location-regex regex
-
Add regex to the list of regular expressions - used to map schema locations that are specified in the XML Schema - include or import elements. regex is a perl-like - regular expression in the form - /pattern/replacement/. - Any character can be used as a delimiter instead of /. - Escaping of the delimiter character in pattern or - replacement is not supported. All the regular - expressions are pushed into a stack with the last specified - expression considered first. The first match that succeeds is used. - -

For example, the following expression maps URL locations in the form - http://example.com/foo/bar.xsd to local files - in the form bar.xsd:

- -

%http://.+/(.+)%$1%

- -

See also the REGEX AND SHELL QUOTING section below.

-
- -
--location-regex-trace
-
Trace the process of applying regular expressions specified with - the --location-regex option. Use this option - to find out why your regular expressions don't do what you expected - them to do. -
- - - -
--file-per-type
-
Generate a separate set of C++ files for each type defined in XML - Schema. Note that in this mode you only need to compile the root - schema(s) and the code will be generated for all included and - imported schemas. This compilation mode is primarily useful when - some of your schemas cannot be compiled separately or have cyclic - dependencies which involve type inheritance. Other options related - to this mode are: - --type-file-regex, - --schema-file-regex, and - --file-list. -
- - -
--type-file-regex regex
-
Add regex to the list of regular expressions - used to translate type names to file names when the - --file-per-type option is specified. - regex is a perl-like regular expression in the form - /pattern/replacement/. - Any character can be used as a delimiter instead of /. - Escaping of the delimiter character in pattern or - replacement is not supported. All the regular - expressions are pushed into a stack with the last specified - expression considered first. The first match that succeeds is used. - Regular expressions are applied to a string in the form - -

namespace type-name

- -

For example, the following expression maps type foo - that is defined in the http://example.com/bar - namespace to file name bar-foo:

- -

%http://example.com/(.+) (.+)%$1-$2%

- -

See also the REGEX AND SHELL QUOTING section below.

-
- -
--type-file-regex-trace
-
Trace the process of applying regular expressions specified with - the --type-file-regex option. Use this option - to find out why your regular expressions don't do what you expected - them to do. -
- -
--schema-file-regex regex
-
Add regex to the list of regular expressions - used to translate schema file names when the - --file-per-type option is specified. - regex is a perl-like regular expression in the form - /pattern/replacement/. - Any character can be used as a delimiter instead of /. - Escaping of the delimiter character in pattern or - replacement is not supported. All the regular - expressions are pushed into a stack with the last specified - expression considered first. The first match that succeeds is used. - Regular expressions are applied to the absolute filesystem path - of a schema file and the result, including the directory part, - if any, is used to derive the #include directive - paths as well as the generated C++ file paths. This option, along - with --type-file-regex are primarily used to - place the generated files into subdirectories or to resolve file - name conflicts. - -

For example, the following expression maps schema files in the - foo/1.0.0/ subdirectory to the files in - the foo/ subdirectory. As a result, the - #include directive paths for such schemas - will be in the foo/schema.hxx form and - the generated C++ files will be placed into the - foo/ subdirectory:

- -

%.*/foo/1.0.0/(.+)%foo/$1%

- -

See also the REGEX AND SHELL QUOTING section below.

-
- -
--schema-file-regex-trace
-
Trace the process of applying regular expressions specified with - the --schema-file-regex option. Use this option - to find out why your regular expressions don't do what you expected - them to do. -
- - - -
--file-list file
-
Write a list of generated C++ files to file. - This option is primarily useful in the file-per-type compilation - mode (--file-per-type) to create a list of - generated C++ files, for example, as a makefile fragment. -
- -
--file-list-prologue text
-
Insert text at the beginning of the file list. - As a convenience, all occurrences of the \n character sequence in - text are replaced with new lines. This option - can, for example, be used to assign the generated file list to a - makefile variable. -
- -
--file-list-epilogue text
-
Insert text at the end of the file list. - As a convenience, all occurrences of the \n character sequence in - text are replaced with new lines. -
- -
--file-list-delim text
-
Delimit file names written to the file list with - text instead of new lines. As a convenience, - all occurrences of the \n character sequence in - text are replaced with new lines. -
- -
- -

CXX-TREE COMMAND OPTIONS

- -
-
--generate-polymorphic
-
Generate polymorphism-aware code. Specify this option if you use - substitution groups or xsi:type. Use the - --polymorphic-type or - --polymorphic-type-all option to specify - which type hierarchies are polymorphic.
- -
--polymorphic-type type
-
Indicate that type is a root of a polymorphic - type hierarchy. The compiler can often automatically determine - which types are polymorphic based on the substitution group - declarations. However, you may need to use this option if you are - not using substitution groups or if substitution groups are defined - in another schema. You need to specify this option when compiling - every schema file that references type. The - type argument is an XML Schema type name that - can be optionally qualified with a namespace in the - namespace#name form.
- -
--polymorphic-type-all
-
Indicate that all types should be treated as polymorphic.
- -
--generate-serialization
-
Generate serialization functions. Serialization functions - convert the object model back to XML.
- -
--generate-inline
-
Generate simple functions inline. This option triggers creation - of the inline file.
- -
--generate-ostream
-
Generate ostream insertion operators - (operator<<) for generated types. This - allows to easily print a fragment or the whole object model - for debugging or logging.
- -
--generate-doxygen
-
Generate documentation comments suitable for extraction by the - Doxygen documentation system. Documentation from annotations - is added to the comments if present in the schema.
- -
--generate-comparison
-
Generate comparison operators - (operator== and operator!=) - for complex types. Comparison is performed memberwise.
- -
--generate-default-ctor
-
Generate default constructors even for types that have required - members. Required members of an instance constructed using such a - constructor are not initialized and accessing them results in - undefined behavior.
- -
--generate-from-base-ctor
-
Generate constructors that expect an instance of a base type - followed by all required members.
- -
--generate-detach
-
Generate detach functions for required elements and attributes - (detach functions for optional and sequence cardinalities are - provided by the respective containers). These functions, for - example, allow you to move sub-trees in the object model either - within the same tree or between different trees.
- -
--generate-wildcard
-
Generate accessors and modifiers as well as parsing and serialization - code for XML Schema wildcards (any and - anyAttribute). XML content matched by wildcards - is presented as DOM fragments. Note that you need to initialize the - Xerces-C++ runtime if you are using this option.
- -
--generate-insertion os
-
Generate data representation stream insertion operators for - the os output stream type. Repeat this - option to specify more than one stream type. The ACE CDR stream - (ACE_OutputCDR) and RPC XDR are recognized - by the compiler and the necessary #include - directives are automatically generated. For custom stream - types use the --hxx-prologue* options - to provide the necessary declarations.
- -
--generate-extraction is
-
Generate data representation stream extraction constructors for - the is input stream type. Repeat this - option to specify more than one stream type. The ACE CDR stream - (ACE_InputCDR) and RPC XDR are recognized by - the compiler and the necessary #include - directives are automatically generated. For custom stream - types use the --hxx-prologue* options - to provide the necessary declarations.
- -
--generate-forward
-
Generate a separate header file with forward declarations for the - types being generated.
- -
--generate-xml-schema
-
Generate a C++ header file as if the schema being compiled defines - the XML Schema namespace. In particular, the resulting file will - have definitions for all XML Schema built-in types. The schema file - provided to the compiler need not exist and is only used to derive - the name of the resulting header file. Use the - --extern-xml-schema option to include this file - in the generated files for other schemas.
- -
--extern-xml-schema file
-
Include a header file derived from file instead of - generating the XML Schema namespace mapping inline. The provided - file need not exist and is only used to derive the name of the - included header file. Use the --generate-xml-schema - option to generate this header file.
- -
--suppress-parsing
-
Suppress the generation of the parsing functions and constructors. - Use this option to reduce the generated code size when parsing - from XML is not needed.
- -
--generate-element-type
-
Generate types instead of parsing and serialization functions - for root elements. This is primarily useful to distinguish - object models with the same root type but with different root - elements.
- -
--generate-element-map
-
Generate a root element map that allows uniform parsing and - serialization of multiple root elements. This option is only - valid together with --generate-element-type. -
- -
--generate-intellisense
-
Generate workarounds for IntelliSense bugs in Visual Studio - 2005 (8.0). When this option is used, the resulting code is - slightly more verbose. IntelliSense in Visual Studio 2008 (9.0) - does not require these workarounds. Support for IntelliSense in - Visual Studio 2003 (7.1) is improved with this option but is - still incomplete.
- -
--omit-default-attributes
-
Omit attributes with default and fixed values from serialized - XML documents.
- - - -
--type-naming style
-
Specify the type naming convention that should be used in the - generated code. Valid styles are knr - (default), ucc, and java. - See the NAMING CONVENTION section below for more information. -
- -
--function-naming style
-
Specify the function naming convention that should be used in the - generated code. Valid styles are knr - (default), lcc, and java. - See the NAMING CONVENTION section below for more information. -
- -
--type-regex regex
-
Add regex to the list of regular expressions - used to translate XML Schema type names to C++ type names. See the - NAMING CONVENTION section below for more information. -
- -
--accessor-regex regex
-
Add regex to the list of regular expressions - used to translate XML Schema names of elements/attributes to C++ - accessor function names. See the NAMING CONVENTION section below - for more information. -
- -
--one-accessor-regex regex
-
Add regex to the list of regular expressions - used to translate XML Schema names of elements/attributes with - cardinality one to C++ accessor function names. See the NAMING - CONVENTION section below for more information. -
- -
--opt-accessor-regex regex
-
Add regex to the list of regular expressions - used to translate XML Schema names of elements/attributes with - cardinality optional to C++ accessor function names. See the - NAMING CONVENTION section below for more information. -
- -
--seq-accessor-regex regex
-
Add regex to the list of regular expressions - used to translate XML Schema names of elements/attributes with - cardinality sequence to C++ accessor function names. See the - NAMING CONVENTION section below for more information. -
- -
--modifier-regex regex
-
Add regex to the list of regular expressions - used to translate XML Schema names of elements/attributes to C++ - modifier function names. See the NAMING CONVENTION section below - for more information. -
- -
--one-modifier-regex regex
-
Add regex to the list of regular expressions - used to translate XML Schema names of elements/attributes with - cardinality one to C++ modifier function names. See the NAMING - CONVENTION section below for more information. -
- -
--opt-modifier-regex regex
-
Add regex to the list of regular expressions - used to translate XML Schema names of elements/attributes with - cardinality optional to C++ modifier function names. See the - NAMING CONVENTION section below for more information. -
- -
--seq-modifier-regex regex
-
Add regex to the list of regular expressions - used to translate XML Schema names of elements/attributes with - cardinality sequence to C++ modifier function names. See the - NAMING CONVENTION section below for more information. -
- -
--parser-regex regex
-
Add regex to the list of regular expressions - used to translate XML Schema element names to C++ parsing function - names. See the NAMING CONVENTION section below for more information. -
- -
--serializer-regex regex
-
Add regex to the list of regular expressions - used to translate XML Schema element names to C++ serialization - function names. See the NAMING CONVENTION section below for more - information. -
- -
--enumerator-regex regex
-
Add regex to the list of regular expressions - used to translate XML Schema enumeration values to C++ enumerator - names. See the NAMING CONVENTION section below for more information. -
- -
--element-type-regex regex
-
Add regex to the list of regular expressions - used to translate XML Schema element names to C++ element type - names. See the NAMING CONVENTION section below for more information. -
- -
--name-regex-trace
-
Trace the process of applying regular expressions specified with - the name transformation options. Use this option to find out why - your regular expressions don't do what you expected them to do. -
- - - -
--root-element-first
-
Treat only the first global element as a document root. By default - all global elements are considered document roots. -
- -
--root-element-last
-
Treat only the last global element as a document root. By default - all global elements are considered document roots. -
- -
--root-element-all
-
Treat all global elements as document roots. This is the default - behavior. By explicitly specifying this option you can suppress - the warning that is issued if more than one global element is defined. -
- -
--root-element-none
-
Do not treat any global elements as document roots. By default - all global elements are considered document roots. -
- -
--root-element element
-
Treat only element as a document root. Repeat this - option to specify more than one root element. -
- - - -
--custom-type - name[=type[/base]]
-
Use a custom C++ type type instead of the generated class for - XML Schema type name. If type is not present - or empty then the custom type is assumed to have the same name and - be defined in the same namespace as the generated class would have. - If base is specified then the generated class is still - generated but with that name. -
- -
--custom-type-regex - /name-pat/[type-sub/[base-sub/]]
-
For each type defined in XML Schema that matches the name-pat - pattern use a custom C++ type instead of the generated class. The - name of the custom type is obtained by substituting type-sub. - If type-sub is not present or its substitution results in an - empty string then the custom type is assumed to have the same name - and be defined in the same namespace as the generated class would - have. If base-sub is present and its substitution results - in a non-empty string then the generated class is still generated - but with the result of substitution as its name. The pattern and - substitutions are in the perl regular expression format. See also - the REGEX AND SHELL QUOTING section below. -
- - - -
--fwd-suffix suffix
-
Use the provided suffix instead of the default - -fwd.hxx to construct the name of the forward - declaration file. -
- -
--fwd-regex regex
-
Use the provided expression to construct the name of the forward - declaration file. regex is a perl-like regular - expression in the form - /pattern/replacement/. - See also the REGEX AND SHELL QUOTING section below. -
- -
--fwd-prologue text
-
Insert text at the beginning of the forward - declaration file. -
- -
--fwd-epilogue text
-
Insert text at the end of the forward - declaration file. -
- -
--fwd-prologue-file file
-
Insert the content of the file at the beginning - of the forward declaration file. -
- -
--fwd-epilogue-file file
-
Insert the content of the file at the end of the - forward declaration file. -
- - - -
--parts num
-
Split generated source code into num parts. This - is useful when translating large, monolithic schemas and a C++ - compiler is not able to compile the resulting source code at once - (usually due to insufficient memory). -
- -
--parts-suffix suffix
-
Use suffix instead of the default - '-' to separate the file name from the - part number. -
- -
- -

CXX-PARSER COMMAND OPTIONS

- -
-
--type-map mapfile
-
Read XML Schema to C++ type mapping information from - mapfile. Repeat this option to specify - several type maps. Type maps are considered in order of - appearance and the first match is used. By default all - user-defined types are mapped to void. - See the TYPE MAP section below for more information.
- -
--xml-parser parser
-
Use parser as the underlying XML parser. - Valid values are xerces for Xerces-C++ (default) - and expat for Expat.
- -
--generate-inline
-
Generate simple functions inline. This option triggers creation - of the inline file.
- -
--generate-validation
-
Generate validation code ("perfect" parser) which ensures that - instance documents conform to the schema. Validation code is - generated by default when the selected underlying XML parser - is non-validating (expat).
- -
--suppress-validation
-
Suppress the generation of validation code ("perfect" parser). - Validation is suppressed by default when the selected underlying - XML parser is validating (xerces).
- -
--generate-polymorphic
-
Generate polymorphism-aware code. Specify this option if you use - substitution groups or xsi:type.
- -
--generate-noop-impl
-
Generate a sample parser implementation that does nothing (no - operation). The sample implementation can then be filled with - the application-specific code. For an input file in the form - name.xsd this option triggers the generation - of the two additional C++ files in the form: - name-pimpl.hxx (parser implementation header - file) and name-pimpl.cxx (parser implementation - source file).
- -
--generate-print-impl
-
Generate a sample parser implementation that prints the XML data - to STDOUT. For an input file in the form name.xsd - this option triggers the generation of the two additional C++ files - in the form: name-pimpl.hxx (parser implementation - header file) and name-pimpl.cxx (parser - implementation source file).
- -
--generate-test-driver
-
Generate a test driver for the sample parser implementation. For an - input file in the form name.xsd this option - triggers the generation of an additional C++ file in the form - name-driver.cxx.
- -
--force-overwrite
-
Force overwriting of the existing implementation and test driver - files. Use this option only if you do not mind loosing the changes - you have made in the sample implementation or test driver files.
- -
--root-element-first
-
Indicate that the first global element is the document root. This - information is used to generate the test driver for the sample - implementation.
- -
--root-element-last
-
Indicate that the last global element is the document root. This - information is used to generate the test driver for the sample - implementation.
- -
--root-element element
-
Indicate that element is the document root. - This information is used to generate the test driver for the - sample implementation.
- -
--generate-xml-schema
-
Generate a C++ header file as if the schema being compiled defines - the XML Schema namespace. In particular, the resulting file will - have definitions for all parser skeletons and implementations - corresponding to the XML Schema built-in types. The schema file - provided to the compiler need not exist and is only used to derive - the name of the resulting header file. Use the - --extern-xml-schema option to include this file - in the generated files for other schemas.
- -
--extern-xml-schema file
-
Include a header file derived from file instead of - generating the XML Schema namespace mapping inline. The provided - file need not exist and is only used to derive the name of the - included header file. Use the --generate-xml-schema - option to generate this header file.
- -
--skel-type-suffix suffix
-
Use the provided suffix instead of the - default _pskel to construct the names - of generated parser skeletons.
- -
--skel-file-suffix suffix
-
Use the provided suffix instead of the - default -pskel to construct the names of - generated parser skeleton files.
- -
--impl-type-suffix suffix
-
Use the provided suffix instead of the - default _pimpl to construct the names of - parser implementations for the built-in XML Schema types - and sample parser implementations.
- -
--impl-file-suffix suffix
-
Use the provided suffix instead of the - default -pimpl to construct the names of - generated sample parser implementation files.
-
- -

NAMING CONVENTION

- -

The compiler can be instructed to use a particular naming - convention in the generated code. A number of widely-used - conventions can be selected using the --type-naming - and --function-naming options. A custom - naming convention can be achieved using the - --type-regex, - --accessor-regex, - --one-accessor-regex, - --opt-accessor-regex, - --seq-accessor-regex, - --modifier-regex, - --one-modifier-regex, - --opt-modifier-regex, - --seq-modifier-regex, - --parser-regex, - --serializer-regex, - --enumerator-regex, and - --element-type-regex options. -

- -

The --type-naming option specifies the - convention that should be used for naming C++ types. Possible - values for this option are knr (default), - ucc, and java. The - knr value (stands for K&R) signifies - the standard, lower-case naming convention with the underscore - used as a word delimiter, for example: foo, - foo_bar. The ucc (stands - for upper-camel-case) and - java values a synonyms for the same - naming convention where the first letter of each word in the - name is capitalized, for example: Foo, - FooBar.

- -

Similarly, the --function-naming option - specifies the convention that should be used for naming C++ - functions. Possible values for this option are knr - (default), lcc, and java. The - knr value (stands for K&R) signifies - the standard, lower-case naming convention with the underscore - used as a word delimiter, for example: foo(), - foo_bar(). The lcc value - (stands for lower-camel-case) signifies a naming convention - where the first letter of each word except the first is - capitalized, for example: foo(), fooBar(). - The java naming convention is similar to - the lower-camel-case one except that accessor functions are prefixed - with get, modifier functions are prefixed - with set, parsing functions are prefixed - with parse, and serialization functions are - prefixed with serialize, for example: - getFoo(), setFooBar(), - parseRoot(), serializeRoot().

- -

Note that the naming conventions specified with the - --type-naming and - --function-naming options perform only limited - transformations on the names that come from the schema in the - form of type, attribute, and element names. In other words, to - get consistent results, your schemas should follow a similar - naming convention as the one you would like to have in the - generated code. Alternatively, you can use the - --*-regex options (discussed below) - to perform further transformations on the names that come from - the schema.

- -

The - --type-regex, - --accessor-regex, - --one-accessor-regex, - --opt-accessor-regex, - --seq-accessor-regex, - --modifier-regex, - --one-modifier-regex, - --opt-modifier-regex, - --seq-modifier-regex, - --parser-regex, - --serializer-regex, - --enumerator-regex, and - --element-type-regex options allow you to - specify extra regular expressions for each name category in - addition to the predefined set that is added depending on - the --type-naming and - --function-naming options. Expressions - that are provided with the --*-regex - options are evaluated prior to any predefined expressions. - This allows you to selectively override some or all of the - predefined transformations. When debugging your own expressions, - it is often useful to see which expressions match which names. - The --name-regex-trace option allows you - to trace the process of applying regular expressions to - names.

- -

The value for the --*-regex options should be - a perl-like regular expression in the form - /pattern/replacement/. - Any character can be used as a delimiter instead of /. - Escaping of the delimiter character in pattern or - replacement is not supported. - All the regular expressions for each category are pushed into a - category-specific stack with the last specified expression - considered first. The first match that succeeds is used. For the - --one-accessor-regex (accessors with cardinality one), - --opt-accessor-regex (accessors with cardinality optional), and - --seq-accessor-regex (accessors with cardinality sequence) - categories the --accessor-regex expressions are - used as a fallback. For the - --one-modifier-regex, - --opt-modifier-regex, and - --seq-modifier-regex - categories the --modifier-regex expressions are - used as a fallback. For the --element-type-regex - category the --type-regex expressions are - used as a fallback.

- -

The type name expressions (--type-regex) - are evaluated on the name string that has the following - format:

- -

[namespace ]name[,name][,name][,name]

- -

The element type name expressions - (--element-type-regex), effective only when - the --generate-element-type option is specified, - are evaluated on the name string that has the following - format:

- -

namespace name

- -

In the type name format the namespace part - followed by a space is only present for global type names. For - global types and elements defined in schemas without a target - namespace, the namespace part is empty but - the space is still present. In the type name format after the - initial name component, up to three additional - name components can be present, separated - by commas. For example:

- -

http://example.com/hello type

-

foo

-

foo,iterator

-

foo,const,iterator

- -

The following set of predefined regular expressions is used to - transform type names when the upper-camel-case naming convention - is selected:

- -

/(?:[^ ]* )?([^,]+)/\u$1/

-

/(?:[^ ]* )?([^,]+),([^,]+)/\u$1\u$2/

-

/(?:[^ ]* )?([^,]+),([^,]+),([^,]+)/\u$1\u$2\u$3/

-

/(?:[^ ]* )?([^,]+),([^,]+),([^,]+),([^,]+)/\u$1\u$2\u$3\u$4/

- -

The accessor and modifier expressions - (--*accessor-regex and - --*modifier-regex) are evaluated on the name string - that has the following format:

- -

name[,name][,name]

- -

After the initial name component, up to two - additional name components can be present, - separated by commas. For example:

- -

foo

-

dom,document

-

foo,default,value

- -

The following set of predefined regular expressions is used to - transform accessor names when the java naming - convention is selected:

- -

/([^,]+)/get\u$1/

-

/([^,]+),([^,]+)/get\u$1\u$2/

-

/([^,]+),([^,]+),([^,]+)/get\u$1\u$2\u$3/

- -

For the parser, serializer, and enumerator categories, the - corresponding regular expressions are evaluated on local names of - elements and on enumeration values, respectively. For example, the - following predefined regular expression is used to transform parsing - function names when the java naming convention - is selected:

- -

/(.+)/parse\u$1/

- -

See also the REGEX AND SHELL QUOTING section below.

- -

TYPE MAP

- -

Type map files are used in C++/Parser to define a mapping between - XML Schema and C++ types. The compiler uses this information - to determine the return types of post_* - functions in parser skeletons corresponding to XML Schema - types as well as argument types for callbacks corresponding - to elements and attributes of these types.

- -

The compiler has a set of predefined mapping rules that map - built-in XML Schema types to suitable C++ types (discussed - below) and all other types to void. - By providing your own type maps you can override these predefined - rules. The format of the type map file is presented below: -

- -
-namespace <schema-namespace> [<cxx-namespace>]
-{
-  (include <file-name>;)*
-  ([type] <schema-type> <cxx-ret-type> [<cxx-arg-type>];)*
-}
-  
- -

Both <schema-namespace> and - <schema-type> are regex patterns while - <cxx-namespace>, - <cxx-ret-type>, and - <cxx-arg-type> are regex pattern - substitutions. All names can be optionally enclosed in - " ", for example, to include white-spaces.

- -

<schema-namespace> determines XML - Schema namespace. Optional <cxx-namespace> - is prefixed to every C++ type name in this namespace declaration. - <cxx-ret-type> is a C++ type name that is - used as a return type for the post_* functions. - Optional <cxx-arg-type> is an argument - type for callback functions corresponding to elements and attributes - of this type. If - <cxx-arg-type> is not specified, it defaults - to <cxx-ret-type> if <cxx-ret-type> - ends with * or & (that is, - it is a pointer or a reference) and - const <cxx-ret-type>& - otherwise. - <file-name> is a file name either in the - " " or < > format - and is added with the #include directive to - the generated code.

- -

The # character starts a comment that ends - with a new line or end of file. To specify a name that contains - # enclose it in " ". - For example:

- -
-namespace http://www.example.com/xmlns/my my
-{
-  include "my.hxx";
-
-  # Pass apples by value.
-  #
-  apple apple;
-
-  # Pass oranges as pointers.
-  #
-  orange orange_t*;
-}
-  
- -

In the example above, for the - http://www.example.com/xmlns/my#orange - XML Schema type, the my::orange_t* C++ type will - be used as both return and argument types.

- -

Several namespace declarations can be specified in a single - file. The namespace declaration can also be completely - omitted to map types in a schema without a namespace. For - instance:

- -
-include "my.hxx";
-apple apple;
-
-namespace http://www.example.com/xmlns/my
-{
-  orange "const orange_t*";
-}
-  
- -

The compiler has a number of predefined mapping rules that can be - presented as the following map files. The string-based XML Schema - built-in types are mapped to either std::string - or std::wstring depending on the character type - selected with the --char-type option - (char by default).

- -
-namespace http://www.w3.org/2001/XMLSchema
-{
-  boolean bool bool;
-
-  byte "signed char" "signed char";
-  unsignedByte "unsigned char" "unsigned char";
-
-  short short short;
-  unsignedShort "unsigned short" "unsigned short";
-
-  int int int;
-  unsignedInt "unsigned int" "unsigned int";
-
-  long "long long" "long long";
-  unsignedLong "unsigned long long" "unsigned long long";
-
-  integer "long long" "long long";
-
-  negativeInteger "long long" "long long";
-  nonPositiveInteger "long long" "long long";
-
-  positiveInteger "unsigned long long" "unsigned long long";
-  nonNegativeInteger "unsigned long long" "unsigned long long";
-
-  float float float;
-  double double double;
-  decimal double double;
-
-  string std::string;
-  normalizedString std::string;
-  token std::string;
-  Name std::string;
-  NMTOKEN std::string;
-  NCName std::string;
-  ID std::string;
-  IDREF std::string;
-  language std::string;
-  anyURI std::string;
-
-  NMTOKENS xml_schema::string_sequence;
-  IDREFS xml_schema::string_sequence;
-
-  QName xml_schema::qname;
-
-  base64Binary std::auto_ptr<xml_schema::buffer>
-               std::auto_ptr<xml_schema::buffer>;
-  hexBinary std::auto_ptr<xml_schema::buffer>
-            std::auto_ptr<xml_schema::buffer>;
-
-  date xml_schema::date;
-  dateTime xml_schema::date_time;
-  duration xml_schema::duration;
-  gDay xml_schema::gday;
-  gMonth xml_schema::gmonth;
-  gMonthDay xml_schema::gmonth_day;
-  gYear xml_schema::gyear;
-  gYearMonth xml_schema::gyear_month;
-  time xml_schema::time;
-}
-  
- -

The last predefined rule maps anything that wasn't mapped by - previous rules to void:

- -
-namespace .*
-{
-  .* void void;
-}
-  
- - -

When you provide your own type maps with the - --type-map option, they are evaluated first. - This allows you to selectively override predefined rules.

- -

REGEX AND SHELL QUOTING

- -

When entering a regular expression argument in the shell - command line it is often necessary to use quoting (enclosing - the argument in " " or - ' ') in order to prevent the shell - from interpreting certain characters, for example, spaces as - argument separators and $ as variable - expansions.

- -

Unfortunately it is hard to achieve this in a manner that is - portable across POSIX shells, such as those found on - GNU/Linux and UNIX, and Windows shell. For example, if you - use " " for quoting you will get a - wrong result with POSIX shells if your expression contains - $. The standard way of dealing with this - on POSIX systems is to use ' ' instead. - Unfortunately, Windows shell does not remove ' ' - from arguments when they are passed to applications. As a result you - may have to use ' ' for POSIX and - " " for Windows ($ is - not treated as a special character on Windows).

- -

Alternatively, you can save regular expression options into - a file, one option per line, and use this file with the - --options-file option. With this approach - you don't need to worry about shell quoting.

- -

DIAGNOSTICS

- -

If the input file is not a valid W3C XML Schema definition, - xsd will issue diagnostic messages to STDERR - and exit with non-zero exit code.

- -

BUGS

- -

Send bug reports to the - xsd-users@codesynthesis.com mailing list.

- -
- -
- - diff --git a/xsd/examples/cxx/parser/generated/library.xml b/xsd/examples/cxx/parser/generated/library.xml index 2d9069c..b1ac98c 100644 --- a/xsd/examples/cxx/parser/generated/library.xml +++ b/xsd/examples/cxx/parser/generated/library.xml @@ -3,7 +3,6 @@ diff --git a/xsd/examples/cxx/parser/generated/library.xsd b/xsd/examples/cxx/parser/generated/library.xsd index 57654c7..71e4005 100644 --- a/xsd/examples/cxx/parser/generated/library.xsd +++ b/xsd/examples/cxx/parser/generated/library.xsd @@ -3,7 +3,6 @@ diff --git a/xsd/examples/cxx/parser/generated/makefile b/xsd/examples/cxx/parser/generated/makefile index 7674f26..78a60fe 100644 --- a/xsd/examples/cxx/parser/generated/makefile +++ b/xsd/examples/cxx/parser/generated/makefile @@ -1,6 +1,5 @@ # file : examples/cxx/parser/generated/makefile -# author : Boris Kolpackov -# copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +# copyright : Copyright (c) 2006-2014 Code Synthesis Tools CC # license : GNU GPL v2 + exceptions; see accompanying LICENSE file include $(dir $(lastword $(MAKEFILE_LIST)))../../../../build/bootstrap.make @@ -27,7 +26,7 @@ $(call import,\ # $(driver): $(obj) $(xerces_c.l) -$(obj) $(dep): cpp_options := -I$(src_root)/libxsd +$(obj) $(dep): cpp_options := -I$(out_base) -I$(src_base) -I$(src_root)/libxsd $(obj) $(dep): $(xerces_c.l.cpp-options) genf := $(xsd:.xsd=-pskel.hxx) \ @@ -41,11 +40,11 @@ gen := $(addprefix $(out_base)/,$(genf)) $(gen): xsd := $(out_root)/xsd/xsd -$(gen): xsd_options := --generate-print-impl --generate-test-driver \ +$(gen): xsd_options += --generate-print-impl --generate-test-driver \ --force-overwrite $(gen): $(out_root)/xsd/xsd -$(call include-dep,$(dep)) +$(call include-dep,$(dep),$(obj),$(gen)) # Convenience alias for default target. # @@ -72,7 +71,7 @@ $(dist): $(dist-common) $(dist-win): $(dist-common) $(call install-data,$(src_base)/README,$(dist_prefix)/$(path)/README.txt) - $(call message,,unix2dos $(dist_prefix)/$(path)/README.txt) + $(call message,,todos $(dist_prefix)/$(path)/README.txt) # Clean. diff --git a/xsd/examples/cxx/parser/hello/driver.cxx b/xsd/examples/cxx/parser/hello/driver.cxx index 9aee316..e261e10 100644 --- a/xsd/examples/cxx/parser/hello/driver.cxx +++ b/xsd/examples/cxx/parser/hello/driver.cxx @@ -1,5 +1,4 @@ // file : examples/cxx/parser/hello/driver.cxx -// author : Boris Kolpackov // copyright : not copyrighted - public domain #include diff --git a/xsd/examples/cxx/parser/hello/hello.xml b/xsd/examples/cxx/parser/hello/hello.xml index 2e5aaa3..dd0c13d 100644 --- a/xsd/examples/cxx/parser/hello/hello.xml +++ b/xsd/examples/cxx/parser/hello/hello.xml @@ -3,7 +3,6 @@ diff --git a/xsd/examples/cxx/parser/hello/hello.xsd b/xsd/examples/cxx/parser/hello/hello.xsd index f0941b7..be69957 100644 --- a/xsd/examples/cxx/parser/hello/hello.xsd +++ b/xsd/examples/cxx/parser/hello/hello.xsd @@ -3,7 +3,6 @@ diff --git a/xsd/examples/cxx/parser/hello/makefile b/xsd/examples/cxx/parser/hello/makefile index 3d7d0f7..ccf0257 100644 --- a/xsd/examples/cxx/parser/hello/makefile +++ b/xsd/examples/cxx/parser/hello/makefile @@ -1,6 +1,5 @@ # file : examples/cxx/parser/hello/makefile -# author : Boris Kolpackov -# copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +# copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC # license : GNU GPL v2 + exceptions; see accompanying LICENSE file include $(dir $(lastword $(MAKEFILE_LIST)))../../../../build/bootstrap.make @@ -29,7 +28,7 @@ $(call import,\ # $(driver): $(obj) $(xerces_c.l) -$(obj) $(dep): cpp_options := -I$(src_root)/libxsd +$(obj) $(dep): cpp_options := -I$(out_base) -I$(src_base) -I$(src_root)/libxsd $(obj) $(dep): $(xerces_c.l.cpp-options) genf := $(xsd:.xsd=-pskel.hxx) $(xsd:.xsd=-pskel.ixx) $(xsd:.xsd=-pskel.cxx) @@ -38,7 +37,7 @@ gen := $(addprefix $(out_base)/,$(genf)) $(gen): xsd := $(out_root)/xsd/xsd $(gen): $(out_root)/xsd/xsd -$(call include-dep,$(dep)) +$(call include-dep,$(dep),$(obj),$(gen)) # Convenience alias for default target. # @@ -67,7 +66,7 @@ $(dist): $(dist-common) $(dist-win): $(dist-common) $(call install-data,$(src_base)/README,$(dist_prefix)/$(path)/README.txt) - $(call message,,unix2dos $(dist_prefix)/$(path)/README.txt) + $(call message,,todos $(dist_prefix)/$(path)/README.txt) # Clean. # diff --git a/xsd/examples/cxx/parser/library/driver.cxx b/xsd/examples/cxx/parser/library/driver.cxx index ea5f1d9..3b63801 100644 --- a/xsd/examples/cxx/parser/library/driver.cxx +++ b/xsd/examples/cxx/parser/library/driver.cxx @@ -1,5 +1,4 @@ // file : examples/cxx/parser/library/driver.cxx -// author : Boris Kolpackov // copyright : not copyrighted - public domain #include diff --git a/xsd/examples/cxx/parser/library/library-pimpl.cxx b/xsd/examples/cxx/parser/library/library-pimpl.cxx index 8b6c357..7a1e484 100644 --- a/xsd/examples/cxx/parser/library/library-pimpl.cxx +++ b/xsd/examples/cxx/parser/library/library-pimpl.cxx @@ -1,5 +1,4 @@ // file : examples/cxx/parser/library/library-pimpl.cxx -// author : Boris Kolpackov // copyright : not copyrighted - public domain #include "library-pimpl.hxx" diff --git a/xsd/examples/cxx/parser/library/library-pimpl.hxx b/xsd/examples/cxx/parser/library/library-pimpl.hxx index 180070c..5d0dcc1 100644 --- a/xsd/examples/cxx/parser/library/library-pimpl.hxx +++ b/xsd/examples/cxx/parser/library/library-pimpl.hxx @@ -1,5 +1,4 @@ // file : examples/cxx/parser/library/library-pimpl.hxx -// author : Boris Kolpackov // copyright : not copyrighted - public domain #ifndef LIBRARY_PIMPL_HXX diff --git a/xsd/examples/cxx/parser/library/library.hxx b/xsd/examples/cxx/parser/library/library.hxx index fb6cc1d..552e7a5 100644 --- a/xsd/examples/cxx/parser/library/library.hxx +++ b/xsd/examples/cxx/parser/library/library.hxx @@ -1,5 +1,4 @@ // file : examples/cxx/parser/library/library.hxx -// author : Boris Kolpackov // copyright : not copyrighted - public domain #ifndef LIBRARY_HXX diff --git a/xsd/examples/cxx/parser/library/library.map b/xsd/examples/cxx/parser/library/library.map index 90f4938..3a49b49 100644 --- a/xsd/examples/cxx/parser/library/library.map +++ b/xsd/examples/cxx/parser/library/library.map @@ -1,5 +1,4 @@ # file : examples/cxx/parser/library/library.map -# author : Boris Kolpackov # copyright : not copyrighted - public domain namespace http://www.codesynthesis.com/library ::library diff --git a/xsd/examples/cxx/parser/library/library.xml b/xsd/examples/cxx/parser/library/library.xml index 2d9069c..b1ac98c 100644 --- a/xsd/examples/cxx/parser/library/library.xml +++ b/xsd/examples/cxx/parser/library/library.xml @@ -3,7 +3,6 @@ diff --git a/xsd/examples/cxx/parser/library/library.xsd b/xsd/examples/cxx/parser/library/library.xsd index 57654c7..71e4005 100644 --- a/xsd/examples/cxx/parser/library/library.xsd +++ b/xsd/examples/cxx/parser/library/library.xsd @@ -3,7 +3,6 @@ diff --git a/xsd/examples/cxx/parser/library/makefile b/xsd/examples/cxx/parser/library/makefile index e4eec1a..6410cf3 100644 --- a/xsd/examples/cxx/parser/library/makefile +++ b/xsd/examples/cxx/parser/library/makefile @@ -1,6 +1,5 @@ # file : examples/cxx/parser/library/makefile -# author : Boris Kolpackov -# copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +# copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC # license : GNU GPL v2 + exceptions; see accompanying LICENSE file include $(dir $(lastword $(MAKEFILE_LIST)))../../../../build/bootstrap.make @@ -29,17 +28,17 @@ $(call import,\ # $(driver): $(obj) $(xerces_c.l) -$(obj) $(dep): cpp_options := -I$(src_root)/libxsd +$(obj) $(dep): cpp_options := -I$(out_base) -I$(src_base) -I$(src_root)/libxsd $(obj) $(dep): $(xerces_c.l.cpp-options) genf := $(xsd:.xsd=-pskel.hxx) $(xsd:.xsd=-pskel.ixx) $(xsd:.xsd=-pskel.cxx) gen := $(addprefix $(out_base)/,$(genf)) $(gen): xsd := $(out_root)/xsd/xsd -$(gen): xsd_options := --generate-inline --type-map $(src_base)/library.map +$(gen): xsd_options += --generate-inline --type-map $(src_base)/library.map $(gen): $(out_root)/xsd/xsd $(src_base)/library.map -$(call include-dep,$(dep)) +$(call include-dep,$(dep),$(obj),$(gen)) # Convenience alias for default target. # @@ -76,7 +75,7 @@ $(dist): $(dist-common) $(dist-win): $(dist-common) $(call install-data,$(src_base)/README,$(dist_prefix)/$(path)/README.txt) - $(call message,,unix2dos $(dist_prefix)/$(path)/README.txt) + $(call message,,todos $(dist_prefix)/$(path)/README.txt) # Clean. # diff --git a/xsd/examples/cxx/parser/makefile b/xsd/examples/cxx/parser/makefile index c1471cc..4744b29 100644 --- a/xsd/examples/cxx/parser/makefile +++ b/xsd/examples/cxx/parser/makefile @@ -1,6 +1,5 @@ # file : examples/cxx/parser/makefile -# author : Boris Kolpackov -# copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +# copyright : Copyright (c) 2006-2014 Code Synthesis Tools CC # license : GNU GPL v2 + exceptions; see accompanying LICENSE file include $(dir $(lastword $(MAKEFILE_LIST)))../../../build/bootstrap.make @@ -29,14 +28,29 @@ $(install): $(addprefix $(out_base)/,$(addsuffix /.install,$(examples))) $(dist): $(addprefix $(out_base)/,$(addsuffix /.dist,$(examples))) $(call install-data,$(src_base)/README,$(dist_prefix)/$(path)/README) +$(dist-win): export dirs := $(examples) +$(dist-win): |$(out_root)/.dist-pre $(dist-win): $(addprefix $(out_base)/,$(addsuffix /.dist-win,$(examples))) $(call install-data,$(src_base)/README,$(dist_prefix)/$(path)/README.txt) - $(call message,,unix2dos $(dist_prefix)/$(path)/README.txt) + $(call message,,todos $(dist_prefix)/$(path)/README.txt) + $(call meta-vc8sln,$(src_root)/dist/template-vc8.sln,parser-vc8.sln) + $(call meta-vc9sln,$(src_root)/dist/template-vc9.sln,parser-vc9.sln) + $(call meta-vc10sln,$(src_root)/dist/template-vc10.sln,parser-vc10.sln) + $(call meta-vc11sln,$(src_root)/dist/template-vc11.sln,parser-vc11.sln) + $(call meta-vc12sln,$(src_root)/dist/template-vc12.sln,parser-vc12.sln) + $(call meta-vctest,parser-vc8.sln,$(src_root)/dist/examples/test.bat,test.bat) # Clean # $(clean): $(addprefix $(out_base)/,$(addsuffix /.clean,$(examples))) $(call include,$(bld_root)/install.make) +$(call include,$(bld_root)/meta/vc8sln.make) +$(call include,$(bld_root)/meta/vc9sln.make) +$(call include,$(bld_root)/meta/vc10sln.make) +$(call include,$(bld_root)/meta/vc11sln.make) +$(call include,$(bld_root)/meta/vc12sln.make) +$(call include,$(bld_root)/meta/vctest.make) + $(foreach e,$(examples),$(call import,$(src_base)/$e/makefile)) diff --git a/xsd/examples/cxx/parser/mixed/anchor.hxx b/xsd/examples/cxx/parser/mixed/anchor.hxx index bc1b54d..3adc90b 100644 --- a/xsd/examples/cxx/parser/mixed/anchor.hxx +++ b/xsd/examples/cxx/parser/mixed/anchor.hxx @@ -1,5 +1,4 @@ // file : examples/cxx/parser/mixed/anchor.hxx -// author : Boris Kolpackov // copyright : not copyrighted - public domain #ifndef ANCHOR_HXX diff --git a/xsd/examples/cxx/parser/mixed/driver.cxx b/xsd/examples/cxx/parser/mixed/driver.cxx index 45067f0..3f3cc65 100644 --- a/xsd/examples/cxx/parser/mixed/driver.cxx +++ b/xsd/examples/cxx/parser/mixed/driver.cxx @@ -1,5 +1,4 @@ // file : examples/cxx/parser/mixed/driver.cxx -// author : Boris Kolpackov // copyright : not copyrighted - public domain #include diff --git a/xsd/examples/cxx/parser/mixed/makefile b/xsd/examples/cxx/parser/mixed/makefile index 8563a1e..acf8aed 100644 --- a/xsd/examples/cxx/parser/mixed/makefile +++ b/xsd/examples/cxx/parser/mixed/makefile @@ -1,6 +1,5 @@ # file : examples/cxx/parser/mixed/makefile -# author : Boris Kolpackov -# copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +# copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC # license : GNU GPL v2 + exceptions; see accompanying LICENSE file include $(dir $(lastword $(MAKEFILE_LIST)))../../../../build/bootstrap.make @@ -29,17 +28,17 @@ $(call import,\ # $(driver): $(obj) $(xerces_c.l) -$(obj) $(dep): cpp_options := -I$(src_root)/libxsd +$(obj) $(dep): cpp_options := -I$(out_base) -I$(src_base) -I$(src_root)/libxsd $(obj) $(dep): $(xerces_c.l.cpp-options) genf := $(xsd:.xsd=-pskel.hxx) $(xsd:.xsd=-pskel.ixx) $(xsd:.xsd=-pskel.cxx) gen := $(addprefix $(out_base)/,$(genf)) $(gen): xsd := $(out_root)/xsd/xsd -$(gen): xsd_options := --type-map $(src_base)/text.map +$(gen): xsd_options += --type-map $(src_base)/text.map $(gen): $(out_root)/xsd/xsd $(src_base)/text.map -$(call include-dep,$(dep)) +$(call include-dep,$(dep),$(obj),$(gen)) # Convenience alias for default target. # @@ -72,7 +71,7 @@ $(dist): $(dist-common) $(dist-win): $(dist-common) $(call install-data,$(src_base)/README,$(dist_prefix)/$(path)/README.txt) - $(call message,,unix2dos $(dist_prefix)/$(path)/README.txt) + $(call message,,todos $(dist_prefix)/$(path)/README.txt) # Clean. diff --git a/xsd/examples/cxx/parser/mixed/text.map b/xsd/examples/cxx/parser/mixed/text.map index e44caf3..85971c4 100644 --- a/xsd/examples/cxx/parser/mixed/text.map +++ b/xsd/examples/cxx/parser/mixed/text.map @@ -1,5 +1,4 @@ # file : examples/cxx/parser/mixed/text.map -# author : Boris Kolpackov # copyright : not copyrighted - public domain include "anchor.hxx"; diff --git a/xsd/examples/cxx/parser/mixed/text.xml b/xsd/examples/cxx/parser/mixed/text.xml index 97d4d21..bfdc881 100644 --- a/xsd/examples/cxx/parser/mixed/text.xml +++ b/xsd/examples/cxx/parser/mixed/text.xml @@ -3,7 +3,6 @@ diff --git a/xsd/examples/cxx/parser/mixed/text.xsd b/xsd/examples/cxx/parser/mixed/text.xsd index 4929964..92e300c 100644 --- a/xsd/examples/cxx/parser/mixed/text.xsd +++ b/xsd/examples/cxx/parser/mixed/text.xsd @@ -3,7 +3,6 @@ diff --git a/xsd/examples/cxx/parser/mixin/driver.cxx b/xsd/examples/cxx/parser/mixin/driver.cxx index 41e5a45..04466a1 100644 --- a/xsd/examples/cxx/parser/mixin/driver.cxx +++ b/xsd/examples/cxx/parser/mixin/driver.cxx @@ -1,5 +1,4 @@ // file : examples/cxx/parser/mixin/driver.cxx -// author : Boris Kolpackov // copyright : not copyrighted - public domain #include diff --git a/xsd/examples/cxx/parser/mixin/instance.xml b/xsd/examples/cxx/parser/mixin/instance.xml index 265271b..253f348 100644 --- a/xsd/examples/cxx/parser/mixin/instance.xml +++ b/xsd/examples/cxx/parser/mixin/instance.xml @@ -3,7 +3,6 @@ diff --git a/xsd/examples/cxx/parser/mixin/makefile b/xsd/examples/cxx/parser/mixin/makefile index 9021106..7ef8084 100644 --- a/xsd/examples/cxx/parser/mixin/makefile +++ b/xsd/examples/cxx/parser/mixin/makefile @@ -1,6 +1,5 @@ # file : examples/cxx/parser/mixin/makefile -# author : Boris Kolpackov -# copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +# copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC # license : GNU GPL v2 + exceptions; see accompanying LICENSE file include $(dir $(lastword $(MAKEFILE_LIST)))../../../../build/bootstrap.make @@ -29,17 +28,17 @@ $(call import,\ # $(driver): $(obj) $(xerces_c.l) -$(obj) $(dep): cpp_options := -I$(src_root)/libxsd +$(obj) $(dep): cpp_options := -I$(out_base) -I$(src_base) -I$(src_root)/libxsd $(obj) $(dep): $(xerces_c.l.cpp-options) genf := $(xsd:.xsd=-pskel.hxx) $(xsd:.xsd=-pskel.ixx) $(xsd:.xsd=-pskel.cxx) gen := $(addprefix $(out_base)/,$(genf)) $(gen): xsd := $(out_root)/xsd/xsd -$(gen): xsd_options := --type-map $(src_base)/schema.map +$(gen): xsd_options += --type-map $(src_base)/schema.map $(gen): $(out_root)/xsd/xsd $(src_base)/schema.map -$(call include-dep,$(dep)) +$(call include-dep,$(dep),$(obj),$(gen)) # Convenience alias for default target. # @@ -72,7 +71,7 @@ $(dist): $(dist-common) $(dist-win): $(dist-common) $(call install-data,$(src_base)/README,$(dist_prefix)/$(path)/README.txt) - $(call message,,unix2dos $(dist_prefix)/$(path)/README.txt) + $(call message,,todos $(dist_prefix)/$(path)/README.txt) # Clean. diff --git a/xsd/examples/cxx/parser/mixin/schema.map b/xsd/examples/cxx/parser/mixin/schema.map index 22edb1e..a93c881 100644 --- a/xsd/examples/cxx/parser/mixin/schema.map +++ b/xsd/examples/cxx/parser/mixin/schema.map @@ -1,5 +1,4 @@ # file : examples/cxx/parser/mixin/schema.map -# author : Boris Kolpackov # copyright : not copyrighted - public domain include "types.hxx"; diff --git a/xsd/examples/cxx/parser/mixin/schema.xsd b/xsd/examples/cxx/parser/mixin/schema.xsd index 59d8d3b..d2d195d 100644 --- a/xsd/examples/cxx/parser/mixin/schema.xsd +++ b/xsd/examples/cxx/parser/mixin/schema.xsd @@ -3,7 +3,6 @@ diff --git a/xsd/examples/cxx/parser/mixin/types.hxx b/xsd/examples/cxx/parser/mixin/types.hxx index 708dfc3..930033d 100644 --- a/xsd/examples/cxx/parser/mixin/types.hxx +++ b/xsd/examples/cxx/parser/mixin/types.hxx @@ -1,5 +1,4 @@ // file : examples/cxx/parser/mixin/types.hxx -// author : Boris Kolpackov // copyright : not copyrighted - public domain #ifndef TYPES_HXX diff --git a/xsd/examples/cxx/parser/multiroot/balance.xml b/xsd/examples/cxx/parser/multiroot/balance.xml index df0a6e9..71ed493 100644 --- a/xsd/examples/cxx/parser/multiroot/balance.xml +++ b/xsd/examples/cxx/parser/multiroot/balance.xml @@ -3,7 +3,6 @@ diff --git a/xsd/examples/cxx/parser/multiroot/deposit.xml b/xsd/examples/cxx/parser/multiroot/deposit.xml index 3043c52..70f0c77 100644 --- a/xsd/examples/cxx/parser/multiroot/deposit.xml +++ b/xsd/examples/cxx/parser/multiroot/deposit.xml @@ -3,7 +3,6 @@ diff --git a/xsd/examples/cxx/parser/multiroot/driver.cxx b/xsd/examples/cxx/parser/multiroot/driver.cxx index 9e5d874..3b32898 100644 --- a/xsd/examples/cxx/parser/multiroot/driver.cxx +++ b/xsd/examples/cxx/parser/multiroot/driver.cxx @@ -1,5 +1,4 @@ // file : examples/cxx/parser/multiroot/driver.cxx -// author : Boris Kolpackov // copyright : not copyrighted - public domain #include // std::auto_ptr diff --git a/xsd/examples/cxx/parser/multiroot/makefile b/xsd/examples/cxx/parser/multiroot/makefile index 57fa732..60c6bac 100644 --- a/xsd/examples/cxx/parser/multiroot/makefile +++ b/xsd/examples/cxx/parser/multiroot/makefile @@ -1,6 +1,5 @@ # file : examples/cxx/parser/multiroot/makefile -# author : Boris Kolpackov -# copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +# copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC # license : GNU GPL v2 + exceptions; see accompanying LICENSE file include $(dir $(lastword $(MAKEFILE_LIST)))../../../../build/bootstrap.make @@ -29,17 +28,17 @@ $(call import,\ # $(driver): $(obj) $(xerces_c.l) -$(obj) $(dep): cpp_options := -I$(src_root)/libxsd +$(obj) $(dep): cpp_options := -I$(out_base) -I$(src_base) -I$(src_root)/libxsd $(obj) $(dep): $(xerces_c.l.cpp-options) genf := $(xsd:.xsd=-pskel.hxx) $(xsd:.xsd=-pskel.ixx) $(xsd:.xsd=-pskel.cxx) gen := $(addprefix $(out_base)/,$(genf)) $(gen): xsd := $(out_root)/xsd/xsd -$(gen): xsd_options := --type-map $(src_base)/protocol.map +$(gen): xsd_options += --type-map $(src_base)/protocol.map $(gen): $(out_root)/xsd/xsd $(src_base)/protocol.map -$(call include-dep,$(dep)) +$(call include-dep,$(dep),$(obj),$(gen)) # Convenience alias for default target. # @@ -80,7 +79,7 @@ $(dist): $(dist-common) $(dist-win): $(dist-common) $(call install-data,$(src_base)/README,$(dist_prefix)/$(path)/README.txt) - $(call message,,unix2dos $(dist_prefix)/$(path)/README.txt) + $(call message,,todos $(dist_prefix)/$(path)/README.txt) # Clean. # diff --git a/xsd/examples/cxx/parser/multiroot/protocol-pimpl.cxx b/xsd/examples/cxx/parser/multiroot/protocol-pimpl.cxx index 09a04b3..b5ec1b2 100644 --- a/xsd/examples/cxx/parser/multiroot/protocol-pimpl.cxx +++ b/xsd/examples/cxx/parser/multiroot/protocol-pimpl.cxx @@ -1,5 +1,4 @@ // file : examples/cxx/parser/multiroot/protocol-pimpl.cxx -// author : Boris Kolpackov // copyright : not copyrighted - public domain #include "protocol-pimpl.hxx" diff --git a/xsd/examples/cxx/parser/multiroot/protocol-pimpl.hxx b/xsd/examples/cxx/parser/multiroot/protocol-pimpl.hxx index 0531790..c0693cb 100644 --- a/xsd/examples/cxx/parser/multiroot/protocol-pimpl.hxx +++ b/xsd/examples/cxx/parser/multiroot/protocol-pimpl.hxx @@ -1,5 +1,4 @@ // file : examples/cxx/parser/multiroot/protocol-pimpl.hxx -// author : Boris Kolpackov // copyright : not copyrighted - public domain #ifndef PROTOCOL_PIMPL_HXX diff --git a/xsd/examples/cxx/parser/multiroot/protocol.hxx b/xsd/examples/cxx/parser/multiroot/protocol.hxx index f076140..bbf5b56 100644 --- a/xsd/examples/cxx/parser/multiroot/protocol.hxx +++ b/xsd/examples/cxx/parser/multiroot/protocol.hxx @@ -1,5 +1,4 @@ // file : examples/cxx/parser/multiroot/protocol.hxx -// author : Boris Kolpackov // copyright : not copyrighted - public domain #ifndef PROTOCOL_HXX diff --git a/xsd/examples/cxx/parser/multiroot/protocol.map b/xsd/examples/cxx/parser/multiroot/protocol.map index 7389fa9..8d8ac9f 100644 --- a/xsd/examples/cxx/parser/multiroot/protocol.map +++ b/xsd/examples/cxx/parser/multiroot/protocol.map @@ -1,5 +1,4 @@ # file : examples/cxx/parser/multiroot/protocol.map -# author : Boris Kolpackov # copyright : not copyrighted - public domain namespace http://www.codesynthesis.com/protocol ::protocol diff --git a/xsd/examples/cxx/parser/multiroot/protocol.xsd b/xsd/examples/cxx/parser/multiroot/protocol.xsd index 4b29926..e0ecc29 100644 --- a/xsd/examples/cxx/parser/multiroot/protocol.xsd +++ b/xsd/examples/cxx/parser/multiroot/protocol.xsd @@ -3,7 +3,6 @@ diff --git a/xsd/examples/cxx/parser/multiroot/withdraw.xml b/xsd/examples/cxx/parser/multiroot/withdraw.xml index 7a80aa7..6d5cb39 100644 --- a/xsd/examples/cxx/parser/multiroot/withdraw.xml +++ b/xsd/examples/cxx/parser/multiroot/withdraw.xml @@ -3,7 +3,6 @@ diff --git a/xsd/examples/cxx/parser/performance/README b/xsd/examples/cxx/parser/performance/README index d8d27a7..39aecca 100644 --- a/xsd/examples/cxx/parser/performance/README +++ b/xsd/examples/cxx/parser/performance/README @@ -7,10 +7,8 @@ The example consists of the following files: test.xsd XML Schema which describes the test vocabulary. -test-5k.xml test-50k.xml -test-500k.xml - Test XML documents of various sizes. + Test XML document. gen.cxx Program to generate a test document of desired size. @@ -41,4 +39,4 @@ parser (only makes sense for Xerces-C++, off by default). The -i option can be used to specify the number of parsing iterations (1000 by default). For example: -$ ./driver -v -i 100 test-500k.xml +$ ./driver -v -i 100 test-50k.xml diff --git a/xsd/examples/cxx/parser/performance/driver.cxx b/xsd/examples/cxx/parser/performance/driver.cxx index 422f2b9..302464e 100644 --- a/xsd/examples/cxx/parser/performance/driver.cxx +++ b/xsd/examples/cxx/parser/performance/driver.cxx @@ -1,5 +1,4 @@ // file : examples/cxx/parser/performance/driver.cxx -// author : Boris Kolpackov // copyright : not copyrighted - public domain #include @@ -22,7 +21,6 @@ # include # include - #endif // No-op parser implementation. @@ -256,7 +254,7 @@ main (int argc, char* argv[]) eh.throw_if_failed (); parser->setFeature (XMLUni::fgXercesUseCachedGrammarInParse, true); -#if _XERCES_VERSION >= 30000 +#if _XERCES_VERSION >= 30100 parser->setFeature (XMLUni::fgXercesLoadSchema, false); #endif } diff --git a/xsd/examples/cxx/parser/performance/makefile b/xsd/examples/cxx/parser/performance/makefile index a6e2cd1..69d3239 100644 --- a/xsd/examples/cxx/parser/performance/makefile +++ b/xsd/examples/cxx/parser/performance/makefile @@ -1,6 +1,5 @@ # file : examples/cxx/parser/performance/makefile -# author : Boris Kolpackov -# copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +# copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC # license : GNU GPL v2 + exceptions; see accompanying LICENSE file include $(dir $(lastword $(MAKEFILE_LIST)))../../../../build/bootstrap.make @@ -29,17 +28,17 @@ $(call import,\ # $(driver): $(obj) $(xerces_c.l) -$(obj) $(dep): cpp_options := -I$(src_root)/libxsd +$(obj) $(dep): cpp_options := -I$(out_base) -I$(src_base) -I$(src_root)/libxsd $(obj) $(dep): $(xerces_c.l.cpp-options) genf := $(xsd:.xsd=-pskel.hxx) $(xsd:.xsd=-pskel.ixx) $(xsd:.xsd=-pskel.cxx) gen := $(addprefix $(out_base)/,$(genf)) $(gen): xsd := $(out_root)/xsd/xsd -$(gen): xsd_options := --generate-inline +$(gen): xsd_options += --generate-inline $(gen): $(out_root)/xsd/xsd -$(call include-dep,$(dep)) +$(call include-dep,$(dep),$(obj),$(gen)) # Convenience alias for default target. # @@ -56,9 +55,7 @@ $(install): $(call install-data,$(src_base)/README,$(install_doc_dir)/xsd/$(path)/README) $(call install-data,$(src_base)/driver.cxx,$(install_doc_dir)/xsd/$(path)/driver.cxx) $(call install-data,$(src_base)/test.xsd,$(install_doc_dir)/xsd/$(path)/test.xsd) - $(call install-data,$(src_base)/test-5k.xml,$(install_doc_dir)/xsd/$(path)/test-5k.xml) $(call install-data,$(src_base)/test-50k.xml,$(install_doc_dir)/xsd/$(path)/test-50k.xml) - $(call install-data,$(src_base)/test-500k.xml,$(install_doc_dir)/xsd/$(path)/test-500k.xml) $(call install-data,$(src_base)/time.hxx,$(install_doc_dir)/xsd/$(path)/time.hxx) $(call install-data,$(src_base)/time.cxx,$(install_doc_dir)/xsd/$(path)/time.cxx) $(call install-data,$(src_base)/gen.cxx,$(install_doc_dir)/xsd/$(path)/gen.cxx) @@ -66,9 +63,7 @@ $(install): $(dist-common): $(call install-data,$(src_base)/driver.cxx,$(dist_prefix)/$(path)/driver.cxx) $(call install-data,$(src_base)/test.xsd,$(dist_prefix)/$(path)/test.xsd) - $(call install-data,$(src_base)/test-5k.xml,$(dist_prefix)/$(path)/test-5k.xml) $(call install-data,$(src_base)/test-50k.xml,$(dist_prefix)/$(path)/test-50k.xml) - $(call install-data,$(src_base)/test-500k.xml,$(dist_prefix)/$(path)/test-500k.xml) $(call install-data,$(src_base)/time.hxx,$(dist_prefix)/$(path)/time.hxx) $(call install-data,$(src_base)/time.cxx,$(dist_prefix)/$(path)/time.cxx) $(call install-data,$(src_base)/gen.cxx,$(dist_prefix)/$(path)/gen.cxx) @@ -78,7 +73,7 @@ $(dist): $(dist-common) $(dist-win): $(dist-common) $(call install-data,$(src_base)/README,$(dist_prefix)/$(path)/README.txt) - $(call message,,unix2dos $(dist_prefix)/$(path)/README.txt) + $(call message,,todos $(dist_prefix)/$(path)/README.txt) # Clean. diff --git a/xsd/examples/cxx/parser/performance/test-500k.xml b/xsd/examples/cxx/parser/performance/test-500k.xml deleted file mode 100644 index e895584..0000000 --- a/xsd/examples/cxx/parser/performance/test-500k.xml +++ /dev/null @@ -1 +0,0 @@ -4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy \ No newline at end of file diff --git a/xsd/examples/cxx/parser/performance/test-5k.xml b/xsd/examples/cxx/parser/performance/test-5k.xml deleted file mode 100644 index 168cb09..0000000 --- a/xsd/examples/cxx/parser/performance/test-5k.xml +++ /dev/null @@ -1 +0,0 @@ -4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction \ No newline at end of file diff --git a/xsd/examples/cxx/parser/performance/test.xsd b/xsd/examples/cxx/parser/performance/test.xsd index 2af594e..bb59c2a 100644 --- a/xsd/examples/cxx/parser/performance/test.xsd +++ b/xsd/examples/cxx/parser/performance/test.xsd @@ -3,7 +3,6 @@ diff --git a/xsd/examples/cxx/parser/performance/time.cxx b/xsd/examples/cxx/parser/performance/time.cxx index d7c81ce..aca5c74 100644 --- a/xsd/examples/cxx/parser/performance/time.cxx +++ b/xsd/examples/cxx/parser/performance/time.cxx @@ -1,5 +1,4 @@ // file : examples/cxx/parser/performance/time.cxx -// author : Boris Kolpackov // copyright : not copyrighted - public domain #include "time.hxx" @@ -24,7 +23,7 @@ namespace os FILETIME ft; GetSystemTimeAsFileTime (&ft); unsigned long long v ( - (unsigned long long (ft.dwHighDateTime) << 32) + ft.dwLowDateTime); + ((unsigned long long) (ft.dwHighDateTime) << 32) + ft.dwLowDateTime); sec_ = static_cast (v / 10000000ULL); nsec_ = static_cast ((v % 10000000ULL) * 100); diff --git a/xsd/examples/cxx/parser/performance/time.hxx b/xsd/examples/cxx/parser/performance/time.hxx index 37ec457..3b2f040 100644 --- a/xsd/examples/cxx/parser/performance/time.hxx +++ b/xsd/examples/cxx/parser/performance/time.hxx @@ -1,5 +1,4 @@ // file : examples/cxx/parser/performance/time.hxx -// author : Boris Kolpackov // copyright : not copyrighted - public domain #ifndef TIME_HXX diff --git a/xsd/examples/cxx/parser/polymorphism/driver.cxx b/xsd/examples/cxx/parser/polymorphism/driver.cxx index 842a88b..ffbe48b 100644 --- a/xsd/examples/cxx/parser/polymorphism/driver.cxx +++ b/xsd/examples/cxx/parser/polymorphism/driver.cxx @@ -1,5 +1,4 @@ // file : examples/cxx/parser/polymorphism/driver.cxx -// author : Boris Kolpackov // copyright : not copyrighted - public domain #include diff --git a/xsd/examples/cxx/parser/polymorphism/makefile b/xsd/examples/cxx/parser/polymorphism/makefile index 0eec54e..8a89ab8 100644 --- a/xsd/examples/cxx/parser/polymorphism/makefile +++ b/xsd/examples/cxx/parser/polymorphism/makefile @@ -1,6 +1,5 @@ # file : examples/cxx/parser/polymorphism/makefile -# author : Boris Kolpackov -# copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +# copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC # license : GNU GPL v2 + exceptions; see accompanying LICENSE file include $(dir $(lastword $(MAKEFILE_LIST)))../../../../build/bootstrap.make @@ -29,17 +28,17 @@ $(call import,\ # $(driver): $(obj) $(xerces_c.l) -$(obj) $(dep): cpp_options := -I$(src_root)/libxsd +$(obj) $(dep): cpp_options := -I$(out_base) -I$(src_base) -I$(src_root)/libxsd $(obj) $(dep): $(xerces_c.l.cpp-options) genf := $(xsd:.xsd=-pskel.hxx) $(xsd:.xsd=-pskel.ixx) $(xsd:.xsd=-pskel.cxx) gen := $(addprefix $(out_base)/,$(genf)) $(gen): xsd := $(out_root)/xsd/xsd -$(gen): xsd_options := --generate-polymorphic +$(gen): xsd_options += --generate-polymorphic $(gen): $(out_root)/xsd/xsd -$(call include-dep,$(dep)) +$(call include-dep,$(dep),$(obj),$(gen)) # Convenience alias for default target. # @@ -72,7 +71,7 @@ $(dist): $(dist-common) $(dist-win): $(dist-common) $(call install-data,$(src_base)/README,$(dist_prefix)/$(path)/README.txt) - $(call message,,unix2dos $(dist_prefix)/$(path)/README.txt) + $(call message,,todos $(dist_prefix)/$(path)/README.txt) # Clean. # diff --git a/xsd/examples/cxx/parser/polymorphism/supermen-pimpl.cxx b/xsd/examples/cxx/parser/polymorphism/supermen-pimpl.cxx index 8a30cbd..f4b3bc6 100644 --- a/xsd/examples/cxx/parser/polymorphism/supermen-pimpl.cxx +++ b/xsd/examples/cxx/parser/polymorphism/supermen-pimpl.cxx @@ -1,5 +1,4 @@ // file : examples/cxx/parser/polymorphism/supermen-pimpl.cxx -// author : Boris Kolpackov // copyright : not copyrighted - public domain // diff --git a/xsd/examples/cxx/parser/polymorphism/supermen-pimpl.hxx b/xsd/examples/cxx/parser/polymorphism/supermen-pimpl.hxx index 3c0f549..eaf81e5 100644 --- a/xsd/examples/cxx/parser/polymorphism/supermen-pimpl.hxx +++ b/xsd/examples/cxx/parser/polymorphism/supermen-pimpl.hxx @@ -1,5 +1,4 @@ // file : examples/cxx/parser/polymorphism/supermen-pimpl.hxx -// author : Boris Kolpackov // copyright : not copyrighted - public domain #ifndef SUPERMEN_PIMPL_HXX diff --git a/xsd/examples/cxx/parser/polymorphism/supermen.xml b/xsd/examples/cxx/parser/polymorphism/supermen.xml index c2bc7b4..15054fa 100644 --- a/xsd/examples/cxx/parser/polymorphism/supermen.xml +++ b/xsd/examples/cxx/parser/polymorphism/supermen.xml @@ -3,7 +3,6 @@ diff --git a/xsd/examples/cxx/parser/polymorphism/supermen.xsd b/xsd/examples/cxx/parser/polymorphism/supermen.xsd index 83a7aac..c9029da 100644 --- a/xsd/examples/cxx/parser/polymorphism/supermen.xsd +++ b/xsd/examples/cxx/parser/polymorphism/supermen.xsd @@ -3,7 +3,6 @@ diff --git a/xsd/examples/cxx/parser/polyroot/batman.xml b/xsd/examples/cxx/parser/polyroot/batman.xml index 70abdf7..fad0b71 100644 --- a/xsd/examples/cxx/parser/polyroot/batman.xml +++ b/xsd/examples/cxx/parser/polyroot/batman.xml @@ -3,7 +3,6 @@ diff --git a/xsd/examples/cxx/parser/polyroot/driver.cxx b/xsd/examples/cxx/parser/polyroot/driver.cxx index b04bba5..1c9c778 100644 --- a/xsd/examples/cxx/parser/polyroot/driver.cxx +++ b/xsd/examples/cxx/parser/polyroot/driver.cxx @@ -1,5 +1,4 @@ // file : examples/cxx/parser/polyroot/driver.cxx -// author : Boris Kolpackov // copyright : not copyrighted - public domain #include diff --git a/xsd/examples/cxx/parser/polyroot/makefile b/xsd/examples/cxx/parser/polyroot/makefile index 6b66233..a5a9088 100644 --- a/xsd/examples/cxx/parser/polyroot/makefile +++ b/xsd/examples/cxx/parser/polyroot/makefile @@ -1,6 +1,5 @@ # file : examples/cxx/parser/polyroot/makefile -# author : Boris Kolpackov -# copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +# copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC # license : GNU GPL v2 + exceptions; see accompanying LICENSE file include $(dir $(lastword $(MAKEFILE_LIST)))../../../../build/bootstrap.make @@ -29,17 +28,17 @@ $(call import,\ # $(driver): $(obj) $(xerces_c.l) -$(obj) $(dep): cpp_options := -I$(src_root)/libxsd +$(obj) $(dep): cpp_options := -I$(out_base) -I$(src_base) -I$(src_root)/libxsd $(obj) $(dep): $(xerces_c.l.cpp-options) genf := $(xsd:.xsd=-pskel.hxx) $(xsd:.xsd=-pskel.ixx) $(xsd:.xsd=-pskel.cxx) gen := $(addprefix $(out_base)/,$(genf)) $(gen): xsd := $(out_root)/xsd/xsd -$(gen): xsd_options := --generate-polymorphic +$(gen): xsd_options += --generate-polymorphic $(gen): $(out_root)/xsd/xsd -$(call include-dep,$(dep)) +$(call include-dep,$(dep),$(obj),$(gen)) # Convenience alias for default target. # @@ -75,7 +74,7 @@ $(dist): $(dist-common) $(dist-win): $(dist-common) $(call install-data,$(src_base)/README,$(dist_prefix)/$(path)/README.txt) - $(call message,,unix2dos $(dist_prefix)/$(path)/README.txt) + $(call message,,todos $(dist_prefix)/$(path)/README.txt) # Clean. diff --git a/xsd/examples/cxx/parser/polyroot/person.xml b/xsd/examples/cxx/parser/polyroot/person.xml index 157a5af..f463bea 100644 --- a/xsd/examples/cxx/parser/polyroot/person.xml +++ b/xsd/examples/cxx/parser/polyroot/person.xml @@ -3,7 +3,6 @@ diff --git a/xsd/examples/cxx/parser/polyroot/superman.xml b/xsd/examples/cxx/parser/polyroot/superman.xml index 86d9682..c831f6c 100644 --- a/xsd/examples/cxx/parser/polyroot/superman.xml +++ b/xsd/examples/cxx/parser/polyroot/superman.xml @@ -3,7 +3,6 @@ diff --git a/xsd/examples/cxx/parser/polyroot/supermen-pimpl.cxx b/xsd/examples/cxx/parser/polyroot/supermen-pimpl.cxx index db41ab2..62289e9 100644 --- a/xsd/examples/cxx/parser/polyroot/supermen-pimpl.cxx +++ b/xsd/examples/cxx/parser/polyroot/supermen-pimpl.cxx @@ -1,5 +1,4 @@ // file : examples/cxx/parser/polyroot/supermen-pimpl.cxx -// author : Boris Kolpackov // copyright : not copyrighted - public domain // diff --git a/xsd/examples/cxx/parser/polyroot/supermen-pimpl.hxx b/xsd/examples/cxx/parser/polyroot/supermen-pimpl.hxx index 035d127..49e8c74 100644 --- a/xsd/examples/cxx/parser/polyroot/supermen-pimpl.hxx +++ b/xsd/examples/cxx/parser/polyroot/supermen-pimpl.hxx @@ -1,5 +1,4 @@ // file : examples/cxx/parser/polyroot/supermen-pimpl.hxx -// author : Boris Kolpackov // copyright : not copyrighted - public domain #ifndef SUPERMEN_PIMPL_HXX diff --git a/xsd/examples/cxx/parser/polyroot/supermen.xsd b/xsd/examples/cxx/parser/polyroot/supermen.xsd index 090b662..dc5d439 100644 --- a/xsd/examples/cxx/parser/polyroot/supermen.xsd +++ b/xsd/examples/cxx/parser/polyroot/supermen.xsd @@ -3,7 +3,6 @@ diff --git a/xsd/examples/cxx/parser/wildcard/driver.cxx b/xsd/examples/cxx/parser/wildcard/driver.cxx index 7bd63eb..fa82ec0 100644 --- a/xsd/examples/cxx/parser/wildcard/driver.cxx +++ b/xsd/examples/cxx/parser/wildcard/driver.cxx @@ -1,5 +1,4 @@ // file : examples/cxx/parser/wildcard/driver.cxx -// author : Boris Kolpackov // copyright : not copyrighted - public domain #include diff --git a/xsd/examples/cxx/parser/wildcard/email.xml b/xsd/examples/cxx/parser/wildcard/email.xml index 55f1e4b..f5d0359 100644 --- a/xsd/examples/cxx/parser/wildcard/email.xml +++ b/xsd/examples/cxx/parser/wildcard/email.xml @@ -3,7 +3,6 @@ diff --git a/xsd/examples/cxx/parser/wildcard/email.xsd b/xsd/examples/cxx/parser/wildcard/email.xsd index 2e1f660..087fc7e 100644 --- a/xsd/examples/cxx/parser/wildcard/email.xsd +++ b/xsd/examples/cxx/parser/wildcard/email.xsd @@ -3,7 +3,6 @@ diff --git a/xsd/examples/cxx/parser/wildcard/makefile b/xsd/examples/cxx/parser/wildcard/makefile index d8fcc8d..524f8da 100644 --- a/xsd/examples/cxx/parser/wildcard/makefile +++ b/xsd/examples/cxx/parser/wildcard/makefile @@ -1,6 +1,5 @@ # file : examples/cxx/parser/wildcard/makefile -# author : Boris Kolpackov -# copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +# copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC # license : GNU GPL v2 + exceptions; see accompanying LICENSE file include $(dir $(lastword $(MAKEFILE_LIST)))../../../../build/bootstrap.make @@ -29,7 +28,7 @@ $(call import,\ # $(driver): $(obj) $(xerces_c.l) -$(obj) $(dep): cpp_options := -I$(src_root)/libxsd +$(obj) $(dep): cpp_options := -I$(out_base) -I$(src_base) -I$(src_root)/libxsd $(obj) $(dep): $(xerces_c.l.cpp-options) genf := $(xsd:.xsd=-pskel.hxx) $(xsd:.xsd=-pskel.ixx) $(xsd:.xsd=-pskel.cxx) @@ -38,7 +37,7 @@ gen := $(addprefix $(out_base)/,$(genf)) $(gen): xsd := $(out_root)/xsd/xsd $(gen): $(out_root)/xsd/xsd -$(call include-dep,$(dep)) +$(call include-dep,$(dep),$(obj),$(gen)) # Convenience alias for default target. # @@ -67,7 +66,7 @@ $(dist): $(dist-common) $(dist-win): $(dist-common) $(call install-data,$(src_base)/README,$(dist_prefix)/$(path)/README.txt) - $(call message,,unix2dos $(dist_prefix)/$(path)/README.txt) + $(call message,,todos $(dist_prefix)/$(path)/README.txt) # Clean. diff --git a/xsd/examples/cxx/tree/README b/xsd/examples/cxx/tree/README index 348885f..569bf11 100644 --- a/xsd/examples/cxx/tree/README +++ b/xsd/examples/cxx/tree/README @@ -17,6 +17,10 @@ polymorphism Shows how to use XML Schema polymorphism features such as the xsi:type attribute and substitution groups. +order/ + A collection of examples that show how to use ordered types to + capture and maintain content order. + xpath Shows how to use the C++/Tree mapping together with XPath. @@ -45,7 +49,7 @@ caching embedded Shows how to embed the binary representation of the schema grammar - into an application and then use it with the C++/Tree mapping to + into an application and then use it with the C++/Tree mapping to parse and validate XML documents. performance @@ -68,13 +72,9 @@ streaming that are too large to fit into memory. compression - Shows how to compress an XML document during serialization and decompress + Shows how to compress an XML document during serialization and decompress it during parsing using the zlib library. binary/ A collection of examples that show how to serialize the object model into a number of predefined and custom binary formats. - -dbxml - Shows how to use the C++/Tree mapping on top of the Berkeley DB - XML embedded XML database. diff --git a/xsd/examples/cxx/tree/binary/boost/boost-archive-extraction.hxx b/xsd/examples/cxx/tree/binary/boost/boost-archive-extraction.hxx index 7711b28..8a1c1ef 100644 --- a/xsd/examples/cxx/tree/binary/boost/boost-archive-extraction.hxx +++ b/xsd/examples/cxx/tree/binary/boost/boost-archive-extraction.hxx @@ -1,5 +1,4 @@ // file : examples/cxx/tree/binary/boost/boost-archive-insertion.cxx -// author : Boris Kolpackov // copyright : not copyrighted - public domain #ifndef BOOST_ARCHIVE_EXTRACTION_HXX @@ -180,6 +179,7 @@ namespace xsd s.impl () >> size; x.size (size); s.impl ().load_binary (x.data (), size); + return s; } } } diff --git a/xsd/examples/cxx/tree/binary/boost/boost-archive-insertion.hxx b/xsd/examples/cxx/tree/binary/boost/boost-archive-insertion.hxx index 7a00ef8..4c89104 100644 --- a/xsd/examples/cxx/tree/binary/boost/boost-archive-insertion.hxx +++ b/xsd/examples/cxx/tree/binary/boost/boost-archive-insertion.hxx @@ -1,5 +1,4 @@ // file : examples/cxx/tree/binary/boost/boost-archive-insertion.cxx -// author : Boris Kolpackov // copyright : not copyrighted - public domain #ifndef BOOST_ARCHIVE_INSERTION_HXX @@ -169,6 +168,7 @@ namespace xsd std::size_t size (x.size()); s.impl () << size; s.impl ().save_binary (x.data (), x.size ()); + return s; } } } diff --git a/xsd/examples/cxx/tree/binary/boost/driver.cxx b/xsd/examples/cxx/tree/binary/boost/driver.cxx index 9490d13..df053b6 100644 --- a/xsd/examples/cxx/tree/binary/boost/driver.cxx +++ b/xsd/examples/cxx/tree/binary/boost/driver.cxx @@ -1,5 +1,4 @@ // file : examples/cxx/tree/binary/boost/driver.cxx -// author : Boris Kolpackov // copyright : not copyrighted - public domain #include // std::auto_ptr diff --git a/xsd/examples/cxx/tree/binary/boost/library.xml b/xsd/examples/cxx/tree/binary/boost/library.xml index da2bee6..ceb4443 100644 --- a/xsd/examples/cxx/tree/binary/boost/library.xml +++ b/xsd/examples/cxx/tree/binary/boost/library.xml @@ -3,7 +3,6 @@ diff --git a/xsd/examples/cxx/tree/binary/boost/library.xsd b/xsd/examples/cxx/tree/binary/boost/library.xsd index 9f35d4a..4bfdd1e 100644 --- a/xsd/examples/cxx/tree/binary/boost/library.xsd +++ b/xsd/examples/cxx/tree/binary/boost/library.xsd @@ -3,7 +3,6 @@ diff --git a/xsd/examples/cxx/tree/binary/boost/makefile b/xsd/examples/cxx/tree/binary/boost/makefile index 7044539..1ed7e41 100644 --- a/xsd/examples/cxx/tree/binary/boost/makefile +++ b/xsd/examples/cxx/tree/binary/boost/makefile @@ -1,6 +1,5 @@ # file : examples/cxx/tree/binary/boost/makefile -# author : Boris Kolpackov -# copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +# copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC # license : GNU GPL v2 + exceptions; see accompanying LICENSE file include $(dir $(lastword $(MAKEFILE_LIST)))../../../../../build/bootstrap.make @@ -35,7 +34,7 @@ endif # $(driver): $(obj) $(xerces_c.l) $(boost_serialization.l) -$(obj) $(dep): cpp_options := -I$(src_root)/libxsd -I$(src_root) +$(obj) $(dep): cpp_options := -I$(out_base) -I$(src_base) -I$(src_root)/libxsd $(obj) $(dep): $(xerces_c.l.cpp-options) $(boost_serialization.l.cpp-options) genf := $(xsd:.xsd=.hxx) $(xsd:.xsd=.ixx) $(xsd:.xsd=.cxx) @@ -43,14 +42,14 @@ gen := $(addprefix $(out_base)/,$(genf)) $(gen): xsd := $(out_root)/xsd/xsd -$(gen): xsd_options := --generate-ostream \ +$(gen): xsd_options += --generate-ostream \ --hxx-prologue-file $(src_base)/library-prologue.hxx \ --generate-insertion boost::archive::text_oarchive \ --generate-extraction boost::archive::text_iarchive $(gen): $(out_root)/xsd/xsd -$(call include-dep,$(dep)) +$(call include-dep,$(dep),$(obj),$(gen)) # Convenience alias for default target. # @@ -83,9 +82,16 @@ $(dist-common): $(dist): $(dist-common) $(call install-data,$(src_base)/README,$(dist_prefix)/$(path)/README) +$(dist-win): |$(out_root)/.dist-pre $(dist-win): $(dist-common) $(call install-data,$(src_base)/README,$(dist_prefix)/$(path)/README.txt) - $(call message,,unix2dos $(dist_prefix)/$(path)/README.txt) + $(call message,,todos $(dist_prefix)/$(path)/README.txt) + $(call meta-vc8sln,$(src_root)/dist/template-vc8.sln,boost-vc8.sln) + $(call meta-vc9sln,$(src_root)/dist/template-vc9.sln,boost-vc9.sln) + $(call meta-vc10sln,$(src_root)/dist/template-vc10.sln,boost-vc10.sln) + $(call meta-vc11sln,$(src_root)/dist/template-vc11.sln,boost-vc11.sln) + $(call meta-vc12sln,$(src_root)/dist/template-vc12.sln,boost-vc12.sln) + # Clean. # @@ -111,9 +117,16 @@ endif $(call include,$(bld_root)/cxx/o-e.make) $(call include,$(bld_root)/cxx/cxx-o.make) $(call include,$(bld_root)/cxx/cxx-d.make) -$(call include,$(bld_root)/install.make) $(call include,$(scf_root)/xsd/tree/xsd-cxx.make) +$(call include,$(bld_root)/install.make) +$(call include,$(bld_root)/meta/vc8sln.make) +$(call include,$(bld_root)/meta/vc9sln.make) +$(call include,$(bld_root)/meta/vc10sln.make) +$(call include,$(bld_root)/meta/vc11sln.make) +$(call include,$(bld_root)/meta/vc12sln.make) + + # Dependencies. # $(call import,$(src_root)/xsd/makefile) diff --git a/xsd/examples/cxx/tree/binary/cdr/driver.cxx b/xsd/examples/cxx/tree/binary/cdr/driver.cxx index 08ec0d5..ec1ff32 100644 --- a/xsd/examples/cxx/tree/binary/cdr/driver.cxx +++ b/xsd/examples/cxx/tree/binary/cdr/driver.cxx @@ -1,5 +1,4 @@ // file : examples/cxx/tree/binary/cdr/driver.cxx -// author : Boris Kolpackov // copyright : not copyrighted - public domain #include // std::auto_ptr diff --git a/xsd/examples/cxx/tree/binary/cdr/library.xml b/xsd/examples/cxx/tree/binary/cdr/library.xml index e7ccb3f..941c03f 100644 --- a/xsd/examples/cxx/tree/binary/cdr/library.xml +++ b/xsd/examples/cxx/tree/binary/cdr/library.xml @@ -3,7 +3,6 @@ diff --git a/xsd/examples/cxx/tree/binary/cdr/library.xsd b/xsd/examples/cxx/tree/binary/cdr/library.xsd index 92d44d1..5659e1b 100644 --- a/xsd/examples/cxx/tree/binary/cdr/library.xsd +++ b/xsd/examples/cxx/tree/binary/cdr/library.xsd @@ -3,7 +3,6 @@ diff --git a/xsd/examples/cxx/tree/binary/cdr/makefile b/xsd/examples/cxx/tree/binary/cdr/makefile index 72bdae7..b349ba2 100644 --- a/xsd/examples/cxx/tree/binary/cdr/makefile +++ b/xsd/examples/cxx/tree/binary/cdr/makefile @@ -1,6 +1,5 @@ # file : examples/cxx/tree/binary/cdr/makefile -# author : Boris Kolpackov -# copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +# copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC # license : GNU GPL v2 + exceptions; see accompanying LICENSE file include $(dir $(lastword $(MAKEFILE_LIST)))../../../../../build/bootstrap.make @@ -35,18 +34,18 @@ endif # $(driver): $(obj) $(xerces_c.l) $(ace.l) -$(obj) $(dep): cpp_options := -I$(src_root)/libxsd +$(obj) $(dep): cpp_options := -I$(out_base) -I$(src_base) -I$(src_root)/libxsd $(obj) $(dep): $(xerces_c.l.cpp-options) $(ace.l.cpp-options) genf := $(xsd:.xsd=.hxx) $(xsd:.xsd=.ixx) $(xsd:.xsd=.cxx) gen := $(addprefix $(out_base)/,$(genf)) $(gen): xsd := $(out_root)/xsd/xsd -$(gen): xsd_options := --generate-ostream \ +$(gen): xsd_options += --generate-ostream \ --generate-insertion ACE_OutputCDR --generate-extraction ACE_InputCDR $(gen): $(out_root)/xsd/xsd -$(call include-dep,$(dep)) +$(call include-dep,$(dep),$(obj),$(gen)) # Convenience alias for default target. # @@ -73,9 +72,15 @@ $(dist-common): $(dist): $(dist-common) $(call install-data,$(src_base)/README,$(dist_prefix)/$(path)/README) +$(dist-win): |$(out_root)/.dist-pre $(dist-win): $(dist-common) $(call install-data,$(src_base)/README,$(dist_prefix)/$(path)/README.txt) - $(call message,,unix2dos $(dist_prefix)/$(path)/README.txt) + $(call message,,todos $(dist_prefix)/$(path)/README.txt) + $(call meta-vc8sln,$(src_root)/dist/template-vc8.sln,cdr-vc8.sln) + $(call meta-vc9sln,$(src_root)/dist/template-vc9.sln,cdr-vc9.sln) + $(call meta-vc10sln,$(src_root)/dist/template-vc10.sln,cdr-vc10.sln) + $(call meta-vc11sln,$(src_root)/dist/template-vc11.sln,cdr-vc11.sln) + $(call meta-vc12sln,$(src_root)/dist/template-vc12.sln,cdr-vc12.sln) # Clean. # @@ -101,9 +106,15 @@ endif $(call include,$(bld_root)/cxx/o-e.make) $(call include,$(bld_root)/cxx/cxx-o.make) $(call include,$(bld_root)/cxx/cxx-d.make) -$(call include,$(bld_root)/install.make) $(call include,$(scf_root)/xsd/tree/xsd-cxx.make) +$(call include,$(bld_root)/install.make) +$(call include,$(bld_root)/meta/vc8sln.make) +$(call include,$(bld_root)/meta/vc9sln.make) +$(call include,$(bld_root)/meta/vc10sln.make) +$(call include,$(bld_root)/meta/vc11sln.make) +$(call include,$(bld_root)/meta/vc12sln.make) + # Dependencies. # $(call import,$(src_root)/xsd/makefile) diff --git a/xsd/examples/cxx/tree/binary/makefile b/xsd/examples/cxx/tree/binary/makefile index fbdfbe4..eb4b312 100644 --- a/xsd/examples/cxx/tree/binary/makefile +++ b/xsd/examples/cxx/tree/binary/makefile @@ -1,6 +1,5 @@ # file : examples/cxx/tree/binary/makefile -# author : Boris Kolpackov -# copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +# copyright : Copyright (c) 2006-2014 Code Synthesis Tools CC # license : GNU GPL v2 + exceptions; see accompanying LICENSE file include $(dir $(lastword $(MAKEFILE_LIST)))../../../../build/bootstrap.make @@ -42,7 +41,7 @@ $(dist): $(addprefix $(out_base)/,$(addsuffix /.dist,$(all_examples))) $(dist-win): $(addprefix $(out_base)/,$(addsuffix /.dist-win,$(all_examples))) $(call install-data,$(src_base)/README,$(dist_prefix)/$(path)/README.txt) - $(call message,,unix2dos $(dist_prefix)/$(path)/README.txt) + $(call message,,todos $(dist_prefix)/$(path)/README.txt) # Clean. # diff --git a/xsd/examples/cxx/tree/binary/xdr/driver.cxx b/xsd/examples/cxx/tree/binary/xdr/driver.cxx index 495eafc..d109322 100644 --- a/xsd/examples/cxx/tree/binary/xdr/driver.cxx +++ b/xsd/examples/cxx/tree/binary/xdr/driver.cxx @@ -1,5 +1,4 @@ // file : examples/cxx/tree/binary/xdr/driver.cxx -// author : Boris Kolpackov // copyright : not copyrighted - public domain #include // std::auto_ptr diff --git a/xsd/examples/cxx/tree/binary/xdr/library.xml b/xsd/examples/cxx/tree/binary/xdr/library.xml index 9ddcd5a..dab6afb 100644 --- a/xsd/examples/cxx/tree/binary/xdr/library.xml +++ b/xsd/examples/cxx/tree/binary/xdr/library.xml @@ -3,7 +3,6 @@ diff --git a/xsd/examples/cxx/tree/binary/xdr/library.xsd b/xsd/examples/cxx/tree/binary/xdr/library.xsd index 9999e72..7513e3b 100644 --- a/xsd/examples/cxx/tree/binary/xdr/library.xsd +++ b/xsd/examples/cxx/tree/binary/xdr/library.xsd @@ -3,7 +3,6 @@ diff --git a/xsd/examples/cxx/tree/binary/xdr/makefile b/xsd/examples/cxx/tree/binary/xdr/makefile index 092cdc7..7939b29 100644 --- a/xsd/examples/cxx/tree/binary/xdr/makefile +++ b/xsd/examples/cxx/tree/binary/xdr/makefile @@ -1,6 +1,5 @@ # file : examples/cxx/tree/binary/xdr/makefile -# author : Boris Kolpackov -# copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +# copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC # license : GNU GPL v2 + exceptions; see accompanying LICENSE file include $(dir $(lastword $(MAKEFILE_LIST)))../../../../../build/bootstrap.make @@ -27,18 +26,18 @@ $(call import,\ # $(driver): $(obj) $(xerces_c.l) -lnsl -$(obj) $(dep): cpp_options := -I$(src_root)/libxsd +$(obj) $(dep): cpp_options := -I$(out_base) -I$(src_base) -I$(src_root)/libxsd $(obj) $(dep): $(xerces_c.l.cpp-options) genf := $(xsd:.xsd=.hxx) $(xsd:.xsd=.ixx) $(xsd:.xsd=.cxx) gen := $(addprefix $(out_base)/,$(genf)) $(gen): xsd := $(out_root)/xsd/xsd -$(gen): xsd_options := --generate-ostream \ +$(gen): xsd_options += --generate-ostream \ --generate-insertion XDR --generate-extraction XDR $(gen): $(out_root)/xsd/xsd -$(call include-dep,$(dep)) +$(call include-dep,$(dep),$(obj),$(gen)) # Convenience alias for default target. # @@ -65,9 +64,16 @@ $(dist-common): $(dist): $(dist-common) $(call install-data,$(src_base)/README,$(dist_prefix)/$(path)/README) +$(dist-win): |$(out_root)/.dist-pre $(dist-win): $(dist-common) $(call install-data,$(src_base)/README,$(dist_prefix)/$(path)/README.txt) - $(call message,,unix2dos $(dist_prefix)/$(path)/README.txt) + $(call message,,todos $(dist_prefix)/$(path)/README.txt) + $(call meta-vc8sln,$(src_root)/dist/template-vc8.sln,xdr-vc8.sln) + $(call meta-vc9sln,$(src_root)/dist/template-vc9.sln,xdr-vc9.sln) + $(call meta-vc10sln,$(src_root)/dist/template-vc10.sln,xdr-vc10.sln) + $(call meta-vc11sln,$(src_root)/dist/template-vc11.sln,xdr-vc11.sln) + $(call meta-vc12sln,$(src_root)/dist/template-vc12.sln,xdr-vc12.sln) + # Clean. # @@ -93,9 +99,16 @@ endif $(call include,$(bld_root)/cxx/o-e.make) $(call include,$(bld_root)/cxx/cxx-o.make) $(call include,$(bld_root)/cxx/cxx-d.make) -$(call include,$(bld_root)/install.make) $(call include,$(scf_root)/xsd/tree/xsd-cxx.make) +$(call include,$(bld_root)/install.make) +$(call include,$(bld_root)/meta/vc8sln.make) +$(call include,$(bld_root)/meta/vc9sln.make) +$(call include,$(bld_root)/meta/vc10sln.make) +$(call include,$(bld_root)/meta/vc11sln.make) +$(call include,$(bld_root)/meta/vc12sln.make) + + # Dependencies. # $(call import,$(src_root)/xsd/makefile) diff --git a/xsd/examples/cxx/tree/caching/driver.cxx b/xsd/examples/cxx/tree/caching/driver.cxx index a3877d8..2aa9396 100644 --- a/xsd/examples/cxx/tree/caching/driver.cxx +++ b/xsd/examples/cxx/tree/caching/driver.cxx @@ -1,5 +1,4 @@ // file : examples/cxx/tree/caching/driver.cxx -// author : Boris Kolpackov // copyright : not copyrighted - public domain #include // std::auto_ptr @@ -51,10 +50,6 @@ main (int argc, char* argv[]) DOMImplementation* impl ( DOMImplementationRegistry::getDOMImplementation (ls_id)); -#if _XERCES_VERSION >= 30000 - - // Xerces-C++ 3.0.0 and later. - // xml::dom::auto_ptr parser ( impl->createLSParser (DOMImplementationLS::MODE_SYNCHRONOUS, 0)); @@ -128,41 +123,6 @@ main (int argc, char* argv[]) // conf->setParameter (XMLUni::fgXercesUserAdoptsDOMDocument, true); -#else // _XERCES_VERSION >= 30000 - - // Same as above but for Xerces-C++ 2 series. - // - xml::dom::auto_ptr parser ( - impl->createDOMBuilder(DOMImplementationLS::MODE_SYNCHRONOUS, 0)); - - - parser->setFeature (XMLUni::fgDOMComments, false); - parser->setFeature (XMLUni::fgDOMDatatypeNormalization, true); - parser->setFeature (XMLUni::fgDOMEntities, false); - parser->setFeature (XMLUni::fgDOMNamespaces, true); - parser->setFeature (XMLUni::fgDOMWhitespaceInElementContent, false); - parser->setFeature (XMLUni::fgDOMValidation, true); - parser->setFeature (XMLUni::fgXercesSchema, true); - parser->setFeature (XMLUni::fgXercesSchemaFullChecking, false); - - tree::error_handler eh; - xml::dom::bits::error_handler_proxy ehp (eh); - parser->setErrorHandler (&ehp); - - if (!parser->loadGrammar ("library.xsd", Grammar::SchemaGrammarType, true)) - { - eh.handle ("library.xsd", 0, 0, - tree::error_handler::severity::fatal, - "unable to load schema"); - } - - eh.throw_if_failed (); - parser->setFeature (XMLUni::fgXercesUseCachedGrammarInParse, true); - - parser->setFeature (XMLUni::fgXercesUserAdoptsDOMDocument, true); - -#endif // _XERCES_VERSION >= 30000 - // Parse XML documents. // for (unsigned long i (0); i < 10; ++i) @@ -178,11 +138,7 @@ main (int argc, char* argv[]) // Parse XML to DOM. // -#if _XERCES_VERSION >= 30000 xml_schema::dom::auto_ptr doc (parser->parse (&wrap)); -#else - xml_schema::dom::auto_ptr doc (parser->parse (wrap)); -#endif eh.throw_if_failed (); diff --git a/xsd/examples/cxx/tree/caching/library.xml b/xsd/examples/cxx/tree/caching/library.xml index 4c12c6e..6d4d6f1 100644 --- a/xsd/examples/cxx/tree/caching/library.xml +++ b/xsd/examples/cxx/tree/caching/library.xml @@ -3,7 +3,6 @@ diff --git a/xsd/examples/cxx/tree/caching/library.xsd b/xsd/examples/cxx/tree/caching/library.xsd index 5dca460..a46c558 100644 --- a/xsd/examples/cxx/tree/caching/library.xsd +++ b/xsd/examples/cxx/tree/caching/library.xsd @@ -3,7 +3,6 @@ diff --git a/xsd/examples/cxx/tree/caching/makefile b/xsd/examples/cxx/tree/caching/makefile index cd0447e..cb9b191 100644 --- a/xsd/examples/cxx/tree/caching/makefile +++ b/xsd/examples/cxx/tree/caching/makefile @@ -1,6 +1,5 @@ # file : examples/cxx/tree/caching/makefile -# author : Boris Kolpackov -# copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +# copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC # license : GNU GPL v2 + exceptions; see accompanying LICENSE file include $(dir $(lastword $(MAKEFILE_LIST)))../../../../build/bootstrap.make @@ -29,17 +28,16 @@ $(call import,\ # $(driver): $(obj) $(xerces_c.l) -$(obj) $(dep): cpp_options := -I$(src_root)/libxsd +$(obj) $(dep): cpp_options := -I$(out_base) -I$(src_base) -I$(src_root)/libxsd $(obj) $(dep): $(xerces_c.l.cpp-options) genf := $(xsd:.xsd=.hxx) $(xsd:.xsd=.ixx) $(xsd:.xsd=.cxx) gen := $(addprefix $(out_base)/,$(genf)) $(gen): xsd := $(out_root)/xsd/xsd -$(gen): xsd_options := $(gen): $(out_root)/xsd/xsd -$(call include-dep,$(dep)) +$(call include-dep,$(dep),$(obj),$(gen)) # Convenience alias for default target. # @@ -68,7 +66,7 @@ $(dist): $(dist-common) $(dist-win): $(dist-common) $(call install-data,$(src_base)/README,$(dist_prefix)/$(path)/README.txt) - $(call message,,unix2dos $(dist_prefix)/$(path)/README.txt) + $(call message,,todos $(dist_prefix)/$(path)/README.txt) # Clean. diff --git a/xsd/examples/cxx/tree/compression/compressed-format-target.cxx b/xsd/examples/cxx/tree/compression/compressed-format-target.cxx index b4a8a85..1f183e2 100644 --- a/xsd/examples/cxx/tree/compression/compressed-format-target.cxx +++ b/xsd/examples/cxx/tree/compression/compressed-format-target.cxx @@ -1,5 +1,4 @@ // file : examples/cxx/tree/compression/compressed-format-target.cxx -// author : Boris Kolpackov // copyright : not copyrighted - public domain #include @@ -81,11 +80,7 @@ compressed_format_target:: void compressed_format_target:: writeChars (const XMLByte* const buf, -#if _XERCES_VERSION >= 30000 const XMLSize_t size, -#else - const unsigned int size, -#endif xercesc::XMLFormatter* const) { // Flush the buffer if the block is too large or if we don't have diff --git a/xsd/examples/cxx/tree/compression/compressed-format-target.hxx b/xsd/examples/cxx/tree/compression/compressed-format-target.hxx index 5d12e81..835b676 100644 --- a/xsd/examples/cxx/tree/compression/compressed-format-target.hxx +++ b/xsd/examples/cxx/tree/compression/compressed-format-target.hxx @@ -1,5 +1,4 @@ // file : examples/cxx/tree/compression/compressed-format-target.hxx -// author : Boris Kolpackov // copyright : not copyrighted - public domain #ifndef COMPRESSED_FORMAT_TARGET_HXX @@ -60,11 +59,7 @@ public: virtual void writeChars (const XMLByte* const buf, -#if _XERCES_VERSION >= 30000 const XMLSize_t size, -#else - const unsigned int size, -#endif xercesc::XMLFormatter* const); virtual void diff --git a/xsd/examples/cxx/tree/compression/compressed-input-source.cxx b/xsd/examples/cxx/tree/compression/compressed-input-source.cxx index 22d09ff..e25b169 100644 --- a/xsd/examples/cxx/tree/compression/compressed-input-source.cxx +++ b/xsd/examples/cxx/tree/compression/compressed-input-source.cxx @@ -1,5 +1,4 @@ // file : examples/cxx/tree/compression/compressed-input-source.cxx -// author : Boris Kolpackov // copyright : not copyrighted - public domain #include @@ -111,27 +110,14 @@ compressed_input_stream:: inflateEnd (&zs_); } -#if _XERCES_VERSION >= 30000 XMLFilePos compressed_input_stream:: curPos () const { return static_cast (pos_); } -#else -unsigned int compressed_input_stream:: -curPos () const -{ - return static_cast (pos_); -} -#endif -#if _XERCES_VERSION >= 30000 XMLSize_t compressed_input_stream:: readBytes (XMLByte* const buf, const XMLSize_t size) -#else -unsigned int compressed_input_stream:: -readBytes (XMLByte* const buf, const unsigned int size) -#endif { if (end_) return 0; @@ -169,20 +155,14 @@ readBytes (XMLByte* const buf, const unsigned int size) size_t n (size - zs_.avail_out); pos_ += n; -#if _XERCES_VERSION >= 30000 return static_cast (n); -#else - return static_cast (n); -#endif } -#if _XERCES_VERSION >= 30000 const XMLCh* compressed_input_stream:: getContentType () const { return 0; } -#endif size_t compressed_input_stream:: read () diff --git a/xsd/examples/cxx/tree/compression/compressed-input-source.hxx b/xsd/examples/cxx/tree/compression/compressed-input-source.hxx index 680d39f..8065445 100644 --- a/xsd/examples/cxx/tree/compression/compressed-input-source.hxx +++ b/xsd/examples/cxx/tree/compression/compressed-input-source.hxx @@ -1,5 +1,4 @@ // file : examples/cxx/tree/compression/compressed-input-source.hxx -// author : Boris Kolpackov // copyright : not copyrighted - public domain #ifndef COMPRESSED_INPUT_SOURCE_HXX @@ -96,7 +95,6 @@ public: virtual ~compressed_input_stream (); -#if _XERCES_VERSION >= 30000 virtual XMLFilePos curPos () const; @@ -106,15 +104,6 @@ public: virtual const XMLCh* getContentType () const; -#else - - virtual unsigned int - readBytes (XMLByte* const buf, const unsigned int size); - - virtual unsigned int - curPos () const; -#endif - private: std::size_t read (); diff --git a/xsd/examples/cxx/tree/compression/driver.cxx b/xsd/examples/cxx/tree/compression/driver.cxx index db285cf..34238b1 100644 --- a/xsd/examples/cxx/tree/compression/driver.cxx +++ b/xsd/examples/cxx/tree/compression/driver.cxx @@ -1,5 +1,4 @@ // file : examples/cxx/tree/compression/driver.cxx -// author : Boris Kolpackov // copyright : not copyrighted - public domain #include // std::auto_ptr @@ -20,7 +19,7 @@ main (int argc, char* argv[]) { if (argc != 2) { - cerr << "usage: " << argv[0] << " library.xml" << endl; + cerr << "usage: " << argv[0] << " library.xml.gz" << endl; return 1; } diff --git a/xsd/examples/cxx/tree/compression/library.xsd b/xsd/examples/cxx/tree/compression/library.xsd index 0451b36..728acc7 100644 --- a/xsd/examples/cxx/tree/compression/library.xsd +++ b/xsd/examples/cxx/tree/compression/library.xsd @@ -3,7 +3,6 @@ diff --git a/xsd/examples/cxx/tree/compression/makefile b/xsd/examples/cxx/tree/compression/makefile index 30188c1..43913f7 100644 --- a/xsd/examples/cxx/tree/compression/makefile +++ b/xsd/examples/cxx/tree/compression/makefile @@ -1,6 +1,5 @@ # file : examples/cxx/tree/compression/makefile -# author : Boris Kolpackov -# copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +# copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC # license : GNU GPL v2 + exceptions; see accompanying LICENSE file include $(dir $(lastword $(MAKEFILE_LIST)))../../../../build/bootstrap.make @@ -34,17 +33,17 @@ endif # $(driver): $(obj) $(xerces_c.l) $(z.l) -$(obj) $(dep): cpp_options := -I$(src_root)/libxsd +$(obj) $(dep): cpp_options := -I$(out_base) -I$(src_base) -I$(src_root)/libxsd $(obj) $(dep): $(xerces_c.l.cpp-options) $(z.l.cpp-options) genf := $(xsd:.xsd=.hxx) $(xsd:.xsd=.ixx) $(xsd:.xsd=.cxx) gen := $(addprefix $(out_base)/,$(genf)) $(gen): xsd := $(out_root)/xsd/xsd -$(gen): xsd_options := --generate-ostream --generate-serialization +$(gen): xsd_options += --generate-ostream --generate-serialization $(gen): $(out_root)/xsd/xsd -$(call include-dep,$(dep)) +$(call include-dep,$(dep),$(obj),$(gen)) # Convenience alias for default target. # @@ -79,9 +78,15 @@ $(dist-common): $(dist): $(dist-common) $(call install-data,$(src_base)/README,$(dist_prefix)/$(path)/README) +$(dist-win): |$(out_root)/.dist-pre $(dist-win): $(dist-common) $(call install-data,$(src_base)/README,$(dist_prefix)/$(path)/README.txt) - $(call message,,unix2dos $(dist_prefix)/$(path)/README.txt) + $(call message,,todos $(dist_prefix)/$(path)/README.txt) + $(call meta-vc8sln,$(src_root)/dist/template-vc8.sln,compression-vc8.sln) + $(call meta-vc9sln,$(src_root)/dist/template-vc9.sln,compression-vc9.sln) + $(call meta-vc10sln,$(src_root)/dist/template-vc10.sln,compression-vc10.sln) + $(call meta-vc11sln,$(src_root)/dist/template-vc11.sln,compression-vc11.sln) + $(call meta-vc12sln,$(src_root)/dist/template-vc12.sln,compression-vc12.sln) # Clean. @@ -109,9 +114,15 @@ endif $(call include,$(bld_root)/cxx/o-e.make) $(call include,$(bld_root)/cxx/cxx-o.make) $(call include,$(bld_root)/cxx/cxx-d.make) -$(call include,$(bld_root)/install.make) $(call include,$(scf_root)/xsd/tree/xsd-cxx.make) +$(call include,$(bld_root)/install.make) +$(call include,$(bld_root)/meta/vc8sln.make) +$(call include,$(bld_root)/meta/vc9sln.make) +$(call include,$(bld_root)/meta/vc10sln.make) +$(call include,$(bld_root)/meta/vc11sln.make) +$(call include,$(bld_root)/meta/vc12sln.make) + # Dependencies. # $(call import,$(src_root)/xsd/makefile) diff --git a/xsd/examples/cxx/tree/custom/calendar/calendar.xml b/xsd/examples/cxx/tree/custom/calendar/calendar.xml index ae9e570..5cc898a 100644 --- a/xsd/examples/cxx/tree/custom/calendar/calendar.xml +++ b/xsd/examples/cxx/tree/custom/calendar/calendar.xml @@ -3,7 +3,6 @@ diff --git a/xsd/examples/cxx/tree/custom/calendar/calendar.xsd b/xsd/examples/cxx/tree/custom/calendar/calendar.xsd index fa612a7..04b3af1 100644 --- a/xsd/examples/cxx/tree/custom/calendar/calendar.xsd +++ b/xsd/examples/cxx/tree/custom/calendar/calendar.xsd @@ -3,7 +3,6 @@ diff --git a/xsd/examples/cxx/tree/custom/calendar/driver.cxx b/xsd/examples/cxx/tree/custom/calendar/driver.cxx index 02f1c27..a5b223e 100644 --- a/xsd/examples/cxx/tree/custom/calendar/driver.cxx +++ b/xsd/examples/cxx/tree/custom/calendar/driver.cxx @@ -1,5 +1,4 @@ // file : examples/cxx/tree/custom/calendar/driver.cxx -// author : Boris Kolpackov // copyright : not copyrighted - public domain #include // std::auto_ptr diff --git a/xsd/examples/cxx/tree/custom/calendar/makefile b/xsd/examples/cxx/tree/custom/calendar/makefile index f4f4598..6998ffd 100644 --- a/xsd/examples/cxx/tree/custom/calendar/makefile +++ b/xsd/examples/cxx/tree/custom/calendar/makefile @@ -1,6 +1,5 @@ # file : examples/cxx/tree/custom/calendar/makefile -# author : Boris Kolpackov -# copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +# copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC # license : GNU GPL v2 + exceptions; see accompanying LICENSE file include $(dir $(lastword $(MAKEFILE_LIST)))../../../../../build/bootstrap.make @@ -34,7 +33,7 @@ endif # $(driver): $(obj) $(xerces_c.l) $(boost_date_time.l) -$(obj) $(dep): cpp_options := -I$(src_root)/libxsd +$(obj) $(dep): cpp_options := -I$(out_base) -I$(src_base) -I$(src_root)/libxsd $(obj) $(dep): $(xerces_c.l.cpp-options) $(boost_date_time.l.cpp-options) # Header file for XML Schema namespace. @@ -43,7 +42,7 @@ $(out_base)/xml-schema.hxx: $(out_root)/xsd/xsd $(call message,xsd $(src_base)/xml-schema.xsd,\ $(out_root)/xsd/xsd cxx-tree --output-dir $(out_base) --generate-xml-schema \ --custom-type date \ ---hxx-epilogue '\#include "xml-schema-custom.hxx"' xml-schema.xsd) +--hxx-epilogue '#include "xml-schema-custom.hxx"' xml-schema.xsd) # # @@ -51,17 +50,13 @@ genf := $(xsd:.xsd=.hxx) $(xsd:.xsd=.ixx) $(xsd:.xsd=.cxx) gen := $(addprefix $(out_base)/,$(genf)) $(gen): xsd := $(out_root)/xsd/xsd - -# We have to double-escape '#' because the message function -# (which is used in command scripts) expands things twice. -# -$(gen): xsd_options := \ +$(gen): xsd_options += \ --generate-inline \ --extern-xml-schema xml-schema.xsd $(gen): $(out_root)/xsd/xsd -$(call include-dep,$(dep)) +$(call include-dep,$(dep),$(obj),$(gen)) # Convenience alias for default target. # @@ -92,9 +87,16 @@ $(dist-common): $(dist): $(dist-common) $(call install-data,$(src_base)/README,$(dist_prefix)/$(path)/README) +$(dist-win): |$(out_root)/.dist-pre $(dist-win): $(dist-common) $(call install-data,$(src_base)/README,$(dist_prefix)/$(path)/README.txt) - $(call message,,unix2dos $(dist_prefix)/$(path)/README.txt) + $(call message,,todos $(dist_prefix)/$(path)/README.txt) + $(call meta-vc8sln,$(src_root)/dist/template-vc8.sln,calendar-vc8.sln) + $(call meta-vc9sln,$(src_root)/dist/template-vc9.sln,calendar-vc9.sln) + $(call meta-vc10sln,$(src_root)/dist/template-vc10.sln,calendar-vc10.sln) + $(call meta-vc11sln,$(src_root)/dist/template-vc11.sln,calendar-vc11.sln) + $(call meta-vc12sln,$(src_root)/dist/template-vc12.sln,calendar-vc12.sln) + # Clean. # @@ -121,9 +123,15 @@ endif $(call include,$(bld_root)/cxx/o-e.make) $(call include,$(bld_root)/cxx/cxx-o.make) $(call include,$(bld_root)/cxx/cxx-d.make) -$(call include,$(bld_root)/install.make) $(call include,$(scf_root)/xsd/tree/xsd-cxx.make) +$(call include,$(bld_root)/install.make) +$(call include,$(bld_root)/meta/vc8sln.make) +$(call include,$(bld_root)/meta/vc9sln.make) +$(call include,$(bld_root)/meta/vc10sln.make) +$(call include,$(bld_root)/meta/vc11sln.make) +$(call include,$(bld_root)/meta/vc12sln.make) + # Dependencies. # $(call import,$(src_root)/xsd/makefile) diff --git a/xsd/examples/cxx/tree/custom/calendar/xml-schema-custom.cxx b/xsd/examples/cxx/tree/custom/calendar/xml-schema-custom.cxx index 440a407..645880b 100644 --- a/xsd/examples/cxx/tree/custom/calendar/xml-schema-custom.cxx +++ b/xsd/examples/cxx/tree/custom/calendar/xml-schema-custom.cxx @@ -1,5 +1,4 @@ // file : examples/cxx/tree/custom/calendar/xml-schema-custom.cxx -// author : Boris Kolpackov // copyright : not copyrighted - public domain // Include xml-schema.hxx instead of xml-schema-custom.hxx here. diff --git a/xsd/examples/cxx/tree/custom/calendar/xml-schema-custom.hxx b/xsd/examples/cxx/tree/custom/calendar/xml-schema-custom.hxx index 2bab0b5..58f57e6 100644 --- a/xsd/examples/cxx/tree/custom/calendar/xml-schema-custom.hxx +++ b/xsd/examples/cxx/tree/custom/calendar/xml-schema-custom.hxx @@ -1,5 +1,4 @@ // file : examples/cxx/tree/custom/calendar/xml-schema-custom.hxx -// author : Boris Kolpackov // copyright : not copyrighted - public domain // Do not include this file directly, use xml-schema.hxx instead. This diff --git a/xsd/examples/cxx/tree/custom/comments/dom-parse.cxx b/xsd/examples/cxx/tree/custom/comments/dom-parse.cxx index 1ba62e5..9999f67 100644 --- a/xsd/examples/cxx/tree/custom/comments/dom-parse.cxx +++ b/xsd/examples/cxx/tree/custom/comments/dom-parse.cxx @@ -1,5 +1,4 @@ // file : examples/cxx/tree/custom/comments/dom-parse.cxx -// author : Boris Kolpackov // copyright : not copyrighted - public domain #include "dom-parse.hxx" @@ -30,18 +29,14 @@ parse (std::istream& is, const std::string& id, bool validate) DOMImplementation* impl ( DOMImplementationRegistry::getDOMImplementation (ls_id)); -#if _XERCES_VERSION >= 30000 - - // Xerces-C++ 3.0.0 and later. - // xml::dom::auto_ptr parser ( impl->createLSParser (DOMImplementationLS::MODE_SYNCHRONOUS, 0)); DOMConfiguration* conf (parser->getDomConfig ()); - // Discard comment nodes in the document. + // Preserve comment nodes in the document. // - conf->setParameter (XMLUni::fgDOMComments, false); + conf->setParameter (XMLUni::fgDOMComments, true); // Enable datatype normalization. // @@ -85,39 +80,12 @@ parse (std::istream& is, const std::string& id, bool validate) xml::dom::bits::error_handler_proxy ehp (eh); conf->setParameter (XMLUni::fgDOMErrorHandler, &ehp); -#else // _XERCES_VERSION >= 30000 - - // Same as above but for Xerces-C++ 2 series. - // - xml::dom::auto_ptr parser ( - impl->createDOMBuilder (DOMImplementationLS::MODE_SYNCHRONOUS, 0)); - - parser->setFeature (XMLUni::fgDOMComments, false); - parser->setFeature (XMLUni::fgDOMDatatypeNormalization, true); - parser->setFeature (XMLUni::fgDOMEntities, false); - parser->setFeature (XMLUni::fgDOMNamespaces, true); - parser->setFeature (XMLUni::fgDOMWhitespaceInElementContent, false); - parser->setFeature (XMLUni::fgDOMValidation, validate); - parser->setFeature (XMLUni::fgXercesSchema, validate); - parser->setFeature (XMLUni::fgXercesSchemaFullChecking, false); - parser->setFeature (XMLUni::fgXercesUserAdoptsDOMDocument, true); - - tree::error_handler eh; - xml::dom::bits::error_handler_proxy ehp (eh); - parser->setErrorHandler (&ehp); - -#endif // _XERCES_VERSION >= 30000 - // Prepare input stream. // xml::sax::std_input_source isrc (is, id); Wrapper4InputSource wrap (&isrc, false); -#if _XERCES_VERSION >= 30000 xml::dom::auto_ptr doc (parser->parse (&wrap)); -#else - xml::dom::auto_ptr doc (parser->parse (wrap)); -#endif eh.throw_if_failed > (); diff --git a/xsd/examples/cxx/tree/custom/comments/dom-parse.hxx b/xsd/examples/cxx/tree/custom/comments/dom-parse.hxx index 05bfa2e..fea46d0 100644 --- a/xsd/examples/cxx/tree/custom/comments/dom-parse.hxx +++ b/xsd/examples/cxx/tree/custom/comments/dom-parse.hxx @@ -1,5 +1,4 @@ // file : examples/cxx/tree/custom/comments/dom-parse.hxx -// author : Boris Kolpackov // copyright : not copyrighted - public domain #ifndef DOM_PARSE diff --git a/xsd/examples/cxx/tree/custom/comments/driver.cxx b/xsd/examples/cxx/tree/custom/comments/driver.cxx index 4ce2573..39b16f7 100644 --- a/xsd/examples/cxx/tree/custom/comments/driver.cxx +++ b/xsd/examples/cxx/tree/custom/comments/driver.cxx @@ -1,5 +1,4 @@ // file : examples/cxx/tree/custom/commens/driver.cxx -// author : Boris Kolpackov // copyright : not copyrighted - public domain #include // std::auto_ptr diff --git a/xsd/examples/cxx/tree/custom/comments/makefile b/xsd/examples/cxx/tree/custom/comments/makefile index de265a1..eebb75e 100644 --- a/xsd/examples/cxx/tree/custom/comments/makefile +++ b/xsd/examples/cxx/tree/custom/comments/makefile @@ -1,6 +1,5 @@ # file : examples/cxx/tree/custom/comments/makefile -# author : Boris Kolpackov -# copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +# copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC # license : GNU GPL v2 + exceptions; see accompanying LICENSE file include $(dir $(lastword $(MAKEFILE_LIST)))../../../../../build/bootstrap.make @@ -28,7 +27,7 @@ $(call import,\ # $(driver): $(obj) $(xerces_c.l) -$(obj) $(dep): cpp_options := -I$(src_root)/libxsd +$(obj) $(dep): cpp_options := -I$(out_base) -I$(src_base) -I$(src_root)/libxsd $(obj) $(dep): $(xerces_c.l.cpp-options) # Header file for XML Schema namespace. @@ -37,7 +36,7 @@ $(out_base)/xml-schema.hxx: $(out_root)/xsd/xsd $(call message,xsd $(src_base)/xml-schema.xsd,\ $(out_root)/xsd/xsd cxx-tree --output-dir $(out_base) --generate-xml-schema \ --generate-serialization --custom-type anyType=/type_base \ ---hxx-epilogue '\#include "xml-schema-custom.hxx"' xml-schema.xsd) +--hxx-epilogue '#include "xml-schema-custom.hxx"' xml-schema.xsd) # # @@ -45,15 +44,14 @@ genf := $(xsd:.xsd=.hxx) $(xsd:.xsd=.ixx) $(xsd:.xsd=.cxx) gen := $(addprefix $(out_base)/,$(genf)) $(gen): xsd := $(out_root)/xsd/xsd - -$(gen): xsd_options := \ +$(gen): xsd_options += \ --generate-inline \ --generate-serialization \ --extern-xml-schema xml-schema.xsd $(gen): $(out_root)/xsd/xsd -$(call include-dep,$(dep)) +$(call include-dep,$(dep),$(obj),$(gen)) # Convenience alias for default target. # @@ -90,7 +88,7 @@ $(dist): $(dist-common) $(dist-win): $(dist-common) $(call install-data,$(src_base)/README,$(dist_prefix)/$(path)/README.txt) - $(call message,,unix2dos $(dist_prefix)/$(path)/README.txt) + $(call message,,todos $(dist_prefix)/$(path)/README.txt) # Clean. # diff --git a/xsd/examples/cxx/tree/custom/comments/people.xml b/xsd/examples/cxx/tree/custom/comments/people.xml index b6a44e5..55c08a1 100644 --- a/xsd/examples/cxx/tree/custom/comments/people.xml +++ b/xsd/examples/cxx/tree/custom/comments/people.xml @@ -3,7 +3,6 @@ diff --git a/xsd/examples/cxx/tree/custom/comments/people.xsd b/xsd/examples/cxx/tree/custom/comments/people.xsd index 2f40754..e70dd2a 100644 --- a/xsd/examples/cxx/tree/custom/comments/people.xsd +++ b/xsd/examples/cxx/tree/custom/comments/people.xsd @@ -3,7 +3,6 @@ diff --git a/xsd/examples/cxx/tree/custom/comments/xml-schema-custom.cxx b/xsd/examples/cxx/tree/custom/comments/xml-schema-custom.cxx index d86d6af..67937d1 100644 --- a/xsd/examples/cxx/tree/custom/comments/xml-schema-custom.cxx +++ b/xsd/examples/cxx/tree/custom/comments/xml-schema-custom.cxx @@ -1,5 +1,4 @@ // file : examples/cxx/tree/custom/comments/xml-schema-custom.cxx -// author : Boris Kolpackov // copyright : not copyrighted - public domain // Include xml-schema.hxx instead of xml-schema-custom.hxx here. diff --git a/xsd/examples/cxx/tree/custom/comments/xml-schema-custom.hxx b/xsd/examples/cxx/tree/custom/comments/xml-schema-custom.hxx index 821d0dd..0442a44 100644 --- a/xsd/examples/cxx/tree/custom/comments/xml-schema-custom.hxx +++ b/xsd/examples/cxx/tree/custom/comments/xml-schema-custom.hxx @@ -1,5 +1,4 @@ // file : examples/cxx/tree/custom/comments/xml-schema-custom.hxx -// author : Boris Kolpackov // copyright : not copyrighted - public domain // Do not include this file directly, use xml-schema.hxx instead. This diff --git a/xsd/examples/cxx/tree/custom/contacts/contacts-custom.cxx b/xsd/examples/cxx/tree/custom/contacts/contacts-custom.cxx index dd7c453..8bb0e22 100644 --- a/xsd/examples/cxx/tree/custom/contacts/contacts-custom.cxx +++ b/xsd/examples/cxx/tree/custom/contacts/contacts-custom.cxx @@ -1,5 +1,4 @@ // file : examples/cxx/tree/custom/contacts/contacts-custom.cxx -// author : Boris Kolpackov // copyright : not copyrighted - public domain #include diff --git a/xsd/examples/cxx/tree/custom/contacts/contacts-custom.hxx b/xsd/examples/cxx/tree/custom/contacts/contacts-custom.hxx index fdb6810..65d6244 100644 --- a/xsd/examples/cxx/tree/custom/contacts/contacts-custom.hxx +++ b/xsd/examples/cxx/tree/custom/contacts/contacts-custom.hxx @@ -1,5 +1,4 @@ // file : examples/cxx/tree/custom/contacts/contacts-custom.hxx -// author : Boris Kolpackov // copyright : not copyrighted - public domain // Do not include this file directly, use contacts.hxx instead. This diff --git a/xsd/examples/cxx/tree/custom/contacts/contacts.xml b/xsd/examples/cxx/tree/custom/contacts/contacts.xml index c6dc38f..331e692 100644 --- a/xsd/examples/cxx/tree/custom/contacts/contacts.xml +++ b/xsd/examples/cxx/tree/custom/contacts/contacts.xml @@ -3,7 +3,6 @@ diff --git a/xsd/examples/cxx/tree/custom/contacts/contacts.xsd b/xsd/examples/cxx/tree/custom/contacts/contacts.xsd index da73c78..d6110fe 100644 --- a/xsd/examples/cxx/tree/custom/contacts/contacts.xsd +++ b/xsd/examples/cxx/tree/custom/contacts/contacts.xsd @@ -3,7 +3,6 @@ diff --git a/xsd/examples/cxx/tree/custom/contacts/driver.cxx b/xsd/examples/cxx/tree/custom/contacts/driver.cxx index 9015e87..ae8a2da 100644 --- a/xsd/examples/cxx/tree/custom/contacts/driver.cxx +++ b/xsd/examples/cxx/tree/custom/contacts/driver.cxx @@ -1,5 +1,4 @@ // file : examples/cxx/tree/custom/contacts/driver.cxx -// author : Boris Kolpackov // copyright : not copyrighted - public domain #include // std::auto_ptr diff --git a/xsd/examples/cxx/tree/custom/contacts/makefile b/xsd/examples/cxx/tree/custom/contacts/makefile index e279634..ec9d902 100644 --- a/xsd/examples/cxx/tree/custom/contacts/makefile +++ b/xsd/examples/cxx/tree/custom/contacts/makefile @@ -1,6 +1,5 @@ # file : examples/cxx/tree/custom/contacts/makefile -# author : Boris Kolpackov -# copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +# copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC # license : GNU GPL v2 + exceptions; see accompanying LICENSE file include $(dir $(lastword $(MAKEFILE_LIST)))../../../../../build/bootstrap.make @@ -29,7 +28,7 @@ $(call import,\ # $(driver): $(obj) $(xerces_c.l) -$(obj) $(dep): cpp_options := -I$(src_root)/libxsd +$(obj) $(dep): cpp_options := -I$(out_base) -I$(src_base) -I$(src_root)/libxsd $(obj) $(dep): $(xerces_c.l.cpp-options) genf := $(xsd:.xsd=.hxx) $(xsd:.xsd=.ixx) $(xsd:.xsd=.cxx) @@ -40,14 +39,14 @@ $(gen): xsd := $(out_root)/xsd/xsd # We have to double-escape '#' because the message function # (which is used in command scripts) expands things twice. # -$(gen): xsd_options := \ +$(gen): xsd_options += \ --generate-inline \ --custom-type contact=/contact_base \ ---hxx-epilogue '\\\#include "contacts-custom.hxx"' +--hxx-epilogue '\#include "contacts-custom.hxx"' $(gen): $(out_root)/xsd/xsd -$(call include-dep,$(dep)) +$(call include-dep,$(dep),$(obj),$(gen)) # Convenience alias for default target. # @@ -80,7 +79,7 @@ $(dist): $(dist-common) $(dist-win): $(dist-common) $(call install-data,$(src_base)/README,$(dist_prefix)/$(path)/README.txt) - $(call message,,unix2dos $(dist_prefix)/$(path)/README.txt) + $(call message,,todos $(dist_prefix)/$(path)/README.txt) # Clean. # diff --git a/xsd/examples/cxx/tree/custom/double/double-custom.cxx b/xsd/examples/cxx/tree/custom/double/double-custom.cxx index 78904a0..6aad908 100644 --- a/xsd/examples/cxx/tree/custom/double/double-custom.cxx +++ b/xsd/examples/cxx/tree/custom/double/double-custom.cxx @@ -1,5 +1,4 @@ // file : examples/cxx/tree/custom/double/double-custom.cxx -// author : Boris Kolpackov // copyright : not copyrighted - public domain // Include xml-schema.hxx instead of double-custom.hxx here. diff --git a/xsd/examples/cxx/tree/custom/double/double-custom.hxx b/xsd/examples/cxx/tree/custom/double/double-custom.hxx index 17d9a44..1516211 100644 --- a/xsd/examples/cxx/tree/custom/double/double-custom.hxx +++ b/xsd/examples/cxx/tree/custom/double/double-custom.hxx @@ -1,5 +1,4 @@ // file : examples/cxx/tree/custom/double/double-custom.hxx -// author : Boris Kolpackov // copyright : not copyrighted - public domain // Do not include this file directly, use xml-schema.hxx instead. This diff --git a/xsd/examples/cxx/tree/custom/double/driver.cxx b/xsd/examples/cxx/tree/custom/double/driver.cxx index 2e5b44d..8b102a5 100644 --- a/xsd/examples/cxx/tree/custom/double/driver.cxx +++ b/xsd/examples/cxx/tree/custom/double/driver.cxx @@ -1,5 +1,4 @@ // file : examples/cxx/tree/custom/double/driver.cxx -// author : Boris Kolpackov // copyright : not copyrighted - public domain #include diff --git a/xsd/examples/cxx/tree/custom/double/makefile b/xsd/examples/cxx/tree/custom/double/makefile index 5bd4f71..2eed216 100644 --- a/xsd/examples/cxx/tree/custom/double/makefile +++ b/xsd/examples/cxx/tree/custom/double/makefile @@ -1,6 +1,5 @@ # file : examples/cxx/tree/custom/double/makefile -# author : Boris Kolpackov -# copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +# copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC # license : GNU GPL v2 + exceptions; see accompanying LICENSE file include $(dir $(lastword $(MAKEFILE_LIST)))../../../../../build/bootstrap.make @@ -29,26 +28,25 @@ $(call import,\ # $(driver): $(obj) $(xerces_c.l) -$(obj) $(dep): cpp_options := -I$(src_root)/libxsd +$(obj) $(dep): cpp_options := -I$(out_base) -I$(src_base) -I$(src_root)/libxsd $(obj) $(dep): $(xerces_c.l.cpp-options) $(out_base)/xml-schema.hxx: $(out_root)/xsd/xsd $(call message,xsd $(src_base)/xml-schema.xsd,\ $(out_root)/xsd/xsd cxx-tree --output-dir $(out_base) --generate-xml-schema \ --generate-serialization --custom-type double=double \ ---hxx-epilogue '\#include "double-custom.hxx"' xml-schema.xsd) +--hxx-epilogue '#include "double-custom.hxx"' xml-schema.xsd) genf := $(xsd:.xsd=.hxx) $(xsd:.xsd=.ixx) $(xsd:.xsd=.cxx) gen := $(addprefix $(out_base)/,$(genf)) $(gen): xsd := $(out_root)/xsd/xsd - -$(gen): xsd_options := \ ---generate-serialization --extern-xml-schema xml-schema.xsd +$(gen): xsd_options += --generate-serialization \ +--extern-xml-schema xml-schema.xsd $(gen): $(out_root)/xsd/xsd -$(call include-dep,$(dep)) +$(call include-dep,$(dep),$(obj),$(gen)) # Convenience alias for default target. # @@ -79,7 +77,7 @@ $(dist): $(dist-common) $(dist-win): $(dist-common) $(call install-data,$(src_base)/README,$(dist_prefix)/$(path)/README.txt) - $(call message,,unix2dos $(dist_prefix)/$(path)/README.txt) + $(call message,,todos $(dist_prefix)/$(path)/README.txt) # Clean. # diff --git a/xsd/examples/cxx/tree/custom/double/order.xsd b/xsd/examples/cxx/tree/custom/double/order.xsd index 0d7fe05..9cf1a1d 100644 --- a/xsd/examples/cxx/tree/custom/double/order.xsd +++ b/xsd/examples/cxx/tree/custom/double/order.xsd @@ -3,7 +3,6 @@ diff --git a/xsd/examples/cxx/tree/custom/makefile b/xsd/examples/cxx/tree/custom/makefile index d1044db..d84f840 100644 --- a/xsd/examples/cxx/tree/custom/makefile +++ b/xsd/examples/cxx/tree/custom/makefile @@ -1,6 +1,5 @@ # file : examples/cxx/tree/custom/makefile -# author : Boris Kolpackov -# copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +# copyright : Copyright (c) 2006-2014 Code Synthesis Tools CC # license : GNU GPL v2 + exceptions; see accompanying LICENSE file include $(dir $(lastword $(MAKEFILE_LIST)))../../../../build/bootstrap.make @@ -32,15 +31,27 @@ $(install): $(addprefix $(out_base)/,$(addsuffix /.install,$(all_examples))) $(dist): $(addprefix $(out_base)/,$(addsuffix /.dist,$(all_examples))) $(call install-data,$(src_base)/README,$(dist_prefix)/$(path)/README) +$(dist-win): |$(out_root)/.dist-pre $(dist-win): $(addprefix $(out_base)/,$(addsuffix /.dist-win,$(all_examples))) $(call install-data,$(src_base)/README,$(dist_prefix)/$(path)/README.txt) - $(call message,,unix2dos $(dist_prefix)/$(path)/README.txt) + $(call message,,todos $(dist_prefix)/$(path)/README.txt) + $(call meta-vc8sln,$(src_root)/dist/template-vc8.sln,custom-vc8.sln) + $(call meta-vc9sln,$(src_root)/dist/template-vc9.sln,custom-vc9.sln) + $(call meta-vc10sln,$(src_root)/dist/template-vc10.sln,custom-vc10.sln) + $(call meta-vc11sln,$(src_root)/dist/template-vc11.sln,custom-vc11.sln) + $(call meta-vc12sln,$(src_root)/dist/template-vc12.sln,custom-vc12.sln) + # Clean. # $(clean): $(addprefix $(out_base)/,$(addsuffix /.clean,$(build_examples))) $(call include,$(bld_root)/install.make) +$(call include,$(bld_root)/meta/vc8sln.make) +$(call include,$(bld_root)/meta/vc9sln.make) +$(call include,$(bld_root)/meta/vc10sln.make) +$(call include,$(bld_root)/meta/vc11sln.make) +$(call include,$(bld_root)/meta/vc12sln.make) ifneq ($(filter $(MAKECMDGOALS),dist dist-win install),) $(foreach e,$(all_examples),$(call import,$(src_base)/$e/makefile)) diff --git a/xsd/examples/cxx/tree/custom/mixed/driver.cxx b/xsd/examples/cxx/tree/custom/mixed/driver.cxx index a6dd0a7..0378f18 100644 --- a/xsd/examples/cxx/tree/custom/mixed/driver.cxx +++ b/xsd/examples/cxx/tree/custom/mixed/driver.cxx @@ -1,5 +1,4 @@ // file : examples/cxx/tree/custom/mixed/driver.cxx -// author : Boris Kolpackov // copyright : not copyrighted - public domain #include // std::auto_ptr diff --git a/xsd/examples/cxx/tree/custom/mixed/makefile b/xsd/examples/cxx/tree/custom/mixed/makefile index 144299e..54610f0 100644 --- a/xsd/examples/cxx/tree/custom/mixed/makefile +++ b/xsd/examples/cxx/tree/custom/mixed/makefile @@ -1,6 +1,5 @@ # file : examples/cxx/tree/custom/mixed/makefile -# author : Boris Kolpackov -# copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +# copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC # license : GNU GPL v2 + exceptions; see accompanying LICENSE file include $(dir $(lastword $(MAKEFILE_LIST)))../../../../../build/bootstrap.make @@ -29,7 +28,7 @@ $(call import,\ # $(driver): $(obj) $(xerces_c.l) -$(obj) $(dep): cpp_options := -I$(src_root)/libxsd +$(obj) $(dep): cpp_options := -I$(out_base) -I$(src_base) -I$(src_root)/libxsd $(obj) $(dep): $(xerces_c.l.cpp-options) genf := $(xsd:.xsd=.hxx) $(xsd:.xsd=.ixx) $(xsd:.xsd=.cxx) @@ -40,15 +39,15 @@ $(gen): xsd := $(out_root)/xsd/xsd # We have to double-escape '#' because the message function # (which is used in command scripts) expands things twice. # -$(gen): xsd_options := \ +$(gen): xsd_options += \ --generate-inline \ --generate-serialization \ --custom-type bio=/bio_base \ ---hxx-epilogue '\\\#include "people-custom.hxx"' +--hxx-epilogue '\#include "people-custom.hxx"' $(gen): $(out_root)/xsd/xsd -$(call include-dep,$(dep)) +$(call include-dep,$(dep),$(obj),$(gen)) # Convenience alias for default target. # @@ -81,7 +80,7 @@ $(dist): $(dist-common) $(dist-win): $(dist-common) $(call install-data,$(src_base)/README,$(dist_prefix)/$(path)/README.txt) - $(call message,,unix2dos $(dist_prefix)/$(path)/README.txt) + $(call message,,todos $(dist_prefix)/$(path)/README.txt) # Clean. diff --git a/xsd/examples/cxx/tree/custom/mixed/people-custom.cxx b/xsd/examples/cxx/tree/custom/mixed/people-custom.cxx index af07e22..7cd1947 100644 --- a/xsd/examples/cxx/tree/custom/mixed/people-custom.cxx +++ b/xsd/examples/cxx/tree/custom/mixed/people-custom.cxx @@ -1,5 +1,4 @@ // file : examples/cxx/tree/custom/mixed/people-custom.cxx -// author : Boris Kolpackov // copyright : not copyrighted - public domain #include diff --git a/xsd/examples/cxx/tree/custom/mixed/people-custom.hxx b/xsd/examples/cxx/tree/custom/mixed/people-custom.hxx index f05ba4a..54dfb21 100644 --- a/xsd/examples/cxx/tree/custom/mixed/people-custom.hxx +++ b/xsd/examples/cxx/tree/custom/mixed/people-custom.hxx @@ -1,5 +1,4 @@ // file : examples/cxx/tree/custom/mixed/people-custom.hxx -// author : Boris Kolpackov // copyright : not copyrighted - public domain // Do not include this file directly, use people.hxx instead. This diff --git a/xsd/examples/cxx/tree/custom/mixed/people.xml b/xsd/examples/cxx/tree/custom/mixed/people.xml index 4e5c0ca..47e68b9 100644 --- a/xsd/examples/cxx/tree/custom/mixed/people.xml +++ b/xsd/examples/cxx/tree/custom/mixed/people.xml @@ -3,7 +3,6 @@ diff --git a/xsd/examples/cxx/tree/custom/mixed/people.xsd b/xsd/examples/cxx/tree/custom/mixed/people.xsd index 40c1fc1..03e6c97 100644 --- a/xsd/examples/cxx/tree/custom/mixed/people.xsd +++ b/xsd/examples/cxx/tree/custom/mixed/people.xsd @@ -3,7 +3,6 @@ diff --git a/xsd/examples/cxx/tree/custom/taxonomy/driver.cxx b/xsd/examples/cxx/tree/custom/taxonomy/driver.cxx index f102fc3..ec562f6 100644 --- a/xsd/examples/cxx/tree/custom/taxonomy/driver.cxx +++ b/xsd/examples/cxx/tree/custom/taxonomy/driver.cxx @@ -1,5 +1,4 @@ // file : examples/cxx/tree/custom/taxonomy/driver.cxx -// author : Boris Kolpackov // copyright : not copyrighted - public domain #include // std::auto_ptr diff --git a/xsd/examples/cxx/tree/custom/taxonomy/makefile b/xsd/examples/cxx/tree/custom/taxonomy/makefile index ca3327c..5637f17 100644 --- a/xsd/examples/cxx/tree/custom/taxonomy/makefile +++ b/xsd/examples/cxx/tree/custom/taxonomy/makefile @@ -1,6 +1,5 @@ # file : examples/cxx/tree/custom/taxonomy/makefile -# author : Boris Kolpackov -# copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +# copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC # license : GNU GPL v2 + exceptions; see accompanying LICENSE file include $(dir $(lastword $(MAKEFILE_LIST)))../../../../../build/bootstrap.make @@ -29,7 +28,7 @@ $(call import,\ # $(driver): $(obj) $(xerces_c.l) -$(obj) $(dep): cpp_options := -I$(src_root)/libxsd +$(obj) $(dep): cpp_options := -I$(out_base) -I$(src_base) -I$(src_root)/libxsd $(obj) $(dep): $(xerces_c.l.cpp-options) genf := $(xsd:.xsd=.hxx) $(xsd:.xsd=-fwd.hxx) $(xsd:.xsd=.ixx) $(xsd:.xsd=.cxx) @@ -40,7 +39,7 @@ $(gen): xsd := $(out_root)/xsd/xsd # We have to double-escape '#' because the message function # (which is used in command scripts) expands things twice. # -$(gen): xsd_options := \ +$(gen): xsd_options += \ --generate-inline \ --generate-forward \ --generate-polymorphic \ @@ -48,12 +47,12 @@ $(gen): xsd_options := \ --custom-type "person=person_impl/person_base" \ --custom-type "superman=superman_impl/superman_base" \ --custom-type "batman=batman_impl/batman_base" \ ---fwd-prologue '\\\#include "people-custom-fwd.hxx"' \ ---hxx-prologue '\\\#include "people-custom.hxx"' +--fwd-prologue '\#include "people-custom-fwd.hxx"' \ +--hxx-prologue '\#include "people-custom.hxx"' $(gen): $(out_root)/xsd/xsd -$(call include-dep,$(dep)) +$(call include-dep,$(dep),$(obj),$(gen)) # Convenience alias for default target. # @@ -88,7 +87,7 @@ $(dist): $(dist-common) $(dist-win): $(dist-common) $(call install-data,$(src_base)/README,$(dist_prefix)/$(path)/README.txt) - $(call message,,unix2dos $(dist_prefix)/$(path)/README.txt) + $(call message,,todos $(dist_prefix)/$(path)/README.txt) # Clean. diff --git a/xsd/examples/cxx/tree/custom/taxonomy/people-custom-fwd.hxx b/xsd/examples/cxx/tree/custom/taxonomy/people-custom-fwd.hxx index 973b6e5..2c26bf5 100644 --- a/xsd/examples/cxx/tree/custom/taxonomy/people-custom-fwd.hxx +++ b/xsd/examples/cxx/tree/custom/taxonomy/people-custom-fwd.hxx @@ -1,5 +1,4 @@ // file : examples/cxx/tree/custom/taxonomy/people-custom-fwd.hxx -// author : Boris Kolpackov // copyright : not copyrighted - public domain // Do not include this file directly, use people-fwd.hxx instead. This diff --git a/xsd/examples/cxx/tree/custom/taxonomy/people-custom.cxx b/xsd/examples/cxx/tree/custom/taxonomy/people-custom.cxx index 321d2df..a06a6ea 100644 --- a/xsd/examples/cxx/tree/custom/taxonomy/people-custom.cxx +++ b/xsd/examples/cxx/tree/custom/taxonomy/people-custom.cxx @@ -1,5 +1,4 @@ // file : examples/cxx/tree/custom/taxonomy/people-custom.cxx -// author : Boris Kolpackov // copyright : not copyrighted - public domain #include diff --git a/xsd/examples/cxx/tree/custom/taxonomy/people-custom.hxx b/xsd/examples/cxx/tree/custom/taxonomy/people-custom.hxx index c601061..a60edc8 100644 --- a/xsd/examples/cxx/tree/custom/taxonomy/people-custom.hxx +++ b/xsd/examples/cxx/tree/custom/taxonomy/people-custom.hxx @@ -1,5 +1,4 @@ // file : examples/cxx/tree/custom/taxonomy/people-custom.hxx -// author : Boris Kolpackov // copyright : not copyrighted - public domain // Do not include this file directly, use people.hxx instead. This diff --git a/xsd/examples/cxx/tree/custom/taxonomy/people.xml b/xsd/examples/cxx/tree/custom/taxonomy/people.xml index 5f84855..b53b576 100644 --- a/xsd/examples/cxx/tree/custom/taxonomy/people.xml +++ b/xsd/examples/cxx/tree/custom/taxonomy/people.xml @@ -3,7 +3,6 @@ diff --git a/xsd/examples/cxx/tree/custom/taxonomy/people.xsd b/xsd/examples/cxx/tree/custom/taxonomy/people.xsd index c77a866..1181270 100644 --- a/xsd/examples/cxx/tree/custom/taxonomy/people.xsd +++ b/xsd/examples/cxx/tree/custom/taxonomy/people.xsd @@ -3,7 +3,6 @@ diff --git a/xsd/examples/cxx/tree/custom/wildcard/driver.cxx b/xsd/examples/cxx/tree/custom/wildcard/driver.cxx index d63fb11..d29f125 100644 --- a/xsd/examples/cxx/tree/custom/wildcard/driver.cxx +++ b/xsd/examples/cxx/tree/custom/wildcard/driver.cxx @@ -1,5 +1,4 @@ // file : examples/cxx/tree/custom/wildcard/driver.cxx -// author : Boris Kolpackov // copyright : not copyrighted - public domain #include // std::auto_ptr diff --git a/xsd/examples/cxx/tree/custom/wildcard/makefile b/xsd/examples/cxx/tree/custom/wildcard/makefile index d06fff3..55e94b0 100644 --- a/xsd/examples/cxx/tree/custom/wildcard/makefile +++ b/xsd/examples/cxx/tree/custom/wildcard/makefile @@ -1,6 +1,5 @@ # file : examples/cxx/tree/custom/wildcard/makefile -# author : Boris Kolpackov -# copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +# copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC # license : GNU GPL v2 + exceptions; see accompanying LICENSE file include $(dir $(lastword $(MAKEFILE_LIST)))../../../../../build/bootstrap.make @@ -29,7 +28,7 @@ $(call import,\ # $(driver): $(obj) $(xerces_c.l) -$(obj) $(dep): cpp_options := -I$(src_root)/libxsd +$(obj) $(dep): cpp_options := -I$(out_base) -I$(src_base) -I$(src_root)/libxsd $(obj) $(dep): $(xerces_c.l.cpp-options) genf := $(xsd:.xsd=.hxx) $(xsd:.xsd=.ixx) $(xsd:.xsd=.cxx) @@ -40,16 +39,16 @@ $(gen): xsd := $(out_root)/xsd/xsd # We have to double-escape '#' because the message function # (which is used in command scripts) expands things twice. # -$(gen): xsd_options := \ +$(gen): xsd_options += \ --generate-inline \ --generate-ostream \ --generate-serialization \ --custom-type data=/data_base \ ---hxx-epilogue '\\\#include "wildcard-custom.hxx"' +--hxx-epilogue '\#include "wildcard-custom.hxx"' $(gen): $(out_root)/xsd/xsd -$(call include-dep,$(dep)) +$(call include-dep,$(dep),$(obj),$(gen)) # Convenience alias for default target. # @@ -82,7 +81,7 @@ $(dist): $(dist-common) $(dist-win): $(dist-common) $(call install-data,$(src_base)/README,$(dist_prefix)/$(path)/README.txt) - $(call message,,unix2dos $(dist_prefix)/$(path)/README.txt) + $(call message,,todos $(dist_prefix)/$(path)/README.txt) # Clean. diff --git a/xsd/examples/cxx/tree/custom/wildcard/wildcard-custom.cxx b/xsd/examples/cxx/tree/custom/wildcard/wildcard-custom.cxx index 422a4b3..006f93a 100644 --- a/xsd/examples/cxx/tree/custom/wildcard/wildcard-custom.cxx +++ b/xsd/examples/cxx/tree/custom/wildcard/wildcard-custom.cxx @@ -1,5 +1,4 @@ // file : examples/cxx/tree/custom/wildcard/wildcard-custom.cxx -// author : Boris Kolpackov // copyright : not copyrighted - public domain #include diff --git a/xsd/examples/cxx/tree/custom/wildcard/wildcard-custom.hxx b/xsd/examples/cxx/tree/custom/wildcard/wildcard-custom.hxx index 2c58cc8..0546d38 100644 --- a/xsd/examples/cxx/tree/custom/wildcard/wildcard-custom.hxx +++ b/xsd/examples/cxx/tree/custom/wildcard/wildcard-custom.hxx @@ -1,5 +1,4 @@ // file : examples/cxx/tree/custom/wildcard/wildcard-custom.hxx -// author : Boris Kolpackov // copyright : not copyrighted - public domain // Do not include this file directly, use wildcard.hxx instead. This diff --git a/xsd/examples/cxx/tree/custom/wildcard/wildcard.xml b/xsd/examples/cxx/tree/custom/wildcard/wildcard.xml index c980193..80f215a 100644 --- a/xsd/examples/cxx/tree/custom/wildcard/wildcard.xml +++ b/xsd/examples/cxx/tree/custom/wildcard/wildcard.xml @@ -3,7 +3,6 @@ diff --git a/xsd/examples/cxx/tree/custom/wildcard/wildcard.xsd b/xsd/examples/cxx/tree/custom/wildcard/wildcard.xsd index ccce30b..1a32b1e 100644 --- a/xsd/examples/cxx/tree/custom/wildcard/wildcard.xsd +++ b/xsd/examples/cxx/tree/custom/wildcard/wildcard.xsd @@ -3,7 +3,6 @@ diff --git a/xsd/examples/cxx/tree/dbxml/README b/xsd/examples/cxx/tree/dbxml/README deleted file mode 100644 index 59e67d0..0000000 --- a/xsd/examples/cxx/tree/dbxml/README +++ /dev/null @@ -1,45 +0,0 @@ -This example shows how to use the C++/Tree mapping on top of the Berkeley -DB XML embedded XML database. This example is described in detail in the -"C++/Tree Mapping and Berkeley DB XML Integration Guide" which can be -found in the documentation/cxx/tree/dbxml directory of the XSD -distribution. - -You will need the Berkeley DB XML libraries[1] installed in order to build -and run this example. The makefiles and project files for this example link -to the DB XML library names corresponding to version 2.3.X. Earlier and later -versions can also be used but may require adjustments to the library names -being linked to. - -Note that due to the incomplete DOM API implementation provided by DB -XML (as of version 2.3.10), the generated code and your application -should be compiled with the DBXML_DOM macro defined in order to avoid -using unsupported parts of the API. - -The example consists of the following files: - -library.xsd - XML Schema which describes a library of books. - -library.hxx -library.cxx - C++ types that represent the given vocabulary, a set of parsing - functions that convert XML instance documents to a tree-like in-memory - object model, and a set of serialization functions that convert the - object model back to XML. These are generated by XSD from library.xsd. - -driver.cxx - Driver for the example. It performs the following four operations on - the database: - - * Create a new document in DB from an object model - * Create an object model from a document in DB - * Create an object model from a document fragment in DB - * Update a document fragment in DB from an object model - - -To run the example simply execute: - -$ ./driver - - -[1] http://www.sleepycat.com/products/bdbxml.html diff --git a/xsd/examples/cxx/tree/dbxml/driver.cxx b/xsd/examples/cxx/tree/dbxml/driver.cxx deleted file mode 100644 index 56cbb4a..0000000 --- a/xsd/examples/cxx/tree/dbxml/driver.cxx +++ /dev/null @@ -1,175 +0,0 @@ -// file : examples/cxx/tree/dbxml/driver.cxx -// author : Boris Kolpackov -// copyright : not copyrighted - public domain - -#include // std::auto_ptr -#include -#include -#include - -#include - -#include "library.hxx" - -using std::cerr; -using std::endl; -using std::string; -using std::auto_ptr; - -using namespace DbXml; -using namespace xsd::cxx; // for xml::string - -void -print_document (const string& desc, - XmlContainer container, - const string& name) -{ - XmlDocument doc (container.getDocument (name)); - - string content; - doc.getContent (content); - - cerr << endl - << desc << endl - << content << endl; -} - -int -main () -{ - try - { - using namespace library; - using xml_schema::date; - - XmlManager manager; - - { - XmlContainer container (manager.createContainer ("new.bdbxml")); - - XmlUpdateContext update_context (manager.createUpdateContext ()); - - XmlQueryContext context (manager.createQueryContext ()); - context.setNamespace ("lib", "http://www.codesynthesis.com/library"); - - - // Create a new document from an object model. - // - { - // Create a new catalog with one book. - // - catalog c; - - book b (20530902, // ISBN - "The Elements of Style", // Title - genre::reference, // Genre - "ES"); // ID - - author strunk ("William Strunk, Jr.", date (1869, 7, 1)); - strunk.died (date (1946, 9, 26)); - - b.author ().push_back (strunk); - c.book ().push_back (b); - - - // Create a new XML document. - // - XmlDocument doc (manager.createDocument ()); - doc.setName ("new.xml"); - - - // Obtain its DOM representation and add the root element. - // - xercesc::DOMDocument& dom_doc (*doc.getContentAsDOM ()); - - dom_doc.appendChild ( - dom_doc.createElementNS ( - xml::string ("http://www.codesynthesis.com/library").c_str (), - xml::string ("lib:catalog").c_str ())); - - - // Serialize the object model to the XML document. Also avoid - // re-initializing the Xerces-C++ runtime since XmlManager has - // it initialized. - // - catalog_ (dom_doc, c, xml_schema::flags::dont_initialize); - - - // Place the document into the container. - // - container.putDocument (doc, update_context); - - print_document ("after create:", container, "new.xml"); - } - - // Create an object model from a document in DB. - // - { - // Resolve the document in the container. - // - XmlDocument doc (container.getDocument ("new.xml")); - - - // Create the object model from the document's DOM. Also avoid - // re-initializing the Xerces-C++ runtime since XmlManager has - // it initialized. - // - auto_ptr c (catalog_ (*doc.getContentAsDOM (), - xml_schema::flags::dont_initialize)); - - cerr << *c << endl; - } - - - // Lookup a document fragment. - // - - string query ("collection('new.bdbxml')/lib:catalog/book[@id='ES']"); - - // Find "The Elements of Style". - // - XmlValue v; - XmlResults results (manager.query (query, context)); - - if (results.next (v)) - { - // Create an object model from the document fragment. - // - auto_ptr b ( - new book ( - *static_cast (v.asNode ()))); - - cerr << *b << endl; - - - // Add another author, change the availability status. - // - author white ("E.B. White", date (1899, 7, 11)); - white.died (date (1985, 10, 1)); - - b->author ().push_back (white); - b->available (false); - - - // Update the document fragment from the object model. - // - *static_cast (v.asNode ()) << *b; - - - // Update the document in the container. - // - XmlDocument doc (v.asDocument ()); - container.updateDocument (doc, update_context); - } - - print_document ("after update:", container, "new.xml"); - } - - manager.removeContainer ("new.bdbxml"); - } - catch (const std::exception& e) - { - cerr << e.what () << endl; - return 1; - } -} diff --git a/xsd/examples/cxx/tree/dbxml/library.xsd b/xsd/examples/cxx/tree/dbxml/library.xsd deleted file mode 100644 index c71c312..0000000 --- a/xsd/examples/cxx/tree/dbxml/library.xsd +++ /dev/null @@ -1,75 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/xsd/examples/cxx/tree/dbxml/makefile b/xsd/examples/cxx/tree/dbxml/makefile deleted file mode 100644 index fe10d6d..0000000 --- a/xsd/examples/cxx/tree/dbxml/makefile +++ /dev/null @@ -1,107 +0,0 @@ -# file : examples/cxx/tree/dbxml/makefile -# author : Boris Kolpackov -# copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC -# license : GNU GPL v2 + exceptions; see accompanying LICENSE file - -include $(dir $(lastword $(MAKEFILE_LIST)))../../../../build/bootstrap.make - -xsd := library.xsd -cxx := driver.cxx - -obj := $(addprefix $(out_base)/,$(cxx:.cxx=.o) $(xsd:.xsd=.o)) -dep := $(obj:.o=.o.d) - -driver := $(out_base)/driver -install := $(out_base)/.install -dist := $(out_base)/.dist -dist-win := $(out_base)/.dist-win -clean := $(out_base)/.clean - - -# Import. -# -$(call import,\ - $(scf_root)/import/libxerces-c/stub.make,\ - l: xerces_c.l,cpp-options: xerces_c.l.cpp-options) - -ifeq ($(filter $(MAKECMDGOALS),dist dist-win install),) -$(call import,\ - $(scf_root)/import/libdbxml/stub.make,\ - l: dbxml.l,cpp-options: dbxml.l.cpp-options) -endif - - -# Build. -# -$(driver): $(obj) $(xerces_c.l) $(dbxml.l) - -$(obj) $(dep): cpp_options := -I$(src_root)/libxsd -DDBXML_DOM -$(obj) $(dep): $(xerces_c.l.cpp-options) $(dbxml.l.cpp-options) - -genf := $(xsd:.xsd=.hxx) $(xsd:.xsd=.ixx) $(xsd:.xsd=.cxx) -gen := $(addprefix $(out_base)/,$(genf)) - -$(gen): xsd := $(out_root)/xsd/xsd -$(gen): xsd_options := --generate-serialization --generate-ostream -$(gen): $(out_root)/xsd/xsd - -$(call include-dep,$(dep)) - -# Convenience alias for default target. -# -$(out_base)/: $(driver) - - -# Install & Dist. -# -dist-common := $(out_base)/.dist-common - -$(install) $(dist) $(dist-win) $(dist-common): path := $(subst $(src_root)/,,$(src_base)) - -$(install): - $(call install-data,$(src_base)/README,$(install_doc_dir)/xsd/$(path)/README) - $(call install-data,$(src_base)/driver.cxx,$(install_doc_dir)/xsd/$(path)/driver.cxx) - $(call install-data,$(src_base)/library.xsd,$(install_doc_dir)/xsd/$(path)/library.xsd) - -$(dist-common): - $(call install-data,$(src_base)/driver.cxx,$(dist_prefix)/$(path)/driver.cxx) - $(call install-data,$(src_base)/library.xsd,$(dist_prefix)/$(path)/library.xsd) - -$(dist): $(dist-common) - $(call install-data,$(src_base)/README,$(dist_prefix)/$(path)/README) - -$(dist-win): $(dist-common) - $(call install-data,$(src_base)/README,$(dist_prefix)/$(path)/README.txt) - $(call message,,unix2dos $(dist_prefix)/$(path)/README.txt) - - -# Clean. -# -$(clean): $(driver).o.clean \ - $(addsuffix .cxx.clean,$(obj)) \ - $(addsuffix .cxx.clean,$(dep)) \ - $(addprefix $(out_base)/,$(xsd:.xsd=.cxx.xsd.clean)) - -# Generated .gitignore. -# -ifeq ($(out_base),$(src_base)) -$(gen): | $(out_base)/.gitignore -$(driver): | $(out_base)/.gitignore - -$(out_base)/.gitignore: files := driver $(genf) -$(clean): $(out_base)/.gitignore.clean - -$(call include,$(bld_root)/git/gitignore.make) -endif - -# How to. -# -$(call include,$(bld_root)/cxx/o-e.make) -$(call include,$(bld_root)/cxx/cxx-o.make) -$(call include,$(bld_root)/cxx/cxx-d.make) -$(call include,$(bld_root)/install.make) -$(call include,$(scf_root)/xsd/tree/xsd-cxx.make) - -# Dependencies. -# -$(call import,$(src_root)/xsd/makefile) diff --git a/xsd/examples/cxx/tree/embedded/driver.cxx b/xsd/examples/cxx/tree/embedded/driver.cxx index 6e31d3b..5ceafa4 100644 --- a/xsd/examples/cxx/tree/embedded/driver.cxx +++ b/xsd/examples/cxx/tree/embedded/driver.cxx @@ -1,5 +1,4 @@ // file : examples/cxx/tree/embedded/driver.cxx -// author : Boris Kolpackov // copyright : not copyrighted - public domain #include // std::auto_ptr @@ -12,11 +11,7 @@ #include // xercesc::Grammar #include -#if _XERCES_VERSION >= 30000 -# include -#else -# include -#endif +#include #include #include @@ -86,10 +81,6 @@ main (int argc, char* argv[]) DOMImplementation* impl ( DOMImplementationRegistry::getDOMImplementation (ls_id)); -#if _XERCES_VERSION >= 30000 - - // Xerces-C++ 3.0.0 and later. - // xml::dom::auto_ptr parser ( impl->createLSParser ( DOMImplementationLS::MODE_SYNCHRONOUS, 0, mm, gp.get ())); @@ -150,32 +141,6 @@ main (int argc, char* argv[]) xml::dom::bits::error_handler_proxy ehp (eh); conf->setParameter (XMLUni::fgDOMErrorHandler, &ehp); -#else // _XERCES_VERSION >= 30000 - - // Same as above but for Xerces-C++ 2 series. - // - xml::dom::auto_ptr parser ( - impl->createDOMBuilder( - DOMImplementationLS::MODE_SYNCHRONOUS, 0, mm, gp.get ())); - - - parser->setFeature (XMLUni::fgDOMComments, false); - parser->setFeature (XMLUni::fgDOMDatatypeNormalization, true); - parser->setFeature (XMLUni::fgDOMEntities, false); - parser->setFeature (XMLUni::fgDOMNamespaces, true); - parser->setFeature (XMLUni::fgDOMWhitespaceInElementContent, false); - parser->setFeature (XMLUni::fgDOMValidation, true); - parser->setFeature (XMLUni::fgXercesSchema, true); - parser->setFeature (XMLUni::fgXercesSchemaFullChecking, false); - parser->setFeature (XMLUni::fgXercesUseCachedGrammarInParse, true); - parser->setFeature (XMLUni::fgXercesUserAdoptsDOMDocument, true); - - tree::error_handler eh; - xml::dom::bits::error_handler_proxy ehp (eh); - parser->setErrorHandler (&ehp); - -#endif // _XERCES_VERSION >= 30000 - // Parse XML documents. // for (unsigned long i (0); i < 10; ++i) @@ -191,11 +156,7 @@ main (int argc, char* argv[]) // Parse XML to DOM. // -#if _XERCES_VERSION >= 30000 xml_schema::dom::auto_ptr doc (parser->parse (&wrap)); -#else - xml_schema::dom::auto_ptr doc (parser->parse (wrap)); -#endif eh.throw_if_failed (); diff --git a/xsd/examples/cxx/tree/embedded/grammar-input-stream.cxx b/xsd/examples/cxx/tree/embedded/grammar-input-stream.cxx index 0c94ea6..f3a6d52 100644 --- a/xsd/examples/cxx/tree/embedded/grammar-input-stream.cxx +++ b/xsd/examples/cxx/tree/embedded/grammar-input-stream.cxx @@ -1,5 +1,4 @@ // file : examples/cxx/tree/embedded/grammar-input-stream.cxx -// author : Boris Kolpackov // copyright : not copyrighted - public domain #include @@ -16,27 +15,14 @@ grammar_input_stream (const XMLByte* data, std::size_t size) { } -#if _XERCES_VERSION >= 30000 XMLFilePos grammar_input_stream:: curPos () const { return static_cast (vpos_); } -#else -unsigned int grammar_input_stream:: -curPos () const -{ - return static_cast (vpos_); -} -#endif -#if _XERCES_VERSION >= 30000 XMLSize_t grammar_input_stream:: readBytes (XMLByte* const buf, const XMLSize_t size) -#else -unsigned int grammar_input_stream:: -readBytes (XMLByte* const buf, const unsigned int size) -#endif { std::size_t i (0); @@ -99,17 +85,11 @@ readBytes (XMLByte* const buf, const unsigned int size) vpos_ += i; -#if _XERCES_VERSION >= 30000 return static_cast (i); -#else - return static_cast (i); -#endif } -#if _XERCES_VERSION >= 30000 const XMLCh* grammar_input_stream:: getContentType () const { return 0; } -#endif diff --git a/xsd/examples/cxx/tree/embedded/grammar-input-stream.hxx b/xsd/examples/cxx/tree/embedded/grammar-input-stream.hxx index a1b73c6..ed12b7c 100644 --- a/xsd/examples/cxx/tree/embedded/grammar-input-stream.hxx +++ b/xsd/examples/cxx/tree/embedded/grammar-input-stream.hxx @@ -1,5 +1,4 @@ // file : examples/cxx/tree/embedded/grammar-input-stream.hxx -// author : Boris Kolpackov // copyright : not copyrighted - public domain #ifndef GRAMMAR_INPUT_STREAM_HXX @@ -16,8 +15,6 @@ class grammar_input_stream: public xercesc::BinInputStream public : grammar_input_stream (const XMLByte* data, std::size_t size); -#if _XERCES_VERSION >= 30000 - virtual XMLFilePos curPos () const; @@ -27,16 +24,6 @@ public : virtual const XMLCh* getContentType () const; -#else - - virtual unsigned int - curPos () const; - - virtual unsigned int - readBytes (XMLByte* const buf, const unsigned int size); - -#endif - private : const XMLByte* data_; std::size_t size_; diff --git a/xsd/examples/cxx/tree/embedded/library.xml b/xsd/examples/cxx/tree/embedded/library.xml index cb8faf3..f57c042 100644 --- a/xsd/examples/cxx/tree/embedded/library.xml +++ b/xsd/examples/cxx/tree/embedded/library.xml @@ -3,7 +3,6 @@ diff --git a/xsd/examples/cxx/tree/embedded/library.xsd b/xsd/examples/cxx/tree/embedded/library.xsd index f1b4dac..6a9ad01 100644 --- a/xsd/examples/cxx/tree/embedded/library.xsd +++ b/xsd/examples/cxx/tree/embedded/library.xsd @@ -3,7 +3,6 @@ diff --git a/xsd/examples/cxx/tree/embedded/makefile b/xsd/examples/cxx/tree/embedded/makefile index 0550bd5..d0fdc33 100644 --- a/xsd/examples/cxx/tree/embedded/makefile +++ b/xsd/examples/cxx/tree/embedded/makefile @@ -1,6 +1,5 @@ # file : examples/cxx/tree/embedded/makefile -# author : Boris Kolpackov -# copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +# copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC # license : GNU GPL v2 + exceptions; see accompanying LICENSE file include $(dir $(lastword $(MAKEFILE_LIST)))../../../../build/bootstrap.make @@ -33,14 +32,13 @@ $(call import,\ $(driver): $(obj) $(xerces_c.l) $(xsdbin): $(obj2) $(xerces_c.l) -$(obj) $(dep): cpp_options := -I$(src_root)/libxsd +$(obj) $(dep): cpp_options := -I$(out_base) -I$(src_base) -I$(src_root)/libxsd $(obj) $(obj2) $(dep): $(xerces_c.l.cpp-options) genf := $(xsd:.xsd=.hxx) $(xsd:.xsd=.ixx) $(xsd:.xsd=.cxx) gen := $(addprefix $(out_base)/,$(genf)) $(gen): xsd := $(out_root)/xsd/xsd -$(gen): xsd_options := $(gen): $(out_root)/xsd/xsd genf += $(xsd:.xsd=-schema.hxx) $(xsd:.xsd=-schema.cxx) @@ -50,7 +48,7 @@ $(out_base)/%: xsdbin := $(xsdbin) $(out_base)/%-schema.hxx $(out_base)/%-schema.cxx: $(src_base)/%.xsd $(xsdbin) $(call message,xsdbin $<,$(xsdbin) --output-dir $(out_base) $<) -$(call include-dep,$(dep)) +$(call include-dep,$(dep),$(obj),$(gen)) # Convenience alias for default target. # @@ -83,10 +81,11 @@ $(dist-common): $(dist): $(dist-common) $(call install-data,$(src_base)/README,$(dist_prefix)/$(path)/README) +$(dist-win): |$(out_root)/.dist-pre $(dist-win): $(dist-common) $(call install-data,$(src_base)/README,$(dist_prefix)/$(path)/README.txt) - $(call message,,unix2dos $(dist_prefix)/$(path)/README.txt) - + $(call message,,todos $(dist_prefix)/$(path)/README.txt) + # Note: solution files are not automatically generated. # Clean. # @@ -115,9 +114,10 @@ endif $(call include,$(bld_root)/cxx/o-e.make) $(call include,$(bld_root)/cxx/cxx-o.make) $(call include,$(bld_root)/cxx/cxx-d.make) -$(call include,$(bld_root)/install.make) $(call include,$(scf_root)/xsd/tree/xsd-cxx.make) +$(call include,$(bld_root)/install.make) + # Dependencies. # $(call import,$(src_root)/xsd/makefile) diff --git a/xsd/examples/cxx/tree/embedded/xsdbin.cxx b/xsd/examples/cxx/tree/embedded/xsdbin.cxx index 53e2533..656b830 100644 --- a/xsd/examples/cxx/tree/embedded/xsdbin.cxx +++ b/xsd/examples/cxx/tree/embedded/xsdbin.cxx @@ -1,5 +1,4 @@ // file : examples/cxx/tree/embedded/xsdbin.cxx -// author : Boris Kolpackov // copyright : not copyrighted - public domain // This program loads the XML Schema file(s) and converts them to @@ -28,11 +27,7 @@ #include #include -#if _XERCES_VERSION >= 30000 -# include -#else -# include -#endif +#include using namespace std; using namespace xercesc; @@ -88,10 +83,13 @@ main (int argc, char* argv[]) string base; string outdir; - class usage {}; + struct usage + { + usage (bool e = true): error (e) {} + bool error; + }; int argi (1); - bool help (false); bool multi_import (true); bool verbose (false); @@ -102,10 +100,7 @@ main (int argc, char* argv[]) string a (argv[argi]); if (a == "--help") - { - help = true; - throw usage (); - } + throw usage (false); else if (a == "--verbose") { verbose = true; @@ -154,20 +149,22 @@ main (int argc, char* argv[]) base = argv[argi]; } - catch (usage const&) + catch (usage const& e) { - cerr << "Usage: " << argv[0] << " [options] " << endl - << "Options:" << endl - << " --help Print usage information and exit." << endl - << " --verbose Print progress information." << endl - << " --output-dir Write generated files to ." << endl - << " --hxx-suffix Header file suffix instead of '-schema.hxx'." << endl - << " --cxx-suffix Source file suffix instead of '-schema.cxx'." << endl - << " --array-name Binary data array name." << endl - << " --disable-multi-import Disable multiple import support." << endl - << endl; - - return help ? 0 : 1; + ostream& o (e.error ? cerr : cout); + + o << "Usage: " << argv[0] << " [options] " << endl + << "Options:" << endl + << " --help Print usage information and exit." << endl + << " --verbose Print progress information." << endl + << " --output-dir Write generated files to ." << endl + << " --hxx-suffix Header file suffix instead of '-schema.hxx'." << endl + << " --cxx-suffix Source file suffix instead of '-schema.cxx'." << endl + << " --array-name Binary data array name." << endl + << " --disable-multi-import Disable multiple import support." << endl + << endl; + + return e.error ? 0 : 1; } XMLPlatformUtils::Initialize (); @@ -488,17 +485,9 @@ handle (const SAXParseException& e, severity s) char* id (XMLString::transcode (xid)); char* msg (XMLString::transcode (e.getMessage ())); - cerr << id << ":"; - -#if _XERCES_VERSION >= 30000 - cerr << e.getLineNumber () << ":" << e.getColumnNumber () << " "; -#else - XMLSSize_t l (e.getLineNumber ()); - XMLSSize_t c (e.getColumnNumber ()); - cerr << (l == -1 ? 0 : l) << ":" << (c == -1 ? 0 : c) << " "; -#endif - - cerr << (s == s_warning ? "warning: " : "error: ") << msg << endl; + cerr << id << ":" + << e.getLineNumber () << ":" << e.getColumnNumber () << " " + << (s == s_warning ? "warning: " : "error: ") << msg << endl; XMLString::release (&id); XMLString::release (&msg); diff --git a/xsd/examples/cxx/tree/hello/driver.cxx b/xsd/examples/cxx/tree/hello/driver.cxx index 6ea6823..b6629b3 100644 --- a/xsd/examples/cxx/tree/hello/driver.cxx +++ b/xsd/examples/cxx/tree/hello/driver.cxx @@ -1,5 +1,4 @@ // file : examples/cxx/tree/hello/driver.cxx -// author : Boris Kolpackov // copyright : not copyrighted - public domain #include // std::auto_ptr diff --git a/xsd/examples/cxx/tree/hello/hello.xml b/xsd/examples/cxx/tree/hello/hello.xml index bcde610..8b25b5b 100644 --- a/xsd/examples/cxx/tree/hello/hello.xml +++ b/xsd/examples/cxx/tree/hello/hello.xml @@ -3,7 +3,6 @@ diff --git a/xsd/examples/cxx/tree/hello/hello.xsd b/xsd/examples/cxx/tree/hello/hello.xsd index e8f5147..8326ff0 100644 --- a/xsd/examples/cxx/tree/hello/hello.xsd +++ b/xsd/examples/cxx/tree/hello/hello.xsd @@ -3,7 +3,6 @@ diff --git a/xsd/examples/cxx/tree/hello/makefile b/xsd/examples/cxx/tree/hello/makefile index b2618ca..2657fc6 100644 --- a/xsd/examples/cxx/tree/hello/makefile +++ b/xsd/examples/cxx/tree/hello/makefile @@ -1,6 +1,5 @@ # file : examples/cxx/tree/hello/makefile -# author : Boris Kolpackov -# copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +# copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC # license : GNU GPL v2 + exceptions; see accompanying LICENSE file include $(dir $(lastword $(MAKEFILE_LIST)))../../../../build/bootstrap.make @@ -29,17 +28,16 @@ $(call import,\ # $(driver): $(obj) $(xerces_c.l) -$(obj) $(dep): cpp_options := -I$(src_root)/libxsd +$(obj) $(dep): cpp_options := -I$(out_base) -I$(src_base) -I$(src_root)/libxsd $(obj) $(dep): $(xerces_c.l.cpp-options) genf := $(xsd:.xsd=.hxx) $(xsd:.xsd=.ixx) $(xsd:.xsd=.cxx) gen := $(addprefix $(out_base)/,$(genf)) $(gen): xsd := $(out_root)/xsd/xsd -$(gen): xsd_options := $(gen): $(out_root)/xsd/xsd -$(call include-dep,$(dep)) +$(call include-dep,$(dep),$(obj),$(gen)) # Convenience alias for default target. # @@ -68,7 +66,7 @@ $(dist): $(dist-common) $(dist-win): $(dist-common) $(call install-data,$(src_base)/README,$(dist_prefix)/$(path)/README.txt) - $(call message,,unix2dos $(dist_prefix)/$(path)/README.txt) + $(call message,,todos $(dist_prefix)/$(path)/README.txt) # Clean. diff --git a/xsd/examples/cxx/tree/library/driver.cxx b/xsd/examples/cxx/tree/library/driver.cxx index ae68b87..5913ddf 100644 --- a/xsd/examples/cxx/tree/library/driver.cxx +++ b/xsd/examples/cxx/tree/library/driver.cxx @@ -1,5 +1,4 @@ // file : examples/cxx/tree/library/driver.cxx -// author : Boris Kolpackov // copyright : not copyrighted - public domain #include // std::auto_ptr diff --git a/xsd/examples/cxx/tree/library/library.xml b/xsd/examples/cxx/tree/library/library.xml index e9acb75..ca4ca9c 100644 --- a/xsd/examples/cxx/tree/library/library.xml +++ b/xsd/examples/cxx/tree/library/library.xml @@ -3,7 +3,6 @@ diff --git a/xsd/examples/cxx/tree/library/library.xsd b/xsd/examples/cxx/tree/library/library.xsd index baf2221..b183efc 100644 --- a/xsd/examples/cxx/tree/library/library.xsd +++ b/xsd/examples/cxx/tree/library/library.xsd @@ -3,7 +3,6 @@ diff --git a/xsd/examples/cxx/tree/library/makefile b/xsd/examples/cxx/tree/library/makefile index 6fdd942..3db03de 100644 --- a/xsd/examples/cxx/tree/library/makefile +++ b/xsd/examples/cxx/tree/library/makefile @@ -1,6 +1,5 @@ # file : examples/cxx/tree/library/makefile -# author : Boris Kolpackov -# copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +# copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC # license : GNU GPL v2 + exceptions; see accompanying LICENSE file include $(dir $(lastword $(MAKEFILE_LIST)))../../../../build/bootstrap.make @@ -29,18 +28,18 @@ $(call import,\ # $(driver): $(obj) $(xerces_c.l) -$(obj) $(dep): cpp_options := -I$(src_root)/libxsd +$(obj) $(dep): cpp_options := -I$(out_base) -I$(src_base) -I$(src_root)/libxsd $(obj) $(dep): $(xerces_c.l.cpp-options) genf := $(xsd:.xsd=.hxx) $(xsd:.xsd=.ixx) $(xsd:.xsd=.cxx) gen := $(addprefix $(out_base)/,$(genf)) $(gen): xsd := $(out_root)/xsd/xsd -$(gen): xsd_options := --generate-inline --generate-ostream \ +$(gen): xsd_options += --generate-inline --generate-ostream \ --generate-serialization $(gen): $(out_root)/xsd/xsd -$(call include-dep,$(dep)) +$(call include-dep,$(dep),$(obj),$(gen)) # Convenience alias for default target. # @@ -69,7 +68,7 @@ $(dist): $(dist-common) $(dist-win): $(dist-common) $(call install-data,$(src_base)/README,$(dist_prefix)/$(path)/README.txt) - $(call message,,unix2dos $(dist_prefix)/$(path)/README.txt) + $(call message,,todos $(dist_prefix)/$(path)/README.txt) # Clean. # diff --git a/xsd/examples/cxx/tree/makefile b/xsd/examples/cxx/tree/makefile index 35c6f03..172195a 100644 --- a/xsd/examples/cxx/tree/makefile +++ b/xsd/examples/cxx/tree/makefile @@ -1,26 +1,20 @@ # file : examples/cxx/tree/makefile -# author : Boris Kolpackov -# copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +# copyright : Copyright (c) 2006-2014 Code Synthesis Tools CC # license : GNU GPL v2 + exceptions; see accompanying LICENSE file include $(dir $(lastword $(MAKEFILE_LIST)))../../../build/bootstrap.make all_examples := binary caching embedded custom hello library messaging \ -mixed multiroot performance polymorphism streaming wildcard compression \ -dbxml xpath - +mixed multiroot order performance polymorphism streaming wildcard \ +compression xpath build_examples := binary caching embedded custom hello library messaging \ -mixed multiroot performance polymorphism streaming wildcard +mixed multiroot order performance polymorphism streaming wildcard ifeq ($(xsd_with_zlib),y) build_examples += compression endif -ifeq ($(xsd_with_dbxml),y) -build_examples += dbxml -endif - ifeq ($(xsd_with_xqilla),y) build_examples += xpath endif @@ -45,15 +39,29 @@ $(install): $(addprefix $(out_base)/,$(addsuffix /.install,$(all_examples))) $(dist): $(addprefix $(out_base)/,$(addsuffix /.dist,$(all_examples))) $(call install-data,$(src_base)/README,$(dist_prefix)/$(path)/README) +$(dist-win): export dirs := $(shell find $(src_base) -type d -exec test -f {}/driver.cxx ';' -printf '%P ') +$(dist-win): |$(out_root)/.dist-pre $(dist-win): $(addprefix $(out_base)/,$(addsuffix /.dist-win,$(all_examples))) $(call install-data,$(src_base)/README,$(dist_prefix)/$(path)/README.txt) - $(call message,,unix2dos $(dist_prefix)/$(path)/README.txt) + $(call message,,todos $(dist_prefix)/$(path)/README.txt) + $(call meta-vc8sln,$(src_root)/dist/template-vc8.sln,tree-vc8.sln) + $(call meta-vc9sln,$(src_root)/dist/template-vc9.sln,tree-vc9.sln) + $(call meta-vc10sln,$(src_root)/dist/template-vc10.sln,tree-vc10.sln) + $(call meta-vc11sln,$(src_root)/dist/template-vc11.sln,tree-vc11.sln) + $(call meta-vc12sln,$(src_root)/dist/template-vc12.sln,tree-vc12.sln) + $(call meta-vctest,tree-vc8.sln,$(src_root)/dist/examples/test.bat,test.bat) # Clean. # $(clean): $(addprefix $(out_base)/,$(addsuffix /.clean,$(build_examples))) $(call include,$(bld_root)/install.make) +$(call include,$(bld_root)/meta/vc8sln.make) +$(call include,$(bld_root)/meta/vc9sln.make) +$(call include,$(bld_root)/meta/vc10sln.make) +$(call include,$(bld_root)/meta/vc11sln.make) +$(call include,$(bld_root)/meta/vc12sln.make) +$(call include,$(bld_root)/meta/vctest.make) ifneq ($(filter $(MAKECMDGOALS),dist dist-win install),) $(foreach e,$(all_examples),$(call import,$(src_base)/$e/makefile)) diff --git a/xsd/examples/cxx/tree/messaging/balance.xml b/xsd/examples/cxx/tree/messaging/balance.xml index 57eeaed..83b9692 100644 --- a/xsd/examples/cxx/tree/messaging/balance.xml +++ b/xsd/examples/cxx/tree/messaging/balance.xml @@ -3,7 +3,6 @@ diff --git a/xsd/examples/cxx/tree/messaging/deposit.xml b/xsd/examples/cxx/tree/messaging/deposit.xml index 9da3c59..c59153d 100644 --- a/xsd/examples/cxx/tree/messaging/deposit.xml +++ b/xsd/examples/cxx/tree/messaging/deposit.xml @@ -3,7 +3,6 @@ diff --git a/xsd/examples/cxx/tree/messaging/dom-parse.cxx b/xsd/examples/cxx/tree/messaging/dom-parse.cxx index e4bc6cc..61f9f4a 100644 --- a/xsd/examples/cxx/tree/messaging/dom-parse.cxx +++ b/xsd/examples/cxx/tree/messaging/dom-parse.cxx @@ -1,5 +1,4 @@ // file : examples/cxx/tree/messaging/dom-parse.cxx -// author : Boris Kolpackov // copyright : not copyrighted - public domain #include "dom-parse.hxx" @@ -30,10 +29,6 @@ parse (std::istream& is, const std::string& id, bool validate) DOMImplementation* impl ( DOMImplementationRegistry::getDOMImplementation (ls_id)); -#if _XERCES_VERSION >= 30000 - - // Xerces-C++ 3.0.0 and later. - // xml::dom::auto_ptr parser ( impl->createLSParser (DOMImplementationLS::MODE_SYNCHRONOUS, 0)); @@ -85,39 +80,12 @@ parse (std::istream& is, const std::string& id, bool validate) xml::dom::bits::error_handler_proxy ehp (eh); conf->setParameter (XMLUni::fgDOMErrorHandler, &ehp); -#else // _XERCES_VERSION >= 30000 - - // Same as above but for Xerces-C++ 2 series. - // - xml::dom::auto_ptr parser ( - impl->createDOMBuilder (DOMImplementationLS::MODE_SYNCHRONOUS, 0)); - - parser->setFeature (XMLUni::fgDOMComments, false); - parser->setFeature (XMLUni::fgDOMDatatypeNormalization, true); - parser->setFeature (XMLUni::fgDOMEntities, false); - parser->setFeature (XMLUni::fgDOMNamespaces, true); - parser->setFeature (XMLUni::fgDOMWhitespaceInElementContent, false); - parser->setFeature (XMLUni::fgDOMValidation, validate); - parser->setFeature (XMLUni::fgXercesSchema, validate); - parser->setFeature (XMLUni::fgXercesSchemaFullChecking, false); - parser->setFeature (XMLUni::fgXercesUserAdoptsDOMDocument, true); - - tree::error_handler eh; - xml::dom::bits::error_handler_proxy ehp (eh); - parser->setErrorHandler (&ehp); - -#endif // _XERCES_VERSION >= 30000 - // Prepare input stream. // xml::sax::std_input_source isrc (is, id); Wrapper4InputSource wrap (&isrc, false); -#if _XERCES_VERSION >= 30000 xml::dom::auto_ptr doc (parser->parse (&wrap)); -#else - xml::dom::auto_ptr doc (parser->parse (wrap)); -#endif eh.throw_if_failed > (); diff --git a/xsd/examples/cxx/tree/messaging/dom-parse.hxx b/xsd/examples/cxx/tree/messaging/dom-parse.hxx index 640b28a..6eccacd 100644 --- a/xsd/examples/cxx/tree/messaging/dom-parse.hxx +++ b/xsd/examples/cxx/tree/messaging/dom-parse.hxx @@ -1,5 +1,4 @@ // file : examples/cxx/tree/messaging/dom-parse.hxx -// author : Boris Kolpackov // copyright : not copyrighted - public domain #ifndef DOM_PARSE diff --git a/xsd/examples/cxx/tree/messaging/dom-serialize.cxx b/xsd/examples/cxx/tree/messaging/dom-serialize.cxx index c0f4311..dbf3370 100644 --- a/xsd/examples/cxx/tree/messaging/dom-serialize.cxx +++ b/xsd/examples/cxx/tree/messaging/dom-serialize.cxx @@ -1,5 +1,4 @@ // file : examples/cxx/tree/messaging/dom-serialize.cxx -// author : Boris Kolpackov // copyright : not copyrighted - public domain #include "dom-serialize.hxx" @@ -38,8 +37,6 @@ serialize (std::ostream& os, xml::dom::ostream_format_target oft (os); -#if _XERCES_VERSION >= 30000 - // Create a DOMSerializer. // xml::dom::auto_ptr writer ( @@ -55,6 +52,7 @@ serialize (std::ostream& os, // conf->setParameter (XMLUni::fgDOMWRTDiscardDefaultContent, true); conf->setParameter (XMLUni::fgDOMWRTFormatPrettyPrint, true); + conf->setParameter (XMLUni::fgDOMWRTXercesPrettyPrint, false); xml::dom::auto_ptr out (impl->createLSOutput ()); out->setEncoding (xml::string (encoding).c_str ()); @@ -62,28 +60,5 @@ serialize (std::ostream& os, writer->write (&doc, out.get ()); -#else - - // Create a DOMWriter. - // - xml::dom::auto_ptr writer (impl->createDOMWriter ()); - - // Set error handler. - // - writer->setErrorHandler (&ehp); - - // Set encoding. - // - writer->setEncoding(xml::string (encoding).c_str ()); - - // Set some generally nice features. - // - writer->setFeature (XMLUni::fgDOMWRTDiscardDefaultContent, true); - writer->setFeature (XMLUni::fgDOMWRTFormatPrettyPrint, true); - - writer->writeNode (&oft, doc); - -#endif - eh.throw_if_failed > (); } diff --git a/xsd/examples/cxx/tree/messaging/dom-serialize.hxx b/xsd/examples/cxx/tree/messaging/dom-serialize.hxx index 1a7e855..f80e22b 100644 --- a/xsd/examples/cxx/tree/messaging/dom-serialize.hxx +++ b/xsd/examples/cxx/tree/messaging/dom-serialize.hxx @@ -1,5 +1,4 @@ // file : examples/cxx/tree/messaging/dom-serialize.hxx -// author : Boris Kolpackov // copyright : not copyrighted - public domain #ifndef DOM_SERIALIZE diff --git a/xsd/examples/cxx/tree/messaging/driver.cxx b/xsd/examples/cxx/tree/messaging/driver.cxx index 4c36aa4..095e2cd 100644 --- a/xsd/examples/cxx/tree/messaging/driver.cxx +++ b/xsd/examples/cxx/tree/messaging/driver.cxx @@ -1,5 +1,4 @@ // file : examples/cxx/tree/messaging/driver.cxx -// author : Boris Kolpackov // copyright : not copyrighted - public domain #include // std::auto_ptr diff --git a/xsd/examples/cxx/tree/messaging/makefile b/xsd/examples/cxx/tree/messaging/makefile index b7e0d0a..309147a 100644 --- a/xsd/examples/cxx/tree/messaging/makefile +++ b/xsd/examples/cxx/tree/messaging/makefile @@ -1,6 +1,5 @@ # file : examples/cxx/tree/messaging/makefile -# author : Boris Kolpackov -# copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +# copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC # license : GNU GPL v2 + exceptions; see accompanying LICENSE file include $(dir $(lastword $(MAKEFILE_LIST)))../../../../build/bootstrap.make @@ -29,7 +28,7 @@ $(call import,\ # $(driver): $(obj) $(xerces_c.l) -$(obj) $(dep): cpp_options := -I$(src_root)/libxsd +$(obj) $(dep): cpp_options := -I$(out_base) -I$(src_base) -I$(src_root)/libxsd $(obj) $(dep): $(xerces_c.l.cpp-options) genf := $(xsd:.xsd=.hxx) $(xsd:.xsd=.ixx) $(xsd:.xsd=.cxx) @@ -37,12 +36,12 @@ gen := $(addprefix $(out_base)/,$(genf)) $(gen): xsd := $(out_root)/xsd/xsd -$(gen): xsd_options := --root-element-all \ ---generate-element-type --generate-element-map --generate-serialization +$(gen): xsd_options += --root-element-all --generate-element-type \ +--generate-element-map --generate-serialization $(gen): $(out_root)/xsd/xsd -$(call include-dep,$(dep)) +$(call include-dep,$(dep),$(obj),$(gen)) # Convenience alias for default target. # @@ -83,7 +82,7 @@ $(dist): $(dist-common) $(dist-win): $(dist-common) $(call install-data,$(src_base)/README,$(dist_prefix)/$(path)/README.txt) - $(call message,,unix2dos $(dist_prefix)/$(path)/README.txt) + $(call message,,todos $(dist_prefix)/$(path)/README.txt) # Clean. diff --git a/xsd/examples/cxx/tree/messaging/protocol.xsd b/xsd/examples/cxx/tree/messaging/protocol.xsd index 3461133..b371ba7 100644 --- a/xsd/examples/cxx/tree/messaging/protocol.xsd +++ b/xsd/examples/cxx/tree/messaging/protocol.xsd @@ -3,7 +3,6 @@ diff --git a/xsd/examples/cxx/tree/messaging/withdraw.xml b/xsd/examples/cxx/tree/messaging/withdraw.xml index 16a7440..1f309f3 100644 --- a/xsd/examples/cxx/tree/messaging/withdraw.xml +++ b/xsd/examples/cxx/tree/messaging/withdraw.xml @@ -3,7 +3,6 @@ diff --git a/xsd/examples/cxx/tree/mixed/README b/xsd/examples/cxx/tree/mixed/README index 9ab3309..fc23faa 100644 --- a/xsd/examples/cxx/tree/mixed/README +++ b/xsd/examples/cxx/tree/mixed/README @@ -1,8 +1,12 @@ This example shows how to access the underlying DOM nodes in the C++/Tree mapping in order to handle raw, "type-less content" such as mixed content models, anyType/anySimpleType, and any/anyAttribute. + +For an alternative (and recommended) approach that employs ordered +types see the order/mixed example. + For an alternative approach that employes type customization see -examples in the custom/ directory, in particular, custom/mixed and +examples in the custom/ directory, in particular, custom/mixed and custom/wildcard. In this example we use mixed content model to describe text with diff --git a/xsd/examples/cxx/tree/mixed/driver.cxx b/xsd/examples/cxx/tree/mixed/driver.cxx index d905421..17c3b55 100644 --- a/xsd/examples/cxx/tree/mixed/driver.cxx +++ b/xsd/examples/cxx/tree/mixed/driver.cxx @@ -1,5 +1,4 @@ // file : examples/cxx/tree/mixed/driver.cxx -// author : Boris Kolpackov // copyright : not copyrighted - public domain #include // std::auto_ptr @@ -47,10 +46,12 @@ main (int argc, char* argv[]) xml_schema::flags::keep_dom | xml_schema::flags::dont_initialize)); - // Note that DOM association is preserved in copies but only if they - // are "complete", i.e., made from the root of the tree. + // The DOM association can be recreated in a copy (the underlying + // DOM document is cloned) if explicitly requested with the keep_dom + // flag and only if this copy is "complete", i.e., made from the root + // of the tree. // - text copy (*t); + text copy (*t, xml_schema::flags::keep_dom); // Print text. // diff --git a/xsd/examples/cxx/tree/mixed/makefile b/xsd/examples/cxx/tree/mixed/makefile index 6316ec0..7c001f0 100644 --- a/xsd/examples/cxx/tree/mixed/makefile +++ b/xsd/examples/cxx/tree/mixed/makefile @@ -1,6 +1,5 @@ # file : examples/cxx/tree/mixed/makefile -# author : Boris Kolpackov -# copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +# copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC # license : GNU GPL v2 + exceptions; see accompanying LICENSE file include $(dir $(lastword $(MAKEFILE_LIST)))../../../../build/bootstrap.make @@ -29,17 +28,16 @@ $(call import,\ # $(driver): $(obj) $(xerces_c.l) -$(obj) $(dep): cpp_options := -I$(src_root)/libxsd +$(obj) $(dep): cpp_options := -I$(out_base) -I$(src_base) -I$(src_root)/libxsd $(obj) $(dep): $(xerces_c.l.cpp-options) genf := $(xsd:.xsd=.hxx) $(xsd:.xsd=.ixx) $(xsd:.xsd=.cxx) gen := $(addprefix $(out_base)/,$(genf)) $(gen): xsd := $(out_root)/xsd/xsd -$(gen): xsd_options := $(gen): $(out_root)/xsd/xsd -$(call include-dep,$(dep)) +$(call include-dep,$(dep),$(obj),$(gen)) # Convenience alias for default target. @@ -69,7 +67,7 @@ $(dist): $(dist-common) $(dist-win): $(dist-common) $(call install-data,$(src_base)/README,$(dist_prefix)/$(path)/README.txt) - $(call message,,unix2dos $(dist_prefix)/$(path)/README.txt) + $(call message,,todos $(dist_prefix)/$(path)/README.txt) # Clean. # diff --git a/xsd/examples/cxx/tree/mixed/text.xml b/xsd/examples/cxx/tree/mixed/text.xml index 69abe8f..21e32af 100644 --- a/xsd/examples/cxx/tree/mixed/text.xml +++ b/xsd/examples/cxx/tree/mixed/text.xml @@ -2,8 +2,7 @@ diff --git a/xsd/examples/cxx/tree/mixed/text.xsd b/xsd/examples/cxx/tree/mixed/text.xsd index 8aa8280..9777f8a 100644 --- a/xsd/examples/cxx/tree/mixed/text.xsd +++ b/xsd/examples/cxx/tree/mixed/text.xsd @@ -3,7 +3,6 @@ diff --git a/xsd/examples/cxx/tree/multiroot/balance.xml b/xsd/examples/cxx/tree/multiroot/balance.xml index 055546a..68b434a 100644 --- a/xsd/examples/cxx/tree/multiroot/balance.xml +++ b/xsd/examples/cxx/tree/multiroot/balance.xml @@ -3,7 +3,6 @@ diff --git a/xsd/examples/cxx/tree/multiroot/deposit.xml b/xsd/examples/cxx/tree/multiroot/deposit.xml index 3207eee..4d9449a 100644 --- a/xsd/examples/cxx/tree/multiroot/deposit.xml +++ b/xsd/examples/cxx/tree/multiroot/deposit.xml @@ -3,7 +3,6 @@ diff --git a/xsd/examples/cxx/tree/multiroot/dom-parse.cxx b/xsd/examples/cxx/tree/multiroot/dom-parse.cxx index 2b57be0..98fc82e 100644 --- a/xsd/examples/cxx/tree/multiroot/dom-parse.cxx +++ b/xsd/examples/cxx/tree/multiroot/dom-parse.cxx @@ -1,5 +1,4 @@ // file : examples/cxx/tree/multiroot/dom-parse.cxx -// author : Boris Kolpackov // copyright : not copyrighted - public domain #include "dom-parse.hxx" @@ -30,10 +29,6 @@ parse (std::istream& is, const std::string& id, bool validate) DOMImplementation* impl ( DOMImplementationRegistry::getDOMImplementation (ls_id)); -#if _XERCES_VERSION >= 30000 - - // Xerces-C++ 3.0.0 and later. - // xml::dom::auto_ptr parser ( impl->createLSParser (DOMImplementationLS::MODE_SYNCHRONOUS, 0)); @@ -85,39 +80,12 @@ parse (std::istream& is, const std::string& id, bool validate) xml::dom::bits::error_handler_proxy ehp (eh); conf->setParameter (XMLUni::fgDOMErrorHandler, &ehp); -#else // _XERCES_VERSION >= 30000 - - // Same as above but for Xerces-C++ 2 series. - // - xml::dom::auto_ptr parser ( - impl->createDOMBuilder (DOMImplementationLS::MODE_SYNCHRONOUS, 0)); - - parser->setFeature (XMLUni::fgDOMComments, false); - parser->setFeature (XMLUni::fgDOMDatatypeNormalization, true); - parser->setFeature (XMLUni::fgDOMEntities, false); - parser->setFeature (XMLUni::fgDOMNamespaces, true); - parser->setFeature (XMLUni::fgDOMWhitespaceInElementContent, false); - parser->setFeature (XMLUni::fgDOMValidation, validate); - parser->setFeature (XMLUni::fgXercesSchema, validate); - parser->setFeature (XMLUni::fgXercesSchemaFullChecking, false); - parser->setFeature (XMLUni::fgXercesUserAdoptsDOMDocument, true); - - tree::error_handler eh; - xml::dom::bits::error_handler_proxy ehp (eh); - parser->setErrorHandler (&ehp); - -#endif // _XERCES_VERSION >= 30000 - // Prepare input stream. // xml::sax::std_input_source isrc (is, id); Wrapper4InputSource wrap (&isrc, false); -#if _XERCES_VERSION >= 30000 xml::dom::auto_ptr doc (parser->parse (&wrap)); -#else - xml::dom::auto_ptr doc (parser->parse (wrap)); -#endif eh.throw_if_failed > (); diff --git a/xsd/examples/cxx/tree/multiroot/dom-parse.hxx b/xsd/examples/cxx/tree/multiroot/dom-parse.hxx index c3bbf71..c2ab0fb 100644 --- a/xsd/examples/cxx/tree/multiroot/dom-parse.hxx +++ b/xsd/examples/cxx/tree/multiroot/dom-parse.hxx @@ -1,5 +1,4 @@ // file : examples/cxx/tree/multiroot/dom-parse.hxx -// author : Boris Kolpackov // copyright : not copyrighted - public domain #ifndef DOM_PARSE diff --git a/xsd/examples/cxx/tree/multiroot/driver.cxx b/xsd/examples/cxx/tree/multiroot/driver.cxx index cd5be34..9497ef1 100644 --- a/xsd/examples/cxx/tree/multiroot/driver.cxx +++ b/xsd/examples/cxx/tree/multiroot/driver.cxx @@ -1,5 +1,4 @@ // file : examples/cxx/tree/multiroot/driver.cxx -// author : Boris Kolpackov // copyright : not copyrighted - public domain #include // std::auto_ptr diff --git a/xsd/examples/cxx/tree/multiroot/makefile b/xsd/examples/cxx/tree/multiroot/makefile index ea31976..4d6c907 100644 --- a/xsd/examples/cxx/tree/multiroot/makefile +++ b/xsd/examples/cxx/tree/multiroot/makefile @@ -1,6 +1,5 @@ # file : examples/cxx/tree/multiroot/makefile -# author : Boris Kolpackov -# copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +# copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC # license : GNU GPL v2 + exceptions; see accompanying LICENSE file include $(dir $(lastword $(MAKEFILE_LIST)))../../../../build/bootstrap.make @@ -29,17 +28,17 @@ $(call import,\ # $(driver): $(obj) $(xerces_c.l) -$(obj) $(dep): cpp_options := -I$(src_root)/libxsd +$(obj) $(dep): cpp_options := -I$(out_base) -I$(src_base) -I$(src_root)/libxsd $(obj) $(dep): $(xerces_c.l.cpp-options) genf := $(xsd:.xsd=.hxx) $(xsd:.xsd=.ixx) $(xsd:.xsd=.cxx) gen := $(addprefix $(out_base)/,$(genf)) $(gen): xsd := $(out_root)/xsd/xsd -$(gen): xsd_options := --root-element-all +$(gen): xsd_options += --root-element-all $(gen): $(out_root)/xsd/xsd -$(call include-dep,$(dep)) +$(call include-dep,$(dep),$(obj),$(gen)) # Convenience alias for default target. # @@ -76,7 +75,7 @@ $(dist): $(dist-common) $(dist-win): $(dist-common) $(call install-data,$(src_base)/README,$(dist_prefix)/$(path)/README.txt) - $(call message,,unix2dos $(dist_prefix)/$(path)/README.txt) + $(call message,,todos $(dist_prefix)/$(path)/README.txt) # Clean. # diff --git a/xsd/examples/cxx/tree/multiroot/protocol.xsd b/xsd/examples/cxx/tree/multiroot/protocol.xsd index 28e8478..1121824 100644 --- a/xsd/examples/cxx/tree/multiroot/protocol.xsd +++ b/xsd/examples/cxx/tree/multiroot/protocol.xsd @@ -3,7 +3,6 @@ diff --git a/xsd/examples/cxx/tree/multiroot/withdraw.xml b/xsd/examples/cxx/tree/multiroot/withdraw.xml index 4df736f..8f1dc54 100644 --- a/xsd/examples/cxx/tree/multiroot/withdraw.xml +++ b/xsd/examples/cxx/tree/multiroot/withdraw.xml @@ -3,7 +3,6 @@ diff --git a/xsd/examples/cxx/tree/order/README b/xsd/examples/cxx/tree/order/README new file mode 100644 index 0000000..7125a2d --- /dev/null +++ b/xsd/examples/cxx/tree/order/README @@ -0,0 +1,11 @@ +This directory contains a number of examples that show how to use ordered +types to capture and maintain content order. The following list gives an +overview of each example: + +element + Shows how to use ordered types to capture and maintain element order, + including element wildcards. + +mixed + Shows how to use ordered types to capture mixed content text and to + maintain order information between elements and text. diff --git a/xsd/examples/cxx/tree/order/element/README b/xsd/examples/cxx/tree/order/element/README new file mode 100644 index 0000000..19f2381 --- /dev/null +++ b/xsd/examples/cxx/tree/order/element/README @@ -0,0 +1,35 @@ +This example shows how to use ordered types to capture and maintain +element order, including element wildcards. + +The example consists of the following files: + +transactions.xsd + XML Schema which describes various bank transactions. A batch of + transactions can contain any number of different transactions in + any order but the order of transaction in the batch is significant. + +library.xml + Sample XML instance document. + +transactions.hxx +transactions.cxx + C++ types that represent the given vocabulary as well as a set of + parsing and serialization functions. These are generated by XSD + from transactions.xsd. Note that the --ordered-type option is + used to indicate to the XSD compiler that the batch type is + ordered. We also use the --generate-wildcard option to enable + wildcard support. An element wildcard is used in the batch to + allow transaction extensions. + +driver.cxx + Driver for the example. It first calls one of the parsing functions + that constructs the object model from the input XML file. It then + iterates over transactions in the batch using the content order + sequence. The driver then performs various modifications of the + object model while showing how to maintain the content order. + Finally, it saves the modified transaction batch back to XML to + verify that the content order is preserved in the output document. + +To run the example on the sample XML instance document simply execute: + +$ ./driver transactions.xml diff --git a/xsd/examples/cxx/tree/order/element/driver.cxx b/xsd/examples/cxx/tree/order/element/driver.cxx new file mode 100644 index 0000000..0ea6d6f --- /dev/null +++ b/xsd/examples/cxx/tree/order/element/driver.cxx @@ -0,0 +1,147 @@ +// file : examples/cxx/tree/order/element/driver.cxx +// copyright : not copyrighted - public domain + +#include // std::auto_ptr +#include +#include + +#include +#include + +#include "transactions.hxx" + +// The following string class keeps us sane when working with Xerces. +// Include it after the generated header in order to get only char or +// wchar_t version depending on how you compiled your schemas. +// +#include + +using std::cerr; +using std::endl; + +int +main (int argc, char* argv[]) +{ + if (argc != 2) + { + cerr << "usage: " << argv[0] << " transactions.xml" << endl; + return 1; + } + + using namespace xercesc; + + int r (0); + + // The Xerces-C++ DOM objects that will be used to store the + // content matched by the wildcard "out-lives" the call to the + // parsing function. Therefore we need to initialize the + // Xerces-C++ runtime ourselves. + // + XMLPlatformUtils::Initialize (); + + try + { + using namespace transactions; + + // Parse the batch. + // + std::auto_ptr b ( + batch_ (argv[1], xml_schema::flags::dont_initialize)); + + // Print what we've got in content order. + // + for (batch::content_order_const_iterator i (b->content_order ().begin ()); + i != b->content_order ().end (); + ++i) + { + switch (i->id) + { + case batch::balance_id: + { + const balance& t (b->balance ()[i->index]); + cerr << t.account () << " balance" << endl; + break; + } + case batch::withdraw_id: + { + const withdraw& t (b->withdraw ()[i->index]); + cerr << t.account () << " withdraw " << t.amount () << endl; + break; + } + case batch::deposit_id: + { + const deposit& t (b->deposit ()[i->index]); + cerr << t.account () << " deposit " << t.amount () << endl; + break; + } + case batch::any_id: + { + namespace xml = xsd::cxx::xml; + + const DOMElement& e (b->any ()[i->index]); + cerr << xml::transcode (e.getLocalName ()) << endl; + break; + } + default: + { + assert (false); // Unknown content id. + } + } + } + + cerr << endl; + + // Modify the transaction batch. First remove the last transaction. + // Note that we have to update both the content itself and content + // order sequences. + // + batch::content_order_sequence& co (b->content_order ()); + + co.pop_back (); + b->withdraw ().pop_back (); + + // Now add a few more transactions. Again we have to add both the + // content and its ordering. The order information consists of the + // content id and, in case of a sequence, the index. + // + b->deposit ().push_back (deposit (123456789, 100000)); + co.push_back ( + batch::content_order_type ( + batch::deposit_id, b->deposit ().size () - 1)); + + // The next transaction we add at the beginning of the batch. + // + b->balance ().push_back (balance (123456789)); + co.insert (co.begin (), + batch::content_order_type ( + batch::balance_id, b->balance ().size () - 1)); + + // Note also that when we merely modify the content of one + // of the elements in place, we don't need to update its + // order. For example: + // + b->deposit ()[0].amount (2000000); + + // Serialize the modified transaction batch back to XML. + // + xml_schema::namespace_infomap map; + + map[""].name = "http://www.codesynthesis.com/transactions"; + map[""].schema = "transactions.xsd"; + map["te"].name = "http://www.codesynthesis.com/transactions-extras"; + + batch_ (std::cout, + *b, + map, + "UTF-8", + xml_schema::flags::dont_initialize); + } + catch (const xml_schema::exception& e) + { + cerr << e << endl; + r = 1; + } + + XMLPlatformUtils::Terminate (); + return r; +} diff --git a/xsd/examples/cxx/tree/order/element/makefile b/xsd/examples/cxx/tree/order/element/makefile new file mode 100644 index 0000000..272c17f --- /dev/null +++ b/xsd/examples/cxx/tree/order/element/makefile @@ -0,0 +1,100 @@ +# file : examples/cxx/tree/order/element/makefile +# copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +include $(dir $(lastword $(MAKEFILE_LIST)))../../../../../build/bootstrap.make + +xsd := transactions.xsd +cxx := driver.cxx + +obj := $(addprefix $(out_base)/,$(cxx:.cxx=.o) $(xsd:.xsd=.o)) +dep := $(obj:.o=.o.d) + +driver := $(out_base)/driver +install := $(out_base)/.install +dist := $(out_base)/.dist +dist-win := $(out_base)/.dist-win +clean := $(out_base)/.clean + +# Import. +# +$(call import,\ + $(scf_root)/import/libxerces-c/stub.make,\ + l: xerces_c.l,cpp-options: xerces_c.l.cpp-options) + +# Build. +# +$(driver): $(obj) $(xerces_c.l) -lnsl + +$(obj) $(dep): cpp_options := -I$(out_base) -I$(src_base) -I$(src_root)/libxsd +$(obj) $(dep): $(xerces_c.l.cpp-options) + +genf := $(xsd:.xsd=.hxx) $(xsd:.xsd=.ixx) $(xsd:.xsd=.cxx) +gen := $(addprefix $(out_base)/,$(genf)) + +$(gen): xsd := $(out_root)/xsd/xsd +$(gen): xsd_options += --generate-serialization --generate-wildcard \ +--ordered-type batch +$(gen): $(out_root)/xsd/xsd + +$(call include-dep,$(dep),$(obj),$(gen)) + +# Convenience alias for default target. +# +$(out_base)/: $(driver) + + +# Install & Dist. +# +dist-common := $(out_base)/.dist-common + +$(install) $(dist) $(dist-win) $(dist-common): path := $(subst $(src_root)/,,$(src_base)) + +$(install): + $(call install-data,$(src_base)/README,$(install_doc_dir)/xsd/$(path)/README) + $(call install-data,$(src_base)/driver.cxx,$(install_doc_dir)/xsd/$(path)/driver.cxx) + $(call install-data,$(src_base)/transactions.xsd,$(install_doc_dir)/xsd/$(path)/transactions.xsd) + $(call install-data,$(src_base)/transactions.xml,$(install_doc_dir)/xsd/$(path)/transactions.xml) + +$(dist-common): + $(call install-data,$(src_base)/driver.cxx,$(dist_prefix)/$(path)/driver.cxx) + $(call install-data,$(src_base)/transactions.xsd,$(dist_prefix)/$(path)/transactions.xsd) + $(call install-data,$(src_base)/transactions.xml,$(dist_prefix)/$(path)/transactions.xml) + +$(dist): $(dist-common) + $(call install-data,$(src_base)/README,$(dist_prefix)/$(path)/README) + +$(dist-win): $(dist-common) + $(call install-data,$(src_base)/README,$(dist_prefix)/$(path)/README.txt) + $(call message,,todos $(dist_prefix)/$(path)/README.txt) + +# Clean. +# +$(clean): $(driver).o.clean \ + $(addsuffix .cxx.clean,$(obj)) \ + $(addsuffix .cxx.clean,$(dep)) \ + $(addprefix $(out_base)/,$(xsd:.xsd=.cxx.xsd.clean)) + +# Generated .gitignore. +# +ifeq ($(out_base),$(src_base)) +$(gen): | $(out_base)/.gitignore +$(driver): | $(out_base)/.gitignore + +$(out_base)/.gitignore: files := driver $(genf) +$(clean): $(out_base)/.gitignore.clean + +$(call include,$(bld_root)/git/gitignore.make) +endif + +# How to. +# +$(call include,$(bld_root)/cxx/o-e.make) +$(call include,$(bld_root)/cxx/cxx-o.make) +$(call include,$(bld_root)/cxx/cxx-d.make) +$(call include,$(bld_root)/install.make) +$(call include,$(scf_root)/xsd/tree/xsd-cxx.make) + +# Dependencies. +# +$(call import,$(src_root)/xsd/makefile) diff --git a/xsd/examples/cxx/tree/order/element/transactions.xml b/xsd/examples/cxx/tree/order/element/transactions.xml new file mode 100644 index 0000000..4c317c2 --- /dev/null +++ b/xsd/examples/cxx/tree/order/element/transactions.xml @@ -0,0 +1,32 @@ + + + + + + + 123456789 + 1000000 + + + + 123456789 + + + + 123456789 + 500000 + + + + 123456789 + 500000 + + diff --git a/xsd/examples/cxx/tree/order/element/transactions.xsd b/xsd/examples/cxx/tree/order/element/transactions.xsd new file mode 100644 index 0000000..053aac4 --- /dev/null +++ b/xsd/examples/cxx/tree/order/element/transactions.xsd @@ -0,0 +1,58 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/xsd/examples/cxx/tree/order/makefile b/xsd/examples/cxx/tree/order/makefile new file mode 100644 index 0000000..2424e2b --- /dev/null +++ b/xsd/examples/cxx/tree/order/makefile @@ -0,0 +1,44 @@ +# file : examples/cxx/tree/order/makefile +# copyright : Copyright (c) 2006-2014 Code Synthesis Tools CC +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +include $(dir $(lastword $(MAKEFILE_LIST)))../../../../build/bootstrap.make + +all_examples := element mixed +build_examples := element mixed + +default := $(out_base)/ +install := $(out_base)/.install +dist := $(out_base)/.dist +dist-win := $(out_base)/.dist-win +clean := $(out_base)/.clean + +# Build. +# +$(default): $(addprefix $(out_base)/,$(addsuffix /,$(build_examples))) + +# Install & Dist. +# +$(install) $(dist) $(dist-win): path := $(subst $(src_root)/,,$(src_base)) + +$(install): $(addprefix $(out_base)/,$(addsuffix /.install,$(all_examples))) + $(call install-data,$(src_base)/README,$(install_doc_dir)/xsd/$(path)/README) + +$(dist): $(addprefix $(out_base)/,$(addsuffix /.dist,$(all_examples))) + $(call install-data,$(src_base)/README,$(dist_prefix)/$(path)/README) + +$(dist-win): $(addprefix $(out_base)/,$(addsuffix /.dist-win,$(all_examples))) + $(call install-data,$(src_base)/README,$(dist_prefix)/$(path)/README.txt) + $(call message,,todos $(dist_prefix)/$(path)/README.txt) + +# Clean. +# +$(clean): $(addprefix $(out_base)/,$(addsuffix /.clean,$(build_examples))) + +$(call include,$(bld_root)/install.make) + +ifneq ($(filter $(MAKECMDGOALS),dist dist-win install),) +$(foreach e,$(all_examples),$(call import,$(src_base)/$e/makefile)) +else +$(foreach e,$(build_examples),$(call import,$(src_base)/$e/makefile)) +endif diff --git a/xsd/examples/cxx/tree/order/mixed/README b/xsd/examples/cxx/tree/order/mixed/README new file mode 100644 index 0000000..e66c1ad --- /dev/null +++ b/xsd/examples/cxx/tree/order/mixed/README @@ -0,0 +1,45 @@ +This example shows how to use ordered types to capture mixed content +text and to maintain order information between elements and text. + +In this example we use mixed content model to describe text with +embedded links in the form: + + This paragraph talks about time. + +The example transforms such text into plain text with references in +the form: + + This paragraph talks about time[uri]. + +It also saves the modified text back to XML in order to verify the +element and text order. + +The example consists of the following files: + +text.xsd + XML Schema which describes "text with links" instance documents. + +text.xml + Sample XML instance document. + +text.hxx +text.cxx + C++ types that represent the given vocabulary as well as a set of + parsing and serialization functions. These are generated by XSD + from text.xsd. Note that the --ordered-type-mixed option is used + to indicate to the XSD compiler that all types with mixed content + should be automatically treated as ordered. + +driver.cxx + Driver for the example. It first calls one of the parsing functions + that constructs the object model from the input XML file. It then + iterates over the text and elements in the content order to convert + the document to its plain text representation. The driver then adds + another paragraph of text and a link to the object model while showing + how to maintain the content order. Finally, it saves the modified + text back to XML to verify that the content order is preserved in + the output document. + +To run the example on the sample XML instance document simply execute: + +$ ./driver text.xml diff --git a/xsd/examples/cxx/tree/order/mixed/driver.cxx b/xsd/examples/cxx/tree/order/mixed/driver.cxx new file mode 100644 index 0000000..9606b67 --- /dev/null +++ b/xsd/examples/cxx/tree/order/mixed/driver.cxx @@ -0,0 +1,89 @@ +// file : examples/cxx/tree/order/mixed/driver.cxx +// copyright : not copyrighted - public domain + +#include // std::auto_ptr +#include +#include + +#include "text.hxx" + +using std::cerr; +using std::endl; + +int +main (int argc, char* argv[]) +{ + if (argc != 2) + { + cerr << "usage: " << argv[0] << " text.xml" << endl; + return 1; + } + + try + { + std::auto_ptr t (text_ (argv[1])); + + // Print what we've got in content order. + // + for (text::content_order_const_iterator i (t->content_order ().begin ()); + i != t->content_order ().end (); + ++i) + { + switch (i->id) + { + case text::a_id: + { + const anchor& a (t->a ()[i->index]); + cerr << a << "[" << a.href () << "]"; + break; + } + case text::text_content_id: + { + const xml_schema::string& s (t->text_content ()[i->index]); + cerr << s; + break; + } + default: + { + assert (false); // Unknown content id. + } + } + } + + cerr << endl; + + // Modify the document. Note that we have to update both the content + // itself and content order sequences. + // + typedef text::content_order_type order_type; + + text::content_order_sequence& co (t->content_order ()); + text::text_content_sequence& tc (t->text_content ()); + + tc.push_back ("The last paragraph doesn't talk about "); + co.push_back (order_type (text::text_content_id, tc.size () - 1)); + + t->a ().push_back (anchor ("anything", "http://en.wikipedia.org")); + co.push_back (order_type (text::a_id, t->a ().size () - 1)); + + tc.push_back (" in particular.\n\n"); + co.push_back (order_type (text::text_content_id, tc.size () - 1)); + + // Serialize the modified document back to XML. + // + xml_schema::namespace_infomap map; + + map[""].schema = "text.xsd"; + + text_ (std::cout, + *t, + map, + "UTF-8", + xml_schema::flags::dont_pretty_print); + } + catch (const xml_schema::exception& e) + { + cerr << e << endl; + return 1; + } +} diff --git a/xsd/examples/cxx/tree/order/mixed/makefile b/xsd/examples/cxx/tree/order/mixed/makefile new file mode 100644 index 0000000..311ce52 --- /dev/null +++ b/xsd/examples/cxx/tree/order/mixed/makefile @@ -0,0 +1,99 @@ +# file : examples/cxx/tree/order/mixed/makefile +# copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +include $(dir $(lastword $(MAKEFILE_LIST)))../../../../../build/bootstrap.make + +xsd := text.xsd +cxx := driver.cxx + +obj := $(addprefix $(out_base)/,$(cxx:.cxx=.o) $(xsd:.xsd=.o)) +dep := $(obj:.o=.o.d) + +driver := $(out_base)/driver +install := $(out_base)/.install +dist := $(out_base)/.dist +dist-win := $(out_base)/.dist-win +clean := $(out_base)/.clean + +# Import. +# +$(call import,\ + $(scf_root)/import/libxerces-c/stub.make,\ + l: xerces_c.l,cpp-options: xerces_c.l.cpp-options) + +# Build. +# +$(driver): $(obj) $(xerces_c.l) -lnsl + +$(obj) $(dep): cpp_options := -I$(out_base) -I$(src_base) -I$(src_root)/libxsd +$(obj) $(dep): $(xerces_c.l.cpp-options) + +genf := $(xsd:.xsd=.hxx) $(xsd:.xsd=.ixx) $(xsd:.xsd=.cxx) +gen := $(addprefix $(out_base)/,$(genf)) + +$(gen): xsd := $(out_root)/xsd/xsd +$(gen): xsd_options += --generate-serialization --ordered-type-mixed +$(gen): $(out_root)/xsd/xsd + +$(call include-dep,$(dep),$(obj),$(gen)) + +# Convenience alias for default target. +# +$(out_base)/: $(driver) + + +# Install & Dist. +# +dist-common := $(out_base)/.dist-common + +$(install) $(dist) $(dist-win) $(dist-common): path := $(subst $(src_root)/,,$(src_base)) + +$(install): + $(call install-data,$(src_base)/README,$(install_doc_dir)/xsd/$(path)/README) + $(call install-data,$(src_base)/driver.cxx,$(install_doc_dir)/xsd/$(path)/driver.cxx) + $(call install-data,$(src_base)/text.xsd,$(install_doc_dir)/xsd/$(path)/text.xsd) + $(call install-data,$(src_base)/text.xml,$(install_doc_dir)/xsd/$(path)/text.xml) + +$(dist-common): + $(call install-data,$(src_base)/driver.cxx,$(dist_prefix)/$(path)/driver.cxx) + $(call install-data,$(src_base)/text.xsd,$(dist_prefix)/$(path)/text.xsd) + $(call install-data,$(src_base)/text.xml,$(dist_prefix)/$(path)/text.xml) + +$(dist): $(dist-common) + $(call install-data,$(src_base)/README,$(dist_prefix)/$(path)/README) + +$(dist-win): $(dist-common) + $(call install-data,$(src_base)/README,$(dist_prefix)/$(path)/README.txt) + $(call message,,todos $(dist_prefix)/$(path)/README.txt) + +# Clean. +# +$(clean): $(driver).o.clean \ + $(addsuffix .cxx.clean,$(obj)) \ + $(addsuffix .cxx.clean,$(dep)) \ + $(addprefix $(out_base)/,$(xsd:.xsd=.cxx.xsd.clean)) + +# Generated .gitignore. +# +ifeq ($(out_base),$(src_base)) +$(gen): | $(out_base)/.gitignore +$(driver): | $(out_base)/.gitignore + +$(out_base)/.gitignore: files := driver $(genf) +$(clean): $(out_base)/.gitignore.clean + +$(call include,$(bld_root)/git/gitignore.make) +endif + +# How to. +# +$(call include,$(bld_root)/cxx/o-e.make) +$(call include,$(bld_root)/cxx/cxx-o.make) +$(call include,$(bld_root)/cxx/cxx-d.make) +$(call include,$(bld_root)/install.make) +$(call include,$(scf_root)/xsd/tree/xsd-cxx.make) + +# Dependencies. +# +$(call import,$(src_root)/xsd/makefile) diff --git a/xsd/examples/cxx/tree/order/mixed/text.xml b/xsd/examples/cxx/tree/order/mixed/text.xml new file mode 100644 index 0000000..ac80159 --- /dev/null +++ b/xsd/examples/cxx/tree/order/mixed/text.xml @@ -0,0 +1,17 @@ + + + + + + +The first paragraph of this text talks about time. + +And this paragraph talks about space. + + diff --git a/xsd/examples/cxx/tree/order/mixed/text.xsd b/xsd/examples/cxx/tree/order/mixed/text.xsd new file mode 100644 index 0000000..e45abcd --- /dev/null +++ b/xsd/examples/cxx/tree/order/mixed/text.xsd @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/xsd/examples/cxx/tree/performance/README b/xsd/examples/cxx/tree/performance/README index 440ee62..cb79cc2 100644 --- a/xsd/examples/cxx/tree/performance/README +++ b/xsd/examples/cxx/tree/performance/README @@ -7,10 +7,8 @@ The example consists of the following files: test.xsd XML Schema which describes the test vocabulary. -test-5k.xml test-50k.xml -test-500k.xml - Test XML documents of various sizes. + Test XML document. gen.cxx Program to generate a test document of desired size. @@ -57,4 +55,4 @@ parser (off by default). The -i option can be used to specify the number of parsing and serialization iterations (1000 by default). For example: -$ ./driver -v -i 100 test-500k.xml +$ ./driver -v -i 100 test-50k.xml diff --git a/xsd/examples/cxx/tree/performance/driver.cxx b/xsd/examples/cxx/tree/performance/driver.cxx index f3e388b..b626e4d 100644 --- a/xsd/examples/cxx/tree/performance/driver.cxx +++ b/xsd/examples/cxx/tree/performance/driver.cxx @@ -1,5 +1,4 @@ // file : examples/cxx/tree/performance/driver.cxx -// author : Boris Kolpackov // copyright : not copyrighted - public domain #include diff --git a/xsd/examples/cxx/tree/performance/makefile b/xsd/examples/cxx/tree/performance/makefile index 5ba1a6c..e6f4258 100644 --- a/xsd/examples/cxx/tree/performance/makefile +++ b/xsd/examples/cxx/tree/performance/makefile @@ -1,6 +1,5 @@ # file : examples/cxx/tree/performance/makefile -# author : Boris Kolpackov -# copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +# copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC # license : GNU GPL v2 + exceptions; see accompanying LICENSE file include $(dir $(lastword $(MAKEFILE_LIST)))../../../../build/bootstrap.make @@ -29,17 +28,17 @@ $(call import,\ # $(driver): $(obj) $(xerces_c.l) -$(obj) $(dep): cpp_options := -I$(src_root)/libxsd +$(obj) $(dep): cpp_options := -I$(out_base) -I$(src_base) -I$(src_root)/libxsd $(obj) $(dep): $(xerces_c.l.cpp-options) genf := $(xsd:.xsd=.hxx) $(xsd:.xsd=.ixx) $(xsd:.xsd=.cxx) gen := $(addprefix $(out_base)/,$(genf)) $(gen): xsd := $(out_root)/xsd/xsd -$(gen): xsd_options := --generate-inline --generate-serialization +$(gen): xsd_options += --generate-inline --generate-serialization $(gen): $(out_root)/xsd/xsd -$(call include-dep,$(dep)) +$(call include-dep,$(dep),$(obj),$(gen)) # Convenience alias for default target. # @@ -58,9 +57,7 @@ $(install): $(call install-data,$(src_base)/parsing.cxx,$(install_doc_dir)/xsd/$(path)/parsing.cxx) $(call install-data,$(src_base)/serialization.cxx,$(install_doc_dir)/xsd/$(path)/serialization.cxx) $(call install-data,$(src_base)/test.xsd,$(install_doc_dir)/xsd/$(path)/test.xsd) - $(call install-data,$(src_base)/test-5k.xml,$(install_doc_dir)/xsd/$(path)/test-5k.xml) $(call install-data,$(src_base)/test-50k.xml,$(install_doc_dir)/xsd/$(path)/test-50k.xml) - $(call install-data,$(src_base)/test-500k.xml,$(install_doc_dir)/xsd/$(path)/test-500k.xml) $(call install-data,$(src_base)/time.hxx,$(install_doc_dir)/xsd/$(path)/time.hxx) $(call install-data,$(src_base)/time.cxx,$(install_doc_dir)/xsd/$(path)/time.cxx) $(call install-data,$(src_base)/gen.cxx,$(install_doc_dir)/xsd/$(path)/gen.cxx) @@ -70,9 +67,7 @@ $(dist-common): $(call install-data,$(src_base)/parsing.cxx,$(dist_prefix)/$(path)/parsing.cxx) $(call install-data,$(src_base)/serialization.cxx,$(dist_prefix)/$(path)/serialization.cxx) $(call install-data,$(src_base)/test.xsd,$(dist_prefix)/$(path)/test.xsd) - $(call install-data,$(src_base)/test-5k.xml,$(dist_prefix)/$(path)/test-5k.xml) $(call install-data,$(src_base)/test-50k.xml,$(dist_prefix)/$(path)/test-50k.xml) - $(call install-data,$(src_base)/test-500k.xml,$(dist_prefix)/$(path)/test-500k.xml) $(call install-data,$(src_base)/time.hxx,$(dist_prefix)/$(path)/time.hxx) $(call install-data,$(src_base)/time.cxx,$(dist_prefix)/$(path)/time.cxx) $(call install-data,$(src_base)/gen.cxx,$(dist_prefix)/$(path)/gen.cxx) @@ -82,7 +77,7 @@ $(dist): $(dist-common) $(dist-win): $(dist-common) $(call install-data,$(src_base)/README,$(dist_prefix)/$(path)/README.txt) - $(call message,,unix2dos $(dist_prefix)/$(path)/README.txt) + $(call message,,todos $(dist_prefix)/$(path)/README.txt) # Clean. # diff --git a/xsd/examples/cxx/tree/performance/parsing.cxx b/xsd/examples/cxx/tree/performance/parsing.cxx index 8d662eb..bf7f667 100644 --- a/xsd/examples/cxx/tree/performance/parsing.cxx +++ b/xsd/examples/cxx/tree/performance/parsing.cxx @@ -1,5 +1,4 @@ // file : examples/cxx/tree/performance/parsing.cxx -// author : Boris Kolpackov // copyright : not copyrighted - public domain #include // std::auto_ptr @@ -8,11 +7,7 @@ #include #include -#if _XERCES_VERSION >= 30000 -# include -#else -# include -#endif +#include #include #include @@ -67,8 +62,6 @@ parsing (const char* file, unsigned long iter, bool validate) xsd::cxx::tree::error_handler eh; xsd::cxx::xml::dom::bits::error_handler_proxy ehp (eh); -#if _XERCES_VERSION >= 30000 - xml_schema::dom::auto_ptr parser ( impl->createLSParser (DOMImplementationLS::MODE_SYNCHRONOUS, 0)); @@ -122,48 +115,6 @@ parsing (const char* file, unsigned long iter, bool validate) conf->setParameter (XMLUni::fgXercesUserAdoptsDOMDocument, true); -#else // _XERCES_VERSION >= 30000 - - // Same as above but for Xerces-C++ 2 series. - // - xml_schema::dom::auto_ptr parser ( - impl->createDOMBuilder(DOMImplementationLS::MODE_SYNCHRONOUS, 0)); - - parser->setFeature (XMLUni::fgDOMComments, false); - parser->setFeature (XMLUni::fgDOMDatatypeNormalization, true); - parser->setFeature (XMLUni::fgDOMEntities, false); - parser->setFeature (XMLUni::fgDOMNamespaces, true); - parser->setFeature (XMLUni::fgDOMWhitespaceInElementContent, false); - - parser->setErrorHandler (&ehp); - - if (validate) - { - parser->setFeature (XMLUni::fgDOMValidation, true); - parser->setFeature (XMLUni::fgXercesSchema, true); - parser->setFeature (XMLUni::fgXercesSchemaFullChecking, false); - - if (!parser->loadGrammar ("test.xsd", Grammar::SchemaGrammarType, true)) - { - eh.handle ("test.xsd", 0, 0, - xsd::cxx::tree::error_handler::severity::fatal, - "unable to load schema"); - } - - eh.throw_if_failed (); - parser->setFeature (XMLUni::fgXercesUseCachedGrammarInParse, true); - } - else - { - parser->setFeature (XMLUni::fgDOMValidation, false); - parser->setFeature (XMLUni::fgXercesSchema, false); - parser->setFeature (XMLUni::fgXercesSchemaFullChecking, false); - } - - parser->setFeature (XMLUni::fgXercesUserAdoptsDOMDocument, true); - -#endif - // Create memory buffer input source. // MemBufInputSource is ( @@ -179,11 +130,7 @@ parsing (const char* file, unsigned long iter, bool validate) { // First parse XML to DOM reusing the parser we created above. // -#if _XERCES_VERSION >= 30000 xml_schema::dom::auto_ptr doc (parser->parse (&wis)); -#else - xml_schema::dom::auto_ptr doc (parser->parse (wis)); -#endif eh.throw_if_failed (); // Then parse DOM to the object model. diff --git a/xsd/examples/cxx/tree/performance/serialization.cxx b/xsd/examples/cxx/tree/performance/serialization.cxx index 12c43ae..08e5740 100644 --- a/xsd/examples/cxx/tree/performance/serialization.cxx +++ b/xsd/examples/cxx/tree/performance/serialization.cxx @@ -1,5 +1,4 @@ // file : examples/cxx/tree/performance/serialization.cxx -// author : Boris Kolpackov // copyright : not copyrighted - public domain #include // std::auto_ptr @@ -8,12 +7,8 @@ #include #include -#if _XERCES_VERSION >= 30000 -# include -# include -#else -# include -#endif +#include +#include #include #include @@ -75,7 +70,6 @@ serialization (const char* file, unsigned long iter) xsd::cxx::tree::error_handler eh; xsd::cxx::xml::dom::bits::error_handler_proxy ehp (eh); -#if _XERCES_VERSION >= 30000 xml_schema::dom::auto_ptr writer ( impl->createLSSerializer ()); @@ -87,14 +81,6 @@ serialization (const char* file, unsigned long iter) xml_schema::dom::auto_ptr out (impl->createLSOutput ()); out->setByteStream (&ft); -#else - // Same as above but for Xerces-C++ 2 series. - // - xml_schema::dom::auto_ptr writer (impl->createDOMWriter ()); - - writer->setErrorHandler (&ehp); - writer->setFeature (XMLUni::fgDOMXMLDeclaration, false); -#endif // Serialization loop. // @@ -110,12 +96,7 @@ serialization (const char* file, unsigned long iter) // Then serialize DOM to XML reusing the serializer we created above. // -#if _XERCES_VERSION >= 30000 writer->write (doc.get (), out.get ()); -#else - writer->writeNode (&ft, *doc); -#endif - eh.throw_if_failed (); } diff --git a/xsd/examples/cxx/tree/performance/test-500k.xml b/xsd/examples/cxx/tree/performance/test-500k.xml deleted file mode 100644 index e895584..0000000 --- a/xsd/examples/cxx/tree/performance/test-500k.xml +++ /dev/null @@ -1 +0,0 @@ -4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy \ No newline at end of file diff --git a/xsd/examples/cxx/tree/performance/test-5k.xml b/xsd/examples/cxx/tree/performance/test-5k.xml deleted file mode 100644 index 168cb09..0000000 --- a/xsd/examples/cxx/tree/performance/test-5k.xml +++ /dev/null @@ -1 +0,0 @@ -4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction4242345.4232name123_451 choicehorror4242345.4232name123_45one two three2 choicehistory4242345.4232name123_453 choicephilosophy4242345.4232name123_45one two three4 choiceromance4242345.4232name123_451 choicefiction4242345.4232name123_45one two three2 choicehorror4242345.4232name123_453 choicehistory4242345.4232name123_45one two three4 choicephilosophy4242345.4232name123_451 choiceromance4242345.4232name123_45one two three2 choicefiction4242345.4232name123_453 choicehorror4242345.4232name123_45one two three4 choicehistory4242345.4232name123_451 choicephilosophy4242345.4232name123_45one two three2 choiceromance4242345.4232name123_453 choicefiction4242345.4232name123_45one two three4 choicehorror4242345.4232name123_451 choicehistory4242345.4232name123_45one two three2 choicephilosophy4242345.4232name123_453 choiceromance4242345.4232name123_45one two three4 choicefiction \ No newline at end of file diff --git a/xsd/examples/cxx/tree/performance/test.xsd b/xsd/examples/cxx/tree/performance/test.xsd index cf1f046..d9b5778 100644 --- a/xsd/examples/cxx/tree/performance/test.xsd +++ b/xsd/examples/cxx/tree/performance/test.xsd @@ -3,7 +3,6 @@ diff --git a/xsd/examples/cxx/tree/performance/time.cxx b/xsd/examples/cxx/tree/performance/time.cxx index c2de6dc..6bec91b 100644 --- a/xsd/examples/cxx/tree/performance/time.cxx +++ b/xsd/examples/cxx/tree/performance/time.cxx @@ -1,5 +1,4 @@ // file : examples/cxx/tree/performance/time.cxx -// author : Boris Kolpackov // copyright : not copyrighted - public domain #include "time.hxx" @@ -24,7 +23,7 @@ namespace os FILETIME ft; GetSystemTimeAsFileTime (&ft); unsigned long long v ( - (unsigned long long (ft.dwHighDateTime) << 32) + ft.dwLowDateTime); + ((unsigned long long) (ft.dwHighDateTime) << 32) + ft.dwLowDateTime); sec_ = static_cast (v / 10000000ULL); nsec_ = static_cast ((v % 10000000ULL) * 100); diff --git a/xsd/examples/cxx/tree/performance/time.hxx b/xsd/examples/cxx/tree/performance/time.hxx index f83e628..ea71e83 100644 --- a/xsd/examples/cxx/tree/performance/time.hxx +++ b/xsd/examples/cxx/tree/performance/time.hxx @@ -1,5 +1,4 @@ // file : examples/cxx/tree/performance/time.hxx -// author : Boris Kolpackov // copyright : not copyrighted - public domain #ifndef TIME_HXX diff --git a/xsd/examples/cxx/tree/polymorphism/driver.cxx b/xsd/examples/cxx/tree/polymorphism/driver.cxx index 582e2dd..3f1598f 100644 --- a/xsd/examples/cxx/tree/polymorphism/driver.cxx +++ b/xsd/examples/cxx/tree/polymorphism/driver.cxx @@ -1,5 +1,4 @@ // file : examples/cxx/tree/polymorphism/driver.cxx -// author : Boris Kolpackov // copyright : not copyrighted - public domain #include // std::auto_ptr diff --git a/xsd/examples/cxx/tree/polymorphism/makefile b/xsd/examples/cxx/tree/polymorphism/makefile index cde1904..2ee16e7 100644 --- a/xsd/examples/cxx/tree/polymorphism/makefile +++ b/xsd/examples/cxx/tree/polymorphism/makefile @@ -1,6 +1,5 @@ # file : examples/cxx/tree/polymorphism/makefile -# author : Boris Kolpackov -# copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +# copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC # license : GNU GPL v2 + exceptions; see accompanying LICENSE file include $(dir $(lastword $(MAKEFILE_LIST)))../../../../build/bootstrap.make @@ -29,18 +28,18 @@ $(call import,\ # $(driver): $(obj) $(xerces_c.l) -$(obj) $(dep): cpp_options := -I$(src_root)/libxsd +$(obj) $(dep): cpp_options := -I$(out_base) -I$(src_base) -I$(src_root)/libxsd $(obj) $(dep): $(xerces_c.l.cpp-options) genf := $(xsd:.xsd=.hxx) $(xsd:.xsd=.ixx) $(xsd:.xsd=.cxx) gen := $(addprefix $(out_base)/,$(genf)) $(gen): xsd := $(out_root)/xsd/xsd -$(gen): xsd_options := --generate-polymorphic --generate-serialization \ +$(gen): xsd_options += --generate-polymorphic --generate-serialization \ --root-element-last $(gen): $(out_root)/xsd/xsd -$(call include-dep,$(dep)) +$(call include-dep,$(dep),$(obj),$(gen)) # Convenience alias for default target. @@ -70,7 +69,7 @@ $(dist): $(dist-common) $(dist-win): $(dist-common) $(call install-data,$(src_base)/README,$(dist_prefix)/$(path)/README.txt) - $(call message,,unix2dos $(dist_prefix)/$(path)/README.txt) + $(call message,,todos $(dist_prefix)/$(path)/README.txt) # Clean. diff --git a/xsd/examples/cxx/tree/polymorphism/supermen.xml b/xsd/examples/cxx/tree/polymorphism/supermen.xml index 5053142..1b5b1df 100644 --- a/xsd/examples/cxx/tree/polymorphism/supermen.xml +++ b/xsd/examples/cxx/tree/polymorphism/supermen.xml @@ -3,7 +3,6 @@ diff --git a/xsd/examples/cxx/tree/polymorphism/supermen.xsd b/xsd/examples/cxx/tree/polymorphism/supermen.xsd index ffdd21c..0d37e3d 100644 --- a/xsd/examples/cxx/tree/polymorphism/supermen.xsd +++ b/xsd/examples/cxx/tree/polymorphism/supermen.xsd @@ -3,7 +3,6 @@ diff --git a/xsd/examples/cxx/tree/streaming/README b/xsd/examples/cxx/tree/streaming/README index ac7e7f0..5a467e0 100644 --- a/xsd/examples/cxx/tree/streaming/README +++ b/xsd/examples/cxx/tree/streaming/README @@ -1,5 +1,5 @@ -This example shows how to perform stream-oriented, partially in-memory -XML processing using the C++/Tree mapping. With the partially in-memory +This example shows how to perform stream-oriented, partially in-memory +XML processing using the C++/Tree mapping. With the partially in-memory parsing and serialization only a part of the object model is in memory at any given time. With this approach we can process parts of the document as they become available as well as handle documents that are too large @@ -17,7 +17,7 @@ position.xml position.hxx position.cxx - C++ types that represent the position vocabulary as well as parsing + C++ types that represent the position vocabulary as well as parsing and serialization functions. These are generated by XSD from position.xsd. @@ -29,15 +29,20 @@ parser.cxx serializer.hxx serializer.cxx - Stream-oriented DOM serializer implementation that allows us to + Stream-oriented DOM serializer implementation that allows us to serialize an XML Document as a series of object model fragments. +grammar-input-stream.hxx +grammar-input-stream.cxx + Input stream implementation with the special-purpose schema grammar + decompression algorithm. It is used internally by the streaming parser. + driver.cxx - Driver for the example. It first parses the input file into a series - of DOM fragments which are then parsed into the object model fragments. - The driver prints the information from the document as it becomes - available. The driver then creates a new XML document (out.xml) by - creating and serializing a series of object model fragments. + Driver for the example. It parses the input file into a series of DOM + fragments which are then parsed into the object model fragments. The + driver prints the information from the document as it becomes available. + It also serializes the object model fragments into a new XML document + (out.xml). To run the example simply execute: diff --git a/xsd/examples/cxx/tree/streaming/driver.cxx b/xsd/examples/cxx/tree/streaming/driver.cxx index 6c6fd51..eb7026a 100644 --- a/xsd/examples/cxx/tree/streaming/driver.cxx +++ b/xsd/examples/cxx/tree/streaming/driver.cxx @@ -1,5 +1,4 @@ // file : examples/cxx/tree/streaming/driver.cxx -// author : Boris Kolpackov // copyright : not copyrighted - public domain #include @@ -16,9 +15,6 @@ using namespace std; using namespace xercesc; -static void -measure_position (unsigned int n, float& lat, float& lon); - int main (int argc, char* argv[]) { @@ -40,96 +36,92 @@ main (int argc, char* argv[]) using namespace op; namespace xml = xsd::cxx::xml; - // Parse. + // Parse and serialize at the same time, in the streaming mode. // ifstream ifs; ifs.exceptions (ifstream::badbit | ifstream::failbit); ifs.open (argv[1]); - parser p; - - // The first document we get is the "carcase" of the complete document. - // That is, the root element with all the attributes but without any - // content. We may need it to get to the attributes in the root element. - // - // There are two ways this can be done. The easiest approach is to - // instantiate the root element's type (object in our case). This - // will only work if all the content in the root element is optional. - // Alternatively, we can manually look up attributes that we are - // interested in and instantiate the corresponding type. The following - // fragment shows how to use the second approach. - // - xml_schema::dom::auto_ptr doc (p.start (ifs, argv[1], true)); - - // Find the id attribute. - // - DOMAttr* id_attr ( - doc->getDocumentElement ()->getAttributeNode ( - xml::string ("id").c_str ())); - - // Use the type and traits aliases from the object model. - // - object::id_type id (object::id_traits::create (*id_attr, 0, 0)); - cerr << "id: " << id << endl; - - // The next chunk we get is the header element. - // - doc = p.next (); - header hdr (*doc->getDocumentElement ()); - cerr << "name: " << hdr.name () << endl - << "type: " << hdr.type () << endl; - - // The rest is position elements. - // - for (doc = p.next (); doc.get () != 0; doc = p.next ()) - { - position p (*doc->getDocumentElement ()); - cerr << "lat: " << p.lat () << " lon: " << p.lon () << endl; - } - - // Serialize. - // - ofstream ofs; ofs.exceptions (ios_base::badbit | ios_base::failbit); ofs.open ("out.xml"); - serializer s; + xml_schema::namespace_infomap ns_map; + ns_map["op"].name = "http://www.codesynthesis.com/op"; + ns_map["op"].schema = "position.xsd"; - // With this approach we manually write the XML declaration, opening - // and closing root element tags, as well as any attributes in the - // root element. - // - ofs << "" << endl - << "" << endl; + parser p; + serializer s; + p.start (ifs, argv[1], true); s.start (ofs); - // Serialize the header. + typedef xml_schema::dom::auto_ptr document_ptr; + + // Peek at the root element. This way we only get the "carcase" + // of the document, that is, the root element with its name, all + // the attributes, and namespace declarations but without any of + // the nested elements. // - header h ("Lion's Head", "rock"); - s.next ("header", h); + document_ptr docr (p.peek ()); + bool parsed (false); - // Serialize position elements, one at a time. + // Parse first-level elements. // - for (unsigned short i (0); i < 8; i++) + for (document_ptr doc1 (p.peek ()); doc1.get () != 0; doc1 = p.peek ()) { - float lat, lon; - measure_position (i, lat, lon); - position p (lat, lon); - s.next ("position", p); + // Check whether it is an element that we should stream (position) or + // just add to the root (header). + // + string n1 (xml::transcode ( + doc1->getDocumentElement ()->getLocalName ())); + + // If we see the first streaming element, then parse the root carcase. + // + if (!parsed && n1 == "position") + { + object o (*docr->getDocumentElement ()); + + cerr << "id: " << o.id () << endl + << "name: " << o.header ().name () << endl + << "type: " << o.header ().type () << endl; + + // Start serializing the document by writing out the root carcase. + // Note that we leave it open so that we can serialize more elements. + // + s.next_open (ns_map["op"].name, "op:object", ns_map, o); + parsed = true; + } + + // Handle elements that need streaming. + // + if (n1 == "position") + { + // Position has no nested elements that we need to stream so we + // finish parsing it in one go. + // + doc1 = p.next (doc1); + position pos (*doc1->getDocumentElement ()); + + cerr << "lat: " << pos.lat () << " lon: " << pos.lon () << endl; + + // Serialize it (append) to the root element. + // + s.next ("position", pos); + } + else + { + // Element that doesn't require streaming (header in our case). Add + // to the root element and finish parsing. + // + docr = p.next (doc1, docr); + } } - // Close the root element. + // Close the root element in serializer. // - ofs << endl - << "" << endl; - + s.next_close ("op:object"); } catch (const xml_schema::exception& e) { @@ -145,32 +137,3 @@ main (int argc, char* argv[]) xercesc::XMLPlatformUtils::Terminate (); return r; } - -// Position measurement instrument interface. -// -struct measurements -{ - float lat; - float lon; -}; - -measurements test_measurements [8] = -{ - {-33.8569F, 18.5083F}, - {-33.8568F, 18.5083F}, - {-33.8568F, 18.5082F}, - {-33.8570F, 18.5083F}, - {-33.8569F, 18.5084F}, - {-33.8570F, 18.5084F}, - {-33.8570F, 18.5082F}, - {-33.8569F, 18.5082F} -}; - -static void -measure_position (unsigned int n, float& lat, float& lon) -{ - // Call the instrument to measure the position. - // - lat = test_measurements[n].lat; - lon = test_measurements[n].lon; -} diff --git a/xsd/examples/cxx/tree/streaming/grammar-input-stream.cxx b/xsd/examples/cxx/tree/streaming/grammar-input-stream.cxx new file mode 100644 index 0000000..ffdb5b4 --- /dev/null +++ b/xsd/examples/cxx/tree/streaming/grammar-input-stream.cxx @@ -0,0 +1,96 @@ +// file : examples/cxx/tree/streaming/grammar-input-stream.cxx +// author : Boris Kolpackov +// copyright : not copyrighted - public domain + +#include +#include "grammar-input-stream.hxx" + +grammar_input_stream:: +grammar_input_stream (const XMLByte* data, std::size_t size) + : data_ (data), + size_ (size), + pos_ (0), + vpos_ (0), + cseq_ (0), + add_zero_ (false) +{ +} + +XMLFilePos grammar_input_stream:: +curPos () const +{ + return static_cast (vpos_); +} + +XMLSize_t grammar_input_stream:: +readBytes (XMLByte* const buf, const XMLSize_t size) +{ + std::size_t i (0); + + // Add a zero from the alternating sequence if it didn't + // fit on the previous read. + // + if (add_zero_) + { + buf[i++] = 0; + add_zero_ = false; + } + + // If have an unfinished sequential sequence, output it now. + // + if (cseq_ != 0 && !alt_) + { + for (; cseq_ != 0 && i < size; --cseq_) + buf[i++] = 0; + } + + for (; i < size && pos_ < size_;) + { + XMLByte b = buf[i++] = data_[pos_++]; + + // See if we are in a compression sequence. + // + if (cseq_ != 0) + { + if (i < size) + buf[i++] = 0; + else + add_zero_ = true; // Add it on the next read. + + cseq_--; + continue; + } + + // If we are not in a compression sequence and this byte is + // not zero then we are done. + // + if (b != 0) + continue; + + // We have a zero. + // + assert (pos_ < size_); // There has to be another byte. + unsigned char v (static_cast (data_[pos_++])); + alt_ = (v & 128) != 0; + cseq_ = v & 127; + + // If it is a sequential sequence, output as many zeros as + // we can. + // + if (!alt_) + { + for (; cseq_ != 0 && i < size; --cseq_) + buf[i++] = 0; + } + } + + vpos_ += i; + + return static_cast (i); +} + +const XMLCh* grammar_input_stream:: +getContentType () const +{ + return 0; +} diff --git a/xsd/examples/cxx/tree/streaming/grammar-input-stream.hxx b/xsd/examples/cxx/tree/streaming/grammar-input-stream.hxx new file mode 100644 index 0000000..36ef74c --- /dev/null +++ b/xsd/examples/cxx/tree/streaming/grammar-input-stream.hxx @@ -0,0 +1,41 @@ +// file : examples/cxx/tree/streaming/grammar-input-stream.hxx +// author : Boris Kolpackov +// copyright : not copyrighted - public domain + +#ifndef GRAMMAR_INPUT_STREAM_HXX +#define GRAMMAR_INPUT_STREAM_HXX + +#include +#include + +// Memory buffer input stream with the special-purpose schema +// grammar decompression. +// +class grammar_input_stream: public xercesc::BinInputStream +{ +public : + grammar_input_stream (const XMLByte* data, std::size_t size); + + virtual XMLFilePos + curPos () const; + + virtual XMLSize_t + readBytes (XMLByte* const buf, const XMLSize_t size); + + virtual const XMLCh* + getContentType () const; + +private : + const XMLByte* data_; + std::size_t size_; + std::size_t pos_; + std::size_t vpos_; + + // Compression data. + // + size_t cseq_; // Number of bytes left in a compression sequence. + bool alt_; // Alternating or sequential sequence. + bool add_zero_; // Add a zero on the next read. +}; + +#endif // GRAMMAR_INPUT_STREAM_HXX diff --git a/xsd/examples/cxx/tree/streaming/makefile b/xsd/examples/cxx/tree/streaming/makefile index 750ad20..f6db5c0 100644 --- a/xsd/examples/cxx/tree/streaming/makefile +++ b/xsd/examples/cxx/tree/streaming/makefile @@ -1,12 +1,11 @@ # file : examples/cxx/tree/streaming/makefile -# author : Boris Kolpackov -# copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +# copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC # license : GNU GPL v2 + exceptions; see accompanying LICENSE file include $(dir $(lastword $(MAKEFILE_LIST)))../../../../build/bootstrap.make xsd := position.xsd -cxx := driver.cxx parser.cxx serializer.cxx +cxx := driver.cxx parser.cxx serializer.cxx grammar-input-stream.cxx obj := $(addprefix $(out_base)/,$(cxx:.cxx=.o) $(xsd:.xsd=.o)) dep := $(obj:.o=.o.d) @@ -29,17 +28,17 @@ $(call import,\ # $(driver): $(obj) $(xerces_c.l) -$(obj) $(dep): cpp_options := -I$(src_root)/libxsd +$(obj) $(dep): cpp_options := -I$(out_base) -I$(src_base) -I$(src_root)/libxsd $(obj) $(dep): $(xerces_c.l.cpp-options) genf := $(xsd:.xsd=.hxx) $(xsd:.xsd=.ixx) $(xsd:.xsd=.cxx) gen := $(addprefix $(out_base)/,$(genf)) $(gen): xsd := $(out_root)/xsd/xsd -$(gen): xsd_options := --generate-serialization +$(gen): xsd_options += --generate-serialization $(gen): $(out_root)/xsd/xsd -$(call include-dep,$(dep)) +$(call include-dep,$(dep),$(obj),$(gen)) # Convenience alias for default target. # @@ -59,6 +58,8 @@ $(install): $(call install-data,$(src_base)/parser.hxx,$(install_doc_dir)/xsd/$(path)/parser.hxx) $(call install-data,$(src_base)/serializer.cxx,$(install_doc_dir)/xsd/$(path)/serializer.cxx) $(call install-data,$(src_base)/serializer.hxx,$(install_doc_dir)/xsd/$(path)/serializer.hxx) + $(call install-data,$(src_base)/grammar-input-stream.cxx,$(install_doc_dir)/xsd/$(path)/grammar-input-stream.cxx) + $(call install-data,$(src_base)/grammar-input-stream.hxx,$(install_doc_dir)/xsd/$(path)/grammar-input-stream.hxx) $(call install-data,$(src_base)/position.xsd,$(install_doc_dir)/xsd/$(path)/position.xsd) $(call install-data,$(src_base)/position.xml,$(install_doc_dir)/xsd/$(path)/position.xml) @@ -68,6 +69,8 @@ $(dist-common): $(call install-data,$(src_base)/parser.hxx,$(dist_prefix)/$(path)/parser.hxx) $(call install-data,$(src_base)/serializer.cxx,$(dist_prefix)/$(path)/serializer.cxx) $(call install-data,$(src_base)/serializer.hxx,$(dist_prefix)/$(path)/serializer.hxx) + $(call install-data,$(src_base)/grammar-input-stream.cxx,$(dist_prefix)/$(path)/grammar-input-stream.cxx) + $(call install-data,$(src_base)/grammar-input-stream.hxx,$(dist_prefix)/$(path)/grammar-input-stream.hxx) $(call install-data,$(src_base)/position.xsd,$(dist_prefix)/$(path)/position.xsd) $(call install-data,$(src_base)/position.xml,$(dist_prefix)/$(path)/position.xml) @@ -76,7 +79,7 @@ $(dist): $(dist-common) $(dist-win): $(dist-common) $(call install-data,$(src_base)/README,$(dist_prefix)/$(path)/README.txt) - $(call message,,unix2dos $(dist_prefix)/$(path)/README.txt) + $(call message,,todos $(dist_prefix)/$(path)/README.txt) # Clean. diff --git a/xsd/examples/cxx/tree/streaming/parser.cxx b/xsd/examples/cxx/tree/streaming/parser.cxx index b0d9df7..41ad7af 100644 --- a/xsd/examples/cxx/tree/streaming/parser.cxx +++ b/xsd/examples/cxx/tree/streaming/parser.cxx @@ -1,6 +1,4 @@ -// file : examples/cxx/tree/streaming/parser.cxx -// author : Boris Kolpackov -// copyright : not copyrighted - public domain +#include #include #include @@ -11,10 +9,10 @@ #include #include +#include -#if _XERCES_VERSION >= 30000 -# include -#endif +#include // xercesc::Grammar +#include #include @@ -25,6 +23,7 @@ #include #include "parser.hxx" +#include "grammar-input-stream.hxx" using namespace std; using namespace xercesc; @@ -32,16 +31,22 @@ using namespace xercesc; namespace xml = xsd::cxx::xml; namespace tree = xsd::cxx::tree; +typedef parser::document_ptr document_ptr; + class parser_impl: public DefaultHandler { public: - parser_impl (); + parser_impl (const XMLByte* grammar, size_t grammar_size); - xml::dom::auto_ptr + void start (istream& is, const string& id, bool validate); - xml::dom::auto_ptr - next (); + document_ptr + peek (); + + document_ptr + next (document_ptr doc = document_ptr (), + document_ptr outer_doc = document_ptr ()); // SAX event handlers. // @@ -59,17 +64,13 @@ private: virtual void characters (const XMLCh* const s, -#if _XERCES_VERSION >= 30000 - const XMLSize_t length -#else - const unsigned int length -#endif - ); + const XMLSize_t length); private: // SAX parser. // bool clean_; + auto_ptr grammar_pool_; auto_ptr parser_; XMLPScanToken token_; tree::error_handler error_handler_; @@ -77,23 +78,40 @@ private: auto_ptr isrc_; size_t depth_; + size_t whitespace_depth_; // Depth at which to ignore whitespaces. + + bool peek_; + size_t next_depth_; // Depth at which next() should work. // DOM document being built. // DOMImplementation& dom_impl_; - xml::dom::auto_ptr doc_; + document_ptr doc_; DOMElement* cur_; }; const XMLCh ls[] = {chLatin_L, chLatin_S, chNull}; parser_impl:: -parser_impl () +parser_impl (const XMLByte* grammar, size_t grammar_size) : clean_ (true), - parser_ (XMLReaderFactory::createXMLReader ()), error_proxy_ (error_handler_), dom_impl_ (*DOMImplementationRegistry::getDOMImplementation (ls)) { + MemoryManager* mm (XMLPlatformUtils::fgMemoryManager); + + if (grammar != 0) + { + assert (grammar_size != 0); + grammar_pool_.reset (new XMLGrammarPoolImpl (mm)); + + grammar_input_stream is (grammar, grammar_size); + grammar_pool_->deserializeGrammars(&is); + grammar_pool_->lockPool (); + } + + parser_.reset (XMLReaderFactory::createXMLReader (mm, grammar_pool_.get ())); + parser_->setFeature (XMLUni::fgSAX2CoreNameSpaces, true); parser_->setFeature (XMLUni::fgSAX2CoreNameSpacePrefixes, true); parser_->setFeature (XMLUni::fgXercesValidationErrorAsFatal, true); @@ -101,7 +119,7 @@ parser_impl () // Xerces-C++ 3.1.0 is the first version with working multi import // support. It also allows us to disable buffering in the parser - // so that the date is parsed and returned as soon as it is + // so that the data is parsed and returned as soon as it is // available. // #if _XERCES_VERSION >= 30100 @@ -115,12 +133,13 @@ parser_impl () parser_->setContentHandler (this); } -xml::dom::auto_ptr parser_impl:: +void parser_impl:: start (istream& is, const string& id, bool val) { // Reset our state. // depth_ = 0; + peek_ = false; doc_.reset (); error_handler_.reset (); @@ -134,59 +153,116 @@ start (istream& is, const string& id, bool val) parser_->setFeature (XMLUni::fgSAX2CoreValidation, val); parser_->setFeature (XMLUni::fgXercesSchema, val); - // Start parsing. The first document that we return is a "carcase" - // of the complete document. That is, the root element with all the - // attributes but without any content. - // - bool r (parser_->parseFirst (*isrc_, token_)); + if (val && grammar_pool_.get () != 0) + { + // Use the loaded grammar during parsing. + // + parser_->setFeature (XMLUni::fgXercesUseCachedGrammarInParse, true); + + // Disable loading schemas via other means (e.g., schemaLocation). + // + parser_->setFeature (XMLUni::fgXercesLoadSchema, false); + } + + parser_->parseFirst (*isrc_, token_); error_handler_.throw_if_failed > (); +} + +document_ptr parser_impl:: +peek () +{ + bool r (true); + + size_t d (depth_); + whitespace_depth_ = d; + + peek_ = true; - while (r && depth_ == 0) + // Parse (skip whitespace content) until the depth increases or we get + // a document. The latter test covers cases where both start + // and end events will trigger and therefore leave the depth unchanged. + // + while (r && depth_ == d && doc_.get () == 0) { r = parser_->parseNext (token_); error_handler_.throw_if_failed > (); } if (!r) - return xml::dom::auto_ptr (0); + return document_ptr (0); return doc_; } -xml::dom::auto_ptr parser_impl:: -next () +document_ptr parser_impl:: +next (document_ptr doc, document_ptr outer_doc) { - // We should be at depth 1. If not, then we are done parsing. + assert (peek_ == (doc.get () != 0)); + + // Install doc/outer_doc as the document we are parsing. // - if (depth_ != 1) - return xml::dom::auto_ptr (0); + if (doc.get () != 0) + { + if (outer_doc.get () != 0) + { + // Copy doc to outer_doc. + // + doc_ = outer_doc; + cur_ = static_cast ( + doc_->importNode (doc->getDocumentElement (), true)); + doc_->getDocumentElement ()->appendChild (cur_); + } + else + { + doc_ = doc; + cur_ = doc_->getDocumentElement (); + } + + // This handles the case where we get both start and + // end events in peek(). In this case the element is fully parsed + // and next() has nothing to do. + // + if (depth_ != next_depth_) + { + peek_ = false; + return doc_; + } + } bool r (true); + // If we peeked, then we have already seen the start tag and our + // return depth is one above the current depth. + // + size_t d (peek_ ? depth_ - 1 : depth_); + whitespace_depth_ = d; + + peek_ = false; + // Keep calling parseNext() until we either move to a greater depth or // get a document. This way we skip the text (presumably whitespaces) - // that may be preceding the next chunk. + // that may be preceding this chunk. // - while (r && depth_ == 1 && doc_.get () == 0) + while (r && depth_ == d && doc_.get () == 0) { parser_->parseNext (token_); error_handler_.throw_if_failed > (); } if (!r) - return xml::dom::auto_ptr (0); + return document_ptr (0); - // If we are not at depth 1, keep calling parseNext() until we get - // there. + // If we are not at our start depth, keep calling parseNext() until we + // get there again. // - while (r && depth_ != 1) + while (r && depth_ != d) { r = parser_->parseNext (token_); error_handler_.throw_if_failed > (); } if (!r) - return xml::dom::auto_ptr (0); + return document_ptr (0); return doc_; } @@ -214,18 +290,25 @@ startElement (const XMLCh* const uri, // Set attributes. // -#if _XERCES_VERSION >= 30000 for (XMLSize_t i (0), end (attr.getLength()); i < end; ++i) -#else - for (unsigned int i (0), end (attr.getLength()); i < end; ++i) -#endif { - cur_->setAttributeNS (attr.getURI (i), - attr.getQName (i), - attr.getValue (i)); + const XMLCh* qn (attr.getQName (i)); + const XMLCh* ns (attr.getURI (i)); + + // When SAX2 reports the xmlns attribute, it does not include + // the proper attribute namespace. So we have to detect and + // handle this case. + // + if (XMLString::equals (qn, XMLUni::fgXMLNSString)) + ns = XMLUni::fgXMLNSURIName; + + cur_->setAttributeNS (ns, qn, attr.getValue (i)); } depth_++; + + if (peek_) + next_depth_ = depth_; } void parser_impl:: @@ -239,38 +322,21 @@ endElement (const XMLCh* const /*uri*/, cur_ = static_cast (cur_->getParentNode ()); } -#if _XERCES_VERSION >= 30000 void parser_impl:: characters (const XMLCh* const s, const XMLSize_t length) { const XMLCh empty[] = {chNull}; - // Ignore text content (presumably whitespaces) in the root element. + // Ignore text content (presumably whitespaces) while looking for + // the next element. // - if (depth_ > 1) + if (depth_ > whitespace_depth_) { DOMText* t = doc_->createTextNode (empty); static_cast (t)->appendData (s, length); cur_->appendChild (t); } } -#else -void parser_impl:: -characters (const XMLCh* const s, const unsigned int length) -{ - // Ignore text content (presumably whitespaces) in the root element. - // - if (depth_ > 1) - { - // For Xerces-C++ 2-series we have to make copy. - // - xsd::cxx::auto_array tmp (new XMLCh[length + 1]); - XMLString::copyNString (tmp.get (), s, length); - cur_->appendChild (doc_->createTextNode (tmp.get ())); - } -} -#endif - // // parser @@ -282,19 +348,25 @@ parser:: } parser:: -parser () - : impl_ (new parser_impl) +parser (const XMLByte* grammar, size_t grammar_size) + : impl_ (new parser_impl (grammar, grammar_size)) { } -xml::dom::auto_ptr parser:: +void parser:: start (istream& is, const string& id, bool val) { return impl_->start (is, id, val); } -xml::dom::auto_ptr parser:: -next () +document_ptr parser:: +peek () +{ + return impl_->peek (); +} + +document_ptr parser:: +next (document_ptr doc, document_ptr outer_doc) { - return impl_->next (); + return impl_->next (doc, outer_doc); } diff --git a/xsd/examples/cxx/tree/streaming/parser.hxx b/xsd/examples/cxx/tree/streaming/parser.hxx index 000d022..cb34f92 100644 --- a/xsd/examples/cxx/tree/streaming/parser.hxx +++ b/xsd/examples/cxx/tree/streaming/parser.hxx @@ -1,13 +1,10 @@ -// file : examples/cxx/tree/streaming/parser.hxx -// author : Boris Kolpackov -// copyright : not copyrighted - public domain - #ifndef PARSER_HXX #define PARSER_HXX #include #include -#include // std::auto_ptr +#include // std::size_t +#include // std::auto_ptr #include @@ -18,20 +15,44 @@ class parser_impl; class parser { public: + // We can specify embedded XML Schema grammar to be used by the parser + // that was created by the xsdbin utility from the 'embedded' example. + // + parser (const XMLByte* grammar = 0, std::size_t grammar_size = 0); ~parser (); - parser (); - // The start function returns a "carcase" of the complete document. That - // is, the root element with all the attributes but without any content. + // The start function prepares everything for parsing a new document. // - xsd::cxx::xml::dom::auto_ptr + void start (std::istream& is, const std::string& id, bool validate); - // The next function returns next first-level element with all its - // attributes and content or 0 if no more available. + typedef xsd::cxx::xml::dom::auto_ptr document_ptr; + + // The peek function parses just the next element (ignoring any + // preceding content assuming it is whitespace) without parsing + // any of its nested content (but it includes the element's + // attributes). It returns NULL if there are no more elements + // at this level (there could still be on outer levels in case + // of nested streaming). + // + document_ptr + peek (); + + // The next function parses (or finishes parsing after peek) the + // next element including its nested content. It returns NULL if + // there are no more elements at this level (there could still + // be on outer levels in case of nested streaming). + // + // If doc is not NULL, then it should be the document returned + // by peek(). That is, a document with only the root element. + // In this case next() finishes parsing this element. + // + // If outer_doc is not NULL, then next() will first add doc to + // outer_doc as a child of the document root. // - xsd::cxx::xml::dom::auto_ptr - next (); + document_ptr + next (document_ptr doc = document_ptr (), + document_ptr outer_doc = document_ptr ()); private: parser (const parser&); diff --git a/xsd/examples/cxx/tree/streaming/position.xml b/xsd/examples/cxx/tree/streaming/position.xml index e40b0c8..a3428bf 100644 --- a/xsd/examples/cxx/tree/streaming/position.xml +++ b/xsd/examples/cxx/tree/streaming/position.xml @@ -3,7 +3,6 @@ diff --git a/xsd/examples/cxx/tree/streaming/position.xsd b/xsd/examples/cxx/tree/streaming/position.xsd index 13f6e9a..18dda94 100644 --- a/xsd/examples/cxx/tree/streaming/position.xsd +++ b/xsd/examples/cxx/tree/streaming/position.xsd @@ -3,7 +3,6 @@ diff --git a/xsd/examples/cxx/tree/streaming/serializer.cxx b/xsd/examples/cxx/tree/streaming/serializer.cxx index 58bc5cb..0ce8156 100644 --- a/xsd/examples/cxx/tree/streaming/serializer.cxx +++ b/xsd/examples/cxx/tree/streaming/serializer.cxx @@ -1,10 +1,11 @@ -// file : examples/cxx/tree/streaming/serializer.cxx -// author : Boris Kolpackov -// copyright : not copyrighted - public domain +#include +#include +#include #include #include +#include #include #include @@ -21,32 +22,355 @@ using namespace xercesc; namespace xml = xsd::cxx::xml; namespace tree = xsd::cxx::tree; +static const XMLCh gEOLSeq[] = +{ + chLF, chNull +}; + +static const XMLCh gUTF8[] = +{ + chLatin_U, chLatin_T, chLatin_F, chDash, chDigit_8, chNull +}; + +static const XMLCh gEndElement[] = +{ + chOpenAngle, chForwardSlash, chNull +}; + +static const int DISCARD_DEFAULT_CONTENT_ID = 0x1; +static const int ENTITIES_ID = 0x2; +static const int FORMAT_PRETTY_PRINT_1ST_LEVEL_ID = 0xA; + +class StreamingDOMSerializer: public DOMLSSerializerImpl +{ +public: + StreamingDOMSerializer (MemoryManager* manager) + : DOMLSSerializerImpl (manager) + { + } + + bool + startOpen (const DOMElement* e, DOMLSOutput* const destination) + { + const DOMDocument* docu (e->getOwnerDocument ()); + assert (docu != 0); + + // Code adapted from DOMLSSerializerImpl::write(). + // + target_ = destination->getByteStream(); + + fEncodingUsed = gUTF8; + + const XMLCh* lsEncoding=destination->getEncoding(); + if (lsEncoding && *lsEncoding) + { + fEncodingUsed = lsEncoding; + } + else if (docu) + { + const XMLCh* tmpEncoding = docu->getInputEncoding(); + + if ( tmpEncoding && *tmpEncoding) + { + fEncodingUsed = tmpEncoding; + } + else + { + tmpEncoding = docu->getXmlEncoding(); + + if ( tmpEncoding && *tmpEncoding) + { + fEncodingUsed = tmpEncoding; + } + } + } + + fNewLineUsed = (fNewLine && *fNewLine)? fNewLine : gEOLSeq; + + fDocumentVersion = (docu->getXmlVersion() && *(docu->getXmlVersion())) + ? docu->getXmlVersion() + : XMLUni::fgVersion1_0; + + fErrorCount = 0; + + fLineFeedInTextNodePrinted = false; + fLastWhiteSpaceInTextNode = 0; + + level_ = 0; + namespace_map_.clear (); + + fFormatter = new (fMemoryManager) XMLFormatter( fEncodingUsed + ,fDocumentVersion + ,target_ + ,XMLFormatter::NoEscapes + ,XMLFormatter::UnRep_CharRef + ,fMemoryManager); + formatter_.reset (fFormatter); + + // Write out the XML declaration, etc. Here we assume that the document + // has no children (i.e., no root element). + // + processNode (docu, 0); + fLineFeedInTextNodePrinted = true; + + return writeOpen (e); + } + + bool + writeOpen (const DOMElement* e) + { + // Code adapted from the first part of ELEMENT_NODE case in + // DOMLSSerializerImpl::processNode(). + // + + if (!fLineFeedInTextNodePrinted) + { + if(level_ == 1 && getFeature(FORMAT_PRETTY_PRINT_1ST_LEVEL_ID)) + printNewLine(); + + printNewLine(); + } + else + { + fLineFeedInTextNodePrinted = false; + } + + printIndent(level_); + + RefHashTableOf* namespaceMap = NULL; + + *fFormatter << XMLFormatter::NoEscapes << chOpenAngle << + e->getNodeName (); + + setURCharRef(); + DOMNamedNodeMap *attributes = e->getAttributes(); + XMLSize_t attrCount = attributes->getLength(); + + const XMLCh* prefix = e->getPrefix(); + const XMLCh* uri = e->getNamespaceURI(); + if((uri && uri[0]) || + ((prefix==0 || prefix[0]==0) && isDefaultNamespacePrefixDeclared())) + { + if(prefix==0 || prefix[0]==0) + prefix=XMLUni::fgZeroLenString; + if(!isNamespaceBindingActive(prefix, uri)) + { + if(namespaceMap==NULL) + { + namespaceMap=new (fMemoryManager) RefHashTableOf(12, false, fMemoryManager); + fNamespaceStack->addElement(namespaceMap); + } + namespaceMap->put((void*)prefix,(XMLCh*)uri); + *fFormatter << XMLFormatter::NoEscapes + << chSpace << XMLUni::fgXMLNSString; + + if(!XMLString::equals(prefix,XMLUni::fgZeroLenString)) + *fFormatter << chColon << prefix; + + *fFormatter << chEqual << chDoubleQuote + << XMLFormatter::AttrEscapes + << uri + << XMLFormatter::NoEscapes + << chDoubleQuote; + } + } + + bool discard = getFeature(DISCARD_DEFAULT_CONTENT_ID); + for (XMLSize_t i = 0; i < attrCount; i++) + { + DOMAttr* attribute = (DOMAttr*)attributes->item(i); + + if (discard && !((DOMAttr*)attribute )->getSpecified()) + continue; + + // if this attribute is a namespace declaration, add it to the namespace map for the current level + const XMLCh* ns = attribute->getNamespaceURI(); + if (ns != 0 ) + { + if(XMLString::equals(ns, XMLUni::fgXMLNSURIName)) + { + if(namespaceMap==NULL) + { + namespaceMap=new (fMemoryManager) RefHashTableOf(12, false, fMemoryManager); + fNamespaceStack->addElement(namespaceMap); + } + const XMLCh* nsPrefix = attribute->getLocalName(); + if(XMLString::equals(attribute->getNodeName(),XMLUni::fgXMLNSString)) + nsPrefix = XMLUni::fgZeroLenString; + if(namespaceMap->containsKey((void*)nsPrefix)) + continue; + namespaceMap->put((void*)attribute->getLocalName(),(XMLCh*)attribute->getNodeValue()); + } + else if(!XMLString::equals(ns, XMLUni::fgXMLURIName)) + { + // check if the namespace for the current node is already defined + const XMLCh* prefix = attribute->getPrefix(); + if(prefix && prefix[0]) + { + const XMLCh* uri = attribute->getNamespaceURI(); + if(!isNamespaceBindingActive(prefix, uri)) + { + if(namespaceMap==NULL) + { + namespaceMap=new (fMemoryManager) RefHashTableOf(12, false, fMemoryManager); + fNamespaceStack->addElement(namespaceMap); + } + namespaceMap->put((void*)prefix,(XMLCh*)uri); + *fFormatter << XMLFormatter::NoEscapes + << chSpace << XMLUni::fgXMLNSString << chColon << prefix + << chEqual << chDoubleQuote + << XMLFormatter::AttrEscapes + << uri + << XMLFormatter::NoEscapes + << chDoubleQuote; + } + } + } + } + + if (XMLString::equals(ns, XMLUni::fgXMLNSURIName) || checkFilter(attribute) == DOMNodeFilter::FILTER_ACCEPT) + { + *fFormatter << XMLFormatter::NoEscapes + << chSpace << attribute->getNodeName() + << chEqual << chDoubleQuote + << XMLFormatter::AttrEscapes; + + if (getFeature(ENTITIES_ID)) + { + DOMNode* child = attribute->getFirstChild(); + while( child != 0) + { + if(child->getNodeType()==DOMNode::TEXT_NODE) + *fFormatter << child->getNodeValue(); + else if(child->getNodeType()==DOMNode::ENTITY_REFERENCE_NODE) + *fFormatter << XMLFormatter::NoEscapes + << chAmpersand << child->getNodeName() << chSemiColon + << XMLFormatter::AttrEscapes; + child = child->getNextSibling(); + } + } + else + *fFormatter << attribute->getNodeValue(); + + *fFormatter << XMLFormatter::NoEscapes << chDoubleQuote; + } + } + + *fFormatter << XMLFormatter::NoEscapes << chCloseAngle; + + // Keep track of whether we have added a namespace map for this + // element. Used to pop it in writeClose(). + // + namespace_map_.push_back (namespaceMap != 0); + + level_++; + + DOMNode* child = e->getFirstChild(); + while (child != 0) + { + processNode (child, level_); + child = child->getNextSibling(); + } + + return fErrorCount == 0; + } + + bool + writeClose (const XMLCh* name) + { + // Code adapted from the second part of ELEMENT_NODE case in + // DOMLSSerializerImpl::processNode(). + // + level_--; + + // Assume we are not on the same line (nodeLine != fCurrentLine). + // + { + if (!fLineFeedInTextNodePrinted) + { + printNewLine(); + } + else + { + fLineFeedInTextNodePrinted = false; + } + + if(level_ == 0 && getFeature(FORMAT_PRETTY_PRINT_1ST_LEVEL_ID)) + printNewLine(); + + printIndent(level_); + } + + *fFormatter << XMLFormatter::NoEscapes << gEndElement << + name << chCloseAngle; + + if (namespace_map_.back ()) + fNamespaceStack->removeLastElement(); + + namespace_map_.pop_back (); + + if (level_ == 0) + { + printNewLine(); + target_->flush (); + } + + return fErrorCount == 0; + } + + bool + write (const DOMElement* e) + { + processNode (e, level_); + return fErrorCount == 0; + } + + using DOMLSSerializerImpl::write; // Whole document. + +private: + XMLFormatTarget* target_; + std::auto_ptr formatter_; + int level_; + + std::vector namespace_map_; +}; + class serializer_impl { public: + typedef serializer::namespace_infomap namespace_infomap; + serializer_impl (); void start (ostream& os, const string& encoding); DOMElement* - create (const string& name); + create (const string& name, const namespace_infomap&); DOMElement* - create (const string& ns, const string& qname); + create (const string& ns, const string& qname, const namespace_infomap&); + + void + serialize (xml::dom::auto_ptr); void - serialize (DOMElement& e); + serialize_open (xml::dom::auto_ptr); + + void + serialize_close (const string&); + +private: + void + clear_document (); private: + bool start_; + // Serializer. // -#if _XERCES_VERSION >= 30000 xml::dom::auto_ptr out_; - xml::dom::auto_ptr serializer_; -#else - xml::dom::auto_ptr serializer_; -#endif + xml::dom::auto_ptr serializer_; auto_ptr oft_; @@ -57,6 +381,10 @@ private: // DOMImplementation& dom_impl_; xml::dom::auto_ptr doc_; + vector element_stack_; + + size_t element_count_; // Number of elements serialized using current doc. + static const size_t element_count_limit_ = 500; }; const XMLCh ls[] = {chLatin_L, chLatin_S, chNull}; @@ -64,65 +392,167 @@ const XMLCh ls[] = {chLatin_L, chLatin_S, chNull}; serializer_impl:: serializer_impl () : error_proxy_ (error_handler_), - dom_impl_ (*DOMImplementationRegistry::getDOMImplementation (ls)), - doc_ (dom_impl_.createDocument ()) + dom_impl_ (*DOMImplementationRegistry::getDOMImplementation (ls)) { -#if _XERCES_VERSION >= 30000 - serializer_.reset (dom_impl_.createLSSerializer ()); - DOMConfiguration* conf (serializer_->getDomConfig ()); + serializer_.reset ( + new (XMLPlatformUtils::fgMemoryManager) + StreamingDOMSerializer (XMLPlatformUtils::fgMemoryManager)); + DOMConfiguration* conf (serializer_->getDomConfig ()); conf->setParameter (XMLUni::fgDOMErrorHandler, &error_proxy_); + conf->setParameter (XMLUni::fgDOMXMLDeclaration, true); conf->setParameter (XMLUni::fgDOMWRTDiscardDefaultContent, true); conf->setParameter (XMLUni::fgDOMWRTFormatPrettyPrint, true); - conf->setParameter (XMLUni::fgDOMXMLDeclaration, false); -#else - serializer_.reset (dom_impl_.createDOMWriter ()); - - serializer_->setErrorHandler (&error_proxy_); - serializer_->setFeature (XMLUni::fgDOMWRTDiscardDefaultContent, true); - serializer_->setFeature (XMLUni::fgDOMWRTFormatPrettyPrint, true); - serializer_->setFeature (XMLUni::fgDOMXMLDeclaration, false); -#endif + conf->setParameter (XMLUni::fgDOMWRTXercesPrettyPrint, false); } void serializer_impl:: start (ostream& os, const string& encoding) { + element_stack_.clear (); + doc_.reset (dom_impl_.createDocument ()); + element_count_ = 0; + error_handler_.reset (); oft_.reset (new xml::dom::ostream_format_target (os)); -#if _XERCES_VERSION >= 30000 out_.reset (dom_impl_.createLSOutput ()); out_->setEncoding (xml::string (encoding).c_str ()); out_->setByteStream (oft_.get ()); -#else - serializer_->setEncoding (xml::string (encoding).c_str ()); -#endif + + start_ = true; } DOMElement* serializer_impl:: -create (const string& name) +create (const string& name, const namespace_infomap& map) { - return doc_->createElement (xml::string (name).c_str ()); + DOMElement* r (doc_->createElement (xml::string (name).c_str ())); + + if (!map.empty ()) + xml::dom::add_namespaces (*r, map); + + // Add the element as the child of the stack "tip" so that it + // "sees" all the namespace declarations active from this point. + // + if (!element_stack_.empty ()) + element_stack_.back ()->appendChild (r); + + return r; } DOMElement* serializer_impl:: -create (const string& ns, const string& qname) +create (const string& ns, const string& qname, const namespace_infomap& map) { - return doc_->createElementNS ( - xml::string (ns).c_str (), xml::string (qname).c_str ()); + DOMElement* r ( + doc_->createElementNS ( + xml::string (ns).c_str (), xml::string (qname).c_str ())); + + if (!map.empty ()) + xml::dom::add_namespaces (*r, map); + + // Add the element as the child of the stack "tip" so that it + // "sees" all the namespace declarations active from this point. + // + if (!element_stack_.empty ()) + element_stack_.back ()->appendChild (r); + + return r; } void serializer_impl:: -serialize (DOMElement& e) +serialize (xml::dom::auto_ptr p) { -#if _XERCES_VERSION >= 30000 - serializer_->write (&e, out_.get ()); -#else - serializer_->writeNode (oft_.get (), e); -#endif + DOMElement* e (p.get ()); + + if (start_) + { + serializer_->write (e, out_.get ()); + start_ = false; + } + else + serializer_->write (e); + + error_handler_.throw_if_failed > (); + + // Remove this element from its parent before we release. + // + if (!element_stack_.empty ()) + element_stack_.back ()->removeChild (e); + + p.reset (); // Release it before we may clear the document below. + if (element_count_++ > element_count_limit_) + clear_document (); +} + +void serializer_impl:: +serialize_open (xml::dom::auto_ptr p) +{ + DOMElement* e (p.get ()); + + if (start_) + { + serializer_->startOpen (e, out_.get ()); + start_ = false; + } + else + serializer_->writeOpen (e); + + error_handler_.throw_if_failed > (); + + // Add this element to the element stack. serialize_close() is + // responsible for its removal and releasing. + // + element_stack_.push_back (e); + p.release (); +} + +void serializer_impl:: +serialize_close (const string& name) +{ + serializer_->writeClose (xml::string (name).c_str ()); error_handler_.throw_if_failed > (); + + // Release the element. + // + DOMElement* e (element_stack_.back ()); + element_stack_.pop_back (); + + if (!element_stack_.empty ()) + element_stack_.back ()->removeChild (e); + + e->release (); + + if (element_count_++ > element_count_limit_) + clear_document (); +} + +void serializer_impl:: +clear_document () +{ + // Re-create the document in order to force deallocation of its + // internal heap. While Xerces-C++ DOM tries to re-use memory, + // it still accumulates no longer used memory blocks. + // + xml::dom::auto_ptr doc (dom_impl_.createDocument ()); + + if (!element_stack_.empty ()) + { + DOMElement* e ( + static_cast ( + doc->importNode (element_stack_.front (), true))); + + for (vector::iterator i (element_stack_.begin ()); + i != element_stack_.end (); + ++i) + { + *i = e; + e = static_cast (e->getFirstChild ()); + } + } + + doc_ = doc; + element_count_ = 0; } // @@ -147,19 +577,31 @@ start (ostream& os, const string& encoding) } DOMElement* serializer:: -create (const string& name) +create (const string& name, const namespace_infomap& map) { - return impl_->create (name); + return impl_->create (name, map); } DOMElement* serializer:: -create (const string& ns, const string& qname) +create (const string& ns, const string& qname, const namespace_infomap& map) { - return impl_->create (ns, qname); + return impl_->create (ns, qname, map); } void serializer:: -serialize (DOMElement& e) +serialize (xml::dom::auto_ptr e) { impl_->serialize (e); } + +void serializer:: +serialize_open (xml::dom::auto_ptr e) +{ + impl_->serialize_open (e); +} + +void serializer:: +serialize_close (const string& name) +{ + impl_->serialize_close (name); +} diff --git a/xsd/examples/cxx/tree/streaming/serializer.hxx b/xsd/examples/cxx/tree/streaming/serializer.hxx index 6ff0114..43fab69 100644 --- a/xsd/examples/cxx/tree/streaming/serializer.hxx +++ b/xsd/examples/cxx/tree/streaming/serializer.hxx @@ -12,12 +12,15 @@ #include #include +#include // namespace_infomap class serializer_impl; class serializer { public: + typedef xsd::cxx::xml::dom::namespace_infomap namespace_infomap; + ~serializer (); serializer (); @@ -33,6 +36,13 @@ public: void next (const std::string& name, const T& x); + // Serialize next object model fragment into an element with the specified + // name and namespace declarations. + // + template + void + next (const std::string& name, const namespace_infomap&, const T& x); + // Serialize next object model fragment into an element with the specified // namespace and qualified name. // @@ -40,6 +50,42 @@ public: void next (const std::string& ns, const std::string& name, const T& x); + // Serialize next object model fragment into an element with the specified + // namespace and qualified name as well as namespace declarations. + // + template + void + next (const std::string& ns, + const std::string& name, + const namespace_infomap&, + const T& x); + + // The next_open/close functions are like next() but split into two steps. + // next_open() serializes the object model fragment into an element leaving + // it open while next_close() closes the element. + // + template + void + next_open (const std::string& name, const T& x); + + template + void + next_open (const std::string& name, const namespace_infomap&, const T& x); + + template + void + next_open (const std::string& ns, const std::string& name, const T& x); + + template + void + next_open (const std::string& ns, + const std::string& name, + const namespace_infomap&, + const T& x); + + void + next_close (const std::string& name); + private: serializer (const serializer&); @@ -48,13 +94,21 @@ private: private: xercesc::DOMElement* - create (const std::string& name); + create (const std::string& name, const namespace_infomap&); xercesc::DOMElement* - create (const std::string& ns, const std::string& name); + create (const std::string& ns, + const std::string& name, + const namespace_infomap&); + + void + serialize (xsd::cxx::xml::dom::auto_ptr); void - serialize (xercesc::DOMElement&); + serialize_open (xsd::cxx::xml::dom::auto_ptr); + + void + serialize_close (const std::string& name); private: std::auto_ptr impl_; @@ -64,18 +118,88 @@ template inline void serializer:: next (const std::string& name, const T& x) { - xsd::cxx::xml::dom::auto_ptr e (create (name)); + xsd::cxx::xml::dom::auto_ptr e ( + create (name, namespace_infomap ())); + *e << x; + serialize (e); +} + +template +inline void serializer:: +next (const std::string& name, const namespace_infomap& map, const T& x) +{ + xsd::cxx::xml::dom::auto_ptr e (create (name, map)); *e << x; - serialize (*e); + serialize (e); } template inline void serializer:: next (const std::string& ns, const std::string& name, const T& x) { - xsd::cxx::xml::dom::auto_ptr e (create (ns, name)); + xsd::cxx::xml::dom::auto_ptr e ( + create (ns, name, namespace_infomap ())); *e << x; - serialize (*e); + serialize (e); +} + +template +inline void serializer:: +next (const std::string& ns, + const std::string& name, + const namespace_infomap& map, + const T& x) +{ + xsd::cxx::xml::dom::auto_ptr e (create (ns, name, map)); + *e << x; + serialize (e); +} + +template +inline void serializer:: +next_open (const std::string& name, const T& x) +{ + xsd::cxx::xml::dom::auto_ptr e ( + create (name, namespace_infomap ())); + *e << x; + serialize_open (e); +} + +template +inline void serializer:: +next_open (const std::string& name, const namespace_infomap& map, const T& x) +{ + xsd::cxx::xml::dom::auto_ptr e (create (name, map)); + *e << x; + serialize_open (e); +} + +template +inline void serializer:: +next_open (const std::string& ns, const std::string& name, const T& x) +{ + xsd::cxx::xml::dom::auto_ptr e ( + create (ns, name, namespace_infomap ())); + *e << x; + serialize_open (e); +} + +template +inline void serializer:: +next_open (const std::string& ns, + const std::string& name, + const namespace_infomap& map, + const T& x) +{ + xsd::cxx::xml::dom::auto_ptr e (create (ns, name, map)); + *e << x; + serialize_open (e); +} + +inline void serializer:: +next_close (const std::string& name) +{ + serialize_close (name); } #endif // SERIALIZER_HXX diff --git a/xsd/examples/cxx/tree/wildcard/driver.cxx b/xsd/examples/cxx/tree/wildcard/driver.cxx index 5fc6abf..64acfce 100644 --- a/xsd/examples/cxx/tree/wildcard/driver.cxx +++ b/xsd/examples/cxx/tree/wildcard/driver.cxx @@ -1,5 +1,4 @@ // file : examples/cxx/tree/wildcard/driver.cxx -// author : Boris Kolpackov // copyright : not copyrighted - public domain #include diff --git a/xsd/examples/cxx/tree/wildcard/email.xml b/xsd/examples/cxx/tree/wildcard/email.xml index 517c3c6..9272d5c 100644 --- a/xsd/examples/cxx/tree/wildcard/email.xml +++ b/xsd/examples/cxx/tree/wildcard/email.xml @@ -3,7 +3,6 @@ diff --git a/xsd/examples/cxx/tree/wildcard/email.xsd b/xsd/examples/cxx/tree/wildcard/email.xsd index c14eebe..239cb9d 100644 --- a/xsd/examples/cxx/tree/wildcard/email.xsd +++ b/xsd/examples/cxx/tree/wildcard/email.xsd @@ -3,7 +3,6 @@ diff --git a/xsd/examples/cxx/tree/wildcard/makefile b/xsd/examples/cxx/tree/wildcard/makefile index 36a645b..8c6fe52 100644 --- a/xsd/examples/cxx/tree/wildcard/makefile +++ b/xsd/examples/cxx/tree/wildcard/makefile @@ -1,6 +1,5 @@ # file : examples/cxx/tree/wildcard/makefile -# author : Boris Kolpackov -# copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +# copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC # license : GNU GPL v2 + exceptions; see accompanying LICENSE file include $(dir $(lastword $(MAKEFILE_LIST)))../../../../build/bootstrap.make @@ -29,18 +28,18 @@ $(call import,\ # $(driver): $(obj) $(xerces_c.l) -$(obj) $(dep): cpp_options := -I$(src_root)/libxsd +$(obj) $(dep): cpp_options := -I$(out_base) -I$(src_base) -I$(src_root)/libxsd $(obj) $(dep): $(xerces_c.l.cpp-options) genf := $(xsd:.xsd=.hxx) $(xsd:.xsd=.ixx) $(xsd:.xsd=.cxx) gen := $(addprefix $(out_base)/,$(genf)) $(gen): xsd := $(out_root)/xsd/xsd -$(gen): xsd_options := --generate-inline --generate-wildcard \ +$(gen): xsd_options += --generate-inline --generate-wildcard \ --generate-serialization --root-element message $(gen): $(out_root)/xsd/xsd -$(call include-dep,$(dep)) +$(call include-dep,$(dep),$(obj),$(gen)) # Convenience alias for default target. # @@ -69,7 +68,7 @@ $(dist): $(dist-common) $(dist-win): $(dist-common) $(call install-data,$(src_base)/README,$(dist_prefix)/$(path)/README.txt) - $(call message,,unix2dos $(dist_prefix)/$(path)/README.txt) + $(call message,,todos $(dist_prefix)/$(path)/README.txt) # Clean. # diff --git a/xsd/examples/cxx/tree/xpath/README b/xsd/examples/cxx/tree/xpath/README index 48d40d6..1187743 100644 --- a/xsd/examples/cxx/tree/xpath/README +++ b/xsd/examples/cxx/tree/xpath/README @@ -30,17 +30,13 @@ dom-parse.cxx XML document to a DOM document. driver.cxx - Driver for Xerces-C++ 3.x.y/XQilla 2.2.x. It first calls the above - parse() function to parse the input file to a DOM document using - XQilla-provided DOM Implementation with support for XPath 2. It - then parses the DOM document to the object model. Finally, it - prepares and executes an XPath query on the underlying DOM - document and then handles the result by getting back from the - returned DOM nodes to object model nodes. - -driver-2.cxx - Driver for Xerces-C++ 2.x.y/XQilla 2.1.x. It performs the same set - of actions as driver.cxx above. + Driver for the example. It first calls the above parse() function to + parse the input file to a DOM document using XQilla-provided DOM + Implementation with support for XPath 2. It then parses the DOM + document to the object model. Finally, it prepares and executes + an XPath query on the underlying DOM document and then handles + the result by getting back from the returned DOM nodes to object + model nodes. To run the example on the sample XML document simply execute: diff --git a/xsd/examples/cxx/tree/xpath/dom-parse.cxx b/xsd/examples/cxx/tree/xpath/dom-parse.cxx index 82e87b6..0282780 100644 --- a/xsd/examples/cxx/tree/xpath/dom-parse.cxx +++ b/xsd/examples/cxx/tree/xpath/dom-parse.cxx @@ -1,5 +1,4 @@ // file : examples/cxx/tree/xpath/dom-parse.cxx -// author : Boris Kolpackov // copyright : not copyrighted - public domain #include "dom-parse.hxx" @@ -25,10 +24,6 @@ parse (std::istream& is, bool validate, DOMImplementation* impl) { -#if _XERCES_VERSION >= 30000 - - // Xerces-C++ 3.0.0 and later. - // xml::dom::auto_ptr parser ( impl->createLSParser (DOMImplementationLS::MODE_SYNCHRONOUS, 0)); @@ -80,39 +75,12 @@ parse (std::istream& is, xml::dom::bits::error_handler_proxy ehp (eh); conf->setParameter (XMLUni::fgDOMErrorHandler, &ehp); -#else // _XERCES_VERSION >= 30000 - - // Same as above but for Xerces-C++ 2 series. - // - xml::dom::auto_ptr parser ( - impl->createDOMBuilder (DOMImplementationLS::MODE_SYNCHRONOUS, 0)); - - parser->setFeature (XMLUni::fgDOMComments, false); - parser->setFeature (XMLUni::fgDOMDatatypeNormalization, true); - parser->setFeature (XMLUni::fgDOMEntities, false); - parser->setFeature (XMLUni::fgDOMNamespaces, true); - parser->setFeature (XMLUni::fgDOMWhitespaceInElementContent, false); - parser->setFeature (XMLUni::fgDOMValidation, validate); - parser->setFeature (XMLUni::fgXercesSchema, validate); - parser->setFeature (XMLUni::fgXercesSchemaFullChecking, false); - parser->setFeature (XMLUni::fgXercesUserAdoptsDOMDocument, true); - - tree::error_handler eh; - xml::dom::bits::error_handler_proxy ehp (eh); - parser->setErrorHandler (&ehp); - -#endif // _XERCES_VERSION >= 30000 - // Prepare input stream. // xml::sax::std_input_source isrc (is, id); Wrapper4InputSource wrap (&isrc, false); -#if _XERCES_VERSION >= 30000 xml::dom::auto_ptr doc (parser->parse (&wrap)); -#else - xml::dom::auto_ptr doc (parser->parse (wrap)); -#endif eh.throw_if_failed > (); diff --git a/xsd/examples/cxx/tree/xpath/dom-parse.hxx b/xsd/examples/cxx/tree/xpath/dom-parse.hxx index cfa1555..9fa0eb9 100644 --- a/xsd/examples/cxx/tree/xpath/dom-parse.hxx +++ b/xsd/examples/cxx/tree/xpath/dom-parse.hxx @@ -1,5 +1,4 @@ // file : examples/cxx/tree/xpath/dom-parse.hxx -// author : Boris Kolpackov // copyright : not copyrighted - public domain #ifndef DOM_PARSE diff --git a/xsd/examples/cxx/tree/xpath/driver-2.cxx b/xsd/examples/cxx/tree/xpath/driver-2.cxx deleted file mode 100644 index ccbdd7c..0000000 --- a/xsd/examples/cxx/tree/xpath/driver-2.cxx +++ /dev/null @@ -1,139 +0,0 @@ -// file : examples/cxx/tree/xpath/driver.cxx -// author : Boris Kolpackov -// copyright : not copyrighted - public domain - -#include // std::auto_ptr -#include -#include -#include - -#include - -#include - -#include // xml::string, xml::transcode - -#include "dom-parse.hxx" - -#include "people.hxx" - -using namespace std; -using namespace xercesc; -namespace xml = xsd::cxx::xml; - -int -main (int argc, char* argv[]) -{ - if (argc != 2) - { - cerr << "usage: " << argv[0] << " people.xml" << endl; - return 1; - } - - int r (0); - - // Initialise Xerces-C++ and XQilla. - // - XQillaPlatformUtils::initialize(); - - // Get the XQilla DOMImplementation object with support for XPath. - // - DOMImplementation* impl ( - DOMImplementationRegistry::getDOMImplementation( - xml::string ("XPath2 3.0").c_str ())); - - try - { - using namespace people; - - ifstream ifs; - ifs.exceptions (ifstream::badbit | ifstream::failbit); - ifs.open (argv[1]); - - // Parse the XML file to DOM using the XQilla DOMImplementation. - // - xml_schema::dom::auto_ptr dom ( - parse (ifs, argv[1], true, impl)); - - // Parse the DOM document to the object model. We also request that - // the DOM document to be associated with the object model. - // - std::auto_ptr d ( - directory_ (dom, - xml_schema::flags::keep_dom | xml_schema::flags::own_dom)); - - // Obtain the root element and document corresponding to the - // directory object. - // - DOMElement* root (static_cast (d->_node ())); - DOMDocument* doc (root->getOwnerDocument ()); - - // Obtain namespace resolver. - // - xml_schema::dom::auto_ptr resolver ( - (XQillaNSResolver*)doc->createNSResolver (root)); - - // Set the namespace prefix for the people namespace that we can - // use reliably in XPath expressions regardless of what is used - // in XML documents. - // - resolver->addNamespaceBinding ( - xml::string ("p").c_str (), - xml::string ("http://www.codesynthesis.com/people").c_str ()); - - // Create XPath expression. - // - xml_schema::dom::auto_ptr expr ( - static_cast ( - doc->createExpression ( - xml::string ("p:directory/person[age > 30]").c_str (), - resolver.get ()))); - - // Execute the query. - // - xml_schema::dom::auto_ptr r ( - static_cast ( - expr->evaluate (doc, XPath2Result::ITERATOR_RESULT, 0))); - - // Iterate over the result. - // - cout << "Records matching the query:" << endl; - - while (r->iterateNext ()) - { - const DOMNode* n (r->asNode ()); - - // Obtain the object model node corresponding to this DOM node. - // - person* p ( - static_cast ( - n->getUserData (xml_schema::dom::tree_node_key))); - - // Print the data using the object model. - // - cout << endl - << "First : " << p->first_name () << endl - << "Last : " << p->last_name () << endl - << "Gender : " << p->gender () << endl - << "Age : " << p->age () << endl; - } - } - catch(const DOMException& e) - { - cerr << xml::transcode (e.getMessage ()) << std::endl; - r = 1; - } - catch (const xml_schema::exception& e) - { - cerr << e << endl; - r = 1; - } - catch (const std::ios_base::failure&) - { - cerr << argv[1] << ": unable to open or read failure" << endl; - r = 1; - } - - XQillaPlatformUtils::terminate(); - return r; -} diff --git a/xsd/examples/cxx/tree/xpath/driver.cxx b/xsd/examples/cxx/tree/xpath/driver.cxx index f49e186..f9bd040 100644 --- a/xsd/examples/cxx/tree/xpath/driver.cxx +++ b/xsd/examples/cxx/tree/xpath/driver.cxx @@ -1,5 +1,4 @@ // file : examples/cxx/tree/xpath/driver.cxx -// author : Boris Kolpackov // copyright : not copyrighted - public domain #include // std::auto_ptr diff --git a/xsd/examples/cxx/tree/xpath/makefile b/xsd/examples/cxx/tree/xpath/makefile index 73457f3..693c6b2 100644 --- a/xsd/examples/cxx/tree/xpath/makefile +++ b/xsd/examples/cxx/tree/xpath/makefile @@ -1,6 +1,5 @@ # file : examples/cxx/tree/xpath/makefile -# author : Boris Kolpackov -# copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +# copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC # license : GNU GPL v2 + exceptions; see accompanying LICENSE file include $(dir $(lastword $(MAKEFILE_LIST)))../../../../build/bootstrap.make @@ -35,17 +34,16 @@ endif # $(driver): $(obj) $(xqilla.l) $(xerces_c.l) -$(obj) $(dep): cpp_options := -I$(src_root)/libxsd +$(obj) $(dep): cpp_options := -I$(out_base) -I$(src_base) -I$(src_root)/libxsd $(obj) $(dep): $(xqilla.l.cpp-options) $(xerces_c.l.cpp-options) genf := $(xsd:.xsd=.hxx) $(xsd:.xsd=.ixx) $(xsd:.xsd=.cxx) gen := $(addprefix $(out_base)/,$(genf)) $(gen): xsd := $(out_root)/xsd/xsd -$(gen): xsd_options := $(gen): $(out_root)/xsd/xsd -$(call include-dep,$(dep)) +$(call include-dep,$(dep),$(obj),$(gen)) # Convenience alias for default target. # @@ -60,7 +58,6 @@ $(install) $(dist) $(dist-win) $(dist-common): path := $(subst $(src_root)/,,$(s $(install): $(call install-data,$(src_base)/README,$(install_doc_dir)/xsd/$(path)/README) $(call install-data,$(src_base)/driver.cxx,$(install_doc_dir)/xsd/$(path)/driver.cxx) - $(call install-data,$(src_base)/driver-2.cxx,$(install_doc_dir)/xsd/$(path)/driver-2.cxx) $(call install-data,$(src_base)/people.xsd,$(install_doc_dir)/xsd/$(path)/people.xsd) $(call install-data,$(src_base)/people.xml,$(install_doc_dir)/xsd/$(path)/people.xml) $(call install-data,$(src_base)/dom-parse.hxx,$(install_doc_dir)/xsd/$(path)/dom-parse.hxx) @@ -68,7 +65,6 @@ $(install): $(dist-common): $(call install-data,$(src_base)/driver.cxx,$(dist_prefix)/$(path)/driver.cxx) - $(call install-data,$(src_base)/driver-2.cxx,$(dist_prefix)/$(path)/driver-2.cxx) $(call install-data,$(src_base)/people.xsd,$(dist_prefix)/$(path)/people.xsd) $(call install-data,$(src_base)/people.xml,$(dist_prefix)/$(path)/people.xml) $(call install-data,$(src_base)/dom-parse.hxx,$(dist_prefix)/$(path)/dom-parse.hxx) @@ -77,9 +73,16 @@ $(dist-common): $(dist): $(dist-common) $(call install-data,$(src_base)/README,$(dist_prefix)/$(path)/README) +$(dist-win): |$(out_root)/.dist-pre $(dist-win): $(dist-common) $(call install-data,$(src_base)/README,$(dist_prefix)/$(path)/README.txt) - $(call message,,unix2dos $(dist_prefix)/$(path)/README.txt) + $(call message,,todos $(dist_prefix)/$(path)/README.txt) + $(call meta-vc8sln,$(src_root)/dist/template-vc8.sln,xpath-vc8.sln) + $(call meta-vc9sln,$(src_root)/dist/template-vc9.sln,xpath-vc9.sln) + $(call meta-vc10sln,$(src_root)/dist/template-vc10.sln,xpath-vc10.sln) + $(call meta-vc11sln,$(src_root)/dist/template-vc11.sln,xpath-vc11.sln) + $(call meta-vc12sln,$(src_root)/dist/template-vc12.sln,xpath-vc12.sln) + # Clean. # @@ -105,9 +108,16 @@ endif $(call include,$(bld_root)/cxx/o-e.make) $(call include,$(bld_root)/cxx/cxx-o.make) $(call include,$(bld_root)/cxx/cxx-d.make) -$(call include,$(bld_root)/install.make) $(call include,$(scf_root)/xsd/tree/xsd-cxx.make) +$(call include,$(bld_root)/install.make) +$(call include,$(bld_root)/meta/vc8sln.make) +$(call include,$(bld_root)/meta/vc9sln.make) +$(call include,$(bld_root)/meta/vc10sln.make) +$(call include,$(bld_root)/meta/vc11sln.make) +$(call include,$(bld_root)/meta/vc12sln.make) + + # Dependencies. # $(call import,$(src_root)/xsd/makefile) diff --git a/xsd/examples/cxx/tree/xpath/people.xml b/xsd/examples/cxx/tree/xpath/people.xml index 24af876..9ad9ab6 100644 --- a/xsd/examples/cxx/tree/xpath/people.xml +++ b/xsd/examples/cxx/tree/xpath/people.xml @@ -3,7 +3,6 @@ diff --git a/xsd/examples/cxx/tree/xpath/people.xsd b/xsd/examples/cxx/tree/xpath/people.xsd index 12c8aef..5be94de 100644 --- a/xsd/examples/cxx/tree/xpath/people.xsd +++ b/xsd/examples/cxx/tree/xpath/people.xsd @@ -3,7 +3,6 @@ diff --git a/xsd/examples/makefile b/xsd/examples/makefile index b6879e6..42c2bb7 100644 --- a/xsd/examples/makefile +++ b/xsd/examples/makefile @@ -1,6 +1,5 @@ # file : examples/makefile -# author : Boris Kolpackov -# copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +# copyright : Copyright (c) 2006-2014 Code Synthesis Tools CC # license : GNU GPL v2 + exceptions; see accompanying LICENSE file include $(dir $(lastword $(MAKEFILE_LIST)))../build/bootstrap.make diff --git a/xsd/libxsd/INSTALL b/xsd/libxsd/INSTALL index 537f00a..c9b4625 100644 --- a/xsd/libxsd/INSTALL +++ b/xsd/libxsd/INSTALL @@ -2,7 +2,7 @@ Prerequisites run-time: - - libxerces-c >= 2.5.0 http://xerces.apache.org/xerces-c/ + - libxerces-c >= 3.0.0 http://xerces.apache.org/xerces-c/ Building libxsd diff --git a/xsd/libxsd/makefile b/xsd/libxsd/makefile index b7fbb77..1deb770 100644 --- a/xsd/libxsd/makefile +++ b/xsd/libxsd/makefile @@ -1,6 +1,5 @@ # file : libxsd/makefile -# author : Boris Kolpackov -# copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +# copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC # license : GNU GPL v2 + exceptions; see accompanying LICENSE file include $(dir $(lastword $(MAKEFILE_LIST)))../build/bootstrap.make @@ -34,12 +33,12 @@ $(dist): $(dist-common) $(dist-win): $(dist-common) $(call install-data,$(src_base)/GPLv2,$(dist_prefix)/libxsd/GPLv2.txt) - $(call message,,unix2dos $(dist_prefix)/libxsd/GPLv2.txt) + $(call message,,todos $(dist_prefix)/libxsd/GPLv2.txt) $(call install-data,$(src_base)/FLOSSE,$(dist_prefix)/libxsd/FLOSSE.txt) - $(call message,,unix2dos $(dist_prefix)/libxsd/FLOSSE.txt) + $(call message,,todos $(dist_prefix)/libxsd/FLOSSE.txt) $(call install-data,$(src_base)/LICENSE,$(dist_prefix)/libxsd/LICENSE.txt) - $(call message,,unix2dos $(dist_prefix)/libxsd/LICENSE.txt) + $(call message,,todos $(dist_prefix)/libxsd/LICENSE.txt) $(call install-data,$(src_base)/README,$(dist_prefix)/libxsd/README.txt) - $(call message,,unix2dos $(dist_prefix)/libxsd/README.txt) + $(call message,,todos $(dist_prefix)/libxsd/README.txt) $(call include,$(bld_root)/install.make) diff --git a/xsd/libxsd/xsd/cxx/auto-array.hxx b/xsd/libxsd/xsd/cxx/auto-array.hxx index 2b4e100..584785e 100644 --- a/xsd/libxsd/xsd/cxx/auto-array.hxx +++ b/xsd/libxsd/xsd/cxx/auto-array.hxx @@ -1,11 +1,16 @@ // file : xsd/cxx/auto-array.hxx -// author : Boris Kolpackov -// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file #ifndef XSD_CXX_AUTO_ARRAY_HXX #define XSD_CXX_AUTO_ARRAY_HXX +#include // XSD_CXX11 + +#ifdef XSD_CXX11 +# error use std::unique_ptr instead of non-standard auto_array +#endif + #include // std::size_t namespace xsd @@ -13,20 +18,20 @@ namespace xsd namespace cxx { template - struct std_deallocator + struct std_array_deleter { void - deallocate (T* p) + operator() (T* p) const { delete[] p; } }; // Simple automatic array. The second template parameter is - // an optional deallocator type. If not specified, delete[] + // an optional deleter type. If not specified, delete[] // is used. // - template > + template > struct auto_array { auto_array (T a[]) @@ -34,7 +39,7 @@ namespace xsd { } - auto_array (T a[], D& d) + auto_array (T a[], const D& d) : a_ (a), d_ (&d) { } @@ -42,7 +47,7 @@ namespace xsd ~auto_array () { if (d_ != 0) - d_->deallocate (a_); + (*d_) (a_); else delete[] a_; } @@ -73,7 +78,7 @@ namespace xsd if (a_ != a) { if (d_ != 0) - d_->deallocate (a_); + (*d_) (a_); else delete[] a_; @@ -100,7 +105,7 @@ namespace xsd private: T* a_; - D* d_; + const D* d_; }; template diff --git a/xsd/libxsd/xsd/cxx/compilers/vc-7/post.hxx b/xsd/libxsd/xsd/cxx/compilers/vc-7/post.hxx deleted file mode 100644 index 5357cd4..0000000 --- a/xsd/libxsd/xsd/cxx/compilers/vc-7/post.hxx +++ /dev/null @@ -1,6 +0,0 @@ -// file : xsd/cxx/compilers/vc-7/post.hxx -// author : Boris Kolpackov -// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC -// license : GNU GPL v2 + exceptions; see accompanying LICENSE file - -#pragma warning (pop) diff --git a/xsd/libxsd/xsd/cxx/compilers/vc-7/pre.hxx b/xsd/libxsd/xsd/cxx/compilers/vc-7/pre.hxx deleted file mode 100644 index 6b9b5fb..0000000 --- a/xsd/libxsd/xsd/cxx/compilers/vc-7/pre.hxx +++ /dev/null @@ -1,36 +0,0 @@ -// file : xsd/cxx/compilers/vc-7/pre.hxx -// author : Boris Kolpackov -// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC -// license : GNU GPL v2 + exceptions; see accompanying LICENSE file - - -#if (_MSC_VER < 1310) -# error Microsoft Visual C++ 7.0 (.NET 2002) is not supported. -#endif - - -// These warnings had to be disabled "for good". -// -#pragma warning (disable:4250) // inherits via dominance -#pragma warning (disable:4505) // unreferenced local function has been removed -#pragma warning (disable:4661) // no definition for explicit instantiation - - -// Push warning state. -// -#pragma warning (push, 3) - - -// Disabled warnings. -// -#pragma warning (disable:4355) // passing 'this' to a member -#pragma warning (disable:4584) // is already a base-class -#pragma warning (disable:4800) // forcing value to bool -#pragma warning (disable:4275) // non dll-interface base -#pragma warning (disable:4251) // base needs to have dll-interface -#pragma warning (disable:4224) // nonstandard extension (/Za option) - - -// Elevated warnings. -// -#pragma warning (2:4239) // standard doesn't allow this conversion diff --git a/xsd/libxsd/xsd/cxx/compilers/vc-8/post.hxx b/xsd/libxsd/xsd/cxx/compilers/vc-8/post.hxx index c7d3b3f..a8d25a6 100644 --- a/xsd/libxsd/xsd/cxx/compilers/vc-8/post.hxx +++ b/xsd/libxsd/xsd/cxx/compilers/vc-8/post.hxx @@ -1,6 +1,5 @@ // file : xsd/cxx/compilers/vc-8/post.hxx -// author : Boris Kolpackov -// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file #pragma warning (pop) diff --git a/xsd/libxsd/xsd/cxx/compilers/vc-8/pre.hxx b/xsd/libxsd/xsd/cxx/compilers/vc-8/pre.hxx index 02161a4..82ca41d 100644 --- a/xsd/libxsd/xsd/cxx/compilers/vc-8/pre.hxx +++ b/xsd/libxsd/xsd/cxx/compilers/vc-8/pre.hxx @@ -1,6 +1,5 @@ // file : xsd/cxx/compilers/vc-8/pre.hxx -// author : Boris Kolpackov -// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file // These warnings had to be disabled "for good". diff --git a/xsd/libxsd/xsd/cxx/config.hxx b/xsd/libxsd/xsd/cxx/config.hxx index badfe03..076b107 100644 --- a/xsd/libxsd/xsd/cxx/config.hxx +++ b/xsd/libxsd/xsd/cxx/config.hxx @@ -1,6 +1,5 @@ // file : xsd/cxx/config.hxx -// author : Boris Kolpackov -// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file #ifndef XSD_CXX_CONFIG_HXX @@ -8,7 +7,40 @@ #include -// Macro to suppress unused variable warning. +// Available C++11 features. +// +#ifdef XSD_CXX11 +#ifdef _MSC_VER +# if _MSC_VER >= 1600 +# define XSD_CXX11_NULLPTR +# if _MSC_VER >= 1800 +# define XSD_CXX11_TEMPLATE_ALIAS +# endif +# endif +#else +# if defined(__GXX_EXPERIMENTAL_CXX0X__) || __cplusplus >= 201103L +# ifdef __GNUC__ +# if (__GNUC__ == 4 && __GNUC_MINOR__ >= 6) || __GNUC__ > 4 +# define XSD_CXX11_NULLPTR +# endif +# if (__GNUC__ == 4 && __GNUC_MINOR__ >= 7) || __GNUC__ > 4 +# define XSD_CXX11_TEMPLATE_ALIAS +# endif +# else +# define XSD_CXX11_NULLPTR +# define XSD_CXX11_TEMPLATE_ALIAS +# endif +# endif +#endif +#endif // XSD_CXX11 + +#ifdef XSD_CXX11 +# define XSD_AUTO_PTR std::unique_ptr +#else +# define XSD_AUTO_PTR std::auto_ptr +#endif + +// Macro to suppress the unused variable warning. // #define XSD_UNUSED(x) (void)x diff --git a/xsd/libxsd/xsd/cxx/exceptions.hxx b/xsd/libxsd/xsd/cxx/exceptions.hxx index d5f01c1..45f5dc6 100644 --- a/xsd/libxsd/xsd/cxx/exceptions.hxx +++ b/xsd/libxsd/xsd/cxx/exceptions.hxx @@ -1,6 +1,5 @@ // file : xsd/cxx/exceptions.hxx -// author : Boris Kolpackov -// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file #ifndef XSD_CXX_EXCEPTIONS_HXX diff --git a/xsd/libxsd/xsd/cxx/parser/document.hxx b/xsd/libxsd/xsd/cxx/parser/document.hxx index 992b800..731808b 100644 --- a/xsd/libxsd/xsd/cxx/parser/document.hxx +++ b/xsd/libxsd/xsd/cxx/parser/document.hxx @@ -1,6 +1,5 @@ // file : xsd/cxx/parser/document.hxx -// author : Boris Kolpackov -// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file #ifndef XSD_CXX_PARSER_DOCUMENT_HXX diff --git a/xsd/libxsd/xsd/cxx/parser/document.txx b/xsd/libxsd/xsd/cxx/parser/document.txx index cad49ce..3c25574 100644 --- a/xsd/libxsd/xsd/cxx/parser/document.txx +++ b/xsd/libxsd/xsd/cxx/parser/document.txx @@ -1,6 +1,5 @@ // file : xsd/cxx/parser/document.txx -// author : Boris Kolpackov -// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file #include diff --git a/xsd/libxsd/xsd/cxx/parser/elements.hxx b/xsd/libxsd/xsd/cxx/parser/elements.hxx index 5f0bead..2f814d1 100644 --- a/xsd/libxsd/xsd/cxx/parser/elements.hxx +++ b/xsd/libxsd/xsd/cxx/parser/elements.hxx @@ -1,6 +1,5 @@ // file : xsd/cxx/parser/elements.hxx -// author : Boris Kolpackov -// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file #ifndef XSD_CXX_PARSER_ELEMENTS_HXX diff --git a/xsd/libxsd/xsd/cxx/parser/elements.txx b/xsd/libxsd/xsd/cxx/parser/elements.txx index 5706107..3aaf017 100644 --- a/xsd/libxsd/xsd/cxx/parser/elements.txx +++ b/xsd/libxsd/xsd/cxx/parser/elements.txx @@ -1,6 +1,5 @@ // file : xsd/cxx/parser/elements.txx -// author : Boris Kolpackov -// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file namespace xsd diff --git a/xsd/libxsd/xsd/cxx/parser/error-handler.hxx b/xsd/libxsd/xsd/cxx/parser/error-handler.hxx index b83c0a8..1352bec 100644 --- a/xsd/libxsd/xsd/cxx/parser/error-handler.hxx +++ b/xsd/libxsd/xsd/cxx/parser/error-handler.hxx @@ -1,6 +1,5 @@ // file : xsd/cxx/parser/error-handler.hxx -// author : Boris Kolpackov -// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file #ifndef XSD_CXX_PARSER_ERROR_HANDLER_HXX diff --git a/xsd/libxsd/xsd/cxx/parser/error-handler.txx b/xsd/libxsd/xsd/cxx/parser/error-handler.txx index 23751d2..db247a7 100644 --- a/xsd/libxsd/xsd/cxx/parser/error-handler.txx +++ b/xsd/libxsd/xsd/cxx/parser/error-handler.txx @@ -1,6 +1,5 @@ // file : xsd/cxx/parser/error-handler.txx -// author : Boris Kolpackov -// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file namespace xsd diff --git a/xsd/libxsd/xsd/cxx/parser/exceptions.hxx b/xsd/libxsd/xsd/cxx/parser/exceptions.hxx index c0e90dd..04cf30f 100644 --- a/xsd/libxsd/xsd/cxx/parser/exceptions.hxx +++ b/xsd/libxsd/xsd/cxx/parser/exceptions.hxx @@ -1,6 +1,5 @@ // file : xsd/cxx/parser/exceptions.hxx -// author : Boris Kolpackov -// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file #ifndef XSD_CXX_PARSER_EXCEPTIONS_HXX diff --git a/xsd/libxsd/xsd/cxx/parser/exceptions.ixx b/xsd/libxsd/xsd/cxx/parser/exceptions.ixx index d4e13f3..f7489f3 100644 --- a/xsd/libxsd/xsd/cxx/parser/exceptions.ixx +++ b/xsd/libxsd/xsd/cxx/parser/exceptions.ixx @@ -1,6 +1,5 @@ // file : xsd/cxx/parser/exceptions.ixx -// author : Boris Kolpackov -// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file #if defined(XSD_CXX_PARSER_USE_CHAR) || !defined(XSD_CXX_PARSER_USE_WCHAR) diff --git a/xsd/libxsd/xsd/cxx/parser/exceptions.txx b/xsd/libxsd/xsd/cxx/parser/exceptions.txx index 5423cdd..d0e52b6 100644 --- a/xsd/libxsd/xsd/cxx/parser/exceptions.txx +++ b/xsd/libxsd/xsd/cxx/parser/exceptions.txx @@ -1,6 +1,5 @@ // file : xsd/cxx/parser/exceptions.txx -// author : Boris Kolpackov -// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file namespace xsd diff --git a/xsd/libxsd/xsd/cxx/parser/expat/elements.hxx b/xsd/libxsd/xsd/cxx/parser/expat/elements.hxx index c9f3de0..86e7a73 100644 --- a/xsd/libxsd/xsd/cxx/parser/expat/elements.hxx +++ b/xsd/libxsd/xsd/cxx/parser/expat/elements.hxx @@ -1,16 +1,21 @@ // file : xsd/cxx/parser/expat/elements.hxx -// author : Boris Kolpackov -// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file #ifndef XSD_CXX_PARSER_EXPAT_ELEMENTS_HXX #define XSD_CXX_PARSER_EXPAT_ELEMENTS_HXX +#include // XSD_CXX11 + #include #include #include // std::size_t #include +#ifdef XSD_CXX11 +# include // std::unique_ptr +#endif + #include // We only support UTF-8 expat for now. @@ -35,6 +40,19 @@ namespace xsd { namespace expat { +#ifdef XSD_CXX11 + struct parser_deleter + { + void + operator() (XML_Parser p) const + { + if (p != 0) + XML_ParserFree (p); + } + }; + + typedef std::unique_ptr parser_auto_ptr; +#else // Simple auto pointer for Expat's XML_Parser object. // struct parser_auto_ptr @@ -61,8 +79,8 @@ namespace xsd return *this; } - public: - operator XML_Parser () + XML_Parser + get () const { return parser_; } @@ -76,12 +94,12 @@ namespace xsd private: XML_Parser parser_; }; - +#endif // XSD_CXX11 // // template - struct document: cxx::parser::document // VC 7.1 likes it qualified + struct document: cxx::parser::document // VC likes it qualified { public: document (parser_base&, diff --git a/xsd/libxsd/xsd/cxx/parser/expat/elements.txx b/xsd/libxsd/xsd/cxx/parser/expat/elements.txx index 08ecf21..d3fc0d9 100644 --- a/xsd/libxsd/xsd/cxx/parser/expat/elements.txx +++ b/xsd/libxsd/xsd/cxx/parser/expat/elements.txx @@ -1,6 +1,5 @@ // file : xsd/cxx/parser/expat/elements.txx -// author : Boris Kolpackov -// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file #include // std::bad_alloc @@ -334,18 +333,18 @@ namespace xsd { // First call. // - if (auto_xml_parser_ == 0) + if (auto_xml_parser_.get () == 0) { auto_xml_parser_ = XML_ParserCreateNS (0, XML_Char (' ')); - if (auto_xml_parser_ == 0) + if (auto_xml_parser_.get () == 0) throw std::bad_alloc (); if (system_id || public_id) - parse_begin (auto_xml_parser_, + parse_begin (auto_xml_parser_.get (), system_id ? *system_id : *public_id, eh); else - parse_begin (auto_xml_parser_, eh); + parse_begin (auto_xml_parser_.get (), eh); } bool r (XML_Parse (xml_parser_, diff --git a/xsd/libxsd/xsd/cxx/parser/map.hxx b/xsd/libxsd/xsd/cxx/parser/map.hxx index 663b178..d097f16 100644 --- a/xsd/libxsd/xsd/cxx/parser/map.hxx +++ b/xsd/libxsd/xsd/cxx/parser/map.hxx @@ -1,6 +1,5 @@ // file : xsd/cxx/parser/map.hxx -// author : Boris Kolpackov -// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file #ifndef XSD_CXX_PARSER_MAP_HXX diff --git a/xsd/libxsd/xsd/cxx/parser/map.ixx b/xsd/libxsd/xsd/cxx/parser/map.ixx index 0b70680..96fc937 100644 --- a/xsd/libxsd/xsd/cxx/parser/map.ixx +++ b/xsd/libxsd/xsd/cxx/parser/map.ixx @@ -1,6 +1,5 @@ // file : xsd/cxx/parser/map.ixx -// author : Boris Kolpackov -// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file namespace xsd diff --git a/xsd/libxsd/xsd/cxx/parser/map.txx b/xsd/libxsd/xsd/cxx/parser/map.txx index aa7099d..3f85760 100644 --- a/xsd/libxsd/xsd/cxx/parser/map.txx +++ b/xsd/libxsd/xsd/cxx/parser/map.txx @@ -1,6 +1,5 @@ // file : xsd/cxx/parser/map.txx -// author : Boris Kolpackov -// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file namespace xsd diff --git a/xsd/libxsd/xsd/cxx/parser/non-validating/parser.hxx b/xsd/libxsd/xsd/cxx/parser/non-validating/parser.hxx index 9eda6f4..4ecc4f1 100644 --- a/xsd/libxsd/xsd/cxx/parser/non-validating/parser.hxx +++ b/xsd/libxsd/xsd/cxx/parser/non-validating/parser.hxx @@ -1,6 +1,5 @@ // file : xsd/cxx/parser/non-validating/parser.hxx -// author : Boris Kolpackov -// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file #ifndef XSD_CXX_PARSER_NON_VALIDATING_PARSER_HXX diff --git a/xsd/libxsd/xsd/cxx/parser/non-validating/parser.txx b/xsd/libxsd/xsd/cxx/parser/non-validating/parser.txx index c95b92e..79b6568 100644 --- a/xsd/libxsd/xsd/cxx/parser/non-validating/parser.txx +++ b/xsd/libxsd/xsd/cxx/parser/non-validating/parser.txx @@ -1,6 +1,5 @@ // file : xsd/cxx/parser/non-validating/parser.txx -// author : Boris Kolpackov -// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file #include diff --git a/xsd/libxsd/xsd/cxx/parser/non-validating/xml-schema-pimpl.hxx b/xsd/libxsd/xsd/cxx/parser/non-validating/xml-schema-pimpl.hxx index 397386d..fc1f838 100644 --- a/xsd/libxsd/xsd/cxx/parser/non-validating/xml-schema-pimpl.hxx +++ b/xsd/libxsd/xsd/cxx/parser/non-validating/xml-schema-pimpl.hxx @@ -1,6 +1,5 @@ // file : xsd/cxx/parser/non-validating/xml-schema-pimpl.hxx -// author : Boris Kolpackov -// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file #ifndef XSD_CXX_PARSER_NON_VALIDATING_XML_SCHEMA_PIMPL_HXX @@ -8,6 +7,8 @@ #include +#include // XSD_AUTO_PTR + #include namespace xsd @@ -564,7 +565,7 @@ namespace xsd virtual void _characters (const ro_string&); - virtual std::auto_ptr + virtual XSD_AUTO_PTR post_base64_binary (); protected: @@ -582,7 +583,7 @@ namespace xsd virtual void _characters (const ro_string&); - virtual std::auto_ptr + virtual XSD_AUTO_PTR post_hex_binary (); protected: diff --git a/xsd/libxsd/xsd/cxx/parser/non-validating/xml-schema-pimpl.ixx b/xsd/libxsd/xsd/cxx/parser/non-validating/xml-schema-pimpl.ixx index db9a5d1..3555693 100644 --- a/xsd/libxsd/xsd/cxx/parser/non-validating/xml-schema-pimpl.ixx +++ b/xsd/libxsd/xsd/cxx/parser/non-validating/xml-schema-pimpl.ixx @@ -1,6 +1,5 @@ // file : xsd/cxx/parser/non-validating/xml-schema-pimpl.ixx -// author : Boris Kolpackov -// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file #if defined(XSD_CXX_PARSER_USE_CHAR) || !defined(XSD_CXX_PARSER_USE_WCHAR) diff --git a/xsd/libxsd/xsd/cxx/parser/non-validating/xml-schema-pimpl.txx b/xsd/libxsd/xsd/cxx/parser/non-validating/xml-schema-pimpl.txx index c430f49..28280f5 100644 --- a/xsd/libxsd/xsd/cxx/parser/non-validating/xml-schema-pimpl.txx +++ b/xsd/libxsd/xsd/cxx/parser/non-validating/xml-schema-pimpl.txx @@ -1,6 +1,5 @@ // file : xsd/cxx/parser/non-validating/xml-schema-pimpl.txx -// author : Boris Kolpackov -// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file #include @@ -1157,7 +1156,7 @@ namespace xsd } template - std::auto_ptr base64_binary_pimpl:: + XSD_AUTO_PTR base64_binary_pimpl:: post_base64_binary () { typedef typename std::basic_string::size_type size_type; @@ -1199,7 +1198,7 @@ namespace xsd size_type quad_count (size / 4); size_type capacity (quad_count * 3 + 1); - std::auto_ptr buf (new buffer (capacity, capacity)); + XSD_AUTO_PTR buf (new buffer (capacity, capacity)); char* dst (buf->data ()); size_type si (0), di (0); // Source and destination indexes. @@ -1309,7 +1308,7 @@ namespace xsd } template - std::auto_ptr hex_binary_pimpl:: + XSD_AUTO_PTR hex_binary_pimpl:: post_hex_binary () { typedef typename ro_string::size_type size_type; @@ -1318,7 +1317,7 @@ namespace xsd size_type size (trim_right (tmp)); buffer::size_t n (size / 2); - std::auto_ptr buf (new buffer (n)); + XSD_AUTO_PTR buf (new buffer (n)); const C* src (tmp.data ()); char* dst (buf->data ()); diff --git a/xsd/libxsd/xsd/cxx/parser/non-validating/xml-schema-pskel.hxx b/xsd/libxsd/xsd/cxx/parser/non-validating/xml-schema-pskel.hxx index 8e4972a..334be01 100644 --- a/xsd/libxsd/xsd/cxx/parser/non-validating/xml-schema-pskel.hxx +++ b/xsd/libxsd/xsd/cxx/parser/non-validating/xml-schema-pskel.hxx @@ -1,13 +1,14 @@ // file : xsd/cxx/parser/non-validating/xml-schema-pskel.hxx -// author : Boris Kolpackov -// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file #ifndef XSD_CXX_PARSER_NON_VALIDATING_XML_SCHEMA_PSKEL_HXX #define XSD_CXX_PARSER_NON_VALIDATING_XML_SCHEMA_PSKEL_HXX #include -#include // auto_ptr +#include // std::auto_ptr/unique_ptr + +#include // XSD_AUTO_PTR #include #include @@ -494,7 +495,7 @@ namespace xsd template struct base64_binary_pskel: simple_content { - virtual std::auto_ptr + virtual XSD_AUTO_PTR post_base64_binary () = 0; static const C* @@ -507,7 +508,7 @@ namespace xsd template struct hex_binary_pskel: simple_content { - virtual std::auto_ptr + virtual XSD_AUTO_PTR post_hex_binary () = 0; static const C* diff --git a/xsd/libxsd/xsd/cxx/parser/non-validating/xml-schema-pskel.ixx b/xsd/libxsd/xsd/cxx/parser/non-validating/xml-schema-pskel.ixx index 13b1fab..44cc6e4 100644 --- a/xsd/libxsd/xsd/cxx/parser/non-validating/xml-schema-pskel.ixx +++ b/xsd/libxsd/xsd/cxx/parser/non-validating/xml-schema-pskel.ixx @@ -1,6 +1,5 @@ // file : xsd/cxx/parser/non-validating/xml-schema-pskel.ixx -// author : Boris Kolpackov -// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file #if defined(XSD_CXX_PARSER_USE_CHAR) || !defined(XSD_CXX_PARSER_USE_WCHAR) diff --git a/xsd/libxsd/xsd/cxx/parser/non-validating/xml-schema-pskel.txx b/xsd/libxsd/xsd/cxx/parser/non-validating/xml-schema-pskel.txx index b6352df..e2fd1b3 100644 --- a/xsd/libxsd/xsd/cxx/parser/non-validating/xml-schema-pskel.txx +++ b/xsd/libxsd/xsd/cxx/parser/non-validating/xml-schema-pskel.txx @@ -1,6 +1,5 @@ // file : xsd/cxx/parser/non-validating/xml-schema-pskel.txx -// author : Boris Kolpackov -// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file namespace xsd diff --git a/xsd/libxsd/xsd/cxx/parser/schema-exceptions.hxx b/xsd/libxsd/xsd/cxx/parser/schema-exceptions.hxx index 9af39d7..8fd2def 100644 --- a/xsd/libxsd/xsd/cxx/parser/schema-exceptions.hxx +++ b/xsd/libxsd/xsd/cxx/parser/schema-exceptions.hxx @@ -1,6 +1,5 @@ // file : xsd/cxx/parser/schema-exceptions.hxx -// author : Boris Kolpackov -// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file #ifndef XSD_CXX_PARSER_SCHEMA_EXCEPTIONS_HXX diff --git a/xsd/libxsd/xsd/cxx/parser/schema-exceptions.ixx b/xsd/libxsd/xsd/cxx/parser/schema-exceptions.ixx index cfd2d18..71be381 100644 --- a/xsd/libxsd/xsd/cxx/parser/schema-exceptions.ixx +++ b/xsd/libxsd/xsd/cxx/parser/schema-exceptions.ixx @@ -1,6 +1,5 @@ // file : xsd/cxx/parser/schema-exceptions.ixx -// author : Boris Kolpackov -// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file #if defined(XSD_CXX_PARSER_USE_CHAR) || !defined(XSD_CXX_PARSER_USE_WCHAR) diff --git a/xsd/libxsd/xsd/cxx/parser/schema-exceptions.txx b/xsd/libxsd/xsd/cxx/parser/schema-exceptions.txx index 7ac45ae..77c569a 100644 --- a/xsd/libxsd/xsd/cxx/parser/schema-exceptions.txx +++ b/xsd/libxsd/xsd/cxx/parser/schema-exceptions.txx @@ -1,6 +1,5 @@ // file : xsd/cxx/parser/schema-exceptions.txx -// author : Boris Kolpackov -// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file namespace xsd diff --git a/xsd/libxsd/xsd/cxx/parser/substitution-map.hxx b/xsd/libxsd/xsd/cxx/parser/substitution-map.hxx index 416d1ec..d191e28 100644 --- a/xsd/libxsd/xsd/cxx/parser/substitution-map.hxx +++ b/xsd/libxsd/xsd/cxx/parser/substitution-map.hxx @@ -1,6 +1,5 @@ // file : xsd/cxx/parser/substitution-map.hxx -// author : Boris Kolpackov -// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file #ifndef XSD_CXX_PARSER_SUBSTITUTION_MAP_HXX diff --git a/xsd/libxsd/xsd/cxx/parser/substitution-map.txx b/xsd/libxsd/xsd/cxx/parser/substitution-map.txx index dad0ec6..45216cd 100644 --- a/xsd/libxsd/xsd/cxx/parser/substitution-map.txx +++ b/xsd/libxsd/xsd/cxx/parser/substitution-map.txx @@ -1,6 +1,5 @@ // file : xsd/cxx/parser/substitution-map.txx -// author : Boris Kolpackov -// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file namespace xsd diff --git a/xsd/libxsd/xsd/cxx/parser/validating/exceptions.hxx b/xsd/libxsd/xsd/cxx/parser/validating/exceptions.hxx index c0efda8..07086e3 100644 --- a/xsd/libxsd/xsd/cxx/parser/validating/exceptions.hxx +++ b/xsd/libxsd/xsd/cxx/parser/validating/exceptions.hxx @@ -1,6 +1,5 @@ // file : xsd/cxx/parser/validating/exceptions.hxx -// author : Boris Kolpackov -// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file #ifndef XSD_CXX_PARSER_VALIDATING_EXCEPTIONS_HXX diff --git a/xsd/libxsd/xsd/cxx/parser/validating/exceptions.ixx b/xsd/libxsd/xsd/cxx/parser/validating/exceptions.ixx index 74bb909..72bfe8d 100644 --- a/xsd/libxsd/xsd/cxx/parser/validating/exceptions.ixx +++ b/xsd/libxsd/xsd/cxx/parser/validating/exceptions.ixx @@ -1,6 +1,5 @@ // file : xsd/cxx/parser/validating/exceptions.ixx -// author : Boris Kolpackov -// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file #if defined(XSD_CXX_PARSER_USE_CHAR) || !defined(XSD_CXX_PARSER_USE_WCHAR) diff --git a/xsd/libxsd/xsd/cxx/parser/validating/exceptions.txx b/xsd/libxsd/xsd/cxx/parser/validating/exceptions.txx index 6205215..c2b8928 100644 --- a/xsd/libxsd/xsd/cxx/parser/validating/exceptions.txx +++ b/xsd/libxsd/xsd/cxx/parser/validating/exceptions.txx @@ -1,6 +1,5 @@ // file : xsd/cxx/parser/validating/exceptions.txx -// author : Boris Kolpackov -// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file namespace xsd diff --git a/xsd/libxsd/xsd/cxx/parser/validating/inheritance-map.hxx b/xsd/libxsd/xsd/cxx/parser/validating/inheritance-map.hxx index d9307b4..b8ae938 100644 --- a/xsd/libxsd/xsd/cxx/parser/validating/inheritance-map.hxx +++ b/xsd/libxsd/xsd/cxx/parser/validating/inheritance-map.hxx @@ -1,6 +1,5 @@ // file : xsd/cxx/parser/validating/inheritance-map.hxx -// author : Boris Kolpackov -// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file #ifndef XSD_CXX_PARSER_VALIDATING_INHERITANCE_MAP_HXX diff --git a/xsd/libxsd/xsd/cxx/parser/validating/inheritance-map.txx b/xsd/libxsd/xsd/cxx/parser/validating/inheritance-map.txx index 1a63e65..ba4803e 100644 --- a/xsd/libxsd/xsd/cxx/parser/validating/inheritance-map.txx +++ b/xsd/libxsd/xsd/cxx/parser/validating/inheritance-map.txx @@ -1,6 +1,5 @@ // file : xsd/cxx/parser/validating/inheritance-map.txx -// author : Boris Kolpackov -// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file namespace xsd diff --git a/xsd/libxsd/xsd/cxx/parser/validating/parser.hxx b/xsd/libxsd/xsd/cxx/parser/validating/parser.hxx index da297d9..c305fe1 100644 --- a/xsd/libxsd/xsd/cxx/parser/validating/parser.hxx +++ b/xsd/libxsd/xsd/cxx/parser/validating/parser.hxx @@ -1,6 +1,5 @@ // file : xsd/cxx/parser/validating/parser.hxx -// author : Boris Kolpackov -// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file #ifndef XSD_CXX_PARSER_VALIDATING_PARSER_HXX diff --git a/xsd/libxsd/xsd/cxx/parser/validating/parser.txx b/xsd/libxsd/xsd/cxx/parser/validating/parser.txx index d447725..9a5800a 100644 --- a/xsd/libxsd/xsd/cxx/parser/validating/parser.txx +++ b/xsd/libxsd/xsd/cxx/parser/validating/parser.txx @@ -1,6 +1,5 @@ // file : xsd/cxx/parser/validating/parser.txx -// author : Boris Kolpackov -// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file #include diff --git a/xsd/libxsd/xsd/cxx/parser/validating/xml-schema-pimpl.hxx b/xsd/libxsd/xsd/cxx/parser/validating/xml-schema-pimpl.hxx index 619a8c7..ae64d2b 100644 --- a/xsd/libxsd/xsd/cxx/parser/validating/xml-schema-pimpl.hxx +++ b/xsd/libxsd/xsd/cxx/parser/validating/xml-schema-pimpl.hxx @@ -1,6 +1,5 @@ // file : xsd/cxx/parser/validating/xml-schema-pimpl.hxx -// author : Boris Kolpackov -// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file #ifndef XSD_CXX_PARSER_VALIDATING_XML_SCHEMA_PIMPL_HXX @@ -8,6 +7,8 @@ #include +#include // XSD_AUTO_PTR + #include namespace xsd @@ -664,12 +665,12 @@ namespace xsd virtual void _post (); - virtual std::auto_ptr + virtual XSD_AUTO_PTR post_base64_binary (); protected: std::basic_string str_; - std::auto_ptr buf_; + XSD_AUTO_PTR buf_; }; // hexBinary @@ -686,12 +687,12 @@ namespace xsd virtual void _post (); - virtual std::auto_ptr + virtual XSD_AUTO_PTR post_hex_binary (); protected: std::basic_string str_; - std::auto_ptr buf_; + XSD_AUTO_PTR buf_; }; // gday diff --git a/xsd/libxsd/xsd/cxx/parser/validating/xml-schema-pimpl.ixx b/xsd/libxsd/xsd/cxx/parser/validating/xml-schema-pimpl.ixx index c6f8127..94a9b8e 100644 --- a/xsd/libxsd/xsd/cxx/parser/validating/xml-schema-pimpl.ixx +++ b/xsd/libxsd/xsd/cxx/parser/validating/xml-schema-pimpl.ixx @@ -1,6 +1,5 @@ // file : xsd/cxx/parser/validating/xml-schema-pimpl.ixx -// author : Boris Kolpackov -// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file #if defined(XSD_CXX_PARSER_USE_CHAR) || !defined(XSD_CXX_PARSER_USE_WCHAR) diff --git a/xsd/libxsd/xsd/cxx/parser/validating/xml-schema-pimpl.txx b/xsd/libxsd/xsd/cxx/parser/validating/xml-schema-pimpl.txx index 55121c2..ad587c5 100644 --- a/xsd/libxsd/xsd/cxx/parser/validating/xml-schema-pimpl.txx +++ b/xsd/libxsd/xsd/cxx/parser/validating/xml-schema-pimpl.txx @@ -1,11 +1,14 @@ // file : xsd/cxx/parser/validating/xml-schema-pimpl.txx -// author : Boris Kolpackov -// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file #include #include +#ifdef XSD_CXX11 +# include // std::move +#endif + #include #include @@ -1634,10 +1637,14 @@ namespace xsd } template - std::auto_ptr base64_binary_pimpl:: + XSD_AUTO_PTR base64_binary_pimpl:: post_base64_binary () { +#ifdef XSD_CXX11 + return std::move (buf_); +#else return buf_; +#endif } // hex_binary @@ -1721,10 +1728,14 @@ namespace xsd } template - std::auto_ptr hex_binary_pimpl:: + XSD_AUTO_PTR hex_binary_pimpl:: post_hex_binary () { +#ifdef XSD_CXX11 + return std::move (buf_); +#else return buf_; +#endif } // time_zone diff --git a/xsd/libxsd/xsd/cxx/parser/validating/xml-schema-pskel.hxx b/xsd/libxsd/xsd/cxx/parser/validating/xml-schema-pskel.hxx index 67c8057..ffc7de3 100644 --- a/xsd/libxsd/xsd/cxx/parser/validating/xml-schema-pskel.hxx +++ b/xsd/libxsd/xsd/cxx/parser/validating/xml-schema-pskel.hxx @@ -1,13 +1,14 @@ // file : xsd/cxx/parser/validating/xml-schema-pskel.hxx -// author : Boris Kolpackov -// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file #ifndef XSD_CXX_PARSER_VALIDATING_XML_SCHEMA_PSKEL_HXX #define XSD_CXX_PARSER_VALIDATING_XML_SCHEMA_PSKEL_HXX #include -#include // auto_ptr +#include // std::auto_ptr/unique_ptr + +#include // XSD_AUTO_PTR #include #include @@ -494,7 +495,7 @@ namespace xsd template struct base64_binary_pskel: simple_content { - virtual std::auto_ptr + virtual XSD_AUTO_PTR post_base64_binary () = 0; static const C* @@ -507,7 +508,7 @@ namespace xsd template struct hex_binary_pskel: simple_content { - virtual std::auto_ptr + virtual XSD_AUTO_PTR post_hex_binary () = 0; static const C* diff --git a/xsd/libxsd/xsd/cxx/parser/validating/xml-schema-pskel.ixx b/xsd/libxsd/xsd/cxx/parser/validating/xml-schema-pskel.ixx index 6958bea..b6da227 100644 --- a/xsd/libxsd/xsd/cxx/parser/validating/xml-schema-pskel.ixx +++ b/xsd/libxsd/xsd/cxx/parser/validating/xml-schema-pskel.ixx @@ -1,6 +1,5 @@ // file : xsd/cxx/parser/validating/xml-schema-pskel.ixx -// author : Boris Kolpackov -// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file #if defined(XSD_CXX_PARSER_USE_CHAR) || !defined(XSD_CXX_PARSER_USE_WCHAR) diff --git a/xsd/libxsd/xsd/cxx/parser/validating/xml-schema-pskel.txx b/xsd/libxsd/xsd/cxx/parser/validating/xml-schema-pskel.txx index 4ae50e3..49d53c5 100644 --- a/xsd/libxsd/xsd/cxx/parser/validating/xml-schema-pskel.txx +++ b/xsd/libxsd/xsd/cxx/parser/validating/xml-schema-pskel.txx @@ -1,6 +1,5 @@ // file : xsd/cxx/parser/validating/xml-schema-pskel.txx -// author : Boris Kolpackov -// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file namespace xsd diff --git a/xsd/libxsd/xsd/cxx/parser/xerces/elements.hxx b/xsd/libxsd/xsd/cxx/parser/xerces/elements.hxx index e0439f3..da493f9 100644 --- a/xsd/libxsd/xsd/cxx/parser/xerces/elements.hxx +++ b/xsd/libxsd/xsd/cxx/parser/xerces/elements.hxx @@ -1,12 +1,11 @@ // file : xsd/cxx/parser/xerces/elements.hxx -// author : Boris Kolpackov -// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file #ifndef XSD_CXX_PARSER_XERCES_ELEMENTS_HXX #define XSD_CXX_PARSER_XERCES_ELEMENTS_HXX -#include // std::auto_ptr +#include // std::auto_ptr/unique_ptr #include #include #include @@ -16,6 +15,10 @@ #include #include +#include + +#include // XSD_AUTO_PTR + #include #include @@ -23,6 +26,10 @@ #include #include +#if _XERCES_VERSION < 30000 +# error Xerces-C++ 2-series is not supported +#endif + namespace xsd { namespace cxx @@ -79,7 +86,7 @@ namespace xsd // // template - struct document: cxx::parser::document // VC 7.1 likes it qualified + struct document: cxx::parser::document // VC likes it qualified { public: document (parser_base& root, @@ -371,7 +378,7 @@ namespace xsd const properties&); private: - std::auto_ptr + XSD_AUTO_PTR create_sax_ (flags, const properties&); private: @@ -386,8 +393,8 @@ namespace xsd event_router (cxx::parser::document&, bool polymorphic); // I know, some of those consts are stupid. But that's what - // Xerces folks put into their interfaces and VC 7.1 thinks - // there are different signatures if one strips this fluff off. + // Xerces folks put into their interfaces and VC thinks there + // are different signatures if one strips this fluff off. // virtual void setDocumentLocator (const xercesc::Locator* const); @@ -403,13 +410,8 @@ namespace xsd const XMLCh* const lname, const XMLCh* const qname); -#if _XERCES_VERSION >= 30000 virtual void characters (const XMLCh* const s, const XMLSize_t length); -#else - virtual void - characters (const XMLCh* const s, const unsigned int length); -#endif virtual void startPrefixMapping (const XMLCh* const prefix, diff --git a/xsd/libxsd/xsd/cxx/parser/xerces/elements.txx b/xsd/libxsd/xsd/cxx/parser/xerces/elements.txx index 2c1e2a1..f41b074 100644 --- a/xsd/libxsd/xsd/cxx/parser/xerces/elements.txx +++ b/xsd/libxsd/xsd/cxx/parser/xerces/elements.txx @@ -1,6 +1,5 @@ // file : xsd/cxx/parser/xerces/elements.txx -// author : Boris Kolpackov -// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file #include @@ -12,6 +11,7 @@ #include #include #include +#include #include #include @@ -94,7 +94,7 @@ namespace xsd error_handler eh; xml::sax::bits::error_handler_proxy eh_proxy (eh); - std::auto_ptr sax (create_sax_ (f, p)); + XSD_AUTO_PTR sax (create_sax_ (f, p)); parse (uri, eh_proxy, *sax, f, p); @@ -123,7 +123,7 @@ namespace xsd xml::auto_initializer init ((f & flags::dont_initialize) == 0); xml::sax::bits::error_handler_proxy eh_proxy (eh); - std::auto_ptr sax (create_sax_ (f, p)); + XSD_AUTO_PTR sax (create_sax_ (f, p)); parse (uri, eh_proxy, *sax, f, p); @@ -152,7 +152,7 @@ namespace xsd const properties& p) { xml::sax::bits::error_handler_proxy eh_proxy (eh); - std::auto_ptr sax (create_sax_ (f, p)); + XSD_AUTO_PTR sax (create_sax_ (f, p)); parse (uri, eh_proxy, *sax, f, p); @@ -389,7 +389,7 @@ namespace xsd { error_handler eh; xml::sax::bits::error_handler_proxy eh_proxy (eh); - std::auto_ptr sax (create_sax_ (f, p)); + XSD_AUTO_PTR sax (create_sax_ (f, p)); parse (is, eh_proxy, *sax, f, p); @@ -404,7 +404,7 @@ namespace xsd const properties& p) { xml::sax::bits::error_handler_proxy eh_proxy (eh); - std::auto_ptr sax (create_sax_ (f, p)); + XSD_AUTO_PTR sax (create_sax_ (f, p)); parse (is, eh_proxy, *sax, f, p); @@ -420,7 +420,7 @@ namespace xsd const properties& p) { xml::sax::bits::error_handler_proxy eh_proxy (eh); - std::auto_ptr sax (create_sax_ (f, p)); + XSD_AUTO_PTR sax (create_sax_ (f, p)); parse (is, eh_proxy, *sax, f, p); @@ -527,14 +527,8 @@ namespace xsd xml::string (e.message ()).c_str (), id.c_str (), id.c_str (), -#if _XERCES_VERSION >= 30000 static_cast (e.line ()), - static_cast (e.column ()) -#else - static_cast (e.line ()), - static_cast (e.column ()) -#endif - ); + static_cast (e.column ())); eh.fatalError (se); } @@ -565,14 +559,8 @@ namespace xsd xml::string (e.message ()).c_str (), id.c_str (), id.c_str (), -#if _XERCES_VERSION >= 30000 static_cast (e.line ()), - static_cast (e.column ()) -#else - static_cast (e.line ()), - static_cast (e.column ()) -#endif - ); + static_cast (e.column ())); eh.fatalError (se); } @@ -580,16 +568,12 @@ namespace xsd template - std::auto_ptr document:: + XSD_AUTO_PTR document:: create_sax_ (flags f, const properties& p) { - // HP aCC cannot handle using namespace xercesc; - // - using xercesc::SAX2XMLReader; - using xercesc::XMLReaderFactory; - using xercesc::XMLUni; + using namespace xercesc; - std::auto_ptr sax ( + XSD_AUTO_PTR sax ( XMLReaderFactory::createXMLReader ()); sax->setFeature (XMLUni::fgSAX2CoreNameSpaces, true); @@ -670,6 +654,9 @@ namespace xsd const XMLCh* const /*qname*/, const xercesc::Attributes& attributes) { + using xercesc::XMLUni; + using xercesc::XMLString; + typedef std::basic_string string; { @@ -792,13 +779,19 @@ namespace xsd } } -#if _XERCES_VERSION >= 30000 for (XMLSize_t i (0), end (attributes.getLength()); i < end; ++i) -#else - for (unsigned int i (0), end (attributes.getLength()); i < end; ++i) -#endif { - string ns (xml::transcode (attributes.getURI (i))); + const XMLCh* xns (attributes.getURI (i)); + + // When SAX2 reports the xmlns attribute, it does not include + // the proper attribute namespace. So we have to detect and + // rectify this case. + // + if (XMLString::equals (attributes.getQName (i), + XMLUni::fgXMLNSString)) + xns = XMLUni::fgXMLNSURIName; + + string ns (xml::transcode (xns)); string name (xml::transcode (attributes.getLocalName (i))); string value (xml::transcode (attributes.getValue (i))); @@ -868,11 +861,7 @@ namespace xsd template void event_router:: -#if _XERCES_VERSION >= 30000 characters (const XMLCh* const s, const XMLSize_t n) -#else - characters (const XMLCh* const s, const unsigned int n) -#endif { typedef std::basic_string string; @@ -949,16 +938,8 @@ namespace xsd if (id != 0) e.id (xml::transcode (id)); -#if _XERCES_VERSION >= 30000 e.line (static_cast (loc_->getLineNumber ())); e.column (static_cast (loc_->getColumnNumber ())); -#else - XMLSSize_t l (loc_->getLineNumber ()); - XMLSSize_t c (loc_->getColumnNumber ()); - - e.line (l == -1 ? 0 : static_cast (l)); - e.column (c == -1 ? 0: static_cast (c)); -#endif } } } diff --git a/xsd/libxsd/xsd/cxx/parser/xml-schema.hxx b/xsd/libxsd/xsd/cxx/parser/xml-schema.hxx index 5d1f1c6..cc3dd5f 100644 --- a/xsd/libxsd/xsd/cxx/parser/xml-schema.hxx +++ b/xsd/libxsd/xsd/cxx/parser/xml-schema.hxx @@ -1,6 +1,5 @@ // file : xsd/cxx/parser/xml-schema.hxx -// author : Boris Kolpackov -// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file #ifndef XSD_CXX_PARSER_XML_SCHEMA_HXX diff --git a/xsd/libxsd/xsd/cxx/parser/xml-schema.ixx b/xsd/libxsd/xsd/cxx/parser/xml-schema.ixx index 891bc6f..06ead34 100644 --- a/xsd/libxsd/xsd/cxx/parser/xml-schema.ixx +++ b/xsd/libxsd/xsd/cxx/parser/xml-schema.ixx @@ -1,6 +1,5 @@ // file : xsd/cxx/parser/xml-schema.ixx -// author : Boris Kolpackov -// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file #include // operator new/delete diff --git a/xsd/libxsd/xsd/cxx/parser/xml-schema.txx b/xsd/libxsd/xsd/cxx/parser/xml-schema.txx index 5f41a18..90e558d 100644 --- a/xsd/libxsd/xsd/cxx/parser/xml-schema.txx +++ b/xsd/libxsd/xsd/cxx/parser/xml-schema.txx @@ -1,6 +1,5 @@ // file : xsd/cxx/parser/xml-schema.txx -// author : Boris Kolpackov -// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file namespace xsd diff --git a/xsd/libxsd/xsd/cxx/post.hxx b/xsd/libxsd/xsd/cxx/post.hxx index b119bb4..7a9c63e 100644 --- a/xsd/libxsd/xsd/cxx/post.hxx +++ b/xsd/libxsd/xsd/cxx/post.hxx @@ -1,13 +1,9 @@ // file : xsd/cxx/post.hxx -// author : Boris Kolpackov -// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file - #ifdef _MSC_VER # if (_MSC_VER >= 1400) # include -# elif (_MSC_VER >= 1300) -# include # endif #endif diff --git a/xsd/libxsd/xsd/cxx/pre.hxx b/xsd/libxsd/xsd/cxx/pre.hxx index 845a854..f0633c9 100644 --- a/xsd/libxsd/xsd/cxx/pre.hxx +++ b/xsd/libxsd/xsd/cxx/pre.hxx @@ -1,15 +1,11 @@ // file : xsd/cxx/pre.hxx -// author : Boris Kolpackov -// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file - #ifdef _MSC_VER # if (_MSC_VER >= 1400) # include -# elif (_MSC_VER >= 1300) -# include # else -# error Microsoft Visual C++ 6 is not supported. +# error Microsoft Visual C++ 7.1 and earlier are not supported # endif #endif diff --git a/xsd/libxsd/xsd/cxx/ro-string.hxx b/xsd/libxsd/xsd/cxx/ro-string.hxx index fd80cac..2140e44 100644 --- a/xsd/libxsd/xsd/cxx/ro-string.hxx +++ b/xsd/libxsd/xsd/cxx/ro-string.hxx @@ -1,6 +1,5 @@ // file : xsd/cxx/ro-string.hxx -// author : Boris Kolpackov -// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file #ifndef XSD_CXX_RO_STRING_HXX diff --git a/xsd/libxsd/xsd/cxx/ro-string.txx b/xsd/libxsd/xsd/cxx/ro-string.txx index 58efef0..56d5bbd 100644 --- a/xsd/libxsd/xsd/cxx/ro-string.txx +++ b/xsd/libxsd/xsd/cxx/ro-string.txx @@ -1,6 +1,5 @@ // file : xsd/cxx/ro-string.txx -// author : Boris Kolpackov -// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file namespace xsd diff --git a/xsd/libxsd/xsd/cxx/tree/ace-cdr-stream-common.hxx b/xsd/libxsd/xsd/cxx/tree/ace-cdr-stream-common.hxx index 7c3fc96..7a9fbff 100644 --- a/xsd/libxsd/xsd/cxx/tree/ace-cdr-stream-common.hxx +++ b/xsd/libxsd/xsd/cxx/tree/ace-cdr-stream-common.hxx @@ -1,6 +1,5 @@ // file : xsd/cxx/tree/ace-cdr-stream-common.hxx -// author : Boris Kolpackov -// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file #ifndef XSD_CXX_TREE_ACE_CDR_STREAM_COMMON_HXX diff --git a/xsd/libxsd/xsd/cxx/tree/ace-cdr-stream-extraction.hxx b/xsd/libxsd/xsd/cxx/tree/ace-cdr-stream-extraction.hxx index 53e1f6c..b843ffa 100644 --- a/xsd/libxsd/xsd/cxx/tree/ace-cdr-stream-extraction.hxx +++ b/xsd/libxsd/xsd/cxx/tree/ace-cdr-stream-extraction.hxx @@ -1,6 +1,5 @@ // file : xsd/cxx/tree/ace-cdr-stream-extraction.hxx -// author : Boris Kolpackov -// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file #ifndef XSD_CXX_TREE_ACE_CDR_STREAM_EXTRACTION_HXX @@ -12,7 +11,13 @@ #include // ACE::strdelete #include -#include +#include // XSD_CXX11 + +#ifdef XSD_CXX11 +# include // std::unique_ptr +#else +# include +#endif #include #include @@ -258,11 +263,11 @@ namespace xsd namespace bits { - template - struct ace_str_deallocator + template + struct ace_str_deleter { void - deallocate (C* s) + operator() (C* s) const { ACE::strdelete (s); } @@ -272,18 +277,22 @@ namespace xsd inline istream& operator>> (istream& s, std::basic_string& x) { - typedef bits::ace_str_deallocator deallocator; + typedef bits::ace_str_deleter deleter; - deallocator d; + deleter d; char* r; if (!s.impl ().read_string (r)) throw ace_cdr_stream_extraction (); - auto_array ar (r, d); +#ifdef XSD_CXX11 + std::unique_ptr ar ( +#else + auto_array ar ( +#endif + r, d); x = r; - return s; } @@ -291,18 +300,22 @@ namespace xsd inline istream& operator>> (istream& s, std::basic_string& x) { - typedef bits::ace_str_deallocator deallocator; + typedef bits::ace_str_deleter deleter; - deallocator d; + deleter d; wchar_t* r; if (!s.impl ().read_wstring (r)) throw ace_cdr_stream_extraction (); - auto_array ar (r, d); +#ifdef XSD_CXX11 + std::unique_ptr ar ( +#else + auto_array ar ( +#endif + r, d); x = r; - return s; } #endif diff --git a/xsd/libxsd/xsd/cxx/tree/ace-cdr-stream-insertion.hxx b/xsd/libxsd/xsd/cxx/tree/ace-cdr-stream-insertion.hxx index 0f723d0..3fa92ad 100644 --- a/xsd/libxsd/xsd/cxx/tree/ace-cdr-stream-insertion.hxx +++ b/xsd/libxsd/xsd/cxx/tree/ace-cdr-stream-insertion.hxx @@ -1,6 +1,5 @@ // file : xsd/cxx/tree/ace-cdr-stream-insertion.hxx -// author : Boris Kolpackov -// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file #ifndef XSD_CXX_TREE_ACE_CDR_STREAM_INSERTION_HXX diff --git a/xsd/libxsd/xsd/cxx/tree/bits/literals.hxx b/xsd/libxsd/xsd/cxx/tree/bits/literals.hxx index 49ac0ca..a690e76 100644 --- a/xsd/libxsd/xsd/cxx/tree/bits/literals.hxx +++ b/xsd/libxsd/xsd/cxx/tree/bits/literals.hxx @@ -1,6 +1,5 @@ // file : xsd/cxx/tree/bits/literals.hxx -// author : Boris Kolpackov -// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file #ifndef XSD_CXX_TREE_BITS_LITERALS_HXX diff --git a/xsd/libxsd/xsd/cxx/tree/bits/literals.ixx b/xsd/libxsd/xsd/cxx/tree/bits/literals.ixx index 260a9e7..9a27d99 100644 --- a/xsd/libxsd/xsd/cxx/tree/bits/literals.ixx +++ b/xsd/libxsd/xsd/cxx/tree/bits/literals.ixx @@ -1,6 +1,5 @@ // file : xsd/cxx/tree/bits/literals.ixx -// author : Boris Kolpackov -// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file #ifndef XSD_CXX_TREE_BITS_LITERALS_IXX diff --git a/xsd/libxsd/xsd/cxx/tree/buffer.hxx b/xsd/libxsd/xsd/cxx/tree/buffer.hxx index 24da287..9ce568c 100644 --- a/xsd/libxsd/xsd/cxx/tree/buffer.hxx +++ b/xsd/libxsd/xsd/cxx/tree/buffer.hxx @@ -1,6 +1,5 @@ // file : xsd/cxx/tree/buffer.hxx -// author : Boris Kolpackov -// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file /** diff --git a/xsd/libxsd/xsd/cxx/tree/buffer.txx b/xsd/libxsd/xsd/cxx/tree/buffer.txx index f88f140..c358e98 100644 --- a/xsd/libxsd/xsd/cxx/tree/buffer.txx +++ b/xsd/libxsd/xsd/cxx/tree/buffer.txx @@ -1,6 +1,5 @@ // file : xsd/cxx/tree/buffer.txx -// author : Boris Kolpackov -// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file namespace xsd diff --git a/xsd/libxsd/xsd/cxx/tree/comparison-map.hxx b/xsd/libxsd/xsd/cxx/tree/comparison-map.hxx index b7794f4..a316b21 100644 --- a/xsd/libxsd/xsd/cxx/tree/comparison-map.hxx +++ b/xsd/libxsd/xsd/cxx/tree/comparison-map.hxx @@ -1,6 +1,5 @@ // file : xsd/cxx/tree/comparison-map.hxx -// author : Boris Kolpackov -// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file #ifndef XSD_CXX_TREE_COMPARISON_MAP_HXX @@ -27,7 +26,7 @@ namespace xsd comparison_map (); void - register_type (const type_id&, comparator, bool override = true); + register_type (const type_id&, comparator, bool replace = true); void unregister_type (const type_id&); diff --git a/xsd/libxsd/xsd/cxx/tree/comparison-map.txx b/xsd/libxsd/xsd/cxx/tree/comparison-map.txx index e638ed4..af23d64 100644 --- a/xsd/libxsd/xsd/cxx/tree/comparison-map.txx +++ b/xsd/libxsd/xsd/cxx/tree/comparison-map.txx @@ -1,6 +1,5 @@ // file : xsd/cxx/tree/comparison-map.txx -// author : Boris Kolpackov -// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file #include @@ -20,18 +19,17 @@ namespace xsd // anyType and anySimpleType. // - //register_type ( - // typeid (type), - // &comparator_impl, - // false); - - typedef simple_type simple_type; + register_type ( + typeid (type), + &comparator_impl, + false); - //register_type ( - // typeid (simple_type), - // &comparator_impl, - // false); + typedef simple_type simple_type; + register_type ( + typeid (simple_type), + &comparator_impl, + false); // Strings // @@ -212,9 +210,9 @@ namespace xsd template void comparison_map:: - register_type (const type_id& tid, comparator c, bool override) + register_type (const type_id& tid, comparator c, bool replace) { - if (override || type_map_.find (&tid) == type_map_.end ()) + if (replace || type_map_.find (&tid) == type_map_.end ()) type_map_[&tid] = c; } diff --git a/xsd/libxsd/xsd/cxx/tree/containers-wildcard.hxx b/xsd/libxsd/xsd/cxx/tree/containers-wildcard.hxx index 5313507..549df73 100644 --- a/xsd/libxsd/xsd/cxx/tree/containers-wildcard.hxx +++ b/xsd/libxsd/xsd/cxx/tree/containers-wildcard.hxx @@ -1,6 +1,5 @@ // file : xsd/cxx/tree/containers-wildcard.hxx -// author : Boris Kolpackov -// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file #ifndef XSD_CXX_TREE_CONTAINERS_WILDCARD_HXX @@ -16,7 +15,7 @@ #include -#include // iterator_adapter +#include namespace xsd { @@ -936,7 +935,7 @@ namespace xsd return r < 0 ? true - : (r > 0 ? false : XMLString::compareString (an, bn)); + : (r > 0 ? false : XMLString::compareString (an, bn) < 0); } }; diff --git a/xsd/libxsd/xsd/cxx/tree/containers.hxx b/xsd/libxsd/xsd/cxx/tree/containers.hxx index ba76eae..cafd79d 100644 --- a/xsd/libxsd/xsd/cxx/tree/containers.hxx +++ b/xsd/libxsd/xsd/cxx/tree/containers.hxx @@ -1,20 +1,19 @@ // file : xsd/cxx/tree/containers.hxx -// author : Boris Kolpackov -// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file #ifndef XSD_CXX_TREE_CONTAINERS_HXX #define XSD_CXX_TREE_CONTAINERS_HXX -#include // std::ptrdiff_t -#include #include -#include // std::auto_ptr -#include // std::iterator_traits +#include // std::auto_ptr/unique_ptr #include // std::equal, std::lexicographical_compare #include +#include // XSD_AUTO_PTR + #include +#include namespace xsd { @@ -132,11 +131,11 @@ namespace xsd public: ~one (); - one (flags, container*); + one (container*); - one (const T&, flags, container*); + one (const T&, container*); - one (std::auto_ptr, flags, container*); + one (XSD_AUTO_PTR, container*); one (const one&, flags, container*); @@ -157,10 +156,13 @@ namespace xsd } void - set (const T&); + set (const T& x) + { + set (x, 0); + } void - set (std::auto_ptr); + set (XSD_AUTO_PTR); bool present () const @@ -168,18 +170,21 @@ namespace xsd return x_ != 0; } - std::auto_ptr + XSD_AUTO_PTR detach () { T* x (x_); x->_container (0); x_ = 0; - return std::auto_ptr (x); + return XSD_AUTO_PTR (x); } + protected: + void + set (const T&, flags); + protected: T* x_; - flags flags_; container* container_; }; @@ -188,12 +193,12 @@ namespace xsd class one { public: - one (flags, container*) + one (container*) : present_ (false) { } - one (const T& x, flags, container*) + one (const T& x, container*) : x_ (x), present_ (true) { } @@ -246,9 +251,6 @@ namespace xsd bool present_; }; - - // Note that I cannot get rid of fund because of HP aCC3. - // template ::r> class optional; @@ -259,13 +261,13 @@ namespace xsd ~optional (); explicit - optional (flags = 0, container* = 0); + optional (container* = 0); explicit - optional (const T&, flags = 0, container* = 0); + optional (const T&, container* = 0); explicit - optional (std::auto_ptr, flags = 0, container* = 0); + optional (XSD_AUTO_PTR, container* = 0); optional (const optional&, flags = 0, container* = 0); @@ -332,30 +334,35 @@ namespace xsd } void - set (const T&); + set (const T& x) + { + set (x, 0); + } void - set (std::auto_ptr); + set (XSD_AUTO_PTR); void reset (); - std::auto_ptr + XSD_AUTO_PTR detach () { T* x (x_); x->_container (0); x_ = 0; - return std::auto_ptr (x); + return XSD_AUTO_PTR (x); } - private: + protected: + void + set (const T&, flags); + void true_ (); - private: + protected: T* x_; - flags flags_; container* container_; }; @@ -367,13 +374,13 @@ namespace xsd { public: explicit - optional (flags = 0, container* = 0) + optional (container* = 0) : present_ (false) { } explicit - optional (const T&, flags = 0, container* = 0); + optional (const T&, container* = 0); optional (const optional&, flags = 0, container* = 0); @@ -506,7 +513,7 @@ namespace xsd return !(a < b); } - // Provide an ostream insertion opretaor to prevent confusion from + // Provide an ostream insertion operator to prevent confusion from // the implicit bool conversion. // template @@ -516,264 +523,9 @@ namespace xsd // Sequence. // - - // Note that I cannot get rid of 'fund' because HP aCC3 likes it - // this way. - // template ::r> class sequence; - - // Sun CC's does not have iterator_traits. To overcome - // this, we will wrap std::iterator_traits into our own and also - // specialize it for pointer types. Since Sun CC uses pointer - // for vector::iterator, it will use the specialization and won't - // notice the std::iterator_traits. - // -#ifndef _RWSTD_NO_CLASS_PARTIAL_SPEC - template - struct iterator_traits - { - typedef - typename std::iterator_traits::iterator_category - iterator_category; - - typedef - typename std::iterator_traits::value_type - value_type; - - typedef - typename std::iterator_traits::difference_type - difference_type; - }; -#else - // The Pointer specialization does not work for reverse and - // set iterators. But these iterators are user-dfined types - // and have suitable typedefs that we can use. - // - template - struct iterator_traits - { - typedef typename I::iterator_category iterator_category; - typedef typename I::value_type value_type; - typedef typename I::difference_type difference_type; - }; - - template - struct iterator_traits - { - typedef std::random_access_iterator_tag iterator_category; - typedef T value_type; - typedef std::ptrdiff_t difference_type; - }; -#endif - - // Iterator adapter for complex types. It expects I to point to - // a smart pointer-like object that has operator*() that returns - // a refernce to a type static_cast'able to T and get() that - // returns a pointer to a type static_cast'able to T. - // - - template - struct iterator_adapter - { - typedef T value_type; - typedef value_type& reference; - typedef value_type* pointer; - - typedef - typename iterator_traits::iterator_category - iterator_category; - - typedef - typename iterator_traits::difference_type - difference_type; - - - public: - iterator_adapter () - : i_ () // i_ can be of a pointer type. - { - } - - // Allow iterator to const_iterator conversion. - // - template - iterator_adapter (const iterator_adapter& j) - : i_ (j.base ()) - { - } - - explicit - iterator_adapter (const I& i) - : i_ (i) - { - } - - public: - // Forward iterator requirements. - // - reference - operator* () const - { - return static_cast (**i_); - } - - pointer - operator-> () const - { - return static_cast (i_->get ()); - } - - iterator_adapter& - operator++ () - { - ++i_; - return *this; - } - - iterator_adapter - operator++ (int) - { - iterator_adapter r (*this); - ++i_; - return r; - } - - // Bidirectional iterator requirements. - // - iterator_adapter& - operator-- () - { - --i_; - return *this; - } - - iterator_adapter - operator-- (int) - { - iterator_adapter r (*this); - --i_; - return r; - } - - // Random access iterator requirements. - // - reference - operator[] (difference_type n) const - { - return static_cast (*(i_[n])); - } - - iterator_adapter& - operator+= (difference_type n) - { - i_ += n; - return *this; - } - - iterator_adapter - operator+ (difference_type n) const - { - return iterator_adapter (i_ + n); - } - - iterator_adapter& - operator-= (difference_type n) - { - i_ -= n; - return *this; - } - - iterator_adapter - operator- (difference_type n) const - { - return iterator_adapter (i_ - n); - } - - public: - const I& - base () const - { - return i_; - } - - private: - I i_; - }; - - // Note: We use different types for left- and right-hand-side - // arguments to allow comparison between iterator and const_iterator. - // - - // Forward iterator requirements. - // - template - inline bool - operator== (const iterator_adapter& i, - const iterator_adapter& j) - { - return i.base () == j.base (); - } - - template - inline bool - operator!= (const iterator_adapter& i, - const iterator_adapter& j) - { - return i.base () != j.base (); - } - - // Random access iterator requirements - // - template - inline bool - operator< (const iterator_adapter& i, - const iterator_adapter& j) - { - return i.base () < j.base (); - } - - template - inline bool - operator> (const iterator_adapter& i, - const iterator_adapter& j) - { - return i.base () > j.base (); - } - - template - inline bool - operator<= (const iterator_adapter& i, - const iterator_adapter& j) - { - return i.base () <= j.base (); - } - - template - inline bool - operator>= (const iterator_adapter& i, - const iterator_adapter& j) - { - return i.base () >= j.base (); - } - - template - inline typename iterator_adapter::difference_type - operator- (const iterator_adapter& i, - const iterator_adapter& j) - { - return i.base () - j.base (); - } - - template - inline iterator_adapter - operator+ (typename iterator_adapter::difference_type n, - const iterator_adapter& i) - { - return iterator_adapter (i.base () + n); - } - // // class sequence_common @@ -859,33 +611,33 @@ namespace xsd typedef base_sequence::allocator_type allocator_type; protected: - sequence_common (flags f, container* c) - : flags_ (f), container_ (c) + sequence_common (container* c) + : container_ (c) { } sequence_common (size_type n, const type& x, container* c) - : flags_ (0), container_ (c) + : container_ (c) { assign (n, x); } template sequence_common (const I& begin, const I& end, container* c) - : flags_ (0), container_ (c) + : container_ (c) { assign (begin, end); } sequence_common (const sequence_common& v, flags f, container* c) - : flags_ (f), container_ (c) + : container_ (c) { v_.reserve (v.v_.size ()); for (base_const_iterator i (v.v_.begin ()), e (v.v_.end ()); i != e; ++i) { - ptr p ((**i)._clone (flags_, container_)); + ptr p ((**i)._clone (f, container_)); v_.push_back (p); } } @@ -906,7 +658,7 @@ namespace xsd { // We have no ptr_ref. // - ptr p ((**si)._clone (flags_, container_)); + ptr p ((**si)._clone (0, container_)); *di = p; } @@ -958,7 +710,7 @@ namespace xsd for (base_iterator i (v_.begin ()), e (v_.end ()); i != e; ++i) { - ptr p (x._clone (flags_, container_)); + ptr p (x._clone (0, container_)); *i = p; } } @@ -974,7 +726,7 @@ namespace xsd for (I i (begin); i != end; ++i) { - ptr p (i->_clone (flags_, container_)); + ptr p (i->_clone (0, container_)); v_.push_back (p); } } @@ -990,7 +742,7 @@ namespace xsd for (base_iterator i (v_.begin () + old), e (v_.end ()); i != e; ++i) { - ptr p (x._clone (flags_, container_)); + ptr p (x._clone (0, container_)); *i = p; } } @@ -1004,7 +756,7 @@ namespace xsd for (base_iterator i (v_.end () - d); n != 0; --n) { - ptr r (x._clone (flags_, container_)); + ptr r (x._clone (0, container_)); *(--i) = r; } } @@ -1021,7 +773,7 @@ namespace xsd for (I i (end);;) { --i; - ptr r (i->_clone (flags_, container_)); + ptr r (i->_clone (0, container_)); p = v_.insert (p, r); if (i == begin) @@ -1031,7 +783,6 @@ namespace xsd } protected: - flags flags_; container* container_; base_sequence v_; }; @@ -1075,8 +826,8 @@ namespace xsd public: explicit - sequence (flags f = 0, container* c = 0) - : sequence_common (f, c) + sequence (container* c = 0) + : sequence_common (c) { } @@ -1260,11 +1011,11 @@ namespace xsd void push_back (const T& x) { - v_.push_back (ptr (x._clone (flags_, container_))); + v_.push_back (ptr (x._clone (0, container_))); } void - push_back (std::auto_ptr x) + push_back (XSD_AUTO_PTR x) { if (x->_container () != container_) x->_container (container_); @@ -1278,7 +1029,7 @@ namespace xsd v_.pop_back (); } - std::auto_ptr + XSD_AUTO_PTR detach_back (bool pop = true) { ptr& p (v_.back ()); @@ -1288,7 +1039,7 @@ namespace xsd if (pop) v_.pop_back (); - return std::auto_ptr (x); + return XSD_AUTO_PTR (x); } iterator @@ -1296,11 +1047,11 @@ namespace xsd { return iterator ( v_.insert ( - position.base (), ptr (x._clone (flags_, container_)))); + position.base (), ptr (x._clone (0, container_)))); } iterator - insert (iterator position, std::auto_ptr x) + insert (iterator position, XSD_AUTO_PTR x) { if (x->_container () != container_) x->_container (container_); @@ -1334,12 +1085,11 @@ namespace xsd } iterator - detach (iterator position, std::auto_ptr& r, bool erase = true) + detach (iterator position, XSD_AUTO_PTR& r, bool erase = true) { ptr& p (*position.base ()); p->_container (0); - std::auto_ptr tmp (static_cast (p.release ())); - r = tmp; + r.reset (static_cast (p.release ())); if (erase) return iterator (v_.erase (position.base ())); @@ -1368,7 +1118,7 @@ namespace xsd public: explicit - sequence (flags = 0, container* = 0) + sequence (container* = 0) { } diff --git a/xsd/libxsd/xsd/cxx/tree/containers.txx b/xsd/libxsd/xsd/cxx/tree/containers.txx index fdc0bfd..2a3573f 100644 --- a/xsd/libxsd/xsd/cxx/tree/containers.txx +++ b/xsd/libxsd/xsd/cxx/tree/containers.txx @@ -1,9 +1,13 @@ // file : xsd/cxx/tree/containers.txx -// author : Boris Kolpackov -// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file #include + +#ifdef XSD_CXX11 +# include // std::move +#endif + #include namespace xsd @@ -23,34 +27,38 @@ namespace xsd template one:: - one (flags f, container* c) - : x_ (0), flags_ (f), container_ (c) + one (container* c) + : x_ (0), container_ (c) { } template one:: - one (const T& x, flags f, container* c) - : x_ (0), flags_ (f), container_ (c) + one (const T& x, container* c) + : x_ (0), container_ (c) { set (x); } template one:: - one (std::auto_ptr x, flags f, container* c) - : x_ (0), flags_ (f), container_ (c) + one (XSD_AUTO_PTR x, container* c) + : x_ (0), container_ (c) { +#ifdef XSD_CXX11 + set (std::move (x)); +#else set (x); +#endif } template one:: one (const one& x, flags f, container* c) - : x_ (0), flags_ (f), container_ (c) + : x_ (0), container_ (c) { if (x.present ()) - set (x.get ()); + set (x.get (), f); } template @@ -73,12 +81,12 @@ namespace xsd template void one:: - set (const T& x) + set (const T& x, flags f) { // We always do a fresh copy because T may not be x's // dynamic type. // - T* r (x._clone (flags_, container_)); + T* r (x._clone (f, container_)); delete x_; x_ = r; @@ -86,7 +94,7 @@ namespace xsd template void one:: - set (std::auto_ptr x) + set (XSD_AUTO_PTR x) { T* r (0); @@ -113,34 +121,38 @@ namespace xsd template optional:: - optional (flags f, container* c) - : x_ (0), flags_ (f), container_ (c) + optional (container* c) + : x_ (0), container_ (c) { } template optional:: - optional (const T& x, flags f, container* c) - : x_ (0), flags_ (f), container_ (c) + optional (const T& x, container* c) + : x_ (0), container_ (c) { set (x); } template optional:: - optional (std::auto_ptr x, flags f, container* c) - : x_ (0), flags_ (f), container_ (c) + optional (XSD_AUTO_PTR x, container* c) + : x_ (0), container_ (c) { +#ifdef XSD_CXX11 + set (std::move (x)); +#else set (x); +#endif } template optional:: optional (const optional& x, flags f, container* c) - : x_ (0), flags_ (f), container_ (c) + : x_ (0), container_ (c) { if (x) - set (*x); + set (*x, f); } template @@ -172,12 +184,12 @@ namespace xsd template void optional:: - set (const T& x) + set (const T& x, flags f) { // We always do a fresh copy because T may not be x's // dynamic type. // - T* r (x._clone (flags_, container_)); + T* r (x._clone (f, container_)); delete x_; x_ = r; @@ -185,7 +197,7 @@ namespace xsd template void optional:: - set (std::auto_ptr x) + set (XSD_AUTO_PTR x) { T* r (0); @@ -220,7 +232,7 @@ namespace xsd // template optional:: - optional (const T& y, flags, container*) + optional (const T& y, container*) : present_ (false) { set (y); diff --git a/xsd/libxsd/xsd/cxx/tree/date-time-extraction.txx b/xsd/libxsd/xsd/cxx/tree/date-time-extraction.txx index 317b80f..4ada1a0 100644 --- a/xsd/libxsd/xsd/cxx/tree/date-time-extraction.txx +++ b/xsd/libxsd/xsd/cxx/tree/date-time-extraction.txx @@ -1,6 +1,5 @@ // file : xsd/cxx/tree/date-time-extraction.txx -// author : Boris Kolpackov -// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file namespace xsd diff --git a/xsd/libxsd/xsd/cxx/tree/date-time-insertion.txx b/xsd/libxsd/xsd/cxx/tree/date-time-insertion.txx index db24ae1..b41ffce 100644 --- a/xsd/libxsd/xsd/cxx/tree/date-time-insertion.txx +++ b/xsd/libxsd/xsd/cxx/tree/date-time-insertion.txx @@ -1,6 +1,5 @@ // file : xsd/cxx/tree/date-time-insertion.txx -// author : Boris Kolpackov -// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file namespace xsd diff --git a/xsd/libxsd/xsd/cxx/tree/date-time-ostream.txx b/xsd/libxsd/xsd/cxx/tree/date-time-ostream.txx index 90073f4..830cd49 100644 --- a/xsd/libxsd/xsd/cxx/tree/date-time-ostream.txx +++ b/xsd/libxsd/xsd/cxx/tree/date-time-ostream.txx @@ -1,6 +1,5 @@ // file : xsd/cxx/tree/date-time-ostream.txx -// author : Boris Kolpackov -// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file #include diff --git a/xsd/libxsd/xsd/cxx/tree/date-time.hxx b/xsd/libxsd/xsd/cxx/tree/date-time.hxx index abde516..9526f92 100644 --- a/xsd/libxsd/xsd/cxx/tree/date-time.hxx +++ b/xsd/libxsd/xsd/cxx/tree/date-time.hxx @@ -1,6 +1,5 @@ // file : xsd/cxx/tree/date-time.hxx -// author : Boris Kolpackov -// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file /** diff --git a/xsd/libxsd/xsd/cxx/tree/date-time.ixx b/xsd/libxsd/xsd/cxx/tree/date-time.ixx index 5bc7200..00d7f8c 100644 --- a/xsd/libxsd/xsd/cxx/tree/date-time.ixx +++ b/xsd/libxsd/xsd/cxx/tree/date-time.ixx @@ -1,6 +1,5 @@ // file : xsd/cxx/tree/date-time.ixx -// author : Boris Kolpackov -// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file namespace xsd diff --git a/xsd/libxsd/xsd/cxx/tree/date-time.txx b/xsd/libxsd/xsd/cxx/tree/date-time.txx index 34c6c84..f5b9b8e 100644 --- a/xsd/libxsd/xsd/cxx/tree/date-time.txx +++ b/xsd/libxsd/xsd/cxx/tree/date-time.txx @@ -1,6 +1,5 @@ // file : xsd/cxx/tree/date-time.txx -// author : Boris Kolpackov -// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file namespace xsd diff --git a/xsd/libxsd/xsd/cxx/tree/element-map.hxx b/xsd/libxsd/xsd/cxx/tree/element-map.hxx index 2f12b0b..0f4883d 100644 --- a/xsd/libxsd/xsd/cxx/tree/element-map.hxx +++ b/xsd/libxsd/xsd/cxx/tree/element-map.hxx @@ -1,16 +1,17 @@ // file : xsd/cxx/tree/element-map.hxx -// author : Boris Kolpackov -// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file #ifndef XSD_CXX_TREE_ELEMENT_MAP_HXX #define XSD_CXX_TREE_ELEMENT_MAP_HXX #include -#include // std::auto_ptr +#include // std::auto_ptr/unique_ptr #include // std::size_t #include +#include // XSD_AUTO_PTR + #include #include @@ -44,7 +45,7 @@ namespace xsd * @param f Flags to create the new element object with. * @return An automatic pointer to the new element object. */ - static std::auto_ptr + static XSD_AUTO_PTR parse (const xercesc::DOMElement& e, flags f = 0); /** @@ -61,7 +62,7 @@ namespace xsd typedef xml::qualified_name qualified_name; - typedef std::auto_ptr + typedef XSD_AUTO_PTR (*parser) (const xercesc::DOMElement&, flags f); typedef void @@ -113,7 +114,7 @@ namespace xsd // // template - std::auto_ptr > + XSD_AUTO_PTR > parser_impl (const xercesc::DOMElement&, flags); template diff --git a/xsd/libxsd/xsd/cxx/tree/element-map.txx b/xsd/libxsd/xsd/cxx/tree/element-map.txx index 0ff5d2a..32fe873 100644 --- a/xsd/libxsd/xsd/cxx/tree/element-map.txx +++ b/xsd/libxsd/xsd/cxx/tree/element-map.txx @@ -1,6 +1,5 @@ // file : xsd/cxx/tree/element-map.txx -// author : Boris Kolpackov -// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file namespace xsd diff --git a/xsd/libxsd/xsd/cxx/tree/elements.hxx b/xsd/libxsd/xsd/cxx/tree/elements.hxx index 403fdb3..a3bbea4 100644 --- a/xsd/libxsd/xsd/cxx/tree/elements.hxx +++ b/xsd/libxsd/xsd/cxx/tree/elements.hxx @@ -1,6 +1,5 @@ // file : xsd/cxx/tree/elements.hxx -// author : Boris Kolpackov -// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file /** @@ -17,25 +16,40 @@ #ifndef XSD_CXX_TREE_ELEMENTS_HXX #define XSD_CXX_TREE_ELEMENTS_HXX +#include // XSD_AUTO_PTR, XSD_CXX11 + #include #include -#include // std::auto_ptr +#include // std::auto_ptr/unique_ptr +#include // std::size_t #include #include #include +#ifdef XSD_CXX11 +# include // std::move +#endif + #include #include #include #include #include +#include + #include // xml::properties -#include // dom::auto_ptr +#include // dom::auto_ptr/unique_ptr +#include // dom::create_document() #include #include #include +#include + +#if _XERCES_VERSION < 30000 +# error Xerces-C++ 2-series is not supported +#endif namespace xsd { @@ -77,7 +91,7 @@ namespace xsd * * This flag only makes sense together with the @c keep_dom * flag in the call to the %parsing function with the - * @c dom::auto_ptr argument. + * @c dom::auto_ptr/unique_ptr argument. * */ static const unsigned long own_dom = 0x00000200UL; @@ -88,6 +102,12 @@ namespace xsd */ static const unsigned long dont_validate = 0x00000400UL; + /** + * @brief Extract XML content for anyType or anySimpleType. + * Normally you don't need to specify this flag explicitly. + */ + static const unsigned long extract_content = 0x00000800UL; + /** * @brief Do not initialize the Xerces-C++ runtime. */ @@ -179,7 +199,6 @@ namespace xsd unsigned long x_; }; - // Parsing properties. Refer to xsd/cxx/xml/elements.hxx for XML- // related properties. // @@ -188,6 +207,44 @@ namespace xsd { }; + /** + * @brief Content order sequence entry. + * + * @nosubgrouping + */ + struct content_order + { + /** + * @brief Initialize an instance with passed id and index. + * + * @param id Content id. + * @param index Content index in the corresponding sequence. + */ + content_order (std::size_t id, std::size_t index = 0) + : id (id), index (index) + { + } + + /** + * @brief Content id. + */ + std::size_t id; + + /** + * @brief Content index. + */ + std::size_t index; + }; + + bool + operator== (const content_order&, const content_order&); + + bool + operator!= (const content_order&, const content_order&); + + bool + operator< (const content_order&, const content_order&); + //@cond // DOM user data keys. @@ -202,12 +259,6 @@ namespace xsd typedef user_data_keys_template<0> user_data_keys; - // HP aCC3 complains about unresolved symbols without an explicit - // instantiation. - // -#if defined(__HP_aCC) && __HP_aCC <= 39999 - template struct user_data_keys_template<0>; -#endif // // struct identity @@ -284,10 +335,20 @@ namespace xsd /** * @brief Default constructor. */ - _type () - : container_ (0) - { - } + _type (); + + /** + * @brief Create an instance from a C string. + * + * @param s A string to initialize the instance with. + * + * Note that this constructor ignores the string and creates an + * empty anyType instance. In particular, it will not convert the + * string into DOM content. The purpose of such a strange constructor + * is to allow statically-initialized default values of anyType type. + */ + template + _type (const C* s); public: /** @@ -339,7 +400,9 @@ namespace xsd * @param c A pointer to the object that will contain the new * instance. */ - _type (const xercesc::DOMElement& e, flags f = 0, container* c = 0); + _type (const xercesc::DOMElement& e, + flags f = flags::extract_content, + container* c = 0); /** * @brief Create an instance from a DOM Attribute. @@ -377,10 +440,150 @@ namespace xsd type& operator= (const type& x) { - while (&x == 0) /* unused */; + if (this != &x) + { + if (x.content_.get () == 0) + content_.reset (); + else + content_ = x.content_->clone (); + + // Drop DOM association. + // + dom_info_.reset (); + } + return *this; } + // anyType content API. + // + public: + typedef element_optional dom_content_optional; + + /** + * @brief Return a read-only (constant) reference to the anyType + * DOM content. + * + * @return A constant reference to the optional container. + * + * The DOM content is returned as an optional element container, + * the same container as used for optional element wildcards. + */ + const dom_content_optional& + dom_content () const; + + /** + * @brief Return a read-write reference to the anyType DOM content. + * + * @return A reference to the optional container. + * + * The DOM content is returned as an optional element container, + * the same container as used for optional element wildcards. + */ + dom_content_optional& + dom_content (); + + /** + * @brief Set the anyType DOM content. + * + * @param e A new element to set. + * + * This function makes a copy of its argument and sets it as the + * new DOM content. + */ + void + dom_content (const xercesc::DOMElement& e); + + /** + * @brief Set the anyType DOM content. + * + * @param e A new element to use. + * + * This function will use the passed element directly instead + * of making a copy. For this to work the element should belong + * to the DOM document associated with this anyType instance. + * + * @see dom_content_document + */ + void + dom_content (xercesc::DOMElement* e); + + /** + * @brief Set the anyType DOM content. + * + * @param d An optional container with the new element to set. + * + * If the element is present in @a d then this function makes a + * copy of this element and sets it as the new wildcard content. + * Otherwise the element container is set the 'not present' state. + */ + void + dom_content (const dom_content_optional& d); + + /** + * @brief Return a read-only (constant) reference to the DOM + * document associated with this anyType instance. + * + * @return A constant reference to the DOM document. + * + * The DOM document returned by this function is used to store + * the raw XML content corresponding to the anyType instance. + */ + const xercesc::DOMDocument& + dom_content_document () const; + + /** + * @brief Return a read-write reference to the DOM document + * associated with this anyType instance. + * + * @return A reference to the DOM document. + * + * The DOM document returned by this function is used to store + * the raw XML content corresponding to the anyType instance. + */ + xercesc::DOMDocument& + dom_content_document (); + + /** + * @brief Check for absence of DOM (anyType) and text (anySimpleType) + * content. + * + * @return True if there is no content and false otherwise. + * + * This is an optimization function that allows us to check for the + * lack of content without actually creating its empty representation + * (that is, empty DOM document for DOM or empty string for text). + */ + bool + null_content () const; + + // + // + public: + /** + * @brief Comparison operator. It uses DOM (anyType) or text + * (anySimpleType) content if present. If the content is missing + * then the types are assumed unequal. + * + * @return True if the instances are equal, false otherwise. + */ + friend bool + operator== (const type& x, const type& y) + { + return x.content_.get () != 0 && + x.content_->compare (y.content_.get ()); + } + + /** + * @brief Comparison operator. It uses DOM (anyType) or text + * (anySimpleType) content if present. If the content is missing + * then the types are assumed unequal. + * + * @return True if the instances are not equal, false otherwise. + */ + friend bool + operator!= (const type& x, const type& y) {return !(x == y);} + // Container API. // public: @@ -429,7 +632,7 @@ namespace xsd dr = c; } - std::auto_ptr& m (dr ? dr->map_ : map_); + XSD_AUTO_PTR& m (dr ? dr->map_ : map_); if (container_ == 0) { @@ -440,11 +643,16 @@ namespace xsd if (m.get () != 0) { m->insert (map_->begin (), map_->end ()); - std::auto_ptr tmp (0); - map_ = tmp; + map_.reset (); } else + { +#ifdef XSD_CXX11 + m = std::move (map_); +#else m = map_; +#endif + } } } else @@ -466,10 +674,7 @@ namespace xsd // Part of our subtree. // if (m.get () == 0) - { - std::auto_ptr tmp (new map); - m = tmp; - } + m.reset (new map); m->insert (*i); sr->map_->erase (i++); @@ -548,7 +753,7 @@ namespace xsd * @brief Exception indicating that a DOM node cannot be associated * with an object model node. */ - class bad_dom_node_type: public std::exception //@@ Inherit exception. + class bad_dom_node_type: public std::exception //@@ Inherit exception. { public: /** @@ -584,37 +789,31 @@ namespace xsd { if (container_ != 0) { - // @@ Should be a throw. - // assert (_root ()->_node () != 0); assert (_root ()->_node ()->getOwnerDocument () == n->getOwnerDocument ()); } - std::auto_ptr r ( + dom_info_ = dom_info_factory::create ( *static_cast (n), *this, - container_ == 0)); + container_ == 0); - dom_info_ = r; break; } case xercesc::DOMNode::ATTRIBUTE_NODE: { - //@@ Should be a throw. - // assert (container_ != 0); assert (_root ()->_node () != 0); assert (_root ()->_node ()->getOwnerDocument () == n->getOwnerDocument ()); - std::auto_ptr r ( + dom_info_ = dom_info_factory::create ( *static_cast (n), - *this)); + *this); - dom_info_ = r; break; } default: @@ -628,26 +827,23 @@ namespace xsd //@cond void - _register_id (const identity& id, type* t) + _register_id (const identity& i, type* t) { // We should be the root. // assert (container_ == 0); if (map_.get () == 0) - { - std::auto_ptr tmp (new map); - map_ = tmp; - } + map_.reset (new map); if (!map_->insert ( - std::pair (&id, t)).second) + std::pair (&i, t)).second) { - id.throw_duplicate_id (); + i.throw_duplicate_id (); } } - //@@ Does not inherit from exception. + //@@ Does not inherit from exception. // struct not_registered: std::exception { @@ -691,15 +887,11 @@ namespace xsd struct dom_info { virtual - ~dom_info () - { - } + ~dom_info () {} - dom_info () - { - } + dom_info () {} - virtual std::auto_ptr + virtual XSD_AUTO_PTR clone (type& tree_node, container*) const = 0; virtual xercesc::DOMNode* @@ -707,41 +899,41 @@ namespace xsd private: dom_info (const dom_info&); - - dom_info& - operator= (const dom_info&); + dom_info& operator= (const dom_info&); }; - struct dom_element_info: public dom_info { dom_element_info (xercesc::DOMElement& e, type& n, bool root) - : doc_ (0), e_ (e) + : e_ (e) { e_.setUserData (user_data_keys::node, &n, 0); if (root) { - // The caller should have associated a dom::auto_ptr object - // that owns this document with the document node using the - // xml_schema::dom::tree_node_key key. + // The caller should have associated a dom::auto/unique_ptr + // object that owns this document with the document node + // using the xml_schema::dom::tree_node_key key. // - xml::dom::auto_ptr* pd ( - reinterpret_cast*> ( + XSD_DOM_AUTO_PTR* pd ( + reinterpret_cast*> ( e.getOwnerDocument ()->getUserData (user_data_keys::node))); assert (pd != 0); assert (pd->get () == e.getOwnerDocument ()); - doc_ = *pd; // Transfer ownership. + // Transfer ownership. +#ifdef XSD_CXX11 + doc_ = std::move (*pd); +#else + doc_ = *pd; +#endif } } - virtual std::auto_ptr + virtual XSD_AUTO_PTR clone (type& tree_node, container* c) const { - using std::auto_ptr; - // Check if we are a document root. // if (c == 0) @@ -749,11 +941,10 @@ namespace xsd // We preserver DOM associations only in complete // copies from root. // - if (doc_.get () == 0) - return auto_ptr (0); - - return auto_ptr ( - new dom_element_info (*doc_, tree_node)); + return XSD_AUTO_PTR ( + doc_.get () == 0 + ? 0 + : new dom_element_info (*doc_, tree_node)); } // Check if our container does not have DOM association (e.g., @@ -764,8 +955,7 @@ namespace xsd DOMNode* cn (c->_node ()); if (cn == 0) - return auto_ptr (0); - + return XSD_AUTO_PTR (); // Now we are going to find the corresponding element in // the new tree. @@ -797,7 +987,7 @@ namespace xsd assert (dn->getNodeType () == DOMNode::ELEMENT_NODE); - return auto_ptr ( + return XSD_AUTO_PTR ( new dom_element_info (static_cast (*dn), tree_node, false)); @@ -820,7 +1010,7 @@ namespace xsd } private: - xml::dom::auto_ptr doc_; + XSD_DOM_AUTO_PTR doc_; xercesc::DOMElement& e_; }; @@ -833,11 +1023,9 @@ namespace xsd a_.setUserData (user_data_keys::node, &n, 0); } - virtual std::auto_ptr + virtual XSD_AUTO_PTR clone (type& tree_node, container* c) const { - using std::auto_ptr; - // Check if we are a document root. // if (c == 0) @@ -845,7 +1033,7 @@ namespace xsd // We preserver DOM associations only in complete // copies from root. // - return auto_ptr (0); + return XSD_AUTO_PTR (); } // Check if our container does not have DOM association (e.g., @@ -856,7 +1044,7 @@ namespace xsd DOMNode* cn (c->_node ()); if (cn == 0) - return auto_ptr (0); + return XSD_AUTO_PTR (); // We are going to find the corresponding attribute in // the new tree. @@ -883,7 +1071,7 @@ namespace xsd DOMNode& n (*cn->getAttributes ()->item (i)); assert (n.getNodeType () == DOMNode::ATTRIBUTE_NODE); - return auto_ptr ( + return XSD_AUTO_PTR ( new dom_attribute_info (static_cast (n), tree_node)); } @@ -904,18 +1092,18 @@ namespace xsd struct dom_info_factory { - static std::auto_ptr + static XSD_AUTO_PTR create (const xercesc::DOMElement& e, type& n, bool root) { - return std::auto_ptr ( + return XSD_AUTO_PTR ( new dom_element_info ( const_cast (e), n, root)); } - static std::auto_ptr + static XSD_AUTO_PTR create (const xercesc::DOMAttr& a, type& n) { - return std::auto_ptr ( + return XSD_AUTO_PTR ( new dom_attribute_info ( const_cast (a), n)); } @@ -923,7 +1111,7 @@ namespace xsd //@endcond - std::auto_ptr dom_info_; + XSD_AUTO_PTR dom_info_; // ID/IDREF map. @@ -946,23 +1134,77 @@ namespace xsd std::map map; - std::auto_ptr map_; + XSD_AUTO_PTR map_; - private: - container* container_; - }; + // anyType and anySimpleType content. + // + protected: - inline _type:: - _type (const type& x, flags, container* c) - : container_ (c) - { - if (x.dom_info_.get ()) + //@cond + + struct content_type { - std::auto_ptr r (x.dom_info_->clone (*this, c)); - dom_info_ = r; - } - } + virtual + ~content_type () {} + + content_type () {} + virtual XSD_AUTO_PTR + clone () const = 0; + + virtual bool + compare (const content_type*) const = 0; + + private: + content_type (const content_type&); + content_type& operator= (const content_type&); + }; + + struct dom_content_type: content_type + { + dom_content_type () + : doc (xml::dom::create_document ()), dom (*doc) {} + + explicit + dom_content_type (const xercesc::DOMElement& e) + : doc (xml::dom::create_document ()), dom (e, *doc) {} + + explicit + dom_content_type (xercesc::DOMElement* e) + : doc (xml::dom::create_document ()), dom (e, *doc) {} + + explicit + dom_content_type (const dom_content_optional& d) + : doc (xml::dom::create_document ()), dom (d, *doc) {} + + virtual XSD_AUTO_PTR + clone () const + { + return XSD_AUTO_PTR (new dom_content_type (dom)); + } + + virtual bool + compare (const content_type* c) const + { + if (const dom_content_type* dc = + dynamic_cast (c)) + return dom == dc->dom; + + return false; + } + + public: + XSD_DOM_AUTO_PTR doc; + dom_content_optional dom; + }; + + //@endcond + + mutable XSD_AUTO_PTR content_; + + private: + container* container_; + }; /** * @brief Class corresponding to the XML Schema anySimpleType built-in @@ -970,7 +1212,7 @@ namespace xsd * * @nosubgrouping */ - template + template class simple_type: public B { public: @@ -985,13 +1227,19 @@ namespace xsd simple_type (); /** - * @brief Create an instance from a string. + * @brief Create an instance from a C string. * * @param s A string to initialize the instance with. */ - template simple_type (const C* s); + /** + * @brief Create an instance from a string. + * + * @param s A string to initialize the instance with. + */ + simple_type (const std::basic_string& s); + public: /** * @brief Copy constructor. @@ -1029,7 +1277,9 @@ namespace xsd * instance. */ template - simple_type (istream& s, flags f = 0, container* c = 0); + simple_type (istream& s, + flags f = flags::extract_content, + container* c = 0); /** * @brief Create an instance from a DOM element. @@ -1040,7 +1290,7 @@ namespace xsd * instance. */ simple_type (const xercesc::DOMElement& e, - flags f = 0, + flags f = flags::extract_content, container* c = 0); /** @@ -1052,7 +1302,7 @@ namespace xsd * instance. */ simple_type (const xercesc::DOMAttr& a, - flags f = 0, + flags f = flags::extract_content, container* c = 0); /** @@ -1064,12 +1314,82 @@ namespace xsd * @param c A pointer to the object that will contain the new * instance. */ - template simple_type (const std::basic_string& s, const xercesc::DOMElement* e, - flags f = 0, + flags f = flags::extract_content, container* c = 0); //@} + + // anySimpleType content API. + // + public: + /** + * @brief Return a read-only (constant) reference to the anySimpleType + * text content. + * + * @return A constant reference to the text string. + */ + const std::basic_string& + text_content () const; + + /** + * @brief Return a read-write reference to the anySimpleType text + * content. + * + * @return A reference to the text string. + */ + std::basic_string& + text_content (); + + /** + * @brief Set the anySimpleType text content. + * + * @param e A new text string to set. + */ + void + text_content (const std::basic_string& t); + + protected: + //@cond + + typedef typename B::content_type content_type; + + struct text_content_type: content_type + { + text_content_type () {} + + explicit + text_content_type (const std::basic_string& t): text (t) {} + + explicit + text_content_type (const C* t): text (t) {} + + virtual XSD_AUTO_PTR + clone () const + { + return XSD_AUTO_PTR (new text_content_type (text)); + } + + virtual bool + compare (const content_type* c) const + { + if (const text_content_type* tc = + dynamic_cast (c)) + return text == tc->text; + + return false; + } + + public: + // It would have been more elegant to store text content as DOMText. + // However, that would require Xerces-C++ initialization. Also + // having a separate DOMDocument for each text node seems like + // an overkill. + // + std::basic_string text; + }; + + //@endcond }; @@ -1168,28 +1488,77 @@ namespace xsd { typedef T type; - static std::auto_ptr + static XSD_AUTO_PTR create (const xercesc::DOMElement& e, flags f, container* c) { - return std::auto_ptr (new T (e, f, c)); + return XSD_AUTO_PTR (new T (e, f, c)); } - static std::auto_ptr + static XSD_AUTO_PTR create (const xercesc::DOMAttr& a, flags f, container* c) { - return std::auto_ptr (new T (a, f, c)); + return XSD_AUTO_PTR (new T (a, f, c)); } - static std::auto_ptr + static XSD_AUTO_PTR create (const std::basic_string& s, const xercesc::DOMElement* e, flags f, container* c) { - return std::auto_ptr (new T (s, e, f, c)); + return XSD_AUTO_PTR (new T (s, e, f, c)); + } + + // For now for istream we only go through traits for non- + // fundamental types. + // + template + static XSD_AUTO_PTR + create (istream& s, flags f, container* c) + { + return XSD_AUTO_PTR (new T (s, f, c)); } }; + template + struct traits, C, ST> + { + typedef simple_type type; + + static XSD_AUTO_PTR + create (const xercesc::DOMElement& e, flags f, container* c) + { + return XSD_AUTO_PTR ( + new type (e, f | flags::extract_content, c)); + } + + static XSD_AUTO_PTR + create (const xercesc::DOMAttr& a, flags f, container* c) + { + return XSD_AUTO_PTR ( + new type (a, f | flags::extract_content, c)); + } + + static XSD_AUTO_PTR + create (const std::basic_string& s, + const xercesc::DOMElement* e, + flags f, + container* c) + { + return XSD_AUTO_PTR ( + new type (s, e, f | flags::extract_content, c)); + } + + template + static XSD_AUTO_PTR + create (istream& s, flags f, container* c) + { + return XSD_AUTO_PTR ( + new type (s, f | flags::extract_content, c)); + } + }; //@endcond @@ -1352,8 +1721,7 @@ namespace xsd } // The following extra conversion operators causes problems on - // some compilers (notably VC 7.1 and 9.0) and are disabled by - // default. + // some compilers (notably VC 9.0) and are disabled by default. // #ifdef XSD_TREE_EXTRA_FUND_CONV /** diff --git a/xsd/libxsd/xsd/cxx/tree/elements.ixx b/xsd/libxsd/xsd/cxx/tree/elements.ixx index e4dd60a..844ccf7 100644 --- a/xsd/libxsd/xsd/cxx/tree/elements.ixx +++ b/xsd/libxsd/xsd/cxx/tree/elements.ixx @@ -1,6 +1,5 @@ // file : xsd/cxx/tree/elements.ixx -// author : Boris Kolpackov -// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file namespace xsd @@ -9,20 +8,258 @@ namespace xsd { namespace tree { + // content_order_type + // + + inline bool + operator== (const content_order& x, const content_order& y) + { + return x.id == y.id && x.index == y.index; + } + + inline bool + operator!= (const content_order& x, const content_order& y) + { + return !(x == y); + } + + inline bool + operator< (const content_order& x, const content_order& y) + { + return x.id < y.id || (x.id == y.id && x.index < y.index); + } + + // type + // + + inline _type:: + _type () + : container_ (0) + { + } + + template + inline _type:: + _type (const C*) + : container_ (0) + { + } + + inline _type:: + _type (const type& x, flags f, container* c) + : container_ (c) + { + if (x.content_.get () != 0) + content_ = x.content_->clone (); + + if (x.dom_info_.get () != 0 && (f & flags::keep_dom)) + { + dom_info_ = x.dom_info_->clone (*this, c); + } + } + + inline const _type::dom_content_optional& _type:: + dom_content () const + { + const content_type* c (content_.get ()); + + if (c == 0) + { + content_.reset (new dom_content_type); + c = content_.get (); + } + + // Accessing non-DOM content via the DOM API. + // + assert (dynamic_cast (c) != 0); + + return static_cast (c)->dom; + } + + inline _type::dom_content_optional& _type:: + dom_content () + { + content_type* c (content_.get ()); + + if (c == 0) + { + content_.reset (new dom_content_type); + c = content_.get (); + } + + // Accessing non-DOM content via the DOM API. + // + assert (dynamic_cast (c) != 0); + + return static_cast (c)->dom; + } + + inline void _type:: + dom_content (const xercesc::DOMElement& e) + { + content_type* c (content_.get ()); + + if (c == 0) + content_.reset (new dom_content_type (e)); + else + { + // Accessing non-DOM content via the DOM API. + // + assert (dynamic_cast (c) != 0); + static_cast (c)->dom.set (e); + } + } + + inline void _type:: + dom_content (xercesc::DOMElement* e) + { + content_type* c (content_.get ()); + + if (c == 0) + content_.reset (new dom_content_type (e)); + else + { + // Accessing non-DOM content via the DOM API. + // + assert (dynamic_cast (c) != 0); + static_cast (c)->dom.set (e); + } + } + + inline void _type:: + dom_content (const dom_content_optional& d) + { + content_type* c (content_.get ()); + + if (c == 0) + content_.reset (new dom_content_type (d)); + else + { + // Accessing non-DOM content via the DOM API. + // + assert (dynamic_cast (c) != 0); + static_cast (c)->dom = d; + } + } + + inline const xercesc::DOMDocument& _type:: + dom_content_document () const + { + const content_type* c (content_.get ()); + + if (c == 0) + { + content_.reset (new dom_content_type); + c = content_.get (); + } + + // Accessing non-DOM content via the DOM API. + // + assert (dynamic_cast (c) != 0); + + return *static_cast (c)->doc; + } + + inline xercesc::DOMDocument& _type:: + dom_content_document () + { + content_type* c (content_.get ()); + + if (c == 0) + { + content_.reset (new dom_content_type); + c = content_.get (); + } + + // Accessing non-DOM content via the DOM API. + // + assert (dynamic_cast (c) != 0); + + return *static_cast (c)->doc; + } + + inline bool _type:: + null_content () const + { + return content_.get () == 0; + } + // simple_type // - template - inline simple_type:: + template + inline simple_type:: simple_type () { } - template - template - inline simple_type:: - simple_type (const C*) + template + inline simple_type:: + simple_type (const C* s) + { + this->content_.reset (new text_content_type (s)); + } + + template + inline simple_type:: + simple_type (const std::basic_string& s) + { + this->content_.reset (new text_content_type (s)); + } + + template + inline const std::basic_string& simple_type:: + text_content () const + { + const content_type* c (this->content_.get ()); + + if (c == 0) + { + this->content_.reset (new text_content_type); + c = this->content_.get (); + } + + // Accessing non-text content via the text API. + // + assert (dynamic_cast (c) != 0); + + return static_cast (c)->text; + } + + template + inline std::basic_string& simple_type:: + text_content () + { + content_type* c (this->content_.get ()); + + if (c == 0) + { + this->content_.reset (new text_content_type); + c = this->content_.get (); + } + + // Accessing non-text content via the text API. + // + assert (dynamic_cast (c) != 0); + + return static_cast (c)->text; + } + + template + inline void simple_type:: + text_content (const std::basic_string& t) { + content_type* c (this->content_.get ()); + + if (c == 0) + this->content_.reset (new text_content_type (t)); + else + { + // Accessing non-text content via the text API. + // + assert (dynamic_cast (c) != 0); + static_cast (c)->text = t; + } } } } diff --git a/xsd/libxsd/xsd/cxx/tree/elements.txx b/xsd/libxsd/xsd/cxx/tree/elements.txx index 084cb56..4a8ca6e 100644 --- a/xsd/libxsd/xsd/cxx/tree/elements.txx +++ b/xsd/libxsd/xsd/cxx/tree/elements.txx @@ -1,6 +1,5 @@ // file : xsd/cxx/tree/elements.txx -// author : Boris Kolpackov -// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file #include @@ -28,8 +27,8 @@ namespace xsd // simple_type // - template - simple_type:: + template + simple_type:: simple_type (const simple_type& other, flags f, container* c) @@ -37,8 +36,8 @@ namespace xsd { } - template - simple_type* simple_type:: + template + simple_type* simple_type:: _clone (flags f, container* c) const { return new simple_type (*this, f, c); diff --git a/xsd/libxsd/xsd/cxx/tree/error-handler.hxx b/xsd/libxsd/xsd/cxx/tree/error-handler.hxx index 6e4426b..e520cce 100644 --- a/xsd/libxsd/xsd/cxx/tree/error-handler.hxx +++ b/xsd/libxsd/xsd/cxx/tree/error-handler.hxx @@ -1,6 +1,5 @@ // file : xsd/cxx/tree/error-handler.hxx -// author : Boris Kolpackov -// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file #ifndef XSD_CXX_TREE_ERROR_HANDLER_HXX diff --git a/xsd/libxsd/xsd/cxx/tree/error-handler.txx b/xsd/libxsd/xsd/cxx/tree/error-handler.txx index c19d354..8520856 100644 --- a/xsd/libxsd/xsd/cxx/tree/error-handler.txx +++ b/xsd/libxsd/xsd/cxx/tree/error-handler.txx @@ -1,6 +1,5 @@ // file : xsd/cxx/tree/error-handler.txx -// author : Boris Kolpackov -// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file namespace xsd diff --git a/xsd/libxsd/xsd/cxx/tree/exceptions.hxx b/xsd/libxsd/xsd/cxx/tree/exceptions.hxx index f6ddb15..d871416 100644 --- a/xsd/libxsd/xsd/cxx/tree/exceptions.hxx +++ b/xsd/libxsd/xsd/cxx/tree/exceptions.hxx @@ -1,6 +1,5 @@ // file : xsd/cxx/tree/exceptions.hxx -// author : Boris Kolpackov -// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file /** diff --git a/xsd/libxsd/xsd/cxx/tree/exceptions.txx b/xsd/libxsd/xsd/cxx/tree/exceptions.txx index 8262fce..2544f42 100644 --- a/xsd/libxsd/xsd/cxx/tree/exceptions.txx +++ b/xsd/libxsd/xsd/cxx/tree/exceptions.txx @@ -1,6 +1,5 @@ // file : xsd/cxx/tree/exceptions.txx -// author : Boris Kolpackov -// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file #include diff --git a/xsd/libxsd/xsd/cxx/tree/facet.hxx b/xsd/libxsd/xsd/cxx/tree/facet.hxx index c4fbcbe..e17ead1 100644 --- a/xsd/libxsd/xsd/cxx/tree/facet.hxx +++ b/xsd/libxsd/xsd/cxx/tree/facet.hxx @@ -1,6 +1,5 @@ // file : xsd/cxx/tree/facet.hxx -// author : Boris Kolpackov -// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file #ifndef XSD_CXX_TREE_FACET_HXX diff --git a/xsd/libxsd/xsd/cxx/tree/istream-fwd.hxx b/xsd/libxsd/xsd/cxx/tree/istream-fwd.hxx index a523952..bd20fff 100644 --- a/xsd/libxsd/xsd/cxx/tree/istream-fwd.hxx +++ b/xsd/libxsd/xsd/cxx/tree/istream-fwd.hxx @@ -1,6 +1,5 @@ // file : xsd/cxx/tree/istream-fwd.hxx -// author : Boris Kolpackov -// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file #ifndef XSD_CXX_TREE_ISTREAM_FWD_HXX diff --git a/xsd/libxsd/xsd/cxx/tree/istream.hxx b/xsd/libxsd/xsd/cxx/tree/istream.hxx index 2f8f8cb..45e334b 100644 --- a/xsd/libxsd/xsd/cxx/tree/istream.hxx +++ b/xsd/libxsd/xsd/cxx/tree/istream.hxx @@ -1,13 +1,17 @@ // file : xsd/cxx/tree/istream.hxx -// author : Boris Kolpackov -// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file #ifndef XSD_CXX_TREE_ISTREAM_HXX #define XSD_CXX_TREE_ISTREAM_HXX +#include +#include +#include // std::auto_ptr/unique_ptr #include // std::size_t +#include // XSD_AUTO_PTR + #include namespace xsd @@ -138,13 +142,102 @@ namespace xsd return s_; } + // Add string to the pool. The application should add every + // potentially pooled string to correctly re-create the pool + // constructed during insertion. + // + template + void + pool_add (const std::basic_string& s) + { + typedef pool_impl pool_type; + + if (pool_.get () == 0) + pool_.reset (new pool_type); + + pool_type& p (*static_cast (pool_.get ())); + p.push_back (s); + } + + // Get string from pool id. We return the result via an argument + // instead of as a return type to avoid difficulties some compilers + // (e.g., GCC) experience with calls like istream::pool_string. + // + template + void + pool_string (std::size_t id, std::basic_string& out) + { + typedef pool_impl pool_type; + pool_type& p (*static_cast (pool_.get ())); + out = p[id - 1]; + } + + public: + // 8-bit + // + signed char + read_char (); + + unsigned char + read_uchar (); + + // 16-bit + // + unsigned short + read_short (); + + unsigned short + read_ushort (); + + // 32-bit + // + unsigned int + read_int (); + + unsigned int + read_uint (); + + // 64-bit + // + unsigned long long + read_ulonglong (); + + unsigned long long + read_longlong (); + + // Boolean + // + bool + read_bool (); + + // Floating-point + // + float + read_float (); + + double + read_double (); + private: istream (const istream&); istream& operator= (const istream&); private: + struct pool + { + virtual + ~pool () {} + }; + + template + struct pool_impl: pool, std::vector > + { + }; + S& s_; + std::size_t seq_; + XSD_AUTO_PTR pool_; }; @@ -251,6 +344,109 @@ namespace xsd istream_common::as_float64 as_float64 (x); return s >> as_float64; } + + // + // read_* functions. + // + + template + inline signed char istream:: + read_char () + { + signed char r; + *this >> r; + return r; + } + + template + inline unsigned char istream:: + read_uchar () + { + unsigned char r; + *this >> r; + return r; + } + + template + inline unsigned short istream:: + read_short () + { + short r; + *this >> r; + return r; + } + + template + inline unsigned short istream:: + read_ushort () + { + unsigned short r; + *this >> r; + return r; + } + + template + inline unsigned int istream:: + read_int () + { + int r; + *this >> r; + return r; + } + + template + inline unsigned int istream:: + read_uint () + { + unsigned int r; + *this >> r; + return r; + } + + template + inline unsigned long long istream:: + read_ulonglong () + { + long long r; + *this >> r; + return r; + } + + template + inline unsigned long long istream:: + read_longlong () + { + unsigned long long r; + *this >> r; + return r; + } + + template + inline bool istream:: + read_bool () + { + bool r; + *this >> r; + return r; + } + + template + inline float istream:: + read_float () + { + float r; + *this >> r; + return r; + } + + template + inline double istream:: + read_double () + { + double r; + *this >> r; + return r; + } } } } diff --git a/xsd/libxsd/xsd/cxx/tree/iterator-adapter.hxx b/xsd/libxsd/xsd/cxx/tree/iterator-adapter.hxx new file mode 100644 index 0000000..0a54604 --- /dev/null +++ b/xsd/libxsd/xsd/cxx/tree/iterator-adapter.hxx @@ -0,0 +1,270 @@ +// file : xsd/cxx/tree/iterator-adapter.hxx +// copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef XSD_CXX_TREE_ITERATOR_ADAPTER_HXX +#define XSD_CXX_TREE_ITERATOR_ADAPTER_HXX + +#include // std::ptrdiff_t +#include // std::iterator_traits + +namespace xsd +{ + namespace cxx + { + namespace tree + { + // Sun CC's does not have iterator_traits. To overcome + // this, we will wrap std::iterator_traits into our own and also + // specialize it for pointer types. Since Sun CC uses pointer + // for vector::iterator, it will use the specialization and won't + // notice the std::iterator_traits. + // +#ifndef _RWSTD_NO_CLASS_PARTIAL_SPEC + template + struct iterator_traits + { + typedef + typename std::iterator_traits::iterator_category + iterator_category; + + typedef + typename std::iterator_traits::value_type + value_type; + + typedef + typename std::iterator_traits::difference_type + difference_type; + }; +#else + // The Pointer specialization does not work for reverse and + // set iterators. But these iterators are user-dfined types + // and have suitable typedefs that we can use. + // + template + struct iterator_traits + { + typedef typename I::iterator_category iterator_category; + typedef typename I::value_type value_type; + typedef typename I::difference_type difference_type; + }; + + template + struct iterator_traits + { + typedef std::random_access_iterator_tag iterator_category; + typedef T value_type; + typedef std::ptrdiff_t difference_type; + }; +#endif + + // Iterator adapter for complex types. It expects I to point to + // a smart pointer-like object that has operator*() that returns + // a refernce to a type static_cast'able to T and get() that + // returns a pointer to a type static_cast'able to T. + // + + template + struct iterator_adapter + { + typedef T value_type; + typedef value_type& reference; + typedef value_type* pointer; + + typedef + typename iterator_traits::iterator_category + iterator_category; + + typedef + typename iterator_traits::difference_type + difference_type; + + + public: + iterator_adapter () + : i_ () // i_ can be of a pointer type. + { + } + + // Allow iterator to const_iterator conversion. + // + template + iterator_adapter (const iterator_adapter& j) + : i_ (j.base ()) + { + } + + explicit + iterator_adapter (const I& i) + : i_ (i) + { + } + + public: + // Forward iterator requirements. + // + reference + operator* () const + { + return static_cast (**i_); + } + + pointer + operator-> () const + { + return static_cast (i_->get ()); + } + + iterator_adapter& + operator++ () + { + ++i_; + return *this; + } + + iterator_adapter + operator++ (int) + { + iterator_adapter r (*this); + ++i_; + return r; + } + + // Bidirectional iterator requirements. + // + iterator_adapter& + operator-- () + { + --i_; + return *this; + } + + iterator_adapter + operator-- (int) + { + iterator_adapter r (*this); + --i_; + return r; + } + + // Random access iterator requirements. + // + reference + operator[] (difference_type n) const + { + return static_cast (*(i_[n])); + } + + iterator_adapter& + operator+= (difference_type n) + { + i_ += n; + return *this; + } + + iterator_adapter + operator+ (difference_type n) const + { + return iterator_adapter (i_ + n); + } + + iterator_adapter& + operator-= (difference_type n) + { + i_ -= n; + return *this; + } + + iterator_adapter + operator- (difference_type n) const + { + return iterator_adapter (i_ - n); + } + + public: + const I& + base () const + { + return i_; + } + + private: + I i_; + }; + + // Note: We use different types for left- and right-hand-side + // arguments to allow comparison between iterator and const_iterator. + // + + // Forward iterator requirements. + // + template + inline bool + operator== (const iterator_adapter& i, + const iterator_adapter& j) + { + return i.base () == j.base (); + } + + template + inline bool + operator!= (const iterator_adapter& i, + const iterator_adapter& j) + { + return i.base () != j.base (); + } + + // Random access iterator requirements + // + template + inline bool + operator< (const iterator_adapter& i, + const iterator_adapter& j) + { + return i.base () < j.base (); + } + + template + inline bool + operator> (const iterator_adapter& i, + const iterator_adapter& j) + { + return i.base () > j.base (); + } + + template + inline bool + operator<= (const iterator_adapter& i, + const iterator_adapter& j) + { + return i.base () <= j.base (); + } + + template + inline bool + operator>= (const iterator_adapter& i, + const iterator_adapter& j) + { + return i.base () >= j.base (); + } + + template + inline typename iterator_adapter::difference_type + operator- (const iterator_adapter& i, + const iterator_adapter& j) + { + return i.base () - j.base (); + } + + template + inline iterator_adapter + operator+ (typename iterator_adapter::difference_type n, + const iterator_adapter& i) + { + return iterator_adapter (i.base () + n); + } + } + } +} + +#endif // XSD_CXX_TREE_ITERATOR_ADAPTER_HXX diff --git a/xsd/libxsd/xsd/cxx/tree/list.hxx b/xsd/libxsd/xsd/cxx/tree/list.hxx index 30636e9..d1fe907 100644 --- a/xsd/libxsd/xsd/cxx/tree/list.hxx +++ b/xsd/libxsd/xsd/cxx/tree/list.hxx @@ -1,6 +1,5 @@ // file : xsd/cxx/tree/list.hxx -// author : Boris Kolpackov -// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file #ifndef XSD_CXX_TREE_LIST_HXX @@ -11,7 +10,7 @@ #include #include -#include // tree::istream +#include #include // tree::istream #include // fundamental_p, sequence @@ -22,8 +21,7 @@ namespace xsd namespace tree { // Class template for xsd:list mapping. Based on the sequence - // template. Note that I cannot get rid of 'fund' because HP - // aCC3 likes it this way. + // template. // template (f, c) + list (container* c = 0) + : sequence (c) { } @@ -60,8 +58,8 @@ namespace xsd template list (istream&, flags = 0, container* c = 0); - list (const list& v, flags f = 0, container* c = 0) - : sequence (v, f, c) + list (const list& l, flags f = 0, container* c = 0) + : sequence (l, f, c) { } @@ -77,7 +75,9 @@ namespace xsd private: void - init (const std::basic_string&, const xercesc::DOMElement*); + init (const std::basic_string&, + const xercesc::DOMElement*, + flags); }; @@ -88,8 +88,8 @@ namespace xsd { public: explicit - list (flags f = 0, container* c = 0) - : sequence (f, c) + list (container* c = 0) + : sequence (c) { } @@ -108,8 +108,8 @@ namespace xsd template list (istream&, flags = 0, container* c = 0); - list (const list& s, flags f = 0, container* c = 0) - : sequence (s, f, c) + list (const list& l, flags f = 0, container* c = 0) + : sequence (l, f, c) { } diff --git a/xsd/libxsd/xsd/cxx/tree/ostream.hxx b/xsd/libxsd/xsd/cxx/tree/ostream.hxx index cf2d9ee..ec15c51 100644 --- a/xsd/libxsd/xsd/cxx/tree/ostream.hxx +++ b/xsd/libxsd/xsd/cxx/tree/ostream.hxx @@ -1,13 +1,17 @@ // file : xsd/cxx/tree/ostream.hxx -// author : Boris Kolpackov -// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file #ifndef XSD_CXX_TREE_OSTREAM_HXX #define XSD_CXX_TREE_OSTREAM_HXX +#include +#include +#include // std::auto_ptr/unique_ptr #include // std::size_t +#include // XSD_AUTO_PTR + namespace xsd { namespace cxx @@ -126,7 +130,7 @@ namespace xsd public: explicit ostream (S& s) - : s_ (s) + : s_ (s), seq_ (1) { } @@ -136,13 +140,55 @@ namespace xsd return s_; } + // If the string is not in the pool, add it and return 0. Otherwise + // return the string's pool id. In the former case the application + // should serialize the original string. + // + // The returned ids are sequential and start with 1. 0 is reserved + // as a special marker to be used by the application for the first + // encounter of the string. + // + template + std::size_t + pool_string (const std::basic_string& s) + { + typedef pool_impl pool_type; + + if (pool_.get () == 0) + pool_.reset (new pool_type); + + pool_type& p (*static_cast (pool_.get ())); + + std::pair r ( + p.insert (std::pair, std::size_t> (s, seq_))); + + if (!r.second) + return r.first->second; + + seq_++; + return 0; + } + private: ostream (const ostream&); ostream& operator= (const ostream&); private: + struct pool + { + virtual + ~pool () {} + }; + + template + struct pool_impl: pool, std::map, std::size_t> + { + }; + S& s_; + std::size_t seq_; + XSD_AUTO_PTR pool_; }; diff --git a/xsd/libxsd/xsd/cxx/tree/parsing.hxx b/xsd/libxsd/xsd/cxx/tree/parsing.hxx index 84b3898..f811788 100644 --- a/xsd/libxsd/xsd/cxx/tree/parsing.hxx +++ b/xsd/libxsd/xsd/cxx/tree/parsing.hxx @@ -1,6 +1,5 @@ // file : xsd/cxx/tree/parsing.hxx -// author : Boris Kolpackov -// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file #ifndef XSD_CXX_TREE_PARSING_HXX diff --git a/xsd/libxsd/xsd/cxx/tree/parsing.txx b/xsd/libxsd/xsd/cxx/tree/parsing.txx index db50775..73e06f4 100644 --- a/xsd/libxsd/xsd/cxx/tree/parsing.txx +++ b/xsd/libxsd/xsd/cxx/tree/parsing.txx @@ -1,6 +1,5 @@ // file : xsd/cxx/tree/parsing.txx -// author : Boris Kolpackov -// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file #include @@ -35,25 +34,23 @@ namespace xsd // inline _type:: _type (const xercesc::DOMElement& e, flags f, container* c) - : dom_info_ (0), container_ (c) + : container_ (c) { + if (f & flags::extract_content) + content_.reset (new dom_content_type (e)); + if (f & flags::keep_dom) - { - std::auto_ptr r ( - dom_info_factory::create (e, *this, c == 0)); - dom_info_ = r; - } + dom_info_ = dom_info_factory::create (e, *this, c == 0); } inline _type:: _type (const xercesc::DOMAttr& a, flags f, container* c) - : dom_info_ (0), container_ (c) + : container_ (c) { + // anyType cannot be an attribute type so no content extraction. + if (f & flags::keep_dom) - { - std::auto_ptr r (dom_info_factory::create (a, *this)); - dom_info_ = r; - } + dom_info_ = dom_info_factory::create (a, *this); } template @@ -62,36 +59,43 @@ namespace xsd const xercesc::DOMElement*, flags, container* c) - : dom_info_ (0), // List elements don't have associated DOM nodes. - container_ (c) + : container_ (c) // List elements don't have associated DOM nodes. { + // anyType cannot be a list element type so no content extraction. } // simple_type // - template - inline simple_type:: + template + inline simple_type:: simple_type (const xercesc::DOMElement& e, flags f, container* c) - : B (e, f, c) + : B (e, (f & ~flags::extract_content), c) { + if (f & flags::extract_content) + this->content_.reset ( + new text_content_type (tree::text_content (e))); } - template - inline simple_type:: + template + inline simple_type:: simple_type (const xercesc::DOMAttr& a, flags f, container* c) - : B (a, f, c) + : B (a, (f & ~flags::extract_content), c) { + if (f & flags::extract_content) + this->content_.reset (new text_content_type ( + xml::transcode (a.getValue ()))); } - template - template - inline simple_type:: + template + inline simple_type:: simple_type (const std::basic_string& s, const xercesc::DOMElement* e, flags f, container* c) - : B (s, e, f, c) + : B (s, e, (f & ~flags::extract_content), c) { + if (f & flags::extract_content) + this->content_.reset (new text_content_type (s)); } // fundamental_base @@ -170,23 +174,25 @@ namespace xsd } // Individual items of the list have no DOM association. Therefore - // I clear keep_dom from flags. + // we clear keep_dom from flags. // template list:: list (const xercesc::DOMElement& e, flags f, container* c) - : sequence (flags (f & ~flags::keep_dom), c) // ambiguous + : sequence (c) { - init (text_content (e), &e); + init (tree::text_content (e), &e, f & ~flags::keep_dom); } template list:: list (const xercesc::DOMAttr& a, flags f, container* c) - : sequence (flags (f & ~flags::keep_dom), c) // ambiguous + : sequence (c) { - init (xml::transcode (a.getValue ()), a.getOwnerElement ()); + init (xml::transcode (a.getValue ()), + a.getOwnerElement (), + f & ~flags::keep_dom); } template @@ -195,20 +201,21 @@ namespace xsd const xercesc::DOMElement* e, flags f, container* c) - : sequence (flags (f & ~flags::keep_dom), c) // ambiguous + : sequence (c) { - init (s, e); + init (s, e, f & ~flags::keep_dom); } template void list:: - init (const std::basic_string& s, const xercesc::DOMElement* parent) + init (const std::basic_string& s, + const xercesc::DOMElement* parent, + flags f) { if (s.size () == 0) return; using std::basic_string; - typedef typename sequence::ptr ptr; typedef typename basic_string::size_type size_type; const C* data (s.c_str ()); @@ -223,13 +230,12 @@ namespace xsd if (j != basic_string::npos) { - ptr r ( - new T (basic_string (data + i, j - i), - parent, - this->flags_, - this->container_)); - - this->v_.push_back (r); + this->push_back ( + traits::create ( + basic_string (data + i, j - i), + parent, + f, + this->container_)); i = bits::find_ns (data, size, j); } @@ -237,13 +243,12 @@ namespace xsd { // Last element. // - ptr r ( - new T (basic_string (data + i, size - i), - parent, - this->flags_, - this->container_)); - - this->v_.push_back (r); + this->push_back ( + traits::create ( + basic_string (data + i, size - i), + parent, + f, + this->container_)); break; } @@ -252,16 +257,16 @@ namespace xsd template list:: - list (const xercesc::DOMElement& e, flags f, container* c) - : sequence (flags (f & ~flags::keep_dom), c) // ambiguous + list (const xercesc::DOMElement& e, flags, container* c) + : sequence (c) { - init (text_content (e), &e); + init (tree::text_content (e), &e); } template inline list:: - list (const xercesc::DOMAttr& a, flags f, container* c) - : sequence (flags (f & ~flags::keep_dom), c) // ambiguous + list (const xercesc::DOMAttr& a, flags, container* c) + : sequence (c) { init (xml::transcode (a.getValue ()), a.getOwnerElement ()); } @@ -270,9 +275,9 @@ namespace xsd inline list:: list (const std::basic_string& s, const xercesc::DOMElement* parent, - flags f, + flags, container* c) - : sequence (flags (f & ~flags::keep_dom), c) // ambiguous + : sequence (c) { init (s, parent); } @@ -329,7 +334,7 @@ namespace xsd string:: string (const xercesc::DOMElement& e, flags f, container* c) : B (e, f, c), - base_type (text_content (e)) + base_type (tree::text_content (e)) { } @@ -696,7 +701,7 @@ namespace xsd uri:: uri (const xercesc::DOMElement& e, flags f, container* c) : B (e, f, c), - base_type (trim (text_content (e))) + base_type (trim (tree::text_content (e))) { } @@ -726,7 +731,7 @@ namespace xsd qname (const xercesc::DOMElement& e, flags f, container* c) : B (e, f, c) { - std::basic_string v (trim (text_content (e))); + std::basic_string v (trim (tree::text_content (e))); ns_ = resolve (v, &e); name_ = xml::uq_name (v); } @@ -797,7 +802,7 @@ namespace xsd { // This implementation is not optimal. // - std::basic_string str (trim (text_content (e))); + std::basic_string str (trim (tree::text_content (e))); decode (xml::string (str).c_str ()); } @@ -832,7 +837,7 @@ namespace xsd { // This implementation is not optimal. // - std::basic_string str (trim (text_content (e))); + std::basic_string str (trim (tree::text_content (e))); decode (xml::string (str).c_str ()); } diff --git a/xsd/libxsd/xsd/cxx/tree/parsing/boolean.hxx b/xsd/libxsd/xsd/cxx/tree/parsing/boolean.hxx index 3dafdaa..8bbd3a8 100644 --- a/xsd/libxsd/xsd/cxx/tree/parsing/boolean.hxx +++ b/xsd/libxsd/xsd/cxx/tree/parsing/boolean.hxx @@ -1,6 +1,5 @@ // file : xsd/cxx/tree/parsing/boolean.hxx -// author : Boris Kolpackov -// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file #ifndef XSD_CXX_TREE_PARSING_BOOLEAN_HXX @@ -42,7 +41,7 @@ namespace xsd bool traits:: create (const xercesc::DOMElement& e, flags f, container* c) { - return create (text_content (e), 0, f, c); + return create (tree::text_content (e), 0, f, c); } template diff --git a/xsd/libxsd/xsd/cxx/tree/parsing/byte.hxx b/xsd/libxsd/xsd/cxx/tree/parsing/byte.hxx index 0a127c9..d6cf1d3 100644 --- a/xsd/libxsd/xsd/cxx/tree/parsing/byte.hxx +++ b/xsd/libxsd/xsd/cxx/tree/parsing/byte.hxx @@ -1,6 +1,5 @@ // file : xsd/cxx/tree/parsing/byte.hxx -// author : Boris Kolpackov -// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file #ifndef XSD_CXX_TREE_PARSING_BYTE_HXX @@ -41,7 +40,7 @@ namespace xsd signed char traits:: create (const xercesc::DOMElement& e, flags f, container* c) { - return create (text_content (e), 0, f, c); + return create (tree::text_content (e), 0, f, c); } template diff --git a/xsd/libxsd/xsd/cxx/tree/parsing/date-time.txx b/xsd/libxsd/xsd/cxx/tree/parsing/date-time.txx index 913786c..29b12b6 100644 --- a/xsd/libxsd/xsd/cxx/tree/parsing/date-time.txx +++ b/xsd/libxsd/xsd/cxx/tree/parsing/date-time.txx @@ -1,6 +1,5 @@ // file : xsd/cxx/tree/parsing/date-time.txx -// author : Boris Kolpackov -// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file #include @@ -60,7 +59,7 @@ namespace xsd gday (const xercesc::DOMElement& e, flags f, container* c) : B (e, f, c) { - parse (text_content (e)); + parse (tree::text_content (e)); } template @@ -110,7 +109,7 @@ namespace xsd gmonth (const xercesc::DOMElement& e, flags f, container* c) : B (e, f, c) { - parse (text_content (e)); + parse (tree::text_content (e)); } template @@ -160,7 +159,7 @@ namespace xsd gyear (const xercesc::DOMElement& e, flags f, container* c) : B (e, f, c) { - parse (text_content (e)); + parse (tree::text_content (e)); } template @@ -223,7 +222,7 @@ namespace xsd gmonth_day (const xercesc::DOMElement& e, flags f, container* c) : B (e, f, c) { - parse (text_content (e)); + parse (tree::text_content (e)); } template @@ -274,7 +273,7 @@ namespace xsd gyear_month (const xercesc::DOMElement& e, flags f, container* c) : B (e, f, c) { - parse (text_content (e)); + parse (tree::text_content (e)); } template @@ -338,7 +337,7 @@ namespace xsd date (const xercesc::DOMElement& e, flags f, container* c) : B (e, f, c) { - parse (text_content (e)); + parse (tree::text_content (e)); } template @@ -403,7 +402,7 @@ namespace xsd time (const xercesc::DOMElement& e, flags f, container* c) : B (e, f, c) { - parse (text_content (e)); + parse (tree::text_content (e)); } template @@ -470,7 +469,7 @@ namespace xsd date_time (const xercesc::DOMElement& e, flags f, container* c) : B (e, f, c) { - parse (text_content (e)); + parse (tree::text_content (e)); } template @@ -557,7 +556,7 @@ namespace xsd duration (const xercesc::DOMElement& e, flags f, container* c) : B (e, f, c) { - parse (text_content (e)); + parse (tree::text_content (e)); } template diff --git a/xsd/libxsd/xsd/cxx/tree/parsing/decimal.hxx b/xsd/libxsd/xsd/cxx/tree/parsing/decimal.hxx index 636c0f5..b615d3c 100644 --- a/xsd/libxsd/xsd/cxx/tree/parsing/decimal.hxx +++ b/xsd/libxsd/xsd/cxx/tree/parsing/decimal.hxx @@ -1,6 +1,5 @@ // file : xsd/cxx/tree/parsing/decimal.hxx -// author : Boris Kolpackov -// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file #ifndef XSD_CXX_TREE_PARSING_DECIMAL_HXX @@ -45,7 +44,7 @@ namespace xsd double traits:: create (const xercesc::DOMElement& e, flags f, container* c) { - return create (text_content (e), 0, f, c); + return create (tree::text_content (e), 0, f, c); } template diff --git a/xsd/libxsd/xsd/cxx/tree/parsing/double.hxx b/xsd/libxsd/xsd/cxx/tree/parsing/double.hxx index 1507ccf..4466f7d 100644 --- a/xsd/libxsd/xsd/cxx/tree/parsing/double.hxx +++ b/xsd/libxsd/xsd/cxx/tree/parsing/double.hxx @@ -1,6 +1,5 @@ // file : xsd/cxx/tree/parsing/double.hxx -// author : Boris Kolpackov -// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file #ifndef XSD_CXX_TREE_PARSING_DOUBLE_HXX @@ -45,7 +44,7 @@ namespace xsd double traits:: create (const xercesc::DOMElement& e, flags f, container* c) { - return create (text_content (e), 0, f, c); + return create (tree::text_content (e), 0, f, c); } template diff --git a/xsd/libxsd/xsd/cxx/tree/parsing/element-map.txx b/xsd/libxsd/xsd/cxx/tree/parsing/element-map.txx index bb9a4c6..6ac9674 100644 --- a/xsd/libxsd/xsd/cxx/tree/parsing/element-map.txx +++ b/xsd/libxsd/xsd/cxx/tree/parsing/element-map.txx @@ -1,6 +1,5 @@ // file : xsd/cxx/tree/parsing/element-map.txx -// author : Boris Kolpackov -// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file #ifndef XSD_CXX_TREE_PARSING_ELEMENT_MAP_TXX @@ -17,7 +16,7 @@ namespace xsd namespace tree { template - std::auto_ptr > element_map:: + XSD_AUTO_PTR > element_map:: parse (const xercesc::DOMElement& e, flags f) { const qualified_name n (xml::dom::name (e)); @@ -30,10 +29,10 @@ namespace xsd } template - std::auto_ptr > + XSD_AUTO_PTR > parser_impl (const xercesc::DOMElement& e, flags f) { - return std::auto_ptr > (new T (e, f)); + return XSD_AUTO_PTR > (new T (e, f)); } } } diff --git a/xsd/libxsd/xsd/cxx/tree/parsing/float.hxx b/xsd/libxsd/xsd/cxx/tree/parsing/float.hxx index 3e34f93..ee582e5 100644 --- a/xsd/libxsd/xsd/cxx/tree/parsing/float.hxx +++ b/xsd/libxsd/xsd/cxx/tree/parsing/float.hxx @@ -1,6 +1,5 @@ // file : xsd/cxx/tree/parsing/float.hxx -// author : Boris Kolpackov -// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file #ifndef XSD_CXX_TREE_PARSING_FLOAT_HXX @@ -45,7 +44,7 @@ namespace xsd float traits:: create (const xercesc::DOMElement& e, flags f, container* c) { - return create (text_content (e), 0, f, c); + return create (tree::text_content (e), 0, f, c); } template diff --git a/xsd/libxsd/xsd/cxx/tree/parsing/int.hxx b/xsd/libxsd/xsd/cxx/tree/parsing/int.hxx index d996d3a..b4eec88 100644 --- a/xsd/libxsd/xsd/cxx/tree/parsing/int.hxx +++ b/xsd/libxsd/xsd/cxx/tree/parsing/int.hxx @@ -1,6 +1,5 @@ // file : xsd/cxx/tree/parsing/int.hxx -// author : Boris Kolpackov -// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file #ifndef XSD_CXX_TREE_PARSING_INT_HXX @@ -41,7 +40,7 @@ namespace xsd int traits:: create (const xercesc::DOMElement& e, flags f, container* c) { - return create (text_content (e), 0, f, c); + return create (tree::text_content (e), 0, f, c); } template diff --git a/xsd/libxsd/xsd/cxx/tree/parsing/long.hxx b/xsd/libxsd/xsd/cxx/tree/parsing/long.hxx index 742ade1..070e66d 100644 --- a/xsd/libxsd/xsd/cxx/tree/parsing/long.hxx +++ b/xsd/libxsd/xsd/cxx/tree/parsing/long.hxx @@ -1,6 +1,5 @@ // file : xsd/cxx/tree/parsing/long.hxx -// author : Boris Kolpackov -// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file #ifndef XSD_CXX_TREE_PARSING_LONG_HXX @@ -41,7 +40,7 @@ namespace xsd long long traits:: create (const xercesc::DOMElement& e, flags f, container* c) { - return create (text_content (e), 0, f, c); + return create (tree::text_content (e), 0, f, c); } template diff --git a/xsd/libxsd/xsd/cxx/tree/parsing/short.hxx b/xsd/libxsd/xsd/cxx/tree/parsing/short.hxx index 3a7ead8..90d5144 100644 --- a/xsd/libxsd/xsd/cxx/tree/parsing/short.hxx +++ b/xsd/libxsd/xsd/cxx/tree/parsing/short.hxx @@ -1,6 +1,5 @@ // file : xsd/cxx/tree/parsing/short.hxx -// author : Boris Kolpackov -// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file #ifndef XSD_CXX_TREE_PARSING_SHORT_HXX @@ -41,7 +40,7 @@ namespace xsd short traits:: create (const xercesc::DOMElement& e, flags f, container* c) { - return create (text_content (e), 0, f, c); + return create (tree::text_content (e), 0, f, c); } template diff --git a/xsd/libxsd/xsd/cxx/tree/parsing/unsigned-byte.hxx b/xsd/libxsd/xsd/cxx/tree/parsing/unsigned-byte.hxx index ce336be..c172e93 100644 --- a/xsd/libxsd/xsd/cxx/tree/parsing/unsigned-byte.hxx +++ b/xsd/libxsd/xsd/cxx/tree/parsing/unsigned-byte.hxx @@ -1,6 +1,5 @@ // file : xsd/cxx/tree/parsing/unsigned-byte.hxx -// author : Boris Kolpackov -// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file #ifndef XSD_CXX_TREE_PARSING_UNSIGNED_BYTE_HXX @@ -41,7 +40,7 @@ namespace xsd unsigned char traits:: create (const xercesc::DOMElement& e, flags f, container* c) { - return create (text_content (e), 0, f, c); + return create (tree::text_content (e), 0, f, c); } template diff --git a/xsd/libxsd/xsd/cxx/tree/parsing/unsigned-int.hxx b/xsd/libxsd/xsd/cxx/tree/parsing/unsigned-int.hxx index e908dd0..07fb7f2 100644 --- a/xsd/libxsd/xsd/cxx/tree/parsing/unsigned-int.hxx +++ b/xsd/libxsd/xsd/cxx/tree/parsing/unsigned-int.hxx @@ -1,6 +1,5 @@ // file : xsd/cxx/tree/parsing/unsigned-int.hxx -// author : Boris Kolpackov -// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file #ifndef XSD_CXX_TREE_PARSING_UNSIGNED_INT_HXX @@ -41,7 +40,7 @@ namespace xsd unsigned int traits:: create (const xercesc::DOMElement& e, flags f, container* c) { - return create (text_content (e), 0, f, c); + return create (tree::text_content (e), 0, f, c); } template diff --git a/xsd/libxsd/xsd/cxx/tree/parsing/unsigned-long.hxx b/xsd/libxsd/xsd/cxx/tree/parsing/unsigned-long.hxx index 647b8dd..0036e0d 100644 --- a/xsd/libxsd/xsd/cxx/tree/parsing/unsigned-long.hxx +++ b/xsd/libxsd/xsd/cxx/tree/parsing/unsigned-long.hxx @@ -1,6 +1,5 @@ // file : xsd/cxx/tree/parsing/unsigned-long.hxx -// author : Boris Kolpackov -// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file #ifndef XSD_CXX_TREE_PARSING_UNSIGNED_LONG_HXX @@ -41,7 +40,7 @@ namespace xsd unsigned long long traits:: create (const xercesc::DOMElement& e, flags f, container* c) { - return create (text_content (e), 0, f, c); + return create (tree::text_content (e), 0, f, c); } template diff --git a/xsd/libxsd/xsd/cxx/tree/parsing/unsigned-short.hxx b/xsd/libxsd/xsd/cxx/tree/parsing/unsigned-short.hxx index f53c724..838a2a8 100644 --- a/xsd/libxsd/xsd/cxx/tree/parsing/unsigned-short.hxx +++ b/xsd/libxsd/xsd/cxx/tree/parsing/unsigned-short.hxx @@ -1,6 +1,5 @@ // file : xsd/cxx/tree/parsing/unsigned-short.hxx -// author : Boris Kolpackov -// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file #ifndef XSD_CXX_TREE_PARSING_UNSIGNED_SHORT_HXX @@ -41,7 +40,7 @@ namespace xsd unsigned short traits:: create (const xercesc::DOMElement& e, flags f, container* c) { - return create (text_content (e), 0, f, c); + return create (tree::text_content (e), 0, f, c); } template diff --git a/xsd/libxsd/xsd/cxx/tree/serialization.hxx b/xsd/libxsd/xsd/cxx/tree/serialization.hxx index 612185f..24b26e2 100644 --- a/xsd/libxsd/xsd/cxx/tree/serialization.hxx +++ b/xsd/libxsd/xsd/cxx/tree/serialization.hxx @@ -1,6 +1,5 @@ // file : xsd/cxx/tree/serialization.hxx -// author : Boris Kolpackov -// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file #ifndef XSD_CXX_TREE_SERIALIZATION_HXX diff --git a/xsd/libxsd/xsd/cxx/tree/serialization.txx b/xsd/libxsd/xsd/cxx/tree/serialization.txx index 29364f4..055f603 100644 --- a/xsd/libxsd/xsd/cxx/tree/serialization.txx +++ b/xsd/libxsd/xsd/cxx/tree/serialization.txx @@ -1,6 +1,5 @@ // file : xsd/cxx/tree/serialization.txx -// author : Boris Kolpackov -// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file #include @@ -92,9 +91,29 @@ namespace xsd // Insertion operators for type. // inline void - operator<< (xercesc::DOMElement& e, const type&) + operator<< (xercesc::DOMElement& e, const type& x) { xml::dom::clear (e); + + if (!x.null_content () && x.dom_content ().present ()) + { + // Clone the contents of the element. + // + using namespace xercesc; + + DOMDocument& doc (*e.getOwnerDocument ()); + const DOMElement& se (x.dom_content ().get ()); + DOMNamedNodeMap& sa (*se.getAttributes ()); + + for (XMLSize_t i (0), n (sa.getLength ()); i != n; ++i) + e.setAttributeNode ( + static_cast (doc.importNode (sa.item (i), true))); + + for (DOMNode* sn (se.getFirstChild ()); + sn != 0; + sn = sn->getNextSibling ()) + e.appendChild (doc.importNode (sn, true)); + } } inline void @@ -110,23 +129,30 @@ namespace xsd // Insertion operators for simple_type. // - template + template inline void - operator<< (xercesc::DOMElement& e, const simple_type&) + operator<< (xercesc::DOMElement& e, const simple_type& x) { - xml::dom::clear (e); + if (x.null_content ()) + xml::dom::clear (e); + else + e << x.text_content (); } - template + template inline void - operator<< (xercesc::DOMAttr&, const simple_type&) + operator<< (xercesc::DOMAttr& a, const simple_type& x) { + if (!x.null_content ()) + a << x.text_content (); } template inline void - operator<< (list_stream&, const simple_type&) + operator<< (list_stream& ls, const simple_type& x) { + if (!x.null_content ()) + ls << x.text_content (); } // Insertion operators for list. diff --git a/xsd/libxsd/xsd/cxx/tree/serialization/boolean.hxx b/xsd/libxsd/xsd/cxx/tree/serialization/boolean.hxx index ce34560..90978c4 100644 --- a/xsd/libxsd/xsd/cxx/tree/serialization/boolean.hxx +++ b/xsd/libxsd/xsd/cxx/tree/serialization/boolean.hxx @@ -1,6 +1,5 @@ // file : xsd/cxx/tree/serialization/boolean.hxx -// author : Boris Kolpackov -// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file #ifndef XSD_CXX_TREE_SERIALIZATION_BOOLEAN_HXX diff --git a/xsd/libxsd/xsd/cxx/tree/serialization/byte.hxx b/xsd/libxsd/xsd/cxx/tree/serialization/byte.hxx index 583eda9..bd7bceb 100644 --- a/xsd/libxsd/xsd/cxx/tree/serialization/byte.hxx +++ b/xsd/libxsd/xsd/cxx/tree/serialization/byte.hxx @@ -1,6 +1,5 @@ // file : xsd/cxx/tree/serialization/byte.hxx -// author : Boris Kolpackov -// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file #ifndef XSD_CXX_TREE_SERIALIZATION_BYTE_HXX diff --git a/xsd/libxsd/xsd/cxx/tree/serialization/date-time.txx b/xsd/libxsd/xsd/cxx/tree/serialization/date-time.txx index 1180e1c..c2a02d6 100644 --- a/xsd/libxsd/xsd/cxx/tree/serialization/date-time.txx +++ b/xsd/libxsd/xsd/cxx/tree/serialization/date-time.txx @@ -1,6 +1,5 @@ // file : xsd/cxx/tree/serialization/date-time.txx -// author : Boris Kolpackov -// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file #include diff --git a/xsd/libxsd/xsd/cxx/tree/serialization/decimal.hxx b/xsd/libxsd/xsd/cxx/tree/serialization/decimal.hxx index 971622f..6e48809 100644 --- a/xsd/libxsd/xsd/cxx/tree/serialization/decimal.hxx +++ b/xsd/libxsd/xsd/cxx/tree/serialization/decimal.hxx @@ -1,6 +1,5 @@ // file : xsd/cxx/tree/serialization/decimal.hxx -// author : Boris Kolpackov -// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file #ifndef XSD_CXX_TREE_SERIALIZATION_DECIMAL_HXX diff --git a/xsd/libxsd/xsd/cxx/tree/serialization/double.hxx b/xsd/libxsd/xsd/cxx/tree/serialization/double.hxx index 6d21536..bc4d5c4 100644 --- a/xsd/libxsd/xsd/cxx/tree/serialization/double.hxx +++ b/xsd/libxsd/xsd/cxx/tree/serialization/double.hxx @@ -1,6 +1,5 @@ // file : xsd/cxx/tree/serialization/double.hxx -// author : Boris Kolpackov -// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file #ifndef XSD_CXX_TREE_SERIALIZATION_DOUBLE_HXX diff --git a/xsd/libxsd/xsd/cxx/tree/serialization/element-map.txx b/xsd/libxsd/xsd/cxx/tree/serialization/element-map.txx index 9870ff2..63149f4 100644 --- a/xsd/libxsd/xsd/cxx/tree/serialization/element-map.txx +++ b/xsd/libxsd/xsd/cxx/tree/serialization/element-map.txx @@ -1,6 +1,5 @@ // file : xsd/cxx/tree/serialization/element-map.txx -// author : Boris Kolpackov -// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file #ifndef XSD_CXX_TREE_SERIALIZATION_ELEMENT_MAP_TXX diff --git a/xsd/libxsd/xsd/cxx/tree/serialization/float.hxx b/xsd/libxsd/xsd/cxx/tree/serialization/float.hxx index 2d37ae6..9aa79b0 100644 --- a/xsd/libxsd/xsd/cxx/tree/serialization/float.hxx +++ b/xsd/libxsd/xsd/cxx/tree/serialization/float.hxx @@ -1,6 +1,5 @@ // file : xsd/cxx/tree/serialization/float.hxx -// author : Boris Kolpackov -// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file #ifndef XSD_CXX_TREE_SERIALIZATION_FLOAT_HXX diff --git a/xsd/libxsd/xsd/cxx/tree/serialization/int.hxx b/xsd/libxsd/xsd/cxx/tree/serialization/int.hxx index f88d6b8..f96124a 100644 --- a/xsd/libxsd/xsd/cxx/tree/serialization/int.hxx +++ b/xsd/libxsd/xsd/cxx/tree/serialization/int.hxx @@ -1,6 +1,5 @@ // file : xsd/cxx/tree/serialization/int.hxx -// author : Boris Kolpackov -// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file #ifndef XSD_CXX_TREE_SERIALIZATION_INT_HXX diff --git a/xsd/libxsd/xsd/cxx/tree/serialization/long.hxx b/xsd/libxsd/xsd/cxx/tree/serialization/long.hxx index c37338b..98a4632 100644 --- a/xsd/libxsd/xsd/cxx/tree/serialization/long.hxx +++ b/xsd/libxsd/xsd/cxx/tree/serialization/long.hxx @@ -1,6 +1,5 @@ // file : xsd/cxx/tree/serialization/long.hxx -// author : Boris Kolpackov -// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file #ifndef XSD_CXX_TREE_SERIALIZATION_LONG_HXX diff --git a/xsd/libxsd/xsd/cxx/tree/serialization/short.hxx b/xsd/libxsd/xsd/cxx/tree/serialization/short.hxx index 7d885c1..f8a9b94 100644 --- a/xsd/libxsd/xsd/cxx/tree/serialization/short.hxx +++ b/xsd/libxsd/xsd/cxx/tree/serialization/short.hxx @@ -1,6 +1,5 @@ // file : xsd/cxx/tree/serialization/short.hxx -// author : Boris Kolpackov -// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file #ifndef XSD_CXX_TREE_SERIALIZATION_SHORT_HXX diff --git a/xsd/libxsd/xsd/cxx/tree/serialization/unsigned-byte.hxx b/xsd/libxsd/xsd/cxx/tree/serialization/unsigned-byte.hxx index 114f1a1..f30c575 100644 --- a/xsd/libxsd/xsd/cxx/tree/serialization/unsigned-byte.hxx +++ b/xsd/libxsd/xsd/cxx/tree/serialization/unsigned-byte.hxx @@ -1,6 +1,5 @@ // file : xsd/cxx/tree/serialization/unsigned-byte.hxx -// author : Boris Kolpackov -// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file #ifndef XSD_CXX_TREE_SERIALIZATION_UNSIGNED_BYTE_HXX diff --git a/xsd/libxsd/xsd/cxx/tree/serialization/unsigned-int.hxx b/xsd/libxsd/xsd/cxx/tree/serialization/unsigned-int.hxx index f91fe21..7dbb3a8 100644 --- a/xsd/libxsd/xsd/cxx/tree/serialization/unsigned-int.hxx +++ b/xsd/libxsd/xsd/cxx/tree/serialization/unsigned-int.hxx @@ -1,6 +1,5 @@ // file : xsd/cxx/tree/serialization/unsigned-int.hxx -// author : Boris Kolpackov -// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file #ifndef XSD_CXX_TREE_SERIALIZATION_UNSIGNED_INT_HXX diff --git a/xsd/libxsd/xsd/cxx/tree/serialization/unsigned-long.hxx b/xsd/libxsd/xsd/cxx/tree/serialization/unsigned-long.hxx index f5f12f3..8808e34 100644 --- a/xsd/libxsd/xsd/cxx/tree/serialization/unsigned-long.hxx +++ b/xsd/libxsd/xsd/cxx/tree/serialization/unsigned-long.hxx @@ -1,6 +1,5 @@ // file : xsd/cxx/tree/serialization/unsigned-long.hxx -// author : Boris Kolpackov -// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file #ifndef XSD_CXX_TREE_SERIALIZATION_UNSIGNED_LONG_HXX diff --git a/xsd/libxsd/xsd/cxx/tree/serialization/unsigned-short.hxx b/xsd/libxsd/xsd/cxx/tree/serialization/unsigned-short.hxx index 52437e0..ac3a448 100644 --- a/xsd/libxsd/xsd/cxx/tree/serialization/unsigned-short.hxx +++ b/xsd/libxsd/xsd/cxx/tree/serialization/unsigned-short.hxx @@ -1,6 +1,5 @@ // file : xsd/cxx/tree/serialization/unsigned-short.hxx -// author : Boris Kolpackov -// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file #ifndef XSD_CXX_TREE_SERIALIZATION_UNSIGNED_SHORT_HXX diff --git a/xsd/libxsd/xsd/cxx/tree/std-ostream-map.hxx b/xsd/libxsd/xsd/cxx/tree/std-ostream-map.hxx index 28619a5..836ee30 100644 --- a/xsd/libxsd/xsd/cxx/tree/std-ostream-map.hxx +++ b/xsd/libxsd/xsd/cxx/tree/std-ostream-map.hxx @@ -1,6 +1,5 @@ // file : xsd/cxx/tree/std-ostream-map.hxx -// author : Boris Kolpackov -// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file #ifndef XSD_CXX_TREE_STD_OSTREAM_MAP_HXX @@ -28,7 +27,7 @@ namespace xsd std_ostream_map (); void - register_type (const type_id&, inserter, bool override = true); + register_type (const type_id&, inserter, bool replace = true); void unregister_type (const type_id&); diff --git a/xsd/libxsd/xsd/cxx/tree/std-ostream-map.txx b/xsd/libxsd/xsd/cxx/tree/std-ostream-map.txx index 6a748ec..ef65ef2 100644 --- a/xsd/libxsd/xsd/cxx/tree/std-ostream-map.txx +++ b/xsd/libxsd/xsd/cxx/tree/std-ostream-map.txx @@ -1,6 +1,5 @@ // file : xsd/cxx/tree/std-ostream-map.txx -// author : Boris Kolpackov -// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file #include @@ -25,7 +24,7 @@ namespace xsd &inserter_impl, false); - typedef simple_type simple_type; + typedef simple_type simple_type; register_type ( typeid (simple_type), &inserter_impl, @@ -211,9 +210,9 @@ namespace xsd template void std_ostream_map:: - register_type (const type_id& tid, inserter i, bool override) + register_type (const type_id& tid, inserter i, bool replace) { - if (override || type_map_.find (&tid) == type_map_.end ()) + if (replace || type_map_.find (&tid) == type_map_.end ()) type_map_[&tid] = i; } diff --git a/xsd/libxsd/xsd/cxx/tree/std-ostream-operators.hxx b/xsd/libxsd/xsd/cxx/tree/std-ostream-operators.hxx index a7ab357..9a8f976 100644 --- a/xsd/libxsd/xsd/cxx/tree/std-ostream-operators.hxx +++ b/xsd/libxsd/xsd/cxx/tree/std-ostream-operators.hxx @@ -1,6 +1,5 @@ // file : xsd/cxx/tree/std-ostream-operators.hxx -// author : Boris Kolpackov -// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file #ifndef XSD_CXX_TREE_STD_OSTREAM_OPERATORS_HXX @@ -25,6 +24,7 @@ namespace xsd inline std::basic_ostream& operator<< (std::basic_ostream& os, const type&) { + // Not printing DOM content even if it's there. return os; } @@ -33,8 +33,11 @@ namespace xsd // template inline std::basic_ostream& - operator<< (std::basic_ostream& os, const simple_type&) + operator<< (std::basic_ostream& os, const simple_type& x) { + if (!x.null_content ()) + os << x.text_content (); + return os; } diff --git a/xsd/libxsd/xsd/cxx/tree/stream-extraction-map.hxx b/xsd/libxsd/xsd/cxx/tree/stream-extraction-map.hxx index dd4c79a..f57c435 100644 --- a/xsd/libxsd/xsd/cxx/tree/stream-extraction-map.hxx +++ b/xsd/libxsd/xsd/cxx/tree/stream-extraction-map.hxx @@ -1,15 +1,16 @@ // file : xsd/cxx/tree/stream-extraction-map.hxx -// author : Boris Kolpackov -// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file #ifndef XSD_CXX_TREE_STREAM_EXTRACTION_MAP_HXX #define XSD_CXX_TREE_STREAM_EXTRACTION_MAP_HXX #include -#include // std::auto_ptr +#include // std::auto_ptr/unique_ptr #include // std::size_t +#include // XSD_AUTO_PTR + #include #include #include @@ -24,7 +25,7 @@ namespace xsd struct stream_extraction_map { typedef xml::qualified_name qualified_name; - typedef std::auto_ptr (*extractor) ( + typedef XSD_AUTO_PTR (*extractor) ( istream&, flags, container*); public: @@ -33,12 +34,12 @@ namespace xsd void register_type (const qualified_name& name, extractor, - bool override = true); + bool replace = true); void unregister_type (const qualified_name& name); - std::auto_ptr + XSD_AUTO_PTR extract (istream&, flags, container*); public: @@ -82,7 +83,7 @@ namespace xsd // // template - std::auto_ptr + XSD_AUTO_PTR extractor_impl (istream&, flags, container*); diff --git a/xsd/libxsd/xsd/cxx/tree/stream-extraction-map.txx b/xsd/libxsd/xsd/cxx/tree/stream-extraction-map.txx index a4e429e..61dd306 100644 --- a/xsd/libxsd/xsd/cxx/tree/stream-extraction-map.txx +++ b/xsd/libxsd/xsd/cxx/tree/stream-extraction-map.txx @@ -1,6 +1,5 @@ // file : xsd/cxx/tree/stream-extraction-map.txx -// author : Boris Kolpackov -// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file #include @@ -31,7 +30,7 @@ namespace xsd &extractor_impl, false); - typedef simple_type simple_type; + typedef simple_type simple_type; register_type ( qualified_name (bits::any_simple_type (), xsd), &extractor_impl, @@ -219,9 +218,9 @@ namespace xsd void stream_extraction_map:: register_type (const qualified_name& name, extractor e, - bool override) + bool replace) { - if (override || type_map_.find (name) == type_map_.end ()) + if (replace || type_map_.find (name) == type_map_.end ()) type_map_[name] = e; } @@ -233,11 +232,34 @@ namespace xsd } template - std::auto_ptr stream_extraction_map:: + XSD_AUTO_PTR stream_extraction_map:: extract (istream& s, flags f, container* c) { - std::basic_string name, ns; - s >> ns >> name; + std::basic_string ns, name; + + // The namespace and name strings are pooled. + // + std::size_t id; + istream_common::as_size as_size (id); + s >> as_size; + + if (id != 0) + s.pool_string (id, ns); + else + { + s >> ns; + s.pool_add (ns); + } + + s >> as_size; + + if (id != 0) + s.pool_string (id, name); + else + { + s >> name; + s.pool_add (name); + } if (extractor e = find (qualified_name (name, ns))) { @@ -280,10 +302,10 @@ namespace xsd // // template - std::auto_ptr + XSD_AUTO_PTR extractor_impl (istream& s, flags f, container* c) { - return std::auto_ptr (new T (s, f, c)); + return XSD_AUTO_PTR (new T (s, f, c)); } diff --git a/xsd/libxsd/xsd/cxx/tree/stream-extraction.hxx b/xsd/libxsd/xsd/cxx/tree/stream-extraction.hxx index f82042f..ee39bcc 100644 --- a/xsd/libxsd/xsd/cxx/tree/stream-extraction.hxx +++ b/xsd/libxsd/xsd/cxx/tree/stream-extraction.hxx @@ -1,6 +1,5 @@ // file : xsd/cxx/tree/stream-extraction.hxx -// author : Boris Kolpackov -// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file #ifndef XSD_CXX_TREE_STREAM_EXTRACTION_HXX @@ -29,12 +28,18 @@ namespace xsd // simple_type // - template + template template - inline simple_type:: + inline simple_type:: simple_type (istream& s, flags f, container* c) - : type (s, f, c) + : type (s, f & ~flags::extract_content, c) { + if (f & flags::extract_content) + { + std::basic_string t; + s >> t; + this->content_.reset (new text_content_type (t)); + } } // fundamental_base @@ -55,7 +60,7 @@ namespace xsd template list:: list (istream& s, flags f, container* c) - : sequence (f, c) + : sequence (c) { std::size_t size; istream_common::as_size as_size (size); @@ -66,18 +71,15 @@ namespace xsd this->reserve (size); while (size--) - { - std::auto_ptr p (new T (s, f, c)); - this->push_back (p); - } + this->push_back (traits::create (s, f, c)); } } template template list:: - list (istream& s, flags f, container* c) - : sequence (f, c) + list (istream& s, flags, container* c) + : sequence (c) { std::size_t size; istream_common::as_size as_size (size); diff --git a/xsd/libxsd/xsd/cxx/tree/stream-insertion-map.hxx b/xsd/libxsd/xsd/cxx/tree/stream-insertion-map.hxx index e26a3da..c8a113b 100644 --- a/xsd/libxsd/xsd/cxx/tree/stream-insertion-map.hxx +++ b/xsd/libxsd/xsd/cxx/tree/stream-insertion-map.hxx @@ -1,6 +1,5 @@ // file : xsd/cxx/tree/stream-insertion-map.hxx -// author : Boris Kolpackov -// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file #ifndef XSD_CXX_TREE_STREAM_INSERTION_MAP_HXX @@ -34,7 +33,7 @@ namespace xsd register_type (const type_id&, const qualified_name& name, inserter, - bool override = true); + bool replace = true); void unregister_type (const type_id&); diff --git a/xsd/libxsd/xsd/cxx/tree/stream-insertion-map.txx b/xsd/libxsd/xsd/cxx/tree/stream-insertion-map.txx index 07bfa8b..78fbacb 100644 --- a/xsd/libxsd/xsd/cxx/tree/stream-insertion-map.txx +++ b/xsd/libxsd/xsd/cxx/tree/stream-insertion-map.txx @@ -1,6 +1,5 @@ // file : xsd/cxx/tree/stream-insertion-map.txx -// author : Boris Kolpackov -// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file #include @@ -32,7 +31,7 @@ namespace xsd &inserter_impl, false); - typedef simple_type simple_type; + typedef simple_type simple_type; register_type ( typeid (simple_type), qualified_name (bits::any_simple_type (), xsd), @@ -248,9 +247,9 @@ namespace xsd register_type (const type_id& tid, const qualified_name& name, inserter i, - bool override) + bool replace) { - if (override || type_map_.find (&tid) == type_map_.end ()) + if (replace || type_map_.find (&tid) == type_map_.end ()) type_map_[&tid] = type_info (name, i); } @@ -269,7 +268,24 @@ namespace xsd { const qualified_name& qn (ti->name ()); - s << qn.namespace_ () << qn.name (); + // Pool the namespace and name strings. + // + const std::basic_string& ns (qn.namespace_ ()); + const std::basic_string& n (qn.name ()); + + std::size_t ns_id (s.pool_string (ns)); + std::size_t n_id (s.pool_string (n)); + + s << ostream_common::as_size (ns_id); + + if (ns_id == 0) + s << ns; + + s << ostream_common::as_size (n_id); + + if (n_id == 0) + s << n; + ti->inserter () (s, x); } else diff --git a/xsd/libxsd/xsd/cxx/tree/stream-insertion.hxx b/xsd/libxsd/xsd/cxx/tree/stream-insertion.hxx index c345e80..b04846f 100644 --- a/xsd/libxsd/xsd/cxx/tree/stream-insertion.hxx +++ b/xsd/libxsd/xsd/cxx/tree/stream-insertion.hxx @@ -1,6 +1,5 @@ // file : xsd/cxx/tree/stream-insertion.hxx -// author : Boris Kolpackov -// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file #ifndef XSD_CXX_TREE_STREAM_INSERTION_HXX @@ -24,15 +23,19 @@ namespace xsd inline ostream& operator<< (ostream& s, const type&) { + // Not saving DOM content even if it's there. return s; } // simple_type // - template + template inline ostream& - operator<< (ostream& s, const simple_type&) + operator<< (ostream& s, const simple_type& x) { + if (!x.null_content ()) + s << x.text_content (); + return s; } diff --git a/xsd/libxsd/xsd/cxx/tree/text.hxx b/xsd/libxsd/xsd/cxx/tree/text.hxx index 15f12dc..8808787 100644 --- a/xsd/libxsd/xsd/cxx/tree/text.hxx +++ b/xsd/libxsd/xsd/cxx/tree/text.hxx @@ -1,6 +1,5 @@ // file : xsd/cxx/tree/text.hxx -// author : Boris Kolpackov -// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file #ifndef XSD_CXX_TREE_TEXT_HXX diff --git a/xsd/libxsd/xsd/cxx/tree/text.txx b/xsd/libxsd/xsd/cxx/tree/text.txx index 2d83c71..6764d5c 100644 --- a/xsd/libxsd/xsd/cxx/tree/text.txx +++ b/xsd/libxsd/xsd/cxx/tree/text.txx @@ -1,6 +1,5 @@ // file : xsd/cxx/tree/text.txx -// author : Boris Kolpackov -// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file #include @@ -31,14 +30,7 @@ namespace xsd n->getNextSibling () == 0) { DOMText* t (static_cast (n)); - - // Berkeley DB XML DOM does not implement getLength(). - // -#ifndef DBXML_DOM return xml::transcode (t->getData (), t->getLength ()); -#else - return xml::transcode (t->getData ()); -#endif } std::basic_string r; @@ -51,14 +43,7 @@ namespace xsd case DOMNode::CDATA_SECTION_NODE: { DOMText* t (static_cast (n)); - - // Berkeley DB XML DOM does not implement getLength(). - // -#ifndef DBXML_DOM r += xml::transcode (t->getData (), t->getLength ()); -#else - r += xml::transcode (t->getData ()); -#endif break; } case DOMNode::ELEMENT_NODE: diff --git a/xsd/libxsd/xsd/cxx/tree/type-factory-map.hxx b/xsd/libxsd/xsd/cxx/tree/type-factory-map.hxx index 7e849db..b2558c7 100644 --- a/xsd/libxsd/xsd/cxx/tree/type-factory-map.hxx +++ b/xsd/libxsd/xsd/cxx/tree/type-factory-map.hxx @@ -1,6 +1,5 @@ // file : xsd/cxx/tree/type-factory-map.hxx -// author : Boris Kolpackov -// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file #ifndef XSD_CXX_TREE_TYPE_FACTORY_MAP_HXX @@ -8,11 +7,13 @@ #include #include -#include // std::auto_ptr +#include // std::auto_ptr/unique_ptr #include // std::size_t #include +#include // XSD_AUTO_PTR + #include #include @@ -26,16 +27,16 @@ namespace xsd struct type_factory_map { typedef xml::qualified_name qualified_name; - typedef std::auto_ptr (*factory) (const xercesc::DOMElement&, - flags, - container*); + typedef XSD_AUTO_PTR (*factory) (const xercesc::DOMElement&, + flags, + container*); public: type_factory_map (); void register_type (const qualified_name& name, factory, - bool override = true); + bool replace = true); void unregister_type (const qualified_name& name); @@ -49,7 +50,7 @@ namespace xsd unregister_element (const qualified_name& root, const qualified_name& subst); - std::auto_ptr + XSD_AUTO_PTR create (const C* name, // element name const C* ns, // element namespace factory static_type, @@ -66,7 +67,7 @@ namespace xsd private: template - static std::auto_ptr + static XSD_AUTO_PTR traits_adapter (const xercesc::DOMElement&, flags, container*); private: @@ -132,7 +133,7 @@ namespace xsd // // template - std::auto_ptr + XSD_AUTO_PTR factory_impl (const xercesc::DOMElement&, flags, container*); // diff --git a/xsd/libxsd/xsd/cxx/tree/type-factory-map.txx b/xsd/libxsd/xsd/cxx/tree/type-factory-map.txx index b9e0a06..e1fe0cc 100644 --- a/xsd/libxsd/xsd/cxx/tree/type-factory-map.txx +++ b/xsd/libxsd/xsd/cxx/tree/type-factory-map.txx @@ -1,6 +1,5 @@ // file : xsd/cxx/tree/type-factory-map.txx -// author : Boris Kolpackov -// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file #include @@ -38,7 +37,7 @@ namespace xsd &factory_impl, false); - typedef simple_type simple_type; + typedef simple_type simple_type; register_type ( qualified_name (bits::any_simple_type (), xsd), &factory_impl, @@ -226,9 +225,9 @@ namespace xsd void type_factory_map:: register_type (const qualified_name& name, factory f, - bool override) + bool replace) { - if (override || type_map_.find (name) == type_map_.end ()) + if (replace || type_map_.find (name) == type_map_.end ()) type_map_[name] = f; } @@ -273,7 +272,7 @@ namespace xsd } template - std::auto_ptr type_factory_map:: + XSD_AUTO_PTR type_factory_map:: create (const C* name, const C* ns, factory static_type, @@ -307,7 +306,7 @@ namespace xsd } if (f == 0) - return std::auto_ptr (0); // No match. + return XSD_AUTO_PTR (); // No match. // Check for xsi:type // @@ -326,11 +325,10 @@ namespace xsd template template - std::auto_ptr type_factory_map:: + XSD_AUTO_PTR type_factory_map:: traits_adapter (const xercesc::DOMElement& e, flags f, container* c) { - std::auto_ptr r (traits::create (e, f, c)); - return std::auto_ptr (r.release ()); + return XSD_AUTO_PTR (traits::create (e, f, c)); } template @@ -428,10 +426,10 @@ namespace xsd // // template - std::auto_ptr + XSD_AUTO_PTR factory_impl (const xercesc::DOMElement& e, flags f, container* c) { - return std::auto_ptr (new T (e, f, c)); + return XSD_AUTO_PTR (new T (e, f, c)); } // diff --git a/xsd/libxsd/xsd/cxx/tree/type-serializer-map.hxx b/xsd/libxsd/xsd/cxx/tree/type-serializer-map.hxx index 491ad3b..f461b7d 100644 --- a/xsd/libxsd/xsd/cxx/tree/type-serializer-map.hxx +++ b/xsd/libxsd/xsd/cxx/tree/type-serializer-map.hxx @@ -1,6 +1,5 @@ // file : xsd/cxx/tree/type-serializer-map.hxx -// author : Boris Kolpackov -// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file #ifndef XSD_CXX_TREE_TYPE_SERIALIZER_MAP_HXX @@ -16,6 +15,7 @@ #include #include +#include #include // namespace_infomap namespace xsd @@ -35,7 +35,7 @@ namespace xsd register_type (const type_id&, const qualified_name& name, serializer, - bool override = true); + bool replace = true); void unregister_type (const type_id&); @@ -70,7 +70,7 @@ namespace xsd // Create DOMDocument with root element suitable for serializing // x into it. // - xml::dom::auto_ptr + XSD_DOM_AUTO_PTR serialize (const C* name, // element name const C* ns, // element namespace const xml::dom::namespace_infomap&, diff --git a/xsd/libxsd/xsd/cxx/tree/type-serializer-map.txx b/xsd/libxsd/xsd/cxx/tree/type-serializer-map.txx index 859331f..44a2204 100644 --- a/xsd/libxsd/xsd/cxx/tree/type-serializer-map.txx +++ b/xsd/libxsd/xsd/cxx/tree/type-serializer-map.txx @@ -1,6 +1,5 @@ // file : xsd/cxx/tree/type-serializer-map.txx -// author : Boris Kolpackov -// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file #include @@ -12,8 +11,6 @@ #include #include -#include - namespace xsd { namespace cxx @@ -39,7 +36,7 @@ namespace xsd &serializer_impl, false); - typedef simple_type simple_type; + typedef simple_type simple_type; register_type ( typeid (simple_type), qualified_name (bits::any_simple_type (), xsd), @@ -255,9 +252,9 @@ namespace xsd register_type (const type_id& tid, const qualified_name& name, serializer s, - bool override) + bool replace) { - if (override || type_map_.find (&tid) == type_map_.end ()) + if (replace || type_map_.find (&tid) == type_map_.end ()) type_map_[&tid] = type_info (name, s); } @@ -399,7 +396,7 @@ namespace xsd } template - xml::dom::auto_ptr type_serializer_map:: + XSD_DOM_AUTO_PTR type_serializer_map:: serialize (const C* name, const C* ns, const xml::dom::namespace_infomap& m, diff --git a/xsd/libxsd/xsd/cxx/tree/types.hxx b/xsd/libxsd/xsd/cxx/tree/types.hxx index 299824f..288a291 100644 --- a/xsd/libxsd/xsd/cxx/tree/types.hxx +++ b/xsd/libxsd/xsd/cxx/tree/types.hxx @@ -1,6 +1,5 @@ // file : xsd/cxx/tree/types.hxx -// author : Boris Kolpackov -// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file /** @@ -272,6 +271,29 @@ namespace xsd } }; + /** + * @brief %string comparison operator. + * + * @return True if the strings are equal, false otherwise. + */ + template + inline bool + operator== (const string& a, const string& b) + { + return static_cast&> (a) == b; + } + + /** + * @brief %string comparison operator. + * + * @return True if the strings are not equal, false otherwise. + */ + template + inline bool + operator!= (const string& a, const string& b) + { + return !(a == b); + } /** * @brief Class corresponding to the XML Schema normalizedString @@ -1014,7 +1036,7 @@ namespace xsd * @brief Default constructor creates no elements. */ nmtokens () - : base_type (0, this) + : base_type (this) { } @@ -1120,6 +1142,31 @@ namespace xsd //@} }; + /** + * @brief %nmtokens comparison operator. + * + * @return True if the lists of nmtokens are equal, false otherwise. + */ + template + inline bool + operator== (const nmtokens& a, + const nmtokens& b) + { + return static_cast&> (a) == b; + } + + /** + * @brief %nmtokens comparison operator. + * + * @return True if the lists of nmtokens are not equal, false otherwise. + */ + template + inline bool + operator!= (const nmtokens& a, + const nmtokens& b) + { + return !(a == b); + } /** * @brief Class corresponding to the XML Schema Name built-in @@ -2076,20 +2123,7 @@ namespace xsd virtual void _container (container*); - // The above override also hides other _container versions. We - // also cannot do using-declarations because of bugs in HP aCC3. - // - const container* - _container () const - { - return B::_container (); - } - - container* - _container () - { - return B::_container (); - } + using B::_container; //@endcond @@ -2483,7 +2517,7 @@ namespace xsd * @brief Default constructor creates no elements. */ idrefs () - : base_type (0, this) + : base_type (this) { } @@ -2589,6 +2623,29 @@ namespace xsd //@} }; + /** + * @brief %idrefs comparison operator. + * + * @return True if the lists of idrefs are equal, false otherwise. + */ + template + inline bool + operator== (const idrefs& a, const idrefs& b) + { + return static_cast&> (a) == b; + } + + /** + * @brief %idrefs comparison operator. + * + * @return True if the lists of idrefs are not equal, false otherwise. + */ + template + inline bool + operator!= (const idrefs& a, const idrefs& b) + { + return !(a == b); + } /** * @brief Class corresponding to the XML Schema anyURI built-in @@ -2825,6 +2882,29 @@ namespace xsd friend class qname; }; + /** + * @brief %uri comparison operator. + * + * @return True if the uris are equal, false otherwise. + */ + template + inline bool + operator== (const uri& a, const uri& b) + { + return static_cast&> (a) == b; + } + + /** + * @brief %uri comparison operator. + * + * @return True if the uris are not equal, false otherwise. + */ + template + inline bool + operator!= (const uri& a, const uri& b) + { + return !(a == b); + } /** * @brief Class corresponding to the XML Schema QName built-in @@ -3225,6 +3305,29 @@ namespace xsd decode (const XMLCh*); }; + /** + * @brief %base64_binary comparison operator. + * + * @return True if the binaries are equal, false otherwise. + */ + template + inline bool + operator== (const base64_binary& a, const base64_binary& b) + { + return static_cast&> (a) == b; + } + + /** + * @brief %base64_binary comparison operator. + * + * @return True if the binaries are not equal, false otherwise. + */ + template + inline bool + operator!= (const base64_binary& a, const base64_binary& b) + { + return !(a == b); + } /** * @brief Class corresponding to the XML Schema hexBinary @@ -3418,6 +3521,29 @@ namespace xsd decode (const XMLCh*); }; + /** + * @brief %hex_binary comparison operator. + * + * @return True if the binaries are equal, false otherwise. + */ + template + inline bool + operator== (const hex_binary& a, const hex_binary& b) + { + return static_cast&> (a) == b; + } + + /** + * @brief %hex_binary comparison operator. + * + * @return True if the binaries are not equal, false otherwise. + */ + template + inline bool + operator!= (const hex_binary& a, const hex_binary& b) + { + return !(a == b); + } /** * @brief Class corresponding to the XML Schema ENTITY built-in @@ -3677,7 +3803,7 @@ namespace xsd * @brief Default constructor creates no elements. */ entities () - : base_type (0, this) + : base_type (this) { } @@ -3782,6 +3908,32 @@ namespace xsd container* c = 0); //@} }; + + /** + * @brief %entities comparison operator. + * + * @return True if the lists of entities are equal, false otherwise. + */ + template + inline bool + operator== (const entities& a, + const entities& b) + { + return static_cast&> (a) == b; + } + + /** + * @brief %entities comparison operator. + * + * @return True if the lists of entities are not equal, false otherwise. + */ + template + inline bool + operator!= (const entities& a, + const entities& b) + { + return !(a == b); + } } } } diff --git a/xsd/libxsd/xsd/cxx/tree/types.txx b/xsd/libxsd/xsd/cxx/tree/types.txx index 8d6d79f..8696171 100644 --- a/xsd/libxsd/xsd/cxx/tree/types.txx +++ b/xsd/libxsd/xsd/cxx/tree/types.txx @@ -1,13 +1,17 @@ // file : xsd/cxx/tree/types.txx -// author : Boris Kolpackov -// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file #include #include -#include -#include +#include // XSD_CXX11 + +#ifdef XSD_CXX11 +# include // std::unique_ptr +#else +# include +#endif #include @@ -168,11 +172,6 @@ namespace xsd return *this; } - // It would have been cleaner to mention empty and _container - // with the using-declaration but HP aCC3 can't handle it in - // some non-trivial to track down cases. So we are going to use - // the old-n-ugly this-> techniques. - // template void id:: _container (container* c) @@ -211,11 +210,6 @@ namespace xsd return new idref (*this, f, c); } - // It would have been cleaner to mention empty, _root, etc. with - // the using-declaration but HP aCC3 can't handle it in some - // non-trivial to track down cases. So we are going to use the - // old-n-ugly this-> techniques. - // template const _type* idref:: get_ () const @@ -321,52 +315,24 @@ namespace xsd return new base64_binary (*this, f, c); } - // It would have been cleaner to mention size, and data with the - // using-declaration but HP aCC3 can't handle it in some non- - // trivial to track down cases. So we are going to use the - // old-n- ugly this-> techniques. - // template std::basic_string base64_binary:: encode () const { - // HP aCC3 cannot handle using namespace xercesc; - // - using xercesc::Base64; + using namespace xercesc; std::basic_string str; -#if _XERCES_VERSION >= 30000 XMLSize_t n; - xml::std_memory_manager mm; - auto_array r ( - Base64::encode ( - reinterpret_cast (this->data ()), - static_cast (this->size ()), - &n, - &mm), - mm); - if (r) - { - str.reserve (n + 1); - str.resize (n); - - for (XMLSize_t i (0); i < n; ++i) - str[i] = C (r[i]); - } - else - { - //@@ throw - } +#ifdef XSD_CXX11 + std::unique_ptr r ( #else - unsigned int n; - - xml::std_memory_manager mm; auto_array r ( +#endif Base64::encode ( reinterpret_cast (this->data ()), - static_cast (this->size ()), + static_cast (this->size ()), &n, &mm), mm); @@ -376,14 +342,13 @@ namespace xsd str.reserve (n + 1); str.resize (n); - for (unsigned int i (0); i < n; ++i) + for (XMLSize_t i (0); i < n; ++i) str[i] = C (r[i]); } else { //@@ throw } -#endif return str; } @@ -392,28 +357,18 @@ namespace xsd void base64_binary:: decode (const XMLCh* src) { - // HP aCC3 cannot handle using namespace xercesc; - // - using xercesc::Base64; + using namespace xercesc; xml::std_memory_manager mm; - - // Xerces 2.6.0 and earlier do not have decodeToXMLByte which - // makes my life harder and your code slower. - // -#if _XERCES_VERSION >= 20700 - -#if _XERCES_VERSION >= 30000 XMLSize_t size; - auto_array data ( - Base64::decodeToXMLByte (src, &size, &mm, Base64::Conf_RFC2045), - mm); + +#ifdef XSD_CXX11 + std::unique_ptr data ( #else - unsigned int size; auto_array data ( +#endif Base64::decodeToXMLByte (src, &size, &mm, Base64::Conf_RFC2045), - mm); -#endif // _XERCES_VERSION >= 30000 + mm); if (data) { @@ -425,30 +380,6 @@ namespace xsd { //@@ throw } -#else - unsigned int size; - -#if _XERCES_VERSION >= 20600 // Xerces 2.5.0 does not have Conf_RFC2045. - auto_array data ( - Base64::decode (src, &size, &mm, Base64::Conf_RFC2045), - mm); -#else - auto_array data ( - Base64::decode (src, &size, &mm), mm); -#endif // _XERCES_VERSION >= 20600 - - if (data) - { - buffer tmp (size); - for (unsigned int i (0); i < size; ++i) - tmp.data ()[i] = static_cast (data[i]); - this->swap (tmp); // g++ 4.1 likes it qualified, not sure why. - } - else - { - //@@ throw - } -#endif //_XERCES_VERSION >= 20700 } @@ -496,11 +427,6 @@ namespace xsd return new hex_binary (*this, f, c); } - // It would have been cleaner to mention size, and data with the - // using-declaration but HP aCC3 can't handle it in some non- - // trivial to track down cases. So we are going to use the - // old-n-ugly this-> techniques. - // template std::basic_string hex_binary:: encode () const diff --git a/xsd/libxsd/xsd/cxx/tree/xdr-stream-common.hxx b/xsd/libxsd/xsd/cxx/tree/xdr-stream-common.hxx index ebc3d22..d3b6ce1 100644 --- a/xsd/libxsd/xsd/cxx/tree/xdr-stream-common.hxx +++ b/xsd/libxsd/xsd/cxx/tree/xdr-stream-common.hxx @@ -1,6 +1,5 @@ // file : xsd/cxx/tree/xdr-stream-common.hxx -// author : Boris Kolpackov -// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file #ifndef XSD_CXX_TREE_XDR_STREAM_COMMON_HXX diff --git a/xsd/libxsd/xsd/cxx/tree/xdr-stream-extraction.hxx b/xsd/libxsd/xsd/cxx/tree/xdr-stream-extraction.hxx index 012c1e4..d64825b 100644 --- a/xsd/libxsd/xsd/cxx/tree/xdr-stream-extraction.hxx +++ b/xsd/libxsd/xsd/cxx/tree/xdr-stream-extraction.hxx @@ -1,6 +1,5 @@ // file : xsd/cxx/tree/xdr-stream-extraction.hxx -// author : Boris Kolpackov -// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file #ifndef XSD_CXX_TREE_XDR_STREAM_EXTRACTION_HXX @@ -9,6 +8,19 @@ #include #include +// Of course BSD has to be different and name its functions u_intXX +// instead of uintXX. Plus it does not have XX == 8. +// +#if defined(__APPLE__) || defined(__FreeBSD__) || defined(__NetBSD__) +# if !defined(XSD_CXX_TREE_ASSUME_SUN_XDR) && !defined(xdr_int8_t) +# define xdr_int8_t(x, y) xdr_char(x, reinterpret_cast (y)) +# define xdr_uint8_t(x, y) xdr_u_char(x, reinterpret_cast (y)) +# define xdr_uint16_t xdr_u_int16_t +# define xdr_uint32_t xdr_u_int32_t +# define xdr_uint64_t xdr_u_int64_t +# endif +#endif + #include #include @@ -249,7 +261,7 @@ namespace xsd // Dangerous but fast. // x.clear (); - + if (n != 0) { x.resize (n); diff --git a/xsd/libxsd/xsd/cxx/tree/xdr-stream-insertion.hxx b/xsd/libxsd/xsd/cxx/tree/xdr-stream-insertion.hxx index 00031d2..113569f 100644 --- a/xsd/libxsd/xsd/cxx/tree/xdr-stream-insertion.hxx +++ b/xsd/libxsd/xsd/cxx/tree/xdr-stream-insertion.hxx @@ -1,6 +1,5 @@ // file : xsd/cxx/tree/xdr-stream-insertion.hxx -// author : Boris Kolpackov -// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file #ifndef XSD_CXX_TREE_XDR_STREAM_INSERTION_HXX @@ -9,6 +8,19 @@ #include #include +// Of course BSD has to be different and name its functions u_intXX +// instead of uintXX. Plus it does not have XX == 8. +// +#if defined(__APPLE__) || defined(__FreeBSD__) || defined(__NetBSD__) +# if !defined(XSD_CXX_TREE_ASSUME_SUN_XDR) && !defined(xdr_int8_t) +# define xdr_int8_t(x, y) xdr_char(x, reinterpret_cast (y)) +# define xdr_uint8_t(x, y) xdr_u_char(x, reinterpret_cast (y)) +# define xdr_uint16_t xdr_u_int16_t +# define xdr_uint32_t xdr_u_int32_t +# define xdr_uint64_t xdr_u_int64_t +# endif +#endif + #include #include diff --git a/xsd/libxsd/xsd/cxx/version.hxx b/xsd/libxsd/xsd/cxx/version.hxx index 69bd1a1..2e2312f 100644 --- a/xsd/libxsd/xsd/cxx/version.hxx +++ b/xsd/libxsd/xsd/cxx/version.hxx @@ -1,6 +1,5 @@ // file : xsd/cxx/version.hxx -// author : Boris Kolpackov -// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file #ifndef XSD_CXX_VERSION_HXX @@ -23,7 +22,7 @@ // 3.0.0.b2 02999952 // -#define XSD_STR_VERSION "3.3.0" -#define XSD_INT_VERSION 3030000L +#define XSD_STR_VERSION "4.0.0" +#define XSD_INT_VERSION 4000000L #endif // XSD_CXX_VERSION_HXX diff --git a/xsd/libxsd/xsd/cxx/xml/bits/literals.hxx b/xsd/libxsd/xsd/cxx/xml/bits/literals.hxx index 5b9fe99..51d08ad 100644 --- a/xsd/libxsd/xsd/cxx/xml/bits/literals.hxx +++ b/xsd/libxsd/xsd/cxx/xml/bits/literals.hxx @@ -1,6 +1,5 @@ // file : xsd/cxx/xml/bits/literals.hxx -// author : Boris Kolpackov -// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file #ifndef XSD_CXX_XML_BITS_LITERALS_HXX diff --git a/xsd/libxsd/xsd/cxx/xml/bits/literals.ixx b/xsd/libxsd/xsd/cxx/xml/bits/literals.ixx index f0ec6eb..bd8f4ed 100644 --- a/xsd/libxsd/xsd/cxx/xml/bits/literals.ixx +++ b/xsd/libxsd/xsd/cxx/xml/bits/literals.ixx @@ -1,6 +1,5 @@ // file : xsd/cxx/xml/bits/literals.ixx -// author : Boris Kolpackov -// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file #ifndef XSD_CXX_XML_BITS_LITERALS_IXX diff --git a/xsd/libxsd/xsd/cxx/xml/char-iso8859-1.hxx b/xsd/libxsd/xsd/cxx/xml/char-iso8859-1.hxx index c8ab507..309e8ef 100644 --- a/xsd/libxsd/xsd/cxx/xml/char-iso8859-1.hxx +++ b/xsd/libxsd/xsd/cxx/xml/char-iso8859-1.hxx @@ -1,6 +1,5 @@ // file : xsd/cxx/xml/char-iso8859-1.hxx -// author : Boris Kolpackov -// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file #ifndef XSD_CXX_XML_TRANSCODER diff --git a/xsd/libxsd/xsd/cxx/xml/char-iso8859-1.txx b/xsd/libxsd/xsd/cxx/xml/char-iso8859-1.txx index cbf7cd8..acef18c 100644 --- a/xsd/libxsd/xsd/cxx/xml/char-iso8859-1.txx +++ b/xsd/libxsd/xsd/cxx/xml/char-iso8859-1.txx @@ -1,9 +1,14 @@ // file : xsd/cxx/xml/char-iso8859-1.txx -// author : Boris Kolpackov -// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file -#include +#include // XSD_CXX11 + +#ifdef XSD_CXX11 +# include // std::unique_ptr +#else +# include +#endif namespace xsd { @@ -87,7 +92,12 @@ namespace xsd { const C* end (s + len); - auto_array r (new XMLCh[len + 1]); +#ifdef XSD_CXX11 + std::unique_ptr r ( +#else + auto_array r ( +#endif + new XMLCh[len + 1]); XMLCh* ir (r.get ()); for (const C* p (s); p < end; ++p) diff --git a/xsd/libxsd/xsd/cxx/xml/char-lcp.hxx b/xsd/libxsd/xsd/cxx/xml/char-lcp.hxx index c100bab..ce46229 100644 --- a/xsd/libxsd/xsd/cxx/xml/char-lcp.hxx +++ b/xsd/libxsd/xsd/cxx/xml/char-lcp.hxx @@ -1,6 +1,5 @@ // file : xsd/cxx/xml/char-lcp.hxx -// author : Boris Kolpackov -// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file #ifndef XSD_CXX_XML_TRANSCODER diff --git a/xsd/libxsd/xsd/cxx/xml/char-lcp.txx b/xsd/libxsd/xsd/cxx/xml/char-lcp.txx index 4603537..c71d92f 100644 --- a/xsd/libxsd/xsd/cxx/xml/char-lcp.txx +++ b/xsd/libxsd/xsd/cxx/xml/char-lcp.txx @@ -1,13 +1,19 @@ // file : xsd/cxx/xml/char-lcp.txx -// author : Boris Kolpackov -// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file #include // std::memcpy #include -#include +#include // XSD_CXX11 + +#ifdef XSD_CXX11 +# include // std::unique_ptr +#else +# include +#endif + #include namespace xsd @@ -21,7 +27,11 @@ namespace xsd to (const XMLCh* s) { std_memory_manager mm; +#ifdef XSD_CXX11 + std::unique_ptr r ( +#else auto_array r ( +#endif xercesc::XMLString::transcode (s, &mm), mm); return std::basic_string (r.get ()); } @@ -30,12 +40,21 @@ namespace xsd std::basic_string char_lcp_transcoder:: to (const XMLCh* s, std::size_t len) { - auto_array tmp (new XMLCh[len + 1]); +#ifdef XSD_CXX11 + std::unique_ptr tmp ( +#else + auto_array tmp ( +#endif + new XMLCh[len + 1]); std::memcpy (tmp.get (), s, len * sizeof (XMLCh)); tmp[len] = XMLCh (0); std_memory_manager mm; +#ifdef XSD_CXX11 + std::unique_ptr r ( +#else auto_array r ( +#endif xercesc::XMLString::transcode (tmp.get (), &mm), mm); tmp.reset (); diff --git a/xsd/libxsd/xsd/cxx/xml/char-utf8.hxx b/xsd/libxsd/xsd/cxx/xml/char-utf8.hxx index 719881b..afc923a 100644 --- a/xsd/libxsd/xsd/cxx/xml/char-utf8.hxx +++ b/xsd/libxsd/xsd/cxx/xml/char-utf8.hxx @@ -1,6 +1,5 @@ // file : xsd/cxx/xml/char-utf8.hxx -// author : Boris Kolpackov -// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file #ifndef XSD_CXX_XML_TRANSCODER diff --git a/xsd/libxsd/xsd/cxx/xml/char-utf8.txx b/xsd/libxsd/xsd/cxx/xml/char-utf8.txx index 9935daf..a6511be 100644 --- a/xsd/libxsd/xsd/cxx/xml/char-utf8.txx +++ b/xsd/libxsd/xsd/cxx/xml/char-utf8.txx @@ -1,9 +1,14 @@ // file : xsd/cxx/xml/char-utf8.txx -// author : Boris Kolpackov -// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file -#include +#include // XSD_CXX11 + +#ifdef XSD_CXX11 +# include // std::unique_ptr +#else +# include +#endif namespace xsd { @@ -184,7 +189,12 @@ namespace xsd if (!valid) throw invalid_utf8_string (); - auto_array r (new XMLCh[rl + 1]); +#ifdef XSD_CXX11 + std::unique_ptr r ( +#else + auto_array r ( +#endif + new XMLCh[rl + 1]); XMLCh* ir (r.get ()); unsigned int u (0); // Four byte UCS-4 char. diff --git a/xsd/libxsd/xsd/cxx/xml/dom/auto-ptr.hxx b/xsd/libxsd/xsd/cxx/xml/dom/auto-ptr.hxx index f22e652..fc8f194 100644 --- a/xsd/libxsd/xsd/cxx/xml/dom/auto-ptr.hxx +++ b/xsd/libxsd/xsd/cxx/xml/dom/auto-ptr.hxx @@ -1,11 +1,18 @@ // file : xsd/cxx/xml/dom/auto-ptr.hxx -// author : Boris Kolpackov -// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file #ifndef XSD_CXX_XML_DOM_AUTO_PTR_HXX #define XSD_CXX_XML_DOM_AUTO_PTR_HXX +#include // XSD_CXX11_* + +#ifdef XSD_CXX11 +# include // std::unique_ptr +# include // std::move +# include // std::remove_const +#endif + namespace xsd { namespace cxx @@ -14,9 +21,73 @@ namespace xsd { namespace dom { - // Simple auto_ptr version that calls release() instead of delete. - // +#ifdef XSD_CXX11 + template + struct deleter + { + void + operator() (T* p) const + { + if (p != 0) + const_cast::type*> (p)->release (); + } + }; + +#ifdef XSD_CXX11_TEMPLATE_ALIAS + template + using unique_ptr = std::unique_ptr>; +#else + template + class unique_ptr: public std::unique_ptr> + { + public: + typedef std::unique_ptr> base; + + typedef typename base::pointer pointer; + typedef T element_type; + typedef deleter deleter_type; + + unique_ptr (): base () {} + explicit unique_ptr (pointer p): base (p) {} + unique_ptr (pointer p, const deleter_type& d): base (p, d) {} + unique_ptr (pointer p, deleter_type&& d): base (p, std::move (d)) {} + unique_ptr (unique_ptr&& p): base (std::move (p)) {} + template + unique_ptr (unique_ptr&& p): base (std::move (p)) {} + template + unique_ptr (std::auto_ptr&& p): base (std::move (p)) {} + + unique_ptr& operator= (unique_ptr&& p) + { + static_cast (*this) = std::move (p); + return *this; + } + template + unique_ptr& operator= (unique_ptr&& p) + { + static_cast (*this) = std::move (p); + return *this; + } + +#ifdef XSD_CXX11_NULLPTR + unique_ptr (std::nullptr_t p): base (p) {} + + unique_ptr& operator= (std::nullptr_t p) + { + static_cast (*this) = p; + return *this; + } +#endif + }; +#endif // XSD_CXX11_TEMPLATE_ALIAS + +#define XSD_DOM_AUTO_PTR xsd::cxx::xml::dom::unique_ptr + +#else + // Simple auto_ptr version for C++98 that calls release() instead + // of delete. + // template struct remove_c { @@ -150,6 +221,10 @@ namespace xsd private: T* x_; }; + +#define XSD_DOM_AUTO_PTR xsd::cxx::xml::dom::auto_ptr + +#endif // XSD_CXX11 } } } diff --git a/xsd/libxsd/xsd/cxx/xml/dom/bits/error-handler-proxy.hxx b/xsd/libxsd/xsd/cxx/xml/dom/bits/error-handler-proxy.hxx index 83e9a7e..01111e1 100644 --- a/xsd/libxsd/xsd/cxx/xml/dom/bits/error-handler-proxy.hxx +++ b/xsd/libxsd/xsd/cxx/xml/dom/bits/error-handler-proxy.hxx @@ -1,6 +1,5 @@ // file : xsd/cxx/xml/dom/bits/error-handler-proxy.hxx -// author : Boris Kolpackov -// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file #ifndef XSD_CXX_XML_DOM_BITS_ERROR_HANDLER_PROXY_HXX diff --git a/xsd/libxsd/xsd/cxx/xml/dom/bits/error-handler-proxy.txx b/xsd/libxsd/xsd/cxx/xml/dom/bits/error-handler-proxy.txx index 23e71cd..7e5579b 100644 --- a/xsd/libxsd/xsd/cxx/xml/dom/bits/error-handler-proxy.txx +++ b/xsd/libxsd/xsd/cxx/xml/dom/bits/error-handler-proxy.txx @@ -1,6 +1,5 @@ // file : xsd/cxx/xml/dom/bits/error-handler-proxy.txx -// author : Boris Kolpackov -// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file #include @@ -53,24 +52,12 @@ namespace xsd xercesc::DOMLocator* loc (e.getLocation ()); -#if _XERCES_VERSION >= 30000 return eh_->handle ( transcode (loc->getURI ()), static_cast (loc->getLineNumber ()), static_cast (loc->getColumnNumber ()), s, transcode (e.getMessage ())); -#else - XMLSSize_t l (loc->getLineNumber ()); - XMLSSize_t c (loc->getColumnNumber ()); - - return eh_->handle ( - transcode (loc->getURI ()), - (l == -1 ? 0 : static_cast (l)), - (c == -1 ? 0 : static_cast (c)), - s, - transcode (e.getMessage ())); -#endif } } } diff --git a/xsd/libxsd/xsd/cxx/xml/dom/elements.hxx b/xsd/libxsd/xsd/cxx/xml/dom/elements.hxx index e8ce8d2..613b978 100644 --- a/xsd/libxsd/xsd/cxx/xml/dom/elements.hxx +++ b/xsd/libxsd/xsd/cxx/xml/dom/elements.hxx @@ -1,6 +1,5 @@ // file : xsd/cxx/xml/dom/elements.hxx -// author : Boris Kolpackov -// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file #ifndef XSD_CXX_XML_DOM_ELEMENTS_HXX diff --git a/xsd/libxsd/xsd/cxx/xml/dom/elements.txx b/xsd/libxsd/xsd/cxx/xml/dom/elements.txx index 540d0fb..c493676 100644 --- a/xsd/libxsd/xsd/cxx/xml/dom/elements.txx +++ b/xsd/libxsd/xsd/cxx/xml/dom/elements.txx @@ -1,6 +1,5 @@ // file : xsd/cxx/xml/dom/elements.txx -// author : Boris Kolpackov -// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file #include diff --git a/xsd/libxsd/xsd/cxx/xml/dom/parsing-header.hxx b/xsd/libxsd/xsd/cxx/xml/dom/parsing-header.hxx index d9a3695..f9ec033 100644 --- a/xsd/libxsd/xsd/cxx/xml/dom/parsing-header.hxx +++ b/xsd/libxsd/xsd/cxx/xml/dom/parsing-header.hxx @@ -1,6 +1,5 @@ // file : xsd/cxx/xml/dom/parsing-header.hxx -// author : Boris Kolpackov -// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file #ifndef XSD_CXX_XML_DOM_PARSING_HEADER_HXX diff --git a/xsd/libxsd/xsd/cxx/xml/dom/parsing-source.hxx b/xsd/libxsd/xsd/cxx/xml/dom/parsing-source.hxx index 2c90cf3..fac1006 100644 --- a/xsd/libxsd/xsd/cxx/xml/dom/parsing-source.hxx +++ b/xsd/libxsd/xsd/cxx/xml/dom/parsing-source.hxx @@ -1,6 +1,5 @@ // file : xsd/cxx/xml/dom/parsing-source.hxx -// author : Boris Kolpackov -// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file #ifndef XSD_CXX_XML_DOM_PARSING_SOURCE_HXX @@ -19,7 +18,6 @@ #include // properies #include - #include #include // name #include @@ -32,30 +30,47 @@ namespace xsd { namespace dom { - // Parser state object. Can be used for parsing element, attributes, - // or both. + // Parser state object. Can be used for parsing elements (and + // optionally text), attributes, or both. // template class parser { public: - parser (const xercesc::DOMElement& e, bool ep, bool ap); + parser (const xercesc::DOMElement& e, bool ep, bool tp, bool ap); + // Content parsing. + // bool - more_elements () + more_content () { - return next_element_ != 0; + return next_content_ != 0; } const xercesc::DOMElement& cur_element () { - return *static_cast (next_element_); + return *static_cast (next_content_); + } + + const xercesc::DOMText& + cur_text () + { + return *static_cast (next_content_); + } + + bool + cur_is_text () + { + return next_content_->getNodeType () != + xercesc::DOMNode::ELEMENT_NODE; } void - next_element (); + next_content (bool text); + // Attribute parsing. + // bool more_attributes () { @@ -88,7 +103,7 @@ namespace xsd private: const xercesc::DOMElement& element_; - const xercesc::DOMNode* next_element_; + const xercesc::DOMNode* next_content_; const xercesc::DOMNamedNodeMap* a_; XMLSize_t ai_; // Index of the next DOMAttr. @@ -102,28 +117,28 @@ namespace xsd const unsigned long no_muliple_imports = 0x00000800UL; template - xml::dom::auto_ptr + XSD_DOM_AUTO_PTR parse (xercesc::InputSource&, error_handler&, const properties&, unsigned long flags); template - xml::dom::auto_ptr + XSD_DOM_AUTO_PTR parse (xercesc::InputSource&, xercesc::DOMErrorHandler&, const properties&, unsigned long flags); template - xml::dom::auto_ptr + XSD_DOM_AUTO_PTR parse (const std::basic_string& uri, error_handler&, const properties&, unsigned long flags); template - xml::dom::auto_ptr + XSD_DOM_AUTO_PTR parse (const std::basic_string& uri, xercesc::DOMErrorHandler&, const properties&, diff --git a/xsd/libxsd/xsd/cxx/xml/dom/parsing-source.txx b/xsd/libxsd/xsd/cxx/xml/dom/parsing-source.txx index 50fa285..c789fa6 100644 --- a/xsd/libxsd/xsd/cxx/xml/dom/parsing-source.txx +++ b/xsd/libxsd/xsd/cxx/xml/dom/parsing-source.txx @@ -1,14 +1,10 @@ // file : xsd/cxx/xml/dom/parsing-source.txx -// author : Boris Kolpackov -// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file -#if _XERCES_VERSION >= 30000 -# include -# include -#else -# include -#endif +#include +#include + #include #include #include @@ -33,9 +29,9 @@ namespace xsd // template parser:: - parser (const xercesc::DOMElement& e, bool ep, bool ap) + parser (const xercesc::DOMElement& e, bool ep, bool tp, bool ap) : element_ (e), - next_element_ (0), + next_content_ (0), a_ (0), ai_ (0) { @@ -43,10 +39,21 @@ namespace xsd if (ep) { - for (next_element_ = e.getFirstChild (); - next_element_ != 0 && - next_element_->getNodeType () != DOMNode::ELEMENT_NODE; - next_element_ = next_element_->getNextSibling ()) /*noop*/; + for (next_content_ = e.getFirstChild ();; + next_content_ = next_content_->getNextSibling ()) + { + if (next_content_ == 0) + break; + + DOMNode::NodeType t (next_content_->getNodeType ()); + + if (t == DOMNode::ELEMENT_NODE) + break; + + if (tp && (t == DOMNode::TEXT_NODE || + t == DOMNode::CDATA_SECTION_NODE)) + break; + } } if (ap) @@ -58,20 +65,31 @@ namespace xsd template void parser:: - next_element () + next_content (bool tp) { using xercesc::DOMNode; - for (next_element_ = next_element_->getNextSibling (); - next_element_ != 0 && - next_element_->getNodeType () != DOMNode::ELEMENT_NODE; - next_element_ = next_element_->getNextSibling ())/*noop*/; + for (next_content_ = next_content_->getNextSibling ();; + next_content_ = next_content_->getNextSibling ()) + { + if (next_content_ == 0) + break; + + DOMNode::NodeType t (next_content_->getNodeType ()); + + if (t == DOMNode::ELEMENT_NODE) + break; + + if (tp && (t == DOMNode::TEXT_NODE || + t == DOMNode::CDATA_SECTION_NODE)) + break; + } } // parse() // template - xml::dom::auto_ptr + XSD_DOM_AUTO_PTR parse (xercesc::InputSource& is, error_handler& eh, const properties& prop, @@ -82,28 +100,13 @@ namespace xsd } template - auto_ptr + XSD_DOM_AUTO_PTR parse (xercesc::InputSource& is, xercesc::DOMErrorHandler& eh, const properties& prop, unsigned long flags) { - // HP aCC cannot handle using namespace xercesc; - // - using xercesc::DOMImplementationRegistry; - using xercesc::DOMImplementationLS; - using xercesc::DOMImplementation; - using xercesc::DOMDocument; -#if _XERCES_VERSION >= 30000 - using xercesc::DOMLSParser; - using xercesc::DOMConfiguration; -#else - using xercesc::DOMBuilder; -#endif - - using xercesc::Wrapper4InputSource; - using xercesc::XMLUni; - + using namespace xercesc; // Instantiate the DOM parser. // @@ -116,8 +119,7 @@ namespace xsd DOMImplementation* impl ( DOMImplementationRegistry::getDOMImplementation (ls_id)); -#if _XERCES_VERSION >= 30000 - auto_ptr parser ( + XSD_DOM_AUTO_PTR parser ( impl->createLSParser (DOMImplementationLS::MODE_SYNCHRONOUS, 0)); DOMConfiguration* conf (parser->getDomConfig ()); @@ -163,7 +165,6 @@ namespace xsd if (!(flags & no_muliple_imports)) conf->setParameter (XMLUni::fgXercesHandleMultipleImports, true); #endif - // This feature checks the schema grammar for additional // errors. We most likely do not need it when validating // instances (assuming the schema is valid). @@ -214,64 +215,9 @@ namespace xsd bits::error_handler_proxy ehp (eh); conf->setParameter (XMLUni::fgDOMErrorHandler, &ehp); -#else // _XERCES_VERSION >= 30000 - - // Same as above but for Xerces-C++ 2 series. - // - auto_ptr parser ( - impl->createDOMBuilder (DOMImplementationLS::MODE_SYNCHRONOUS, 0)); - - parser->setFeature (XMLUni::fgDOMComments, false); - parser->setFeature (XMLUni::fgDOMDatatypeNormalization, true); - parser->setFeature (XMLUni::fgDOMEntities, false); - parser->setFeature (XMLUni::fgDOMNamespaces, true); - parser->setFeature (XMLUni::fgDOMWhitespaceInElementContent, false); - - if (flags & dont_validate) - { - parser->setFeature (XMLUni::fgDOMValidation, false); - parser->setFeature (XMLUni::fgXercesSchema, false); - parser->setFeature (XMLUni::fgXercesSchemaFullChecking, false); - } - else - { - parser->setFeature (XMLUni::fgDOMValidation, true); - parser->setFeature (XMLUni::fgXercesSchema, true); - parser->setFeature (XMLUni::fgXercesSchemaFullChecking, false); - } - - parser->setFeature (XMLUni::fgXercesUserAdoptsDOMDocument, true); - - if (!prop.schema_location ().empty ()) - { - xml::string sl (prop.schema_location ()); - const void* v (sl.c_str ()); - - parser->setProperty ( - XMLUni::fgXercesSchemaExternalSchemaLocation, - const_cast (v)); - } - - if (!prop.no_namespace_schema_location ().empty ()) - { - xml::string sl (prop.no_namespace_schema_location ()); - const void* v (sl.c_str ()); - - parser->setProperty ( - XMLUni::fgXercesSchemaExternalNoNameSpaceSchemaLocation, - const_cast (v)); - } - - bits::error_handler_proxy ehp (eh); - parser->setErrorHandler (&ehp); - -#endif // _XERCES_VERSION >= 30000 - xercesc::Wrapper4InputSource wrap (&is, false); -#if _XERCES_VERSION >= 30000 - auto_ptr doc; - + XSD_DOM_AUTO_PTR doc; try { doc.reset (parser->parse (&wrap)); @@ -279,9 +225,7 @@ namespace xsd catch (const xercesc::DOMLSException&) { } -#else - auto_ptr doc (parser->parse (wrap)); -#endif + if (ehp.failed ()) doc.reset (); @@ -289,7 +233,7 @@ namespace xsd } template - xml::dom::auto_ptr + XSD_DOM_AUTO_PTR parse (const std::basic_string& uri, error_handler& eh, const properties& prop, @@ -300,26 +244,13 @@ namespace xsd } template - auto_ptr + XSD_DOM_AUTO_PTR parse (const std::basic_string& uri, xercesc::DOMErrorHandler& eh, const properties& prop, unsigned long flags) { - // HP aCC cannot handle using namespace xercesc; - // - using xercesc::DOMImplementationRegistry; - using xercesc::DOMImplementationLS; - using xercesc::DOMImplementation; - using xercesc::DOMDocument; -#if _XERCES_VERSION >= 30000 - using xercesc::DOMLSParser; - using xercesc::DOMConfiguration; -#else - using xercesc::DOMBuilder; -#endif - using xercesc::XMLUni; - + using namespace xercesc; // Instantiate the DOM parser. // @@ -332,8 +263,7 @@ namespace xsd DOMImplementation* impl ( DOMImplementationRegistry::getDOMImplementation (ls_id)); -#if _XERCES_VERSION >= 30000 - auto_ptr parser ( + XSD_DOM_AUTO_PTR parser ( impl->createLSParser(DOMImplementationLS::MODE_SYNCHRONOUS, 0)); DOMConfiguration* conf (parser->getDomConfig ()); @@ -430,63 +360,7 @@ namespace xsd bits::error_handler_proxy ehp (eh); conf->setParameter (XMLUni::fgDOMErrorHandler, &ehp); -#else // _XERCES_VERSION >= 30000 - - // Same as above but for Xerces-C++ 2 series. - // - auto_ptr parser ( - impl->createDOMBuilder(DOMImplementationLS::MODE_SYNCHRONOUS, 0)); - - parser->setFeature (XMLUni::fgDOMComments, false); - parser->setFeature (XMLUni::fgDOMDatatypeNormalization, true); - parser->setFeature (XMLUni::fgDOMEntities, false); - parser->setFeature (XMLUni::fgDOMNamespaces, true); - parser->setFeature (XMLUni::fgDOMWhitespaceInElementContent, false); - - if (flags & dont_validate) - { - parser->setFeature (XMLUni::fgDOMValidation, false); - parser->setFeature (XMLUni::fgXercesSchema, false); - parser->setFeature (XMLUni::fgXercesSchemaFullChecking, false); - } - else - { - parser->setFeature (XMLUni::fgDOMValidation, true); - parser->setFeature (XMLUni::fgXercesSchema, true); - parser->setFeature (XMLUni::fgXercesSchemaFullChecking, false); - } - - parser->setFeature (XMLUni::fgXercesUserAdoptsDOMDocument, true); - - if (!prop.schema_location ().empty ()) - { - xml::string sl (prop.schema_location ()); - const void* v (sl.c_str ()); - - parser->setProperty ( - XMLUni::fgXercesSchemaExternalSchemaLocation, - const_cast (v)); - } - - if (!prop.no_namespace_schema_location ().empty ()) - { - xml::string sl (prop.no_namespace_schema_location ()); - const void* v (sl.c_str ()); - - parser->setProperty ( - XMLUni::fgXercesSchemaExternalNoNameSpaceSchemaLocation, - const_cast (v)); - } - - bits::error_handler_proxy ehp (eh); - parser->setErrorHandler (&ehp); - -#endif // _XERCES_VERSION >= 30000 - - -#if _XERCES_VERSION >= 30000 - auto_ptr doc; - + XSD_DOM_AUTO_PTR doc; try { doc.reset (parser->parseURI (string (uri).c_str ())); @@ -494,10 +368,6 @@ namespace xsd catch (const xercesc::DOMLSException&) { } -#else - auto_ptr doc ( - parser->parseURI (string (uri).c_str ())); -#endif if (ehp.failed ()) doc.reset (); diff --git a/xsd/libxsd/xsd/cxx/xml/dom/serialization-header.hxx b/xsd/libxsd/xsd/cxx/xml/dom/serialization-header.hxx index 3b879b1..a3cbff4 100644 --- a/xsd/libxsd/xsd/cxx/xml/dom/serialization-header.hxx +++ b/xsd/libxsd/xsd/cxx/xml/dom/serialization-header.hxx @@ -1,6 +1,5 @@ // file : xsd/cxx/xml/dom/serialization-header.hxx -// author : Boris Kolpackov -// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file #ifndef XSD_CXX_XML_DOM_SERIALIZATION_HEADER_HXX diff --git a/xsd/libxsd/xsd/cxx/xml/dom/serialization-header.txx b/xsd/libxsd/xsd/cxx/xml/dom/serialization-header.txx index 3052b7e..6e58cfd 100644 --- a/xsd/libxsd/xsd/cxx/xml/dom/serialization-header.txx +++ b/xsd/libxsd/xsd/cxx/xml/dom/serialization-header.txx @@ -1,6 +1,5 @@ // file : xsd/cxx/xml/dom/serialization-header.txx -// author : Boris Kolpackov -// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file #include @@ -33,12 +32,8 @@ namespace xsd prefix (const C* ns, xercesc::DOMElement& e, const C* hint) { string xns (ns); - -#if _XERCES_VERSION >= 30000 const XMLCh* p (e.lookupPrefix (xns.c_str ())); -#else - const XMLCh* p (e.lookupNamespacePrefix (xns.c_str (), false)); -#endif + if (p != 0) return transcode (p); @@ -125,13 +120,7 @@ namespace xsd void clear (xercesc::DOMElement& e) { - // HP aCC cannot handle using namespace xercesc; - // - using xercesc::DOMNode; - using xercesc::DOMAttr; - using xercesc::DOMNamedNodeMap; - using xercesc::XMLString; - using xercesc::SchemaSymbols; + using namespace xercesc; // Remove child nodes. // diff --git a/xsd/libxsd/xsd/cxx/xml/dom/serialization-source.hxx b/xsd/libxsd/xsd/cxx/xml/dom/serialization-source.hxx index 325c1ec..9056917 100644 --- a/xsd/libxsd/xsd/cxx/xml/dom/serialization-source.hxx +++ b/xsd/libxsd/xsd/cxx/xml/dom/serialization-source.hxx @@ -1,6 +1,5 @@ // file : xsd/cxx/xml/dom/serialization-source.hxx -// author : Boris Kolpackov -// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file #ifndef XSD_CXX_XML_DOM_SERIALIZATION_SOURCE_HXX @@ -47,13 +46,19 @@ namespace xsd xercesc::DOMElement& create_element (const C* name, const C* ns, xercesc::DOMElement&); + // Add namespace declarations and schema locations. + // + template + void + add_namespaces (xercesc::DOMElement&, const namespace_infomap&); + // Serialization flags. // const unsigned long no_xml_declaration = 0x00010000UL; const unsigned long dont_pretty_print = 0x00020000UL; template - xml::dom::auto_ptr + XSD_DOM_AUTO_PTR serialize (const std::basic_string& root_element, const std::basic_string& root_element_namespace, const namespace_infomap& map, @@ -62,7 +67,7 @@ namespace xsd // This one helps Sun C++ to overcome its fears. // template - inline xml::dom::auto_ptr + inline XSD_DOM_AUTO_PTR serialize (const C* root_element, const C* root_element_namespace, const namespace_infomap& map, @@ -103,16 +108,12 @@ namespace xsd public: // I know, some of those consts are stupid. But that's what - // Xerces folks put into their interfaces and VC-7.1 thinks - // there are different signatures if one strips this fluff off. + // Xerces folks put into their interfaces and VC thinks there + // are different signatures if one strips this fluff off. // virtual void writeChars (const XMLByte* const buf, -#if _XERCES_VERSION >= 30000 const XMLSize_t size, -#else - const unsigned int size, -#endif xercesc::XMLFormatter* const) { // Ignore the write request if there was a stream failure and the diff --git a/xsd/libxsd/xsd/cxx/xml/dom/serialization-source.txx b/xsd/libxsd/xsd/cxx/xml/dom/serialization-source.txx index 2b27dd5..eed1196 100644 --- a/xsd/libxsd/xsd/cxx/xml/dom/serialization-source.txx +++ b/xsd/libxsd/xsd/cxx/xml/dom/serialization-source.txx @@ -1,18 +1,14 @@ // file : xsd/cxx/xml/dom/serialization-source.txx -// author : Boris Kolpackov -// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file #include // xercesc::fg* #include // chLatin_L, etc #include -#if _XERCES_VERSION >= 30000 -# include -# include -#else -# include -#endif +#include +#include + #include #include #include @@ -109,70 +105,19 @@ namespace xsd return *e; } - - // - // template - auto_ptr - serialize (const std::basic_string& el, - const std::basic_string& ns, - const namespace_infomap& map, - unsigned long) + void + add_namespaces (xercesc::DOMElement& el, + const namespace_infomap& map) { - // HP aCC cannot handle using namespace xercesc; - // - using xercesc::DOMImplementationRegistry; - using xercesc::DOMImplementation; - using xercesc::DOMDocument; - using xercesc::DOMElement; + using namespace xercesc; - // - // typedef std::basic_string string; typedef namespace_infomap infomap; typedef typename infomap::const_iterator infomap_iterator; C colon (':'), space (' '); - string prefix; - - if (!ns.empty ()) - { - infomap_iterator i (map.begin ()), e (map.end ()); - - for ( ;i != e; ++i) - { - if (i->second.name == ns) - { - prefix = i->first; - break; - } - } - - // Since this is the first namespace in document we don't - // need to worry about conflicts. - // - if (i == e) - prefix = xml::bits::first_prefix (); - } - - const XMLCh ls[] = {xercesc::chLatin_L, - xercesc::chLatin_S, - xercesc::chNull}; - - DOMImplementation* impl ( - DOMImplementationRegistry::getDOMImplementation (ls)); - - auto_ptr doc ( - impl->createDocument ( - (ns.empty () ? 0 : xml::string (ns).c_str ()), - xml::string ((prefix.empty () - ? el - : prefix + colon + el)).c_str (), - 0)); - - DOMElement* root (doc->getDocumentElement ()); - // Check if we need to provide xsi mapping. // bool xsi (false); @@ -214,14 +159,14 @@ namespace xsd // Empty prefix. // if (!i->second.name.empty ()) - root->setAttributeNS ( + el.setAttributeNS ( xercesc::XMLUni::fgXMLNSURIName, xml::string (xmlns_prefix).c_str (), xml::string (i->second.name).c_str ()); } else { - root->setAttributeNS ( + el.setAttributeNS ( xercesc::XMLUni::fgXMLNSURIName, xml::string (xmlns_prefix + colon + i->first).c_str (), xml::string (i->second.name).c_str ()); @@ -233,7 +178,7 @@ namespace xsd // if (xsi) xsi_prefix = dom::prefix (xml::bits::xsi_namespace (), - *root, + el, xml::bits::xsi_prefix ()); // Create xsi:schemaLocation and xsi:noNamespaceSchemaLocation @@ -265,7 +210,7 @@ namespace xsd if (!schema_location.empty ()) { - root->setAttributeNS ( + el.setAttributeNS ( xercesc::SchemaSymbols::fgURI_XSI, xml::string (xsi_prefix + colon + xml::bits::schema_location ()).c_str (), @@ -274,13 +219,68 @@ namespace xsd if (!no_namespace_schema_location.empty ()) { - root->setAttributeNS ( + el.setAttributeNS ( xercesc::SchemaSymbols::fgURI_XSI, xml::string ( xsi_prefix + colon + xml::bits::no_namespace_schema_location ()).c_str (), xml::string (no_namespace_schema_location).c_str ()); } + } + + // + // + template + XSD_DOM_AUTO_PTR + serialize (const std::basic_string& el, + const std::basic_string& ns, + const namespace_infomap& map, + unsigned long) + { + using namespace xercesc; + + typedef std::basic_string string; + typedef namespace_infomap infomap; + typedef typename infomap::const_iterator infomap_iterator; + + string prefix; + + if (!ns.empty ()) + { + infomap_iterator i (map.begin ()), e (map.end ()); + + for ( ;i != e; ++i) + { + if (i->second.name == ns) + { + prefix = i->first; + break; + } + } + + // Since this is the first namespace in document we don't + // need to worry about conflicts. + // + if (i == e) + prefix = xml::bits::first_prefix (); + } + + const XMLCh ls[] = {xercesc::chLatin_L, + xercesc::chLatin_S, + xercesc::chNull}; + + DOMImplementation* impl ( + DOMImplementationRegistry::getDOMImplementation (ls)); + + XSD_DOM_AUTO_PTR doc ( + impl->createDocument ( + (ns.empty () ? 0 : xml::string (ns).c_str ()), + xml::string ((prefix.empty () + ? el + : prefix + C (':') + el)).c_str (), + 0)); + + add_namespaces (*doc->getDocumentElement (), map); return doc; } @@ -294,18 +294,7 @@ namespace xsd xercesc::DOMErrorHandler& eh, unsigned long flags) { - // HP aCC cannot handle using namespace xercesc; - // - using xercesc::DOMImplementationRegistry; - using xercesc::DOMImplementation; -#if _XERCES_VERSION >= 30000 - using xercesc::DOMLSSerializer; - using xercesc::DOMConfiguration; - using xercesc::DOMLSOutput; -#else - using xercesc::DOMWriter; -#endif - using xercesc::XMLUni; + using namespace xercesc; const XMLCh ls[] = {xercesc::chLatin_L, xercesc::chLatin_S, @@ -316,8 +305,7 @@ namespace xsd bits::error_handler_proxy ehp (eh); -#if _XERCES_VERSION >= 30000 - xml::dom::auto_ptr writer ( + XSD_DOM_AUTO_PTR writer ( impl->createLSSerializer ()); DOMConfiguration* conf (writer->getDomConfig ()); @@ -332,46 +320,27 @@ namespace xsd if (!(flags & dont_pretty_print) && conf->canSetParameter (XMLUni::fgDOMWRTFormatPrettyPrint, true)) + { conf->setParameter (XMLUni::fgDOMWRTFormatPrettyPrint, true); + // Don't add extra new lines between first-level elements. + // + if (conf->canSetParameter (XMLUni::fgDOMWRTXercesPrettyPrint, true)) + conf->setParameter (XMLUni::fgDOMWRTXercesPrettyPrint, false); + } + // See if we need to write XML declaration. // if ((flags & no_xml_declaration) && conf->canSetParameter (XMLUni::fgDOMXMLDeclaration, false)) conf->setParameter (XMLUni::fgDOMXMLDeclaration, false); - xml::dom::auto_ptr out (impl->createLSOutput ()); + XSD_DOM_AUTO_PTR out (impl->createLSOutput ()); out->setEncoding (xml::string (encoding).c_str ()); out->setByteStream (&target); - bool r (writer->write (&doc, out.get ())); -#else - xml::dom::auto_ptr writer (impl->createDOMWriter ()); - - writer->setErrorHandler (&ehp); - writer->setEncoding (xml::string (encoding).c_str ()); - - // Set some nice features if the serializer supports them. - // - if (writer->canSetFeature ( - XMLUni::fgDOMWRTDiscardDefaultContent, true)) - writer->setFeature (XMLUni::fgDOMWRTDiscardDefaultContent, true); - - if (!(flags & dont_pretty_print) && - writer->canSetFeature (XMLUni::fgDOMWRTFormatPrettyPrint, true)) - writer->setFeature (XMLUni::fgDOMWRTFormatPrettyPrint, true); - - // See if we need to write XML declaration. - // - if ((flags & no_xml_declaration) && - writer->canSetFeature (XMLUni::fgDOMXMLDeclaration, false)) - writer->setFeature (XMLUni::fgDOMXMLDeclaration, false); - - bool r (writer->writeNode (&target, doc)); -#endif - - if (!r || ehp.failed ()) + if (!writer->write (&doc, out.get ()) || ehp.failed ()) return false; return true; diff --git a/xsd/libxsd/xsd/cxx/xml/dom/wildcard-source.hxx b/xsd/libxsd/xsd/cxx/xml/dom/wildcard-source.hxx index 11d7114..95de764 100644 --- a/xsd/libxsd/xsd/cxx/xml/dom/wildcard-source.hxx +++ b/xsd/libxsd/xsd/cxx/xml/dom/wildcard-source.hxx @@ -1,6 +1,5 @@ // file : xsd/cxx/xml/dom/wildcard-source.hxx -// author : Boris Kolpackov -// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file #ifndef XSD_CXX_XML_DOM_WILDCARD_SOURCE_HXX @@ -19,7 +18,7 @@ namespace xsd namespace dom { template - xml::dom::auto_ptr + XSD_DOM_AUTO_PTR create_document (); } } diff --git a/xsd/libxsd/xsd/cxx/xml/dom/wildcard-source.txx b/xsd/libxsd/xsd/cxx/xml/dom/wildcard-source.txx index 32043c0..cce6922 100644 --- a/xsd/libxsd/xsd/cxx/xml/dom/wildcard-source.txx +++ b/xsd/libxsd/xsd/cxx/xml/dom/wildcard-source.txx @@ -1,6 +1,5 @@ // file : xsd/cxx/xml/dom/wildcard-source.txx -// author : Boris Kolpackov -// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file #include // chLatin_L, etc @@ -17,7 +16,7 @@ namespace xsd namespace dom { template - xml::dom::auto_ptr + XSD_DOM_AUTO_PTR create_document () { const XMLCh ls[] = {xercesc::chLatin_L, @@ -29,7 +28,7 @@ namespace xsd xercesc::DOMImplementation* impl ( xercesc::DOMImplementationRegistry::getDOMImplementation (ls)); - return xml::dom::auto_ptr ( + return XSD_DOM_AUTO_PTR ( impl->createDocument ()); } } diff --git a/xsd/libxsd/xsd/cxx/xml/elements.hxx b/xsd/libxsd/xsd/cxx/xml/elements.hxx index d9f8a50..107b36d 100644 --- a/xsd/libxsd/xsd/cxx/xml/elements.hxx +++ b/xsd/libxsd/xsd/cxx/xml/elements.hxx @@ -1,6 +1,5 @@ // file : xsd/cxx/xml/elements.hxx -// author : Boris Kolpackov -// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file #ifndef XSD_CXX_XML_ELEMENTS_HXX @@ -8,8 +7,13 @@ #include +#include #include +#if _XERCES_VERSION < 30000 +# error Xerces-C++ 2-series is not supported +#endif + namespace xsd { namespace cxx diff --git a/xsd/libxsd/xsd/cxx/xml/elements.txx b/xsd/libxsd/xsd/cxx/xml/elements.txx index 8ba07df..37adcf0 100644 --- a/xsd/libxsd/xsd/cxx/xml/elements.txx +++ b/xsd/libxsd/xsd/cxx/xml/elements.txx @@ -1,6 +1,5 @@ // file : xsd/cxx/xml/elements.txx -// author : Boris Kolpackov -// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file namespace xsd diff --git a/xsd/libxsd/xsd/cxx/xml/error-handler.hxx b/xsd/libxsd/xsd/cxx/xml/error-handler.hxx index bf0b3d7..616d081 100644 --- a/xsd/libxsd/xsd/cxx/xml/error-handler.hxx +++ b/xsd/libxsd/xsd/cxx/xml/error-handler.hxx @@ -1,6 +1,5 @@ // file : xsd/cxx/xml/error-handler.hxx -// author : Boris Kolpackov -// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file #ifndef XSD_CXX_XML_ERROR_HANDLER_HXX diff --git a/xsd/libxsd/xsd/cxx/xml/exceptions.hxx b/xsd/libxsd/xsd/cxx/xml/exceptions.hxx index 1ed93d8..ef1ec7a 100644 --- a/xsd/libxsd/xsd/cxx/xml/exceptions.hxx +++ b/xsd/libxsd/xsd/cxx/xml/exceptions.hxx @@ -1,6 +1,5 @@ // file : xsd/cxx/xml/exceptions.hxx -// author : Boris Kolpackov -// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file #ifndef XSD_CXX_XML_EXCEPTIONS_HXX diff --git a/xsd/libxsd/xsd/cxx/xml/qualified-name.hxx b/xsd/libxsd/xsd/cxx/xml/qualified-name.hxx index 1a0e032..bfdf4f3 100644 --- a/xsd/libxsd/xsd/cxx/xml/qualified-name.hxx +++ b/xsd/libxsd/xsd/cxx/xml/qualified-name.hxx @@ -1,6 +1,5 @@ // file : xsd/cxx/xml/qualified-name.hxx -// author : Boris Kolpackov -// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file #ifndef XSD_CXX_XML_QUALIFIED_NAME_HXX diff --git a/xsd/libxsd/xsd/cxx/xml/sax/bits/error-handler-proxy.hxx b/xsd/libxsd/xsd/cxx/xml/sax/bits/error-handler-proxy.hxx index f92b6ab..0cfacc2 100644 --- a/xsd/libxsd/xsd/cxx/xml/sax/bits/error-handler-proxy.hxx +++ b/xsd/libxsd/xsd/cxx/xml/sax/bits/error-handler-proxy.hxx @@ -1,6 +1,5 @@ // file : xsd/cxx/xml/sax/bits/error-handler-proxy.hxx -// author : Boris Kolpackov -// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file #ifndef XSD_CXX_XML_SAX_ERROR_HANDLER_PROXY_HXX diff --git a/xsd/libxsd/xsd/cxx/xml/sax/bits/error-handler-proxy.txx b/xsd/libxsd/xsd/cxx/xml/sax/bits/error-handler-proxy.txx index f8ca26d..24b8a3d 100644 --- a/xsd/libxsd/xsd/cxx/xml/sax/bits/error-handler-proxy.txx +++ b/xsd/libxsd/xsd/cxx/xml/sax/bits/error-handler-proxy.txx @@ -1,6 +1,5 @@ // file : xsd/cxx/xml/sax/bits/error-handler-proxy.txx -// author : Boris Kolpackov -// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file #include @@ -65,22 +64,11 @@ namespace xsd if (id == 0) id = e.getSystemId (); -#if _XERCES_VERSION >= 30000 eh_->handle (transcode (id), static_cast (e.getLineNumber ()), static_cast (e.getColumnNumber ()), s, transcode (e.getMessage ())); -#else - XMLSSize_t l (e.getLineNumber ()); - XMLSSize_t c (e.getColumnNumber ()); - - eh_->handle (transcode (id), - (l == -1 ? 0 : static_cast (l)), - (c == -1 ? 0 : static_cast (c)), - s, - transcode (e.getMessage ())); -#endif } } } diff --git a/xsd/libxsd/xsd/cxx/xml/sax/std-input-source.hxx b/xsd/libxsd/xsd/cxx/xml/sax/std-input-source.hxx index 71760a9..00b2397 100644 --- a/xsd/libxsd/xsd/cxx/xml/sax/std-input-source.hxx +++ b/xsd/libxsd/xsd/cxx/xml/sax/std-input-source.hxx @@ -1,6 +1,5 @@ // file : xsd/cxx/xml/sax/std-input-source.hxx -// author : Boris Kolpackov -// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file #ifndef XSD_CXX_XML_SAX_STD_INPUT_SOURCE_HXX @@ -29,27 +28,14 @@ namespace xsd { } -#if _XERCES_VERSION >= 30000 virtual XMLFilePos curPos () const { return static_cast (is_.tellg ()); } -#else - virtual unsigned int - curPos () const - { - return static_cast (is_.tellg ()); - } -#endif -#if _XERCES_VERSION >= 30000 virtual XMLSize_t readBytes (XMLByte* const buf, const XMLSize_t size) -#else - virtual unsigned int - readBytes (XMLByte* const buf, const unsigned int size) -#endif { // Some implementations don't clear gcount if you // call read() on a stream that is in the eof state. @@ -78,25 +64,17 @@ namespace xsd // Make sure that if we failed, readBytes won't be called // again. // - if (!is_.fail ()) - { -#if _XERCES_VERSION >= 30000 - return static_cast (is_.gcount ()); -#else - return static_cast (is_.gcount ()); -#endif - } - else - return 0; + return !is_.fail () + ? static_cast (is_.gcount ()) + : 0; } -#if _XERCES_VERSION >= 30000 virtual const XMLCh* getContentType () const { return 0; } -#endif + private: std::istream& is_; }; diff --git a/xsd/libxsd/xsd/cxx/xml/std-memory-manager.hxx b/xsd/libxsd/xsd/cxx/xml/std-memory-manager.hxx index b5cfaf9..e4d6f5b 100644 --- a/xsd/libxsd/xsd/cxx/xml/std-memory-manager.hxx +++ b/xsd/libxsd/xsd/cxx/xml/std-memory-manager.hxx @@ -1,6 +1,5 @@ // file : xsd/cxx/xml/std-memory-manager.hxx -// author : Boris Kolpackov -// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file #ifndef XSD_CXX_XML_STD_MEMORY_MANAGER_HXX @@ -18,12 +17,10 @@ namespace xsd class std_memory_manager: public xercesc::MemoryManager { public: + // Xerces-C++ MemoryManager interface. + // virtual void* -#if _XERCES_VERSION >= 30000 allocate(XMLSize_t size) -#else - allocate(size_t size) -#endif { return operator new (size); } @@ -35,13 +32,20 @@ namespace xsd operator delete (p); } -#if _XERCES_VERSION >= 30000 virtual xercesc::MemoryManager* getExceptionMemoryManager() { return xercesc::XMLPlatformUtils::fgMemoryManager; } -#endif + + // Standard deleter interface. + // + void + operator() (void* p) const + { + if (p) + operator delete (p); + } }; } } diff --git a/xsd/libxsd/xsd/cxx/xml/string.hxx b/xsd/libxsd/xsd/cxx/xml/string.hxx index f79e66e..9f4767b 100644 --- a/xsd/libxsd/xsd/cxx/xml/string.hxx +++ b/xsd/libxsd/xsd/cxx/xml/string.hxx @@ -1,6 +1,5 @@ // file : xsd/cxx/xml/string.hxx -// author : Boris Kolpackov -// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file #ifndef XSD_CXX_XML_STRING_HXX @@ -9,9 +8,16 @@ #include #include // std::size_t -#include #include // XMLCh +#include // XSD_CXX11 + +#ifdef XSD_CXX11 +# include // std::unique_ptr +#else +# include +#endif + namespace xsd { namespace cxx @@ -31,9 +37,9 @@ namespace xsd transcode (const XMLCh* s, std::size_t length); - // For VC7.1 wchar_t and XMLCh are the same type so we cannot - // overload the transcode name. You should not use these functions - // anyway and instead use the xml::string class below. + // For VC wchar_t and XMLCh are the same type so we cannot overload + // the transcode name. You should not use these functions anyway and + // instead use the xml::string class below. // template XMLCh* @@ -50,21 +56,16 @@ namespace xsd public : template string (const std::basic_string& s) - : s_ (transcode_to_xmlch (s)) - { - } + : s_ (transcode_to_xmlch (s)) {} template - string (const C* s) - : s_ (transcode_to_xmlch (s)) - { - } + string (const C* s): s_ (transcode_to_xmlch (s)) {} const XMLCh* - c_str () const - { - return s_.get (); - } + c_str () const {return s_.get ();} + + XMLCh* + release () {return s_.release ();} private: string (const string&); @@ -73,7 +74,11 @@ namespace xsd operator= (const string&); private: +#ifdef XSD_CXX11 + std::unique_ptr s_; +#else auto_array s_; +#endif }; } } diff --git a/xsd/libxsd/xsd/cxx/xml/string.ixx b/xsd/libxsd/xsd/cxx/xml/string.ixx index 0f46f4d..ede125e 100644 --- a/xsd/libxsd/xsd/cxx/xml/string.ixx +++ b/xsd/libxsd/xsd/cxx/xml/string.ixx @@ -1,6 +1,5 @@ // file : xsd/cxx/xml/string.ixx -// author : Boris Kolpackov -// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file #ifndef XSD_CXX_XML_STRING_IXX diff --git a/xsd/libxsd/xsd/cxx/xml/string.txx b/xsd/libxsd/xsd/cxx/xml/string.txx index df0fb74..e6adb98 100644 --- a/xsd/libxsd/xsd/cxx/xml/string.txx +++ b/xsd/libxsd/xsd/cxx/xml/string.txx @@ -1,6 +1,5 @@ // file : xsd/cxx/xml/string.txx -// author : Boris Kolpackov -// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file #ifndef XSD_CXX_XML_STRING_TXX @@ -47,7 +46,13 @@ namespace xsd XMLCh* wchar_transcoder:: from (const W* s, std::size_t length) { - auto_array r (new XMLCh[length + 1]); +#ifdef XSD_CXX11 + std::unique_ptr r ( +#else + auto_array r ( +#endif + new XMLCh[length + 1]); + XMLCh* ir (r.get ()); for (std::size_t i (0); i < length; ++ir, ++i) @@ -120,7 +125,13 @@ namespace xsd rl += (*p & 0xFFFF0000) ? 2 : 1; } - auto_array r (new XMLCh[rl + 1]); +#ifdef XSD_CXX11 + std::unique_ptr r ( +#else + auto_array r ( +#endif + new XMLCh[rl + 1]); + XMLCh* ir (r.get ()); for (const W* p (s); p < s + length; ++p) diff --git a/xsd/libxsd/xsd/cxx/zc-istream.hxx b/xsd/libxsd/xsd/cxx/zc-istream.hxx index 2ae345f..440fdd4 100644 --- a/xsd/libxsd/xsd/cxx/zc-istream.hxx +++ b/xsd/libxsd/xsd/cxx/zc-istream.hxx @@ -1,6 +1,5 @@ // file : xsd/cxx/zc-istream.hxx -// author : Boris Kolpackov -// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file #ifndef XSD_CXX_ZC_ISTREAM_HXX diff --git a/xsd/libxsd/xsd/cxx/zc-istream.txx b/xsd/libxsd/xsd/cxx/zc-istream.txx index 8c00a5b..b37e067 100644 --- a/xsd/libxsd/xsd/cxx/zc-istream.txx +++ b/xsd/libxsd/xsd/cxx/zc-istream.txx @@ -1,6 +1,5 @@ // file : xsd/cxx/zc-istream.txx -// author : Boris Kolpackov -// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file namespace xsd diff --git a/xsd/makefile b/xsd/makefile index 0c07b0d..98e7d62 100644 --- a/xsd/makefile +++ b/xsd/makefile @@ -1,6 +1,5 @@ # file : makefile -# author : Boris Kolpackov -# copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +# copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC # license : GNU GPL v2 + exceptions; see accompanying LICENSE file include $(dir $(lastword $(MAKEFILE_LIST)))build/bootstrap.make @@ -10,13 +9,15 @@ test := $(out_base)/.test install := $(out_base)/.install dist := $(out_base)/.dist dist-win := $(out_base)/.dist-win +dist-pre := $(out_base)/.dist-pre clean := $(out_base)/.clean -cleandoc := $(out_base)/.cleandoc + +.PHONY: $(dist-pre) $(default): $(out_base)/xsd/ \ $(out_base)/tests/ \ $(out_base)/examples/ \ - $(out_base)/documentation/ + $(out_base)/doc/ # Test. # @@ -28,7 +29,7 @@ $(test): $(out_base)/tests/.test $(install): $(out_base)/xsd/.install \ $(out_base)/libxsd/.install \ $(out_base)/examples/.install \ - $(out_base)/documentation/.install + $(out_base)/doc/.install $(call install-dir,$(src_base)/dist/examples/build,$(install_doc_dir)/xsd/examples/build) $(call install-dir,$(src_base)/dist/examples/cxx,$(install_doc_dir)/xsd/examples/cxx,-name makefile) $(call install-data,$(src_base)/dist/examples/makefile,$(install_doc_dir)/xsd/examples/makefile) @@ -44,7 +45,7 @@ $(install): $(out_base)/xsd/.install \ $(dist): $(out_base)/xsd/.dist \ $(out_base)/libxsd/.dist \ $(out_base)/examples/.dist \ - $(out_base)/documentation/.dist + $(out_base)/doc/.dist $(call install-dir,$(src_base)/dist/examples/build,$(dist_prefix)/examples/build) $(call install-dir,$(src_base)/dist/examples/cxx,$(dist_prefix)/examples/cxx,-name makefile) $(call install-data,$(src_base)/dist/examples/makefile,$(dist_prefix)/examples/makefile) @@ -55,37 +56,43 @@ $(dist): $(out_base)/xsd/.dist \ $(call install-data,$(src_base)/NEWS,$(dist_prefix)/NEWS) $(call install-data,$(src_base)/version,$(dist_prefix)/version) -$(dist-win): $(out_base)/xsd/.dist-win \ +$(dist-win): $(dist-pre) \ + $(out_base)/xsd/.dist-win \ $(out_base)/libxsd/.dist-win \ $(out_base)/examples/.dist-win \ - $(out_base)/documentation/.dist-win + $(out_base)/doc/.dist-win $(call install-dir,$(src_base)/dist/etc,$(dist_prefix)/etc) $(call install-dir,$(src_base)/dist/examples/build,$(dist_prefix)/examples/build) - $(call install-dir,$(src_base)/dist/examples/cxx,$(dist_prefix)/examples/cxx) + $(call install-data,$(src_base)/dist/examples/tester.bat,$(dist_prefix)/examples/tester.bat) $(call install-data,$(src_base)/dist/examples/makefile,$(dist_prefix)/examples/makefile) $(call install-data,$(src_base)/dist/README-WINDOWS,$(dist_prefix)/README.txt) - $(call message,,unix2dos $(dist_prefix)/README.txt) + $(call message,,todos $(dist_prefix)/README.txt) $(call install-data,$(src_base)/dist/README-UNIX,$(dist_prefix)/README-CYGWIN.txt) - $(call message,,unix2dos $(dist_prefix)/README-CYGWIN.txt) + $(call message,,todos $(dist_prefix)/README-CYGWIN.txt) $(call install-data,$(src_base)/GPLv2,$(dist_prefix)/GPLv2.txt) - $(call message,,unix2dos $(dist_prefix)/GPLv2.txt) + $(call message,,todos $(dist_prefix)/GPLv2.txt) $(call install-data,$(src_base)/FLOSSE,$(dist_prefix)/FLOSSE.txt) - $(call message,,unix2dos $(dist_prefix)/FLOSSE.txt) + $(call message,,todos $(dist_prefix)/FLOSSE.txt) $(call install-data,$(src_base)/LICENSE,$(dist_prefix)/LICENSE.txt) - $(call message,,unix2dos $(dist_prefix)/LICENSE.txt) + $(call message,,todos $(dist_prefix)/LICENSE.txt) $(call install-data,$(src_base)/NEWS,$(dist_prefix)/NEWS.txt) - $(call message,,unix2dos $(dist_prefix)/NEWS.txt) + $(call message,,todos $(dist_prefix)/NEWS.txt) $(call install-data,$(src_base)/version,$(dist_prefix)/version.txt) - $(call message,,unix2dos $(dist_prefix)/version.txt) + $(call message,,todos $(dist_prefix)/version.txt) +# We need the project files for the examples copied before we try to +# auto-generate the solution files. So each example target that generates +# solutions should depend in order-only on this target. +# +$(dist-pre): + $(call install-dir,$(src_base)/dist/examples/cxx,$(dist_prefix)/examples/cxx) # Clean. # $(clean): $(out_base)/xsd/.clean \ $(out_base)/tests/.clean \ - $(out_base)/examples/.clean - -$(cleandoc): $(out_base)/documentation/.cleandoc + $(out_base)/examples/.clean \ + $(out_base)/doc/.clean $(call include,$(bld_root)/install.make) @@ -93,4 +100,4 @@ $(call import,$(src_base)/xsd/makefile) $(call import,$(src_base)/libxsd/makefile) $(call import,$(src_base)/tests/makefile) $(call import,$(src_base)/examples/makefile) -$(call import,$(src_base)/documentation/makefile) +$(call import,$(src_base)/doc/makefile) diff --git a/xsd/tests/cxx/makefile b/xsd/tests/cxx/makefile index 2a9f659..2e1364a 100644 --- a/xsd/tests/cxx/makefile +++ b/xsd/tests/cxx/makefile @@ -1,6 +1,5 @@ # file : tests/cxx/makefile -# author : Boris Kolpackov -# copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +# copyright : Copyright (c) 2006-2014 Code Synthesis Tools CC # license : GNU GPL v2 + exceptions; see accompanying LICENSE file include $(dir $(lastword $(MAKEFILE_LIST)))../../build/bootstrap.make diff --git a/xsd/tests/cxx/parser/built-in/driver.cxx b/xsd/tests/cxx/parser/built-in/driver.cxx index 11cae41..2791387 100644 --- a/xsd/tests/cxx/parser/built-in/driver.cxx +++ b/xsd/tests/cxx/parser/built-in/driver.cxx @@ -1,6 +1,5 @@ // file : tests/cxx/parser/built-in/driver.cxx -// author : Boris Kolpackov -// copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2006-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file // Test built-in type parsing. @@ -24,7 +23,7 @@ struct any_type_pimpl: xml_schema::any_type_pimpl } virtual void - _start_any_element (ro_string const&, + _start_any_element (ro_string const&, ro_string const& n, ro_string const*) { @@ -278,14 +277,14 @@ struct type_pimpl: type_pskel } virtual void - base64_binary (std::auto_ptr v) + base64_binary (XSD_AUTO_PTR v) { std::string tmp (v->data (), v->size ()); cout << "'" << tmp << "'" << endl; } virtual void - hex_binary (std::auto_ptr v) + hex_binary (XSD_AUTO_PTR v) { std::string tmp (v->data (), v->size ()); cout << "'" << tmp << "'" << endl; diff --git a/xsd/tests/cxx/parser/built-in/makefile b/xsd/tests/cxx/parser/built-in/makefile index 3164219..64987d0 100644 --- a/xsd/tests/cxx/parser/built-in/makefile +++ b/xsd/tests/cxx/parser/built-in/makefile @@ -1,6 +1,5 @@ # file : tests/cxx/parser/built-in/makefile -# author : Boris Kolpackov -# copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +# copyright : Copyright (c) 2006-2014 Code Synthesis Tools CC # license : GNU GPL v2 + exceptions; see accompanying LICENSE file include $(dir $(lastword $(MAKEFILE_LIST)))../../../../build/bootstrap.make @@ -25,7 +24,7 @@ $(call import,\ # $(driver): $(obj) $(xerces_c.l) -$(obj) $(dep): cpp_options := -I$(src_root)/libxsd +$(obj) $(dep): cpp_options := -I$(out_base) -I$(src_base) -I$(src_root)/libxsd $(obj) $(dep): $(xerces_c.l.cpp-options) genf := $(xsd:.xsd=-pskel.hxx) $(xsd:.xsd=-pskel.ixx) $(xsd:.xsd=-pskel.cxx) @@ -34,7 +33,7 @@ gen := $(addprefix $(out_base)/,$(genf)) $(gen): xsd := $(out_root)/xsd/xsd $(gen): $(out_root)/xsd/xsd -$(call include-dep,$(dep)) +$(call include-dep,$(dep),$(obj),$(gen)) # Convenience alias for default target. # @@ -71,7 +70,12 @@ endif $(call include,$(bld_root)/cxx/o-e.make) $(call include,$(bld_root)/cxx/cxx-o.make) $(call include,$(bld_root)/cxx/cxx-d.make) + +$(call include,$(bld_root)/cxx/standard.make) # cxx_standard +ifdef cxx_standard +$(gen): xsd_options += --std $(cxx_standard) $(call include,$(scf_root)/xsd/parser/xsd-cxx.make) +endif # Dependencies. diff --git a/xsd/tests/cxx/parser/enumeration/driver.cxx b/xsd/tests/cxx/parser/enumeration/driver.cxx index fdb0134..acd95a0 100644 --- a/xsd/tests/cxx/parser/enumeration/driver.cxx +++ b/xsd/tests/cxx/parser/enumeration/driver.cxx @@ -1,6 +1,5 @@ // file : tests/cxx/parser/enumeration/driver.cxx -// author : Boris Kolpackov -// copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2006-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file // Test xsd:enumeration parsing. diff --git a/xsd/tests/cxx/parser/enumeration/gender.hxx b/xsd/tests/cxx/parser/enumeration/gender.hxx index 8e5dbfd..7540888 100644 --- a/xsd/tests/cxx/parser/enumeration/gender.hxx +++ b/xsd/tests/cxx/parser/enumeration/gender.hxx @@ -1,6 +1,5 @@ // file : tests/cxx/parser/enumeration/gender.hxx -// author : Boris Kolpackov -// copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2006-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file #ifndef GENDER_HXX diff --git a/xsd/tests/cxx/parser/enumeration/makefile b/xsd/tests/cxx/parser/enumeration/makefile index 5776cbe..e991260 100644 --- a/xsd/tests/cxx/parser/enumeration/makefile +++ b/xsd/tests/cxx/parser/enumeration/makefile @@ -1,6 +1,5 @@ # file : tests/cxx/parser/enumeration/makefile -# author : Boris Kolpackov -# copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +# copyright : Copyright (c) 2006-2014 Code Synthesis Tools CC # license : GNU GPL v2 + exceptions; see accompanying LICENSE file include $(dir $(lastword $(MAKEFILE_LIST)))../../../../build/bootstrap.make @@ -25,17 +24,17 @@ $(call import,\ # $(driver): $(obj) $(xerces_c.l) -$(obj) $(dep): cpp_options := -I$(src_root)/libxsd +$(obj) $(dep): cpp_options := -I$(out_base) -I$(src_base) -I$(src_root)/libxsd $(obj) $(dep): $(xerces_c.l.cpp-options) genf := $(xsd:.xsd=-pskel.hxx) $(xsd:.xsd=-pskel.ixx) $(xsd:.xsd=-pskel.cxx) gen := $(addprefix $(out_base)/,$(genf)) $(gen): xsd := $(out_root)/xsd/xsd -$(gen): xsd_options := --type-map $(src_base)/test.map +$(gen): xsd_options += --type-map $(src_base)/test.map $(gen): $(out_root)/xsd/xsd $(src_base)/test.map -$(call include-dep,$(dep)) +$(call include-dep,$(dep),$(obj),$(gen)) # Convenience alias for default target. # @@ -72,7 +71,12 @@ endif $(call include,$(bld_root)/cxx/o-e.make) $(call include,$(bld_root)/cxx/cxx-o.make) $(call include,$(bld_root)/cxx/cxx-d.make) + +$(call include,$(bld_root)/cxx/standard.make) # cxx_standard +ifdef cxx_standard +$(gen): xsd_options += --std $(cxx_standard) $(call include,$(scf_root)/xsd/parser/xsd-cxx.make) +endif # Dependencies. diff --git a/xsd/tests/cxx/parser/generated-impl/makefile b/xsd/tests/cxx/parser/generated-impl/makefile index 3733590..251fd41 100644 --- a/xsd/tests/cxx/parser/generated-impl/makefile +++ b/xsd/tests/cxx/parser/generated-impl/makefile @@ -1,6 +1,5 @@ # file : tests/cxx/parser/generated-impl/makefile -# author : Boris Kolpackov -# copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +# copyright : Copyright (c) 2006-2014 Code Synthesis Tools CC # license : GNU GPL v2 + exceptions; see accompanying LICENSE file include $(dir $(lastword $(MAKEFILE_LIST)))../../../../build/bootstrap.make @@ -24,7 +23,7 @@ $(call import,\ # $(driver): $(obj) $(xerces_c.l) -$(obj) $(dep): cpp_options := -I$(src_root)/libxsd +$(obj) $(dep): cpp_options := -I$(out_base) -I$(src_base) -I$(src_root)/libxsd $(obj) $(dep): $(xerces_c.l.cpp-options) genf := $(xsd:.xsd=-pskel.hxx) \ @@ -38,11 +37,11 @@ gen := $(addprefix $(out_base)/,$(genf)) $(gen): xsd := $(out_root)/xsd/xsd -$(gen): xsd_options := --generate-print-impl --generate-test-driver \ +$(gen): xsd_options += --generate-print-impl --generate-test-driver \ --force-overwrite $(gen): $(out_root)/xsd/xsd -$(call include-dep,$(dep)) +$(call include-dep,$(dep),$(obj),$(gen)) # Convenience alias for default target. # @@ -82,7 +81,12 @@ $(call include,$(bld_root)/cxx/cxx-o.make) $(call include,$(bld_root)/cxx/cxx-d.make) xsd_parser_impl_suffix := -pimpl + +$(call include,$(bld_root)/cxx/standard.make) # cxx_standard +ifdef cxx_standard +$(gen): xsd_options += --std $(cxx_standard) $(call include,$(scf_root)/xsd/parser/xsd-cxx.make) +endif # Dependencies. diff --git a/xsd/tests/cxx/parser/list/driver.cxx b/xsd/tests/cxx/parser/list/driver.cxx index d4ac4e2..0a4071a 100644 --- a/xsd/tests/cxx/parser/list/driver.cxx +++ b/xsd/tests/cxx/parser/list/driver.cxx @@ -1,6 +1,5 @@ // file : tests/cxx/parser/list/driver.cxx -// author : Boris Kolpackov -// copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2006-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file // Test xsd:list parsing. diff --git a/xsd/tests/cxx/parser/list/makefile b/xsd/tests/cxx/parser/list/makefile index deacdb9..9fc63fd 100644 --- a/xsd/tests/cxx/parser/list/makefile +++ b/xsd/tests/cxx/parser/list/makefile @@ -1,6 +1,5 @@ # file : tests/cxx/parser/list/makefile -# author : Boris Kolpackov -# copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +# copyright : Copyright (c) 2006-2014 Code Synthesis Tools CC # license : GNU GPL v2 + exceptions; see accompanying LICENSE file include $(dir $(lastword $(MAKEFILE_LIST)))../../../../build/bootstrap.make @@ -25,7 +24,7 @@ $(call import,\ # $(driver): $(obj) $(xerces_c.l) -$(obj) $(dep): cpp_options := -I$(src_root)/libxsd +$(obj) $(dep): cpp_options := -I$(out_base) -I$(src_base) -I$(src_root)/libxsd $(obj) $(dep): $(xerces_c.l.cpp-options) genf := $(xsd:.xsd=-pskel.hxx) $(xsd:.xsd=-pskel.ixx) $(xsd:.xsd=-pskel.cxx) @@ -34,7 +33,7 @@ gen := $(addprefix $(out_base)/,$(genf)) $(gen): xsd := $(out_root)/xsd/xsd $(gen): $(out_root)/xsd/xsd -$(call include-dep,$(dep)) +$(call include-dep,$(dep),$(obj),$(gen)) # Convenience alias for default target. # @@ -71,7 +70,12 @@ endif $(call include,$(bld_root)/cxx/o-e.make) $(call include,$(bld_root)/cxx/cxx-o.make) $(call include,$(bld_root)/cxx/cxx-d.make) + +$(call include,$(bld_root)/cxx/standard.make) # cxx_standard +ifdef cxx_standard +$(gen): xsd_options += --std $(cxx_standard) $(call include,$(scf_root)/xsd/parser/xsd-cxx.make) +endif # Dependencies. diff --git a/xsd/tests/cxx/parser/makefile b/xsd/tests/cxx/parser/makefile index 935345b..8031478 100644 --- a/xsd/tests/cxx/parser/makefile +++ b/xsd/tests/cxx/parser/makefile @@ -1,6 +1,5 @@ # file : tests/cxx/parser/makefile -# author : Boris Kolpackov -# copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +# copyright : Copyright (c) 2006-2014 Code Synthesis Tools CC # license : GNU GPL v2 + exceptions; see accompanying LICENSE file include $(dir $(lastword $(MAKEFILE_LIST)))../../../build/bootstrap.make diff --git a/xsd/tests/cxx/parser/name-clash/inheritance/driver.cxx b/xsd/tests/cxx/parser/name-clash/inheritance/driver.cxx index 81adb7f..af70f88 100644 --- a/xsd/tests/cxx/parser/name-clash/inheritance/driver.cxx +++ b/xsd/tests/cxx/parser/name-clash/inheritance/driver.cxx @@ -1,6 +1,5 @@ // file : tests/cxx/parser/name-clash/inheritance/driver.cxx -// author : Boris Kolpackov -// copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2006-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file // Test for name clashes across inheritance hierarchy. diff --git a/xsd/tests/cxx/parser/name-clash/inheritance/makefile b/xsd/tests/cxx/parser/name-clash/inheritance/makefile index 359b7e4..273c03c 100644 --- a/xsd/tests/cxx/parser/name-clash/inheritance/makefile +++ b/xsd/tests/cxx/parser/name-clash/inheritance/makefile @@ -1,6 +1,5 @@ # file : tests/cxx/parser/name-clash/inheritance/makefile -# author : Boris Kolpackov -# copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +# copyright : Copyright (c) 2006-2014 Code Synthesis Tools CC # license : GNU GPL v2 + exceptions; see accompanying LICENSE file include $(dir $(lastword $(MAKEFILE_LIST)))../../../../../build/bootstrap.make @@ -25,17 +24,17 @@ $(call import,\ # $(driver): $(obj) $(xerces_c.l) -$(obj) $(dep): cpp_options := -I$(src_root)/libxsd +$(obj) $(dep): cpp_options := -I$(out_base) -I$(src_base) -I$(src_root)/libxsd $(obj) $(dep): $(xerces_c.l.cpp-options) genf := $(xsd:.xsd=-pskel.hxx) $(xsd:.xsd=-pskel.ixx) $(xsd:.xsd=-pskel.cxx) gen := $(addprefix $(out_base)/,$(genf)) $(gen): xsd := $(out_root)/xsd/xsd -$(gen): xsd_options := --generate-validation +$(gen): xsd_options += --generate-validation $(gen): $(out_root)/xsd/xsd -$(call include-dep,$(dep)) +$(call include-dep,$(dep),$(obj),$(gen)) # Convenience alias for default target. # @@ -72,7 +71,12 @@ endif $(call include,$(bld_root)/cxx/o-e.make) $(call include,$(bld_root)/cxx/cxx-o.make) $(call include,$(bld_root)/cxx/cxx-d.make) + +$(call include,$(bld_root)/cxx/standard.make) # cxx_standard +ifdef cxx_standard +$(gen): xsd_options += --std $(cxx_standard) $(call include,$(scf_root)/xsd/parser/xsd-cxx.make) +endif # Dependencies. diff --git a/xsd/tests/cxx/parser/polymorphism/makefile b/xsd/tests/cxx/parser/polymorphism/makefile index 42ac5c3..bb1ebeb 100644 --- a/xsd/tests/cxx/parser/polymorphism/makefile +++ b/xsd/tests/cxx/parser/polymorphism/makefile @@ -1,11 +1,10 @@ # file : tests/cxx/parser/polymorphism/makefile -# author : Boris Kolpackov -# copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +# copyright : Copyright (c) 2006-2014 Code Synthesis Tools CC # license : GNU GPL v2 + exceptions; see accompanying LICENSE file include $(dir $(lastword $(MAKEFILE_LIST)))../../../../build/bootstrap.make -tests := same-type +tests := same-type recursive default := $(out_base)/ test := $(out_base)/.test diff --git a/xsd/tests/cxx/parser/polymorphism/recursive/driver.cxx b/xsd/tests/cxx/parser/polymorphism/recursive/driver.cxx new file mode 100644 index 0000000..2ad96cd --- /dev/null +++ b/xsd/tests/cxx/parser/polymorphism/recursive/driver.cxx @@ -0,0 +1,69 @@ +// file : tests/cxx/parser/polymorphism/recursive/driver.cxx +// copyright : Copyright (c) 2006-2014 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +// Test polymorphic recursive parsing. +// + +#include +#include + +#include "test-pskel.hxx" +#include "test-pimpl.hxx" + +using namespace std; +using namespace test; + +int +main (int argc, char* argv[]) +{ + if (argc != 2) + { + cerr << "usage: " << argv[0] << " test.xml" << endl; + return 1; + } + + try + { + xml_schema::int_pimpl int_p; + + root_pimpl root_p; + expression_pimpl expression_p; + recursive_pimpl recursive_p; + value_a_pimpl value_a_p; + value_b_pimpl value_b_p; + + xml_schema::parser_map_impl expression_map; + + // Connect the parsers together. + // + root_p.parsers (expression_p); + expression_map.insert(value_a_p); + expression_map.insert(value_b_p); + expression_map.insert(recursive_p); + + root_p.expression_parser(expression_map); + + recursive_p.parsers(expression_p); + recursive_p.expression_parser(expression_map); + + value_a_p.parsers(int_p); + value_b_p.parsers(int_p); + + xml_schema::document doc_p (root_p, "test", "root", true); + + root_p.pre (); + doc_p.parse (argv[1]); + root_p.post_root (); + } + catch (xml_schema::exception const& e) + { + cerr << e << endl; + return 1; + } + catch (std::ios_base::failure const&) + { + cerr << "io failure" << endl; + return 1; + } +} diff --git a/xsd/tests/cxx/parser/polymorphism/recursive/makefile b/xsd/tests/cxx/parser/polymorphism/recursive/makefile new file mode 100644 index 0000000..50e4f3d --- /dev/null +++ b/xsd/tests/cxx/parser/polymorphism/recursive/makefile @@ -0,0 +1,84 @@ +# file : tests/cxx/parser/polymorphism/recursive/makefile +# copyright : Copyright (c) 2006-2014 Code Synthesis Tools CC +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +include $(dir $(lastword $(MAKEFILE_LIST)))../../../../../build/bootstrap.make + +xsd := test.xsd +cxx := driver.cxx test-pimpl.cxx + +obj := $(addprefix $(out_base)/,$(cxx:.cxx=.o) $(xsd:.xsd=-pskel.o)) +dep := $(obj:.o=.o.d) + +driver := $(out_base)/driver +test := $(out_base)/.test +clean := $(out_base)/.clean + +# Import. +# +$(call import,\ + $(scf_root)/import/libxerces-c/stub.make,\ + l: xerces_c.l,cpp-options: xerces_c.l.cpp-options) + +# Build. +# +$(driver): $(obj) $(xerces_c.l) + +$(obj) $(dep): cpp_options := -I$(out_base) -I$(src_base) -I$(src_root)/libxsd +$(obj) $(dep): $(xerces_c.l.cpp-options) + +genf := $(xsd:.xsd=-pskel.hxx) $(xsd:.xsd=-pskel.ixx) $(xsd:.xsd=-pskel.cxx) +gen := $(addprefix $(out_base)/,$(genf)) + +$(gen): xsd := $(out_root)/xsd/xsd +$(gen): xsd_options += --generate-polymorphic +$(gen): $(out_root)/xsd/xsd + +$(call include-dep,$(dep),$(obj),$(gen)) + +# Convenience alias for default target. +# +$(out_base)/: $(driver) + + +# Test. +# +$(test): driver := $(driver) +$(test): $(driver) $(src_base)/test.xml $(src_base)/output + $(call message,test $$1,$$1 $(src_base)/test.xml | diff -u $(src_base)/output -,$(driver)) + +# Clean. +# +$(clean): $(driver).o.clean \ + $(addsuffix .cxx.clean,$(obj)) \ + $(addsuffix .cxx.clean,$(dep)) \ + $(addprefix $(out_base)/,$(xsd:.xsd=-pskel.cxx.xsd.clean)) + +# Generated .gitignore. +# +ifeq ($(out_base),$(src_base)) +$(gen): | $(out_base)/.gitignore +$(driver): | $(out_base)/.gitignore + +$(out_base)/.gitignore: files := driver $(genf) +$(clean): $(out_base)/.gitignore.clean + +$(call include,$(bld_root)/git/gitignore.make) +endif + +# How to. +# +$(call include,$(bld_root)/cxx/o-e.make) +$(call include,$(bld_root)/cxx/cxx-o.make) +$(call include,$(bld_root)/cxx/cxx-d.make) + +$(call include,$(bld_root)/cxx/standard.make) # cxx_standard +ifdef cxx_standard +$(gen): xsd_options += --std $(cxx_standard) +$(call include,$(scf_root)/xsd/parser/xsd-cxx.make) +endif + + +# Dependencies. +# +$(call import,$(src_root)/xsd/makefile) diff --git a/xsd/tests/cxx/parser/polymorphism/recursive/output b/xsd/tests/cxx/parser/polymorphism/recursive/output new file mode 100644 index 0000000..28a835f --- /dev/null +++ b/xsd/tests/cxx/parser/polymorphism/recursive/output @@ -0,0 +1,22 @@ +root start +recursive start +value_a begin +value->constant +value: post_expression override +value_a: post_value override +value_a end +recursive->expression event +recursive start +value_b begin +value->constant +value: post_expression override +value_b: post_value override +value_b end +recursive->expression event +recursive: post_expression override +recursive end +recursive->expression event +recursive: post_expression override +recursive end +root->expression +root end diff --git a/xsd/tests/cxx/parser/polymorphism/recursive/test-pimpl.cxx b/xsd/tests/cxx/parser/polymorphism/recursive/test-pimpl.cxx new file mode 100644 index 0000000..fe32626 --- /dev/null +++ b/xsd/tests/cxx/parser/polymorphism/recursive/test-pimpl.cxx @@ -0,0 +1,148 @@ +// file : tests/cxx/parser/polymorphism/recursive/test-pimpl.cxx +// copyright : Copyright (c) 2006-2014 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#include + +#include "test-pimpl.hxx" + +using namespace std; + +namespace test +{ + // root_pimpl + // + + void root_pimpl:: + pre () + { + cout << "root start" << endl; + } + + void root_pimpl:: + expression () + { + cout << "root->expression" << endl; + } + + void root_pimpl:: + post_root () + { + cout << "root end" << endl; + } + + // expression_pimpl + // + + void expression_pimpl:: + pre () + { + cout << "expression begin" << endl; + } + + void expression_pimpl:: + post_expression () + { + cout << "expression end" << endl; + } + + // recursive_pimpl + // + + void recursive_pimpl:: + pre () + { + cout << "recursive start" << endl; + } + + void recursive_pimpl:: + expression () + { + cout << "recursive->expression event" << endl; + } + + void recursive_pimpl:: + post_expression () + { + cout << "recursive: post_expression override" << endl; + post_recursive (); + } + + void recursive_pimpl:: + post_recursive () + { + cout << "recursive end" << endl; + } + + // value_pimpl + // + + void value_pimpl:: + pre () + { + cout << "value begin" << endl; + } + + void value_pimpl:: + constant (int) + { + cout << "value->constant" << endl; + } + + void value_pimpl:: + post_expression () + { + cout << "value: post_expression override" << endl; + post_value (); + } + + void value_pimpl:: + post_value () + { + cout << "value end" << endl; + } + + // value_a_pimpl + // + + void value_a_pimpl:: + pre () + { + cout << "value_a begin" << endl; + } + + void value_a_pimpl:: + post_value () + { + cout << "value_a: post_value override" << endl; + post_value_a (); + } + + void value_a_pimpl:: + post_value_a () + { + cout << "value_a end" << endl; + } + + // value_b_pimpl + // + + void value_b_pimpl:: + pre () + { + cout << "value_b begin" << endl; + } + + void value_b_pimpl:: + post_value () + { + cout << "value_b: post_value override" << endl; + post_value_b (); + } + + void value_b_pimpl:: + post_value_b () + { + cout << "value_b end" << endl; + } +} diff --git a/xsd/tests/cxx/parser/polymorphism/recursive/test-pimpl.hxx b/xsd/tests/cxx/parser/polymorphism/recursive/test-pimpl.hxx new file mode 100644 index 0000000..f345720 --- /dev/null +++ b/xsd/tests/cxx/parser/polymorphism/recursive/test-pimpl.hxx @@ -0,0 +1,95 @@ +// file : tests/cxx/parser/polymorphism/recursive/test-pimpl.hxx +// copyright : Copyright (c) 2006-2014 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef TEST_PIMPL_HXX +#define TEST_PIMPL_HXX + +#include "test-pskel.hxx" + +namespace test +{ + class root_pimpl: public virtual root_pskel + { + public: + virtual void + pre (); + + virtual void + expression (); + + virtual void + post_root (); + }; + + class expression_pimpl: public virtual expression_pskel + { + public: + virtual void + pre (); + + virtual void + post_expression (); + }; + + class recursive_pimpl: public virtual recursive_pskel, + public expression_pimpl + { + public: + virtual void + pre (); + + virtual void + expression (); + + virtual void + post_expression (); + + virtual void + post_recursive (); + }; + + class value_pimpl: public virtual value_pskel, public expression_pimpl + { + public: + virtual void + pre (); + + virtual void + constant (int); + + virtual void + post_expression (); + + virtual void + post_value (); + }; + + class value_a_pimpl: public virtual value_a_pskel, public value_pimpl + { + public: + virtual void + pre (); + + virtual void + post_value (); + + virtual void + post_value_a (); + }; + + class value_b_pimpl: public virtual value_b_pskel, public value_pimpl + { + public: + virtual void + pre (); + + virtual void + post_value (); + + virtual void + post_value_b (); + }; +} + +#endif // TEST_PIMPL_HXX diff --git a/xsd/tests/cxx/parser/polymorphism/recursive/test.xml b/xsd/tests/cxx/parser/polymorphism/recursive/test.xml new file mode 100644 index 0000000..42035ba --- /dev/null +++ b/xsd/tests/cxx/parser/polymorphism/recursive/test.xml @@ -0,0 +1,15 @@ + + + + + 1 + + + + 2 + + + + diff --git a/xsd/tests/cxx/parser/polymorphism/recursive/test.xsd b/xsd/tests/cxx/parser/polymorphism/recursive/test.xsd new file mode 100644 index 0000000..affcc8a --- /dev/null +++ b/xsd/tests/cxx/parser/polymorphism/recursive/test.xsd @@ -0,0 +1,53 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/xsd/tests/cxx/parser/polymorphism/same-type/driver.cxx b/xsd/tests/cxx/parser/polymorphism/same-type/driver.cxx index ea50776..05abc3c 100644 --- a/xsd/tests/cxx/parser/polymorphism/same-type/driver.cxx +++ b/xsd/tests/cxx/parser/polymorphism/same-type/driver.cxx @@ -1,6 +1,5 @@ // file : tests/cxx/parser/polymorphism/same-type/driver.cxx -// author : Boris Kolpackov -// copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2006-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file // Test substitution group and xsi:type that don't change the type. @@ -45,7 +44,7 @@ main (int argc, char* argv[]) base_p.parsers (string_p); type_p.parsers (base_p); - xml_schema::document doc_p (type_p, "test", "root"); + xml_schema::document doc_p (type_p, "test", "root", true); type_p.pre (); doc_p.parse (argv[1]); diff --git a/xsd/tests/cxx/parser/polymorphism/same-type/makefile b/xsd/tests/cxx/parser/polymorphism/same-type/makefile index c357597..256b34d 100644 --- a/xsd/tests/cxx/parser/polymorphism/same-type/makefile +++ b/xsd/tests/cxx/parser/polymorphism/same-type/makefile @@ -1,6 +1,5 @@ # file : tests/cxx/parser/polymorphism/same-type/makefile -# author : Boris Kolpackov -# copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +# copyright : Copyright (c) 2006-2014 Code Synthesis Tools CC # license : GNU GPL v2 + exceptions; see accompanying LICENSE file include $(dir $(lastword $(MAKEFILE_LIST)))../../../../../build/bootstrap.make @@ -25,17 +24,17 @@ $(call import,\ # $(driver): $(obj) $(xerces_c.l) -$(obj) $(dep): cpp_options := -I$(src_root)/libxsd +$(obj) $(dep): cpp_options := -I$(out_base) -I$(src_base) -I$(src_root)/libxsd $(obj) $(dep): $(xerces_c.l.cpp-options) genf := $(xsd:.xsd=-pskel.hxx) $(xsd:.xsd=-pskel.ixx) $(xsd:.xsd=-pskel.cxx) gen := $(addprefix $(out_base)/,$(genf)) $(gen): xsd := $(out_root)/xsd/xsd -$(gen): xsd_options := --generate-polymorphic +$(gen): xsd_options += --generate-polymorphic $(gen): $(out_root)/xsd/xsd -$(call include-dep,$(dep)) +$(call include-dep,$(dep),$(obj),$(gen)) # Convenience alias for default target. # @@ -72,7 +71,12 @@ endif $(call include,$(bld_root)/cxx/o-e.make) $(call include,$(bld_root)/cxx/cxx-o.make) $(call include,$(bld_root)/cxx/cxx-d.make) + +$(call include,$(bld_root)/cxx/standard.make) # cxx_standard +ifdef cxx_standard +$(gen): xsd_options += --std $(cxx_standard) $(call include,$(scf_root)/xsd/parser/xsd-cxx.make) +endif # Dependencies. diff --git a/xsd/tests/cxx/parser/recursive/driver.cxx b/xsd/tests/cxx/parser/recursive/driver.cxx index 3f54f8f..41f21e7 100644 --- a/xsd/tests/cxx/parser/recursive/driver.cxx +++ b/xsd/tests/cxx/parser/recursive/driver.cxx @@ -1,6 +1,5 @@ // file : tests/cxx/parser/recursive/driver.cxx -// author : Boris Kolpackov -// copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2006-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file // Test recursive parser invocation. diff --git a/xsd/tests/cxx/parser/recursive/makefile b/xsd/tests/cxx/parser/recursive/makefile index bd78bef..8ccf0bc 100644 --- a/xsd/tests/cxx/parser/recursive/makefile +++ b/xsd/tests/cxx/parser/recursive/makefile @@ -1,6 +1,5 @@ # file : tests/cxx/parser/recursive/makefile -# author : Boris Kolpackov -# copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +# copyright : Copyright (c) 2006-2014 Code Synthesis Tools CC # license : GNU GPL v2 + exceptions; see accompanying LICENSE file include $(dir $(lastword $(MAKEFILE_LIST)))../../../../build/bootstrap.make @@ -25,17 +24,17 @@ $(call import,\ # $(driver): $(obj) $(xerces_c.l) -$(obj) $(dep): cpp_options := -I$(src_root)/libxsd +$(obj) $(dep): cpp_options := -I$(out_base) -I$(src_base) -I$(src_root)/libxsd $(obj) $(dep): $(xerces_c.l.cpp-options) genf := $(xsd:.xsd=-pskel.hxx) $(xsd:.xsd=-pskel.ixx) $(xsd:.xsd=-pskel.cxx) gen := $(addprefix $(out_base)/,$(genf)) $(gen): xsd := $(out_root)/xsd/xsd -$(gen): xsd_options := --generate-validation +$(gen): xsd_options += --generate-validation $(gen): $(out_root)/xsd/xsd -$(call include-dep,$(dep)) +$(call include-dep,$(dep),$(obj),$(gen)) # Convenience alias for default target. # @@ -72,7 +71,12 @@ endif $(call include,$(bld_root)/cxx/o-e.make) $(call include,$(bld_root)/cxx/cxx-o.make) $(call include,$(bld_root)/cxx/cxx-d.make) + +$(call include,$(bld_root)/cxx/standard.make) # cxx_standard +ifdef cxx_standard +$(gen): xsd_options += --std $(cxx_standard) $(call include,$(scf_root)/xsd/parser/xsd-cxx.make) +endif # Dependencies. diff --git a/xsd/tests/cxx/parser/test-template/driver.cxx b/xsd/tests/cxx/parser/test-template/driver.cxx index b3379ff..01ef390 100644 --- a/xsd/tests/cxx/parser/test-template/driver.cxx +++ b/xsd/tests/cxx/parser/test-template/driver.cxx @@ -1,6 +1,5 @@ // file : tests/cxx/parser/test-template/driver.cxx -// author : Boris Kolpackov -// copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2006-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file // Insert test description here. diff --git a/xsd/tests/cxx/parser/test-template/makefile b/xsd/tests/cxx/parser/test-template/makefile index 5f5f9bc..dd1e19f 100644 --- a/xsd/tests/cxx/parser/test-template/makefile +++ b/xsd/tests/cxx/parser/test-template/makefile @@ -1,6 +1,5 @@ # file : tests/cxx/parser/test-template/makefile -# author : Boris Kolpackov -# copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +# copyright : Copyright (c) 2006-2014 Code Synthesis Tools CC # license : GNU GPL v2 + exceptions; see accompanying LICENSE file include $(dir $(lastword $(MAKEFILE_LIST)))../../../../build/bootstrap.make @@ -25,7 +24,7 @@ $(call import,\ # $(driver): $(obj) $(xerces_c.l) -$(obj) $(dep): cpp_options := -I$(src_root)/libxsd +$(obj) $(dep): cpp_options := -I$(out_base) -I$(src_base) -I$(src_root)/libxsd $(obj) $(dep): $(xerces_c.l.cpp-options) genf := $(xsd:.xsd=-pskel.hxx) $(xsd:.xsd=-pskel.ixx) $(xsd:.xsd=-pskel.cxx) @@ -34,7 +33,7 @@ gen := $(addprefix $(out_base)/,$(genf)) $(gen): xsd := $(out_root)/xsd/xsd $(gen): $(out_root)/xsd/xsd -$(call include-dep,$(dep)) +$(call include-dep,$(dep),$(obj),$(gen)) # Convenience alias for default target. # @@ -71,7 +70,12 @@ endif $(call include,$(bld_root)/cxx/o-e.make) $(call include,$(bld_root)/cxx/cxx-o.make) $(call include,$(bld_root)/cxx/cxx-d.make) + +$(call include,$(bld_root)/cxx/standard.make) # cxx_standard +ifdef cxx_standard +$(gen): xsd_options += --std $(cxx_standard) $(call include,$(scf_root)/xsd/parser/xsd-cxx.make) +endif # Dependencies. diff --git a/xsd/tests/cxx/parser/union/driver.cxx b/xsd/tests/cxx/parser/union/driver.cxx index 4a67f2f..5a576ba 100644 --- a/xsd/tests/cxx/parser/union/driver.cxx +++ b/xsd/tests/cxx/parser/union/driver.cxx @@ -1,6 +1,5 @@ // file : tests/cxx/parser/union/driver.cxx -// author : Boris Kolpackov -// copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2006-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file // Test xsd:union parsing. diff --git a/xsd/tests/cxx/parser/union/makefile b/xsd/tests/cxx/parser/union/makefile index fa2b844..7de92ad 100644 --- a/xsd/tests/cxx/parser/union/makefile +++ b/xsd/tests/cxx/parser/union/makefile @@ -1,6 +1,5 @@ # file : tests/cxx/parser/union/makefile -# author : Boris Kolpackov -# copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +# copyright : Copyright (c) 2006-2014 Code Synthesis Tools CC # license : GNU GPL v2 + exceptions; see accompanying LICENSE file include $(dir $(lastword $(MAKEFILE_LIST)))../../../../build/bootstrap.make @@ -25,7 +24,7 @@ $(call import,\ # $(driver): $(obj) $(xerces_c.l) -$(obj) $(dep): cpp_options := -I$(src_root)/libxsd +$(obj) $(dep): cpp_options := -I$(out_base) -I$(src_base) -I$(src_root)/libxsd $(obj) $(dep): $(xerces_c.l.cpp-options) genf := $(xsd:.xsd=-pskel.hxx) $(xsd:.xsd=-pskel.ixx) $(xsd:.xsd=-pskel.cxx) @@ -34,7 +33,7 @@ gen := $(addprefix $(out_base)/,$(genf)) $(gen): xsd := $(out_root)/xsd/xsd $(gen): $(out_root)/xsd/xsd -$(call include-dep,$(dep)) +$(call include-dep,$(dep),$(obj),$(gen)) # Convenience alias for default target. # @@ -71,7 +70,12 @@ endif $(call include,$(bld_root)/cxx/o-e.make) $(call include,$(bld_root)/cxx/cxx-o.make) $(call include,$(bld_root)/cxx/cxx-d.make) + +$(call include,$(bld_root)/cxx/standard.make) # cxx_standard +ifdef cxx_standard +$(gen): xsd_options += --std $(cxx_standard) $(call include,$(scf_root)/xsd/parser/xsd-cxx.make) +endif # Dependencies. diff --git a/xsd/tests/cxx/parser/validation/all/driver.cxx b/xsd/tests/cxx/parser/validation/all/driver.cxx index d4a3839..71a21a0 100644 --- a/xsd/tests/cxx/parser/validation/all/driver.cxx +++ b/xsd/tests/cxx/parser/validation/all/driver.cxx @@ -1,6 +1,5 @@ // file : tests/cxx/parser/validation/all/driver.cxx -// author : Boris Kolpackov -// copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2006-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file // Test the all compositor validation. diff --git a/xsd/tests/cxx/parser/validation/all/makefile b/xsd/tests/cxx/parser/validation/all/makefile index 6336fdc..acc0a79 100644 --- a/xsd/tests/cxx/parser/validation/all/makefile +++ b/xsd/tests/cxx/parser/validation/all/makefile @@ -1,6 +1,5 @@ # file : tests/cxx/parser/validation/all/makefile -# author : Boris Kolpackov -# copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +# copyright : Copyright (c) 2006-2014 Code Synthesis Tools CC # license : GNU GPL v2 + exceptions; see accompanying LICENSE file include $(dir $(lastword $(MAKEFILE_LIST)))../../../../../build/bootstrap.make @@ -27,17 +26,17 @@ $(call import,\ # $(driver): $(obj) $(xerces_c.l) -$(obj) $(dep): cpp_options := -I$(src_root)/libxsd +$(obj) $(dep): cpp_options := -I$(out_base) -I$(src_base) -I$(src_root)/libxsd $(obj) $(dep): $(xerces_c.l.cpp-options) genf := $(xsd:.xsd=-pskel.hxx) $(xsd:.xsd=-pskel.ixx) $(xsd:.xsd=-pskel.cxx) gen := $(addprefix $(out_base)/,$(genf)) $(gen): xsd := $(out_root)/xsd/xsd -$(gen): xsd_options := --generate-validation +$(gen): xsd_options += --generate-validation $(gen): $(out_root)/xsd/xsd -$(call include-dep,$(dep)) +$(call include-dep,$(dep),$(obj),$(gen)) # Convenience alias for default target. @@ -81,7 +80,12 @@ endif $(call include,$(bld_root)/cxx/o-e.make) $(call include,$(bld_root)/cxx/cxx-o.make) $(call include,$(bld_root)/cxx/cxx-d.make) + +$(call include,$(bld_root)/cxx/standard.make) # cxx_standard +ifdef cxx_standard +$(gen): xsd_options += --std $(cxx_standard) $(call include,$(scf_root)/xsd/parser/xsd-cxx.make) +endif # Dependencies. diff --git a/xsd/tests/cxx/parser/validation/any/driver.cxx b/xsd/tests/cxx/parser/validation/any/driver.cxx index e858285..f7773b4 100644 --- a/xsd/tests/cxx/parser/validation/any/driver.cxx +++ b/xsd/tests/cxx/parser/validation/any/driver.cxx @@ -1,6 +1,5 @@ // file : tests/cxx/parser/validation/any/driver.cxx -// author : Boris Kolpackov -// copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2006-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file // Test the any particle validation. diff --git a/xsd/tests/cxx/parser/validation/any/makefile b/xsd/tests/cxx/parser/validation/any/makefile index 084a131..ae6735d 100644 --- a/xsd/tests/cxx/parser/validation/any/makefile +++ b/xsd/tests/cxx/parser/validation/any/makefile @@ -1,6 +1,5 @@ # file : tests/cxx/parser/validation/any/makefile -# author : Boris Kolpackov -# copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +# copyright : Copyright (c) 2006-2014 Code Synthesis Tools CC # license : GNU GPL v2 + exceptions; see accompanying LICENSE file include $(dir $(lastword $(MAKEFILE_LIST)))../../../../../build/bootstrap.make @@ -27,17 +26,17 @@ $(call import,\ # $(driver): $(obj) $(xerces_c.l) -$(obj) $(dep): cpp_options := -I$(src_root)/libxsd +$(obj) $(dep): cpp_options := -I$(out_base) -I$(src_base) -I$(src_root)/libxsd $(obj) $(dep): $(xerces_c.l.cpp-options) genf := $(xsd:.xsd=-pskel.hxx) $(xsd:.xsd=-pskel.ixx) $(xsd:.xsd=-pskel.cxx) gen := $(addprefix $(out_base)/,$(genf)) $(gen): xsd := $(out_root)/xsd/xsd -$(gen): xsd_options := --generate-validation +$(gen): xsd_options += --generate-validation $(gen): $(out_root)/xsd/xsd -$(call include-dep,$(dep)) +$(call include-dep,$(dep),$(obj),$(gen)) # Convenience alias for default target. @@ -81,7 +80,12 @@ endif $(call include,$(bld_root)/cxx/o-e.make) $(call include,$(bld_root)/cxx/cxx-o.make) $(call include,$(bld_root)/cxx/cxx-d.make) + +$(call include,$(bld_root)/cxx/standard.make) # cxx_standard +ifdef cxx_standard +$(gen): xsd_options += --std $(cxx_standard) $(call include,$(scf_root)/xsd/parser/xsd-cxx.make) +endif # Dependencies. diff --git a/xsd/tests/cxx/parser/validation/attribute/driver.cxx b/xsd/tests/cxx/parser/validation/attribute/driver.cxx index e726ad8..7e4de25 100644 --- a/xsd/tests/cxx/parser/validation/attribute/driver.cxx +++ b/xsd/tests/cxx/parser/validation/attribute/driver.cxx @@ -1,6 +1,5 @@ // file : tests/cxx/parser/validation/attribute/driver.cxx -// author : Boris Kolpackov -// copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2006-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file // Test attribute and attribute wildcard (anyAttribute) validation. diff --git a/xsd/tests/cxx/parser/validation/attribute/makefile b/xsd/tests/cxx/parser/validation/attribute/makefile index 0f7df21..94e5369 100644 --- a/xsd/tests/cxx/parser/validation/attribute/makefile +++ b/xsd/tests/cxx/parser/validation/attribute/makefile @@ -1,6 +1,5 @@ # file : tests/cxx/parser/validation/attribute/makefile -# author : Boris Kolpackov -# copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +# copyright : Copyright (c) 2006-2014 Code Synthesis Tools CC # license : GNU GPL v2 + exceptions; see accompanying LICENSE file include $(dir $(lastword $(MAKEFILE_LIST)))../../../../../build/bootstrap.make @@ -27,17 +26,17 @@ $(call import,\ # $(driver): $(obj) $(xerces_c.l) -$(obj) $(dep): cpp_options := -I$(src_root)/libxsd +$(obj) $(dep): cpp_options := -I$(out_base) -I$(src_base) -I$(src_root)/libxsd $(obj) $(dep): $(xerces_c.l.cpp-options) genf := $(xsd:.xsd=-pskel.hxx) $(xsd:.xsd=-pskel.ixx) $(xsd:.xsd=-pskel.cxx) gen := $(addprefix $(out_base)/,$(genf)) $(gen): xsd := $(out_root)/xsd/xsd -$(gen): xsd_options := --generate-validation +$(gen): xsd_options += --generate-validation $(gen): $(out_root)/xsd/xsd -$(call include-dep,$(dep)) +$(call include-dep,$(dep),$(obj),$(gen)) # Convenience alias for default target. @@ -81,7 +80,12 @@ endif $(call include,$(bld_root)/cxx/o-e.make) $(call include,$(bld_root)/cxx/cxx-o.make) $(call include,$(bld_root)/cxx/cxx-d.make) + +$(call include,$(bld_root)/cxx/standard.make) # cxx_standard +ifdef cxx_standard +$(gen): xsd_options += --std $(cxx_standard) $(call include,$(scf_root)/xsd/parser/xsd-cxx.make) +endif # Dependencies. diff --git a/xsd/tests/cxx/parser/validation/built-in/any-type/driver.cxx b/xsd/tests/cxx/parser/validation/built-in/any-type/driver.cxx index 46ccc96..4b03218 100644 --- a/xsd/tests/cxx/parser/validation/built-in/any-type/driver.cxx +++ b/xsd/tests/cxx/parser/validation/built-in/any-type/driver.cxx @@ -1,6 +1,5 @@ // file : tests/cxx/parser/validation/built-in/any-type/driver.cxx -// author : Boris Kolpackov -// copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2006-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file // Test the anyType and anySimpleType validation. diff --git a/xsd/tests/cxx/parser/validation/built-in/any-type/makefile b/xsd/tests/cxx/parser/validation/built-in/any-type/makefile index bf42aac..7ae3a96 100644 --- a/xsd/tests/cxx/parser/validation/built-in/any-type/makefile +++ b/xsd/tests/cxx/parser/validation/built-in/any-type/makefile @@ -1,6 +1,5 @@ # file : tests/cxx/parser/validation/built-in/any-type/makefile -# author : Boris Kolpackov -# copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +# copyright : Copyright (c) 2006-2014 Code Synthesis Tools CC # license : GNU GPL v2 + exceptions; see accompanying LICENSE file include $(dir $(lastword $(MAKEFILE_LIST)))../../../../../../build/bootstrap.make @@ -27,17 +26,17 @@ $(call import,\ # $(driver): $(obj) $(xerces_c.l) -$(obj) $(dep): cpp_options := -I$(src_root)/libxsd +$(obj) $(dep): cpp_options := -I$(out_base) -I$(src_base) -I$(src_root)/libxsd $(obj) $(dep): $(xerces_c.l.cpp-options) genf := $(xsd:.xsd=-pskel.hxx) $(xsd:.xsd=-pskel.ixx) $(xsd:.xsd=-pskel.cxx) gen := $(addprefix $(out_base)/,$(genf)) $(gen): xsd := $(out_root)/xsd/xsd -$(gen): xsd_options := --generate-validation +$(gen): xsd_options += --generate-validation $(gen): $(out_root)/xsd/xsd -$(call include-dep,$(dep)) +$(call include-dep,$(dep),$(obj),$(gen)) # Convenience alias for default target. @@ -81,7 +80,12 @@ endif $(call include,$(bld_root)/cxx/o-e.make) $(call include,$(bld_root)/cxx/cxx-o.make) $(call include,$(bld_root)/cxx/cxx-d.make) + +$(call include,$(bld_root)/cxx/standard.make) # cxx_standard +ifdef cxx_standard +$(gen): xsd_options += --std $(cxx_standard) $(call include,$(scf_root)/xsd/parser/xsd-cxx.make) +endif # Dependencies. diff --git a/xsd/tests/cxx/parser/validation/built-in/binary/driver.cxx b/xsd/tests/cxx/parser/validation/built-in/binary/driver.cxx index e75d55f..96f6d4e 100644 --- a/xsd/tests/cxx/parser/validation/built-in/binary/driver.cxx +++ b/xsd/tests/cxx/parser/validation/built-in/binary/driver.cxx @@ -1,6 +1,5 @@ // file : tests/cxx/parser/validation/built-in/binary/driver.cxx -// author : Boris Kolpackov -// copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2006-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file // Test the built-in base64Binary and hexBinary types validation. diff --git a/xsd/tests/cxx/parser/validation/built-in/binary/makefile b/xsd/tests/cxx/parser/validation/built-in/binary/makefile index b729cd0..fe48886 100644 --- a/xsd/tests/cxx/parser/validation/built-in/binary/makefile +++ b/xsd/tests/cxx/parser/validation/built-in/binary/makefile @@ -1,6 +1,5 @@ # file : tests/cxx/parser/validation/built-in/binary/makefile -# author : Boris Kolpackov -# copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +# copyright : Copyright (c) 2006-2014 Code Synthesis Tools CC # license : GNU GPL v2 + exceptions; see accompanying LICENSE file include $(dir $(lastword $(MAKEFILE_LIST)))../../../../../../build/bootstrap.make @@ -25,10 +24,17 @@ $(call import,\ # $(driver): $(obj) $(xerces_c.l) -$(obj) $(dep): cpp_options := -I$(src_root)/libxsd +$(obj) $(dep): cpp_options := -I$(out_base) -I$(src_base) -I$(src_root)/libxsd $(obj) $(dep): $(xerces_c.l.cpp-options) -$(call include-dep,$(dep)) +# Define XSD_CXX11 since we include libxsd headers directly. +# +$(call include,$(bld_root)/cxx/standard.make) # cxx_standard +ifeq ($(cxx_standard),c++11) +$(obj) $(dep): cpp_options += -DXSD_CXX11 +endif + +$(call include-dep,$(dep),$(obj),$(gen)) # Convenience alias for default target. # diff --git a/xsd/tests/cxx/parser/validation/built-in/boolean/driver.cxx b/xsd/tests/cxx/parser/validation/built-in/boolean/driver.cxx index 85586a6..6ebe23c 100644 --- a/xsd/tests/cxx/parser/validation/built-in/boolean/driver.cxx +++ b/xsd/tests/cxx/parser/validation/built-in/boolean/driver.cxx @@ -1,6 +1,5 @@ // file : tests/cxx/parser/validation/built-in/boolean/driver.cxx -// author : Boris Kolpackov -// copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2006-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file // Test the built-in boolean type validation. diff --git a/xsd/tests/cxx/parser/validation/built-in/boolean/makefile b/xsd/tests/cxx/parser/validation/built-in/boolean/makefile index 39ca5e9..f5812a5 100644 --- a/xsd/tests/cxx/parser/validation/built-in/boolean/makefile +++ b/xsd/tests/cxx/parser/validation/built-in/boolean/makefile @@ -1,6 +1,5 @@ # file : tests/cxx/parser/validation/built-in/boolean/makefile -# author : Boris Kolpackov -# copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +# copyright : Copyright (c) 2006-2014 Code Synthesis Tools CC # license : GNU GPL v2 + exceptions; see accompanying LICENSE file include $(dir $(lastword $(MAKEFILE_LIST)))../../../../../../build/bootstrap.make @@ -25,10 +24,17 @@ $(call import,\ # $(driver): $(obj) $(xerces_c.l) -$(obj) $(dep): cpp_options := -I$(src_root)/libxsd +$(obj) $(dep): cpp_options := -I$(out_base) -I$(src_base) -I$(src_root)/libxsd $(obj) $(dep): $(xerces_c.l.cpp-options) -$(call include-dep,$(dep)) +# Define XSD_CXX11 since we include libxsd headers directly. +# +$(call include,$(bld_root)/cxx/standard.make) # cxx_standard +ifeq ($(cxx_standard),c++11) +$(obj) $(dep): cpp_options += -DXSD_CXX11 +endif + +$(call include-dep,$(dep),$(obj),$(gen)) # Convenience alias for default target. # diff --git a/xsd/tests/cxx/parser/validation/built-in/byte/driver.cxx b/xsd/tests/cxx/parser/validation/built-in/byte/driver.cxx index 466f004..48d91df 100644 --- a/xsd/tests/cxx/parser/validation/built-in/byte/driver.cxx +++ b/xsd/tests/cxx/parser/validation/built-in/byte/driver.cxx @@ -1,6 +1,5 @@ // file : tests/cxx/parser/validation/built-in/byte/driver.cxx -// author : Boris Kolpackov -// copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2006-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file // Test the built-in byte and unsigned byte types validation. diff --git a/xsd/tests/cxx/parser/validation/built-in/byte/makefile b/xsd/tests/cxx/parser/validation/built-in/byte/makefile index 32f4b91..cdaabfc 100644 --- a/xsd/tests/cxx/parser/validation/built-in/byte/makefile +++ b/xsd/tests/cxx/parser/validation/built-in/byte/makefile @@ -1,6 +1,5 @@ # file : tests/cxx/parser/validation/built-in/byte/makefile -# author : Boris Kolpackov -# copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +# copyright : Copyright (c) 2006-2014 Code Synthesis Tools CC # license : GNU GPL v2 + exceptions; see accompanying LICENSE file include $(dir $(lastword $(MAKEFILE_LIST)))../../../../../../build/bootstrap.make @@ -25,10 +24,17 @@ $(call import,\ # $(driver): $(obj) $(xerces_c.l) -$(obj) $(dep): cpp_options := -I$(src_root)/libxsd +$(obj) $(dep): cpp_options := -I$(out_base) -I$(src_base) -I$(src_root)/libxsd $(obj) $(dep): $(xerces_c.l.cpp-options) -$(call include-dep,$(dep)) +# Define XSD_CXX11 since we include libxsd headers directly. +# +$(call include,$(bld_root)/cxx/standard.make) # cxx_standard +ifeq ($(cxx_standard),c++11) +$(obj) $(dep): cpp_options += -DXSD_CXX11 +endif + +$(call include-dep,$(dep),$(obj),$(gen)) # Convenience alias for default target. # diff --git a/xsd/tests/cxx/parser/validation/built-in/date-time/driver.cxx b/xsd/tests/cxx/parser/validation/built-in/date-time/driver.cxx index 6297912..015205a 100644 --- a/xsd/tests/cxx/parser/validation/built-in/date-time/driver.cxx +++ b/xsd/tests/cxx/parser/validation/built-in/date-time/driver.cxx @@ -1,6 +1,5 @@ // file : tests/cxx/parser/validation/built-in/date-time/driver.cxx -// author : Boris Kolpackov -// copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2006-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file // Test the built-in date and time types validation. diff --git a/xsd/tests/cxx/parser/validation/built-in/date-time/makefile b/xsd/tests/cxx/parser/validation/built-in/date-time/makefile index d5e2edc..ee16e1f 100644 --- a/xsd/tests/cxx/parser/validation/built-in/date-time/makefile +++ b/xsd/tests/cxx/parser/validation/built-in/date-time/makefile @@ -1,6 +1,5 @@ # file : tests/cxx/parser/validation/built-in/date-time/makefile -# author : Boris Kolpackov -# copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +# copyright : Copyright (c) 2006-2014 Code Synthesis Tools CC # license : GNU GPL v2 + exceptions; see accompanying LICENSE file include $(dir $(lastword $(MAKEFILE_LIST)))../../../../../../build/bootstrap.make @@ -25,10 +24,17 @@ $(call import,\ # $(driver): $(obj) $(xerces_c.l) -$(obj) $(dep): cpp_options := -I$(src_root)/libxsd +$(obj) $(dep): cpp_options := -I$(out_base) -I$(src_base) -I$(src_root)/libxsd $(obj) $(dep): $(xerces_c.l.cpp-options) -$(call include-dep,$(dep)) +# Define XSD_CXX11 since we include libxsd headers directly. +# +$(call include,$(bld_root)/cxx/standard.make) # cxx_standard +ifeq ($(cxx_standard),c++11) +$(obj) $(dep): cpp_options += -DXSD_CXX11 +endif + +$(call include-dep,$(dep),$(obj),$(gen)) # Convenience alias for default target. # diff --git a/xsd/tests/cxx/parser/validation/built-in/float/driver.cxx b/xsd/tests/cxx/parser/validation/built-in/float/driver.cxx index 1f6f0bd..f984498 100644 --- a/xsd/tests/cxx/parser/validation/built-in/float/driver.cxx +++ b/xsd/tests/cxx/parser/validation/built-in/float/driver.cxx @@ -1,6 +1,5 @@ // file : tests/cxx/parser/validation/built-in/float/driver.cxx -// author : Boris Kolpackov -// copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2006-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file // Test the built-in float, double, and decimal types validation. diff --git a/xsd/tests/cxx/parser/validation/built-in/float/makefile b/xsd/tests/cxx/parser/validation/built-in/float/makefile index 8755f3a..6755693 100644 --- a/xsd/tests/cxx/parser/validation/built-in/float/makefile +++ b/xsd/tests/cxx/parser/validation/built-in/float/makefile @@ -1,6 +1,5 @@ # file : tests/cxx/parser/validation/built-in/float/makefile -# author : Boris Kolpackov -# copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +# copyright : Copyright (c) 2006-2014 Code Synthesis Tools CC # license : GNU GPL v2 + exceptions; see accompanying LICENSE file include $(dir $(lastword $(MAKEFILE_LIST)))../../../../../../build/bootstrap.make @@ -25,10 +24,17 @@ $(call import,\ # $(driver): $(obj) $(xerces_c.l) -$(obj) $(dep): cpp_options := -I$(src_root)/libxsd +$(obj) $(dep): cpp_options := -I$(out_base) -I$(src_base) -I$(src_root)/libxsd $(obj) $(dep): $(xerces_c.l.cpp-options) -$(call include-dep,$(dep)) +# Define XSD_CXX11 since we include libxsd headers directly. +# +$(call include,$(bld_root)/cxx/standard.make) # cxx_standard +ifeq ($(cxx_standard),c++11) +$(obj) $(dep): cpp_options += -DXSD_CXX11 +endif + +$(call include-dep,$(dep),$(obj),$(gen)) # Convenience alias for default target. # diff --git a/xsd/tests/cxx/parser/validation/built-in/int/driver.cxx b/xsd/tests/cxx/parser/validation/built-in/int/driver.cxx index 00c5947..8d4392b 100644 --- a/xsd/tests/cxx/parser/validation/built-in/int/driver.cxx +++ b/xsd/tests/cxx/parser/validation/built-in/int/driver.cxx @@ -1,6 +1,5 @@ // file : tests/cxx/parser/validation/built-in/int/driver.cxx -// author : Boris Kolpackov -// copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2006-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file // Test the built-in int and unsigned int types validation. diff --git a/xsd/tests/cxx/parser/validation/built-in/int/makefile b/xsd/tests/cxx/parser/validation/built-in/int/makefile index 4cebe64..46f0baa 100644 --- a/xsd/tests/cxx/parser/validation/built-in/int/makefile +++ b/xsd/tests/cxx/parser/validation/built-in/int/makefile @@ -1,6 +1,5 @@ # file : tests/cxx/parser/validation/built-in/int/makefile -# author : Boris Kolpackov -# copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +# copyright : Copyright (c) 2006-2014 Code Synthesis Tools CC # license : GNU GPL v2 + exceptions; see accompanying LICENSE file include $(dir $(lastword $(MAKEFILE_LIST)))../../../../../../build/bootstrap.make @@ -25,10 +24,17 @@ $(call import,\ # $(driver): $(obj) $(xerces_c.l) -$(obj) $(dep): cpp_options := -I$(src_root)/libxsd +$(obj) $(dep): cpp_options := -I$(out_base) -I$(src_base) -I$(src_root)/libxsd $(obj) $(dep): $(xerces_c.l.cpp-options) -$(call include-dep,$(dep)) +# Define XSD_CXX11 since we include libxsd headers directly. +# +$(call include,$(bld_root)/cxx/standard.make) # cxx_standard +ifeq ($(cxx_standard),c++11) +$(obj) $(dep): cpp_options += -DXSD_CXX11 +endif + +$(call include-dep,$(dep),$(obj),$(gen)) # Convenience alias for default target. # diff --git a/xsd/tests/cxx/parser/validation/built-in/integer/driver.cxx b/xsd/tests/cxx/parser/validation/built-in/integer/driver.cxx index fa8e4e0..2828249 100644 --- a/xsd/tests/cxx/parser/validation/built-in/integer/driver.cxx +++ b/xsd/tests/cxx/parser/validation/built-in/integer/driver.cxx @@ -1,6 +1,5 @@ // file : tests/cxx/parser/validation/built-in/int/driver.cxx -// author : Boris Kolpackov -// copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2006-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file // Test the built-in integer & friends types validation. diff --git a/xsd/tests/cxx/parser/validation/built-in/integer/makefile b/xsd/tests/cxx/parser/validation/built-in/integer/makefile index 6b9d816..ca6482f 100644 --- a/xsd/tests/cxx/parser/validation/built-in/integer/makefile +++ b/xsd/tests/cxx/parser/validation/built-in/integer/makefile @@ -1,6 +1,5 @@ # file : tests/cxx/parser/validation/built-in/integer/makefile -# author : Boris Kolpackov -# copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +# copyright : Copyright (c) 2006-2014 Code Synthesis Tools CC # license : GNU GPL v2 + exceptions; see accompanying LICENSE file include $(dir $(lastword $(MAKEFILE_LIST)))../../../../../../build/bootstrap.make @@ -25,10 +24,17 @@ $(call import,\ # $(driver): $(obj) $(xerces_c.l) -$(obj) $(dep): cpp_options := -I$(src_root)/libxsd +$(obj) $(dep): cpp_options := -I$(out_base) -I$(src_base) -I$(src_root)/libxsd $(obj) $(dep): $(xerces_c.l.cpp-options) -$(call include-dep,$(dep)) +# Define XSD_CXX11 since we include libxsd headers directly. +# +$(call include,$(bld_root)/cxx/standard.make) # cxx_standard +ifeq ($(cxx_standard),c++11) +$(obj) $(dep): cpp_options += -DXSD_CXX11 +endif + +$(call include-dep,$(dep),$(obj),$(gen)) # Convenience alias for default target. # diff --git a/xsd/tests/cxx/parser/validation/built-in/long/driver.cxx b/xsd/tests/cxx/parser/validation/built-in/long/driver.cxx index c7a66c4..2033125 100644 --- a/xsd/tests/cxx/parser/validation/built-in/long/driver.cxx +++ b/xsd/tests/cxx/parser/validation/built-in/long/driver.cxx @@ -1,6 +1,5 @@ // file : tests/cxx/parser/validation/built-in/long/driver.cxx -// author : Boris Kolpackov -// copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2006-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file // Test the built-in long and unsigned long types validation. diff --git a/xsd/tests/cxx/parser/validation/built-in/long/makefile b/xsd/tests/cxx/parser/validation/built-in/long/makefile index 2ab6368..b3ad382 100644 --- a/xsd/tests/cxx/parser/validation/built-in/long/makefile +++ b/xsd/tests/cxx/parser/validation/built-in/long/makefile @@ -1,6 +1,5 @@ # file : tests/cxx/parser/validation/built-in/long/makefile -# author : Boris Kolpackov -# copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +# copyright : Copyright (c) 2006-2014 Code Synthesis Tools CC # license : GNU GPL v2 + exceptions; see accompanying LICENSE file include $(dir $(lastword $(MAKEFILE_LIST)))../../../../../../build/bootstrap.make @@ -25,10 +24,17 @@ $(call import,\ # $(driver): $(obj) $(xerces_c.l) -$(obj) $(dep): cpp_options := -I$(src_root)/libxsd +$(obj) $(dep): cpp_options := -I$(out_base) -I$(src_base) -I$(src_root)/libxsd $(obj) $(dep): $(xerces_c.l.cpp-options) -$(call include-dep,$(dep)) +# Define XSD_CXX11 since we include libxsd headers directly. +# +$(call include,$(bld_root)/cxx/standard.make) # cxx_standard +ifeq ($(cxx_standard),c++11) +$(obj) $(dep): cpp_options += -DXSD_CXX11 +endif + +$(call include-dep,$(dep),$(obj),$(gen)) # Convenience alias for default target. # diff --git a/xsd/tests/cxx/parser/validation/built-in/makefile b/xsd/tests/cxx/parser/validation/built-in/makefile index 34bea8f..e300092 100644 --- a/xsd/tests/cxx/parser/validation/built-in/makefile +++ b/xsd/tests/cxx/parser/validation/built-in/makefile @@ -1,6 +1,5 @@ # file : tests/cxx/parser/validation/built-in/makefile -# author : Boris Kolpackov -# copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +# copyright : Copyright (c) 2006-2014 Code Synthesis Tools CC # license : GNU GPL v2 + exceptions; see accompanying LICENSE file include $(dir $(lastword $(MAKEFILE_LIST)))../../../../../build/bootstrap.make diff --git a/xsd/tests/cxx/parser/validation/built-in/qname/driver.cxx b/xsd/tests/cxx/parser/validation/built-in/qname/driver.cxx index 3a4bc90..3c77eea 100644 --- a/xsd/tests/cxx/parser/validation/built-in/qname/driver.cxx +++ b/xsd/tests/cxx/parser/validation/built-in/qname/driver.cxx @@ -1,6 +1,5 @@ // file : tests/cxx/parser/validation/built-in/qname/driver.cxx -// author : Boris Kolpackov -// copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2006-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file // Test the built-in QName type validation. diff --git a/xsd/tests/cxx/parser/validation/built-in/qname/makefile b/xsd/tests/cxx/parser/validation/built-in/qname/makefile index 5f53fea..9e06bad 100644 --- a/xsd/tests/cxx/parser/validation/built-in/qname/makefile +++ b/xsd/tests/cxx/parser/validation/built-in/qname/makefile @@ -1,6 +1,5 @@ # file : tests/cxx/parser/validation/built-in/qname/makefile -# author : Boris Kolpackov -# copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +# copyright : Copyright (c) 2006-2014 Code Synthesis Tools CC # license : GNU GPL v2 + exceptions; see accompanying LICENSE file include $(dir $(lastword $(MAKEFILE_LIST)))../../../../../../build/bootstrap.make @@ -25,10 +24,17 @@ $(call import,\ # $(driver): $(obj) $(xerces_c.l) -$(obj) $(dep): cpp_options := -I$(src_root)/libxsd +$(obj) $(dep): cpp_options := -I$(out_base) -I$(src_base) -I$(src_root)/libxsd $(obj) $(dep): $(xerces_c.l.cpp-options) -$(call include-dep,$(dep)) +# Define XSD_CXX11 since we include libxsd headers directly. +# +$(call include,$(bld_root)/cxx/standard.make) # cxx_standard +ifeq ($(cxx_standard),c++11) +$(obj) $(dep): cpp_options += -DXSD_CXX11 +endif + +$(call include-dep,$(dep),$(obj),$(gen)) # Convenience alias for default target. # diff --git a/xsd/tests/cxx/parser/validation/built-in/short/driver.cxx b/xsd/tests/cxx/parser/validation/built-in/short/driver.cxx index 2bb95d2..5ee950c 100644 --- a/xsd/tests/cxx/parser/validation/built-in/short/driver.cxx +++ b/xsd/tests/cxx/parser/validation/built-in/short/driver.cxx @@ -1,6 +1,5 @@ // file : tests/cxx/parser/validation/built-in/short/driver.cxx -// author : Boris Kolpackov -// copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2006-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file // Test the built-in short and unsigned short types validation. diff --git a/xsd/tests/cxx/parser/validation/built-in/short/makefile b/xsd/tests/cxx/parser/validation/built-in/short/makefile index eee8382..50c2b80 100644 --- a/xsd/tests/cxx/parser/validation/built-in/short/makefile +++ b/xsd/tests/cxx/parser/validation/built-in/short/makefile @@ -1,6 +1,5 @@ # file : tests/cxx/parser/validation/built-in/short/makefile -# author : Boris Kolpackov -# copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +# copyright : Copyright (c) 2006-2014 Code Synthesis Tools CC # license : GNU GPL v2 + exceptions; see accompanying LICENSE file include $(dir $(lastword $(MAKEFILE_LIST)))../../../../../../build/bootstrap.make @@ -25,10 +24,17 @@ $(call import,\ # $(driver): $(obj) $(xerces_c.l) -$(obj) $(dep): cpp_options := -I$(src_root)/libxsd +$(obj) $(dep): cpp_options := -I$(out_base) -I$(src_base) -I$(src_root)/libxsd $(obj) $(dep): $(xerces_c.l.cpp-options) -$(call include-dep,$(dep)) +# Define XSD_CXX11 since we include libxsd headers directly. +# +$(call include,$(bld_root)/cxx/standard.make) # cxx_standard +ifeq ($(cxx_standard),c++11) +$(obj) $(dep): cpp_options += -DXSD_CXX11 +endif + +$(call include-dep,$(dep),$(obj),$(gen)) # Convenience alias for default target. # diff --git a/xsd/tests/cxx/parser/validation/built-in/string/driver.cxx b/xsd/tests/cxx/parser/validation/built-in/string/driver.cxx index 2419d59..5948542 100644 --- a/xsd/tests/cxx/parser/validation/built-in/string/driver.cxx +++ b/xsd/tests/cxx/parser/validation/built-in/string/driver.cxx @@ -1,6 +1,5 @@ // file : tests/cxx/parser/validation/built-in/string/driver.cxx -// author : Boris Kolpackov -// copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2006-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file // Test the built-in string & friends types validation. diff --git a/xsd/tests/cxx/parser/validation/built-in/string/makefile b/xsd/tests/cxx/parser/validation/built-in/string/makefile index 5be3c4c..41c0dcd 100644 --- a/xsd/tests/cxx/parser/validation/built-in/string/makefile +++ b/xsd/tests/cxx/parser/validation/built-in/string/makefile @@ -1,6 +1,5 @@ # file : tests/cxx/parser/validation/built-in/string/makefile -# author : Boris Kolpackov -# copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +# copyright : Copyright (c) 2006-2014 Code Synthesis Tools CC # license : GNU GPL v2 + exceptions; see accompanying LICENSE file include $(dir $(lastword $(MAKEFILE_LIST)))../../../../../../build/bootstrap.make @@ -25,10 +24,17 @@ $(call import,\ # $(driver): $(obj) $(xerces_c.l) -$(obj) $(dep): cpp_options := -I$(src_root)/libxsd +$(obj) $(dep): cpp_options := -I$(out_base) -I$(src_base) -I$(src_root)/libxsd $(obj) $(dep): $(xerces_c.l.cpp-options) -$(call include-dep,$(dep)) +# Define XSD_CXX11 since we include libxsd headers directly. +# +$(call include,$(bld_root)/cxx/standard.make) # cxx_standard +ifeq ($(cxx_standard),c++11) +$(obj) $(dep): cpp_options += -DXSD_CXX11 +endif + +$(call include-dep,$(dep),$(obj),$(gen)) # Convenience alias for default target. # diff --git a/xsd/tests/cxx/parser/validation/built-in/uri/driver.cxx b/xsd/tests/cxx/parser/validation/built-in/uri/driver.cxx index f6de3c2..daff0c7 100644 --- a/xsd/tests/cxx/parser/validation/built-in/uri/driver.cxx +++ b/xsd/tests/cxx/parser/validation/built-in/uri/driver.cxx @@ -1,6 +1,5 @@ // file : tests/cxx/parser/validation/built-in/uri/driver.cxx -// author : Boris Kolpackov -// copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2006-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file // Test the built-in anyURI type validation. diff --git a/xsd/tests/cxx/parser/validation/built-in/uri/makefile b/xsd/tests/cxx/parser/validation/built-in/uri/makefile index ad53e89..cfb8101 100644 --- a/xsd/tests/cxx/parser/validation/built-in/uri/makefile +++ b/xsd/tests/cxx/parser/validation/built-in/uri/makefile @@ -1,6 +1,5 @@ # file : tests/cxx/parser/validation/built-in/uri/makefile -# author : Boris Kolpackov -# copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +# copyright : Copyright (c) 2006-2014 Code Synthesis Tools CC # license : GNU GPL v2 + exceptions; see accompanying LICENSE file include $(dir $(lastword $(MAKEFILE_LIST)))../../../../../../build/bootstrap.make @@ -25,10 +24,17 @@ $(call import,\ # $(driver): $(obj) $(xerces_c.l) -$(obj) $(dep): cpp_options := -I$(src_root)/libxsd +$(obj) $(dep): cpp_options := -I$(out_base) -I$(src_base) -I$(src_root)/libxsd $(obj) $(dep): $(xerces_c.l.cpp-options) -$(call include-dep,$(dep)) +# Define XSD_CXX11 since we include libxsd headers directly. +# +$(call include,$(bld_root)/cxx/standard.make) # cxx_standard +ifeq ($(cxx_standard),c++11) +$(obj) $(dep): cpp_options += -DXSD_CXX11 +endif + +$(call include-dep,$(dep),$(obj),$(gen)) # Convenience alias for default target. # diff --git a/xsd/tests/cxx/parser/validation/choice/driver.cxx b/xsd/tests/cxx/parser/validation/choice/driver.cxx index 87cd0a9..fd1e651 100644 --- a/xsd/tests/cxx/parser/validation/choice/driver.cxx +++ b/xsd/tests/cxx/parser/validation/choice/driver.cxx @@ -1,6 +1,5 @@ // file : tests/cxx/parser/validation/choice/driver.cxx -// author : Boris Kolpackov -// copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2006-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file // Test the choice compositor validation. diff --git a/xsd/tests/cxx/parser/validation/choice/makefile b/xsd/tests/cxx/parser/validation/choice/makefile index f113bd5..ec86590 100644 --- a/xsd/tests/cxx/parser/validation/choice/makefile +++ b/xsd/tests/cxx/parser/validation/choice/makefile @@ -1,6 +1,5 @@ # file : tests/cxx/parser/validation/choice/makefile -# author : Boris Kolpackov -# copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +# copyright : Copyright (c) 2006-2014 Code Synthesis Tools CC # license : GNU GPL v2 + exceptions; see accompanying LICENSE file include $(dir $(lastword $(MAKEFILE_LIST)))../../../../../build/bootstrap.make @@ -27,17 +26,17 @@ $(call import,\ # $(driver): $(obj) $(xerces_c.l) -$(obj) $(dep): cpp_options := -I$(src_root)/libxsd +$(obj) $(dep): cpp_options := -I$(out_base) -I$(src_base) -I$(src_root)/libxsd $(obj) $(dep): $(xerces_c.l.cpp-options) genf := $(xsd:.xsd=-pskel.hxx) $(xsd:.xsd=-pskel.ixx) $(xsd:.xsd=-pskel.cxx) gen := $(addprefix $(out_base)/,$(genf)) $(gen): xsd := $(out_root)/xsd/xsd -$(gen): xsd_options := --generate-validation +$(gen): xsd_options += --generate-validation $(gen): $(out_root)/xsd/xsd -$(call include-dep,$(dep)) +$(call include-dep,$(dep),$(obj),$(gen)) # Convenience alias for default target. @@ -81,7 +80,12 @@ endif $(call include,$(bld_root)/cxx/o-e.make) $(call include,$(bld_root)/cxx/cxx-o.make) $(call include,$(bld_root)/cxx/cxx-d.make) + +$(call include,$(bld_root)/cxx/standard.make) # cxx_standard +ifdef cxx_standard +$(gen): xsd_options += --std $(cxx_standard) $(call include,$(scf_root)/xsd/parser/xsd-cxx.make) +endif # Dependencies. diff --git a/xsd/tests/cxx/parser/validation/makefile b/xsd/tests/cxx/parser/validation/makefile index 5b7b884..c5d43ed 100644 --- a/xsd/tests/cxx/parser/validation/makefile +++ b/xsd/tests/cxx/parser/validation/makefile @@ -1,6 +1,5 @@ # file : tests/cxx/parser/validation/makefile -# author : Boris Kolpackov -# copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +# copyright : Copyright (c) 2006-2014 Code Synthesis Tools CC # license : GNU GPL v2 + exceptions; see accompanying LICENSE file include $(dir $(lastword $(MAKEFILE_LIST)))../../../../build/bootstrap.make diff --git a/xsd/tests/cxx/parser/validation/restriction/driver.cxx b/xsd/tests/cxx/parser/validation/restriction/driver.cxx index 40a2bc9..ea87af6 100644 --- a/xsd/tests/cxx/parser/validation/restriction/driver.cxx +++ b/xsd/tests/cxx/parser/validation/restriction/driver.cxx @@ -1,6 +1,5 @@ // file : tests/cxx/parser/validation/restriction/driver.cxx -// author : Boris Kolpackov -// copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2006-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file // Test the restriction compositor validation. diff --git a/xsd/tests/cxx/parser/validation/restriction/makefile b/xsd/tests/cxx/parser/validation/restriction/makefile index 66e4d9a..5e1a9fd 100644 --- a/xsd/tests/cxx/parser/validation/restriction/makefile +++ b/xsd/tests/cxx/parser/validation/restriction/makefile @@ -1,6 +1,5 @@ # file : tests/cxx/parser/validation/restriction/makefile -# author : Boris Kolpackov -# copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +# copyright : Copyright (c) 2006-2014 Code Synthesis Tools CC # license : GNU GPL v2 + exceptions; see accompanying LICENSE file include $(dir $(lastword $(MAKEFILE_LIST)))../../../../../build/bootstrap.make @@ -27,17 +26,17 @@ $(call import,\ # $(driver): $(obj) $(xerces_c.l) -$(obj) $(dep): cpp_options := -I$(src_root)/libxsd +$(obj) $(dep): cpp_options := -I$(out_base) -I$(src_base) -I$(src_root)/libxsd $(obj) $(dep): $(xerces_c.l.cpp-options) genf := $(xsd:.xsd=-pskel.hxx) $(xsd:.xsd=-pskel.ixx) $(xsd:.xsd=-pskel.cxx) gen := $(addprefix $(out_base)/,$(genf)) $(gen): xsd := $(out_root)/xsd/xsd -$(gen): xsd_options := --generate-validation +$(gen): xsd_options += --generate-validation $(gen): $(out_root)/xsd/xsd -$(call include-dep,$(dep)) +$(call include-dep,$(dep),$(obj),$(gen)) # Convenience alias for default target. @@ -81,7 +80,12 @@ endif $(call include,$(bld_root)/cxx/o-e.make) $(call include,$(bld_root)/cxx/cxx-o.make) $(call include,$(bld_root)/cxx/cxx-d.make) + +$(call include,$(bld_root)/cxx/standard.make) # cxx_standard +ifdef cxx_standard +$(gen): xsd_options += --std $(cxx_standard) $(call include,$(scf_root)/xsd/parser/xsd-cxx.make) +endif # Dependencies. diff --git a/xsd/tests/cxx/parser/validation/sequence/driver.cxx b/xsd/tests/cxx/parser/validation/sequence/driver.cxx index 2e994b2..eddf744 100644 --- a/xsd/tests/cxx/parser/validation/sequence/driver.cxx +++ b/xsd/tests/cxx/parser/validation/sequence/driver.cxx @@ -1,6 +1,5 @@ // file : tests/cxx/parser/validation/sequence/driver.cxx -// author : Boris Kolpackov -// copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2006-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file // Test the sequence compositor validation. diff --git a/xsd/tests/cxx/parser/validation/sequence/makefile b/xsd/tests/cxx/parser/validation/sequence/makefile index 53f6c61..540f2ea 100644 --- a/xsd/tests/cxx/parser/validation/sequence/makefile +++ b/xsd/tests/cxx/parser/validation/sequence/makefile @@ -1,6 +1,5 @@ # file : tests/cxx/parser/validation/sequence/makefile -# author : Boris Kolpackov -# copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +# copyright : Copyright (c) 2006-2014 Code Synthesis Tools CC # license : GNU GPL v2 + exceptions; see accompanying LICENSE file include $(dir $(lastword $(MAKEFILE_LIST)))../../../../../build/bootstrap.make @@ -27,17 +26,17 @@ $(call import,\ # $(driver): $(obj) $(xerces_c.l) -$(obj) $(dep): cpp_options := -I$(src_root)/libxsd +$(obj) $(dep): cpp_options := -I$(out_base) -I$(src_base) -I$(src_root)/libxsd $(obj) $(dep): $(xerces_c.l.cpp-options) genf := $(xsd:.xsd=-pskel.hxx) $(xsd:.xsd=-pskel.ixx) $(xsd:.xsd=-pskel.cxx) gen := $(addprefix $(out_base)/,$(genf)) $(gen): xsd := $(out_root)/xsd/xsd -$(gen): xsd_options := --generate-validation +$(gen): xsd_options += --generate-validation $(gen): $(out_root)/xsd/xsd -$(call include-dep,$(dep)) +$(call include-dep,$(dep),$(obj),$(gen)) # Convenience alias for default target. @@ -81,7 +80,12 @@ endif $(call include,$(bld_root)/cxx/o-e.make) $(call include,$(bld_root)/cxx/cxx-o.make) $(call include,$(bld_root)/cxx/cxx-d.make) + +$(call include,$(bld_root)/cxx/standard.make) # cxx_standard +ifdef cxx_standard +$(gen): xsd_options += --std $(cxx_standard) $(call include,$(scf_root)/xsd/parser/xsd-cxx.make) +endif # Dependencies. diff --git a/xsd/tests/cxx/tree/any-type/driver.cxx b/xsd/tests/cxx/tree/any-type/driver.cxx new file mode 100644 index 0000000..1ac5274 --- /dev/null +++ b/xsd/tests/cxx/tree/any-type/driver.cxx @@ -0,0 +1,145 @@ +// file : tests/cxx/tree/any-type/driver.cxx +// copyright : Copyright (c) 2006-2014 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +// Test anyType and anySimpleType content extraction. +// + +#include // std::auto_ptr/unique_ptr +#include // std::move +#include +#include + +#include +#include + +#include "test.hxx" // Get XSD_CXX11 defined. + +#include + +using namespace std; +using namespace test; +using namespace xercesc; + +namespace xml = xsd::cxx::xml; + +int +main (int argc, char* argv[]) +{ + if (argc != 2) + { + cerr << "usage: " << argv[0] << " test.xml" << endl; + return 1; + } + + XMLPlatformUtils::Initialize (); + + try + { + // Test parsing + // + XSD_AUTO_PTR r (root (argv[1])); + + // Test API. + // + { + assert (type::a_default_value ().text_content () == "default value"); + } + + { + xml_schema::simple_type x ("fox"); + assert (x.text_content () == "fox"); + x.text_content ("foo"); + assert (x.text_content () == "foo"); + x.text_content ().clear (); + assert (x.text_content () == ""); + x.text_content () = "baz"; + r->s ().push_back (x); + } + + { + xml_schema::type x; + + DOMDocument& doc (x.dom_content_document ()); + + // Copy. + // + DOMElement* e (doc.createElement (xml::string ("dummy").c_str ())); + e->setAttribute (xml::string ("x").c_str (), + xml::string ("foo").c_str ()); + e->setTextContent (xml::string ("data").c_str ()); + x.dom_content ().set (*e); + e->release (); + + r->t ().push_back (x); + } + + { + XSD_AUTO_PTR x (new xml_schema::type); + + DOMDocument& doc (x->dom_content_document ()); + + // Assume ownership. + // + DOMElement* e (doc.createElement (xml::string ("dummy").c_str ())); + e->setAttribute (xml::string ("x").c_str (), + xml::string ("foo").c_str ()); + e->setTextContent (xml::string ("data").c_str ()); + x->dom_content ().set (e); + +#ifdef XSD_CXX11 + r->t ().push_back (std::move (x)); +#else + r->t ().push_back (x); +#endif + } + + // Test printing. + // + cout << *r << endl + << endl; + + // Test serialization. + // + xml_schema::namespace_infomap map; + + map["t"].name = "test"; + map["t"].schema = "test.xsd"; + map["o"].name = "other"; + + stringstream iostr; + root (iostr, *r, map); + + cout << iostr.str () << endl + << endl; + + { + XSD_AUTO_PTR r1 (root (iostr, argv[1])); + + // Xerces-C++ mis-indentation of mixed content messes this up. + // assert (*r == *r); + + stringstream iostr; + root (iostr, *r1, map); + + cout << iostr.str () << endl + << endl; + } + + // Test comparison. + // + assert (*r == *r); + + // Test copy c-tor. + // + type copy (*r); + assert (copy == *r); + } + catch (xml_schema::exception const& e) + { + cerr << e << endl; + return 1; + } + + XMLPlatformUtils::Terminate (); +} diff --git a/xsd/tests/cxx/tree/any-type/makefile b/xsd/tests/cxx/tree/any-type/makefile new file mode 100644 index 0000000..1d0590f --- /dev/null +++ b/xsd/tests/cxx/tree/any-type/makefile @@ -0,0 +1,87 @@ +# file : tests/cxx/tree/any-type/makefile +# copyright : Copyright (c) 2006-2014 Code Synthesis Tools CC +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +include $(dir $(lastword $(MAKEFILE_LIST)))../../../../build/bootstrap.make + +xsd := test.xsd +cxx := driver.cxx + +obj := $(addprefix $(out_base)/,$(cxx:.cxx=.o) $(xsd:.xsd=.o)) +dep := $(obj:.o=.o.d) + +driver := $(out_base)/driver +test := $(out_base)/.test +clean := $(out_base)/.clean + + +# Import. +# +$(call import,\ + $(scf_root)/import/libxerces-c/stub.make,\ + l: xerces_c.l,cpp-options: xerces_c.l.cpp-options) + + +# Build. +# +$(driver): $(obj) $(xerces_c.l) + +$(obj) $(dep): cpp_options := -I$(out_base) -I$(src_base) -I$(src_root)/libxsd +$(obj) $(dep): $(xerces_c.l.cpp-options) + +genf := $(xsd:.xsd=.hxx) $(xsd:.xsd=.ixx) $(xsd:.xsd=.cxx) +gen := $(addprefix $(out_base)/,$(genf)) + +$(gen): xsd := $(out_root)/xsd/xsd +$(gen): xsd_options += --generate-any-type --generate-serialization \ +--generate-ostream --generate-comparison +$(gen): $(out_root)/xsd/xsd + +$(call include-dep,$(dep),$(obj),$(gen)) + +# Convenience alias for default target. +# +$(out_base)/: $(driver) + + +# Test. +# +$(test): driver := $(driver) +$(test): $(driver) $(src_base)/test.xml $(src_base)/output + $(call message,test $$1,$$1 $(src_base)/test.xml | diff -u $(src_base)/output -,$(driver)) + +# Clean. +# +$(clean): $(driver).o.clean \ + $(addsuffix .cxx.clean,$(obj)) \ + $(addsuffix .cxx.clean,$(dep)) \ + $(addprefix $(out_base)/,$(xsd:.xsd=.cxx.xsd.clean)) + +# Generated .gitignore. +# +ifeq ($(out_base),$(src_base)) +$(gen): | $(out_base)/.gitignore +$(driver): | $(out_base)/.gitignore + +$(out_base)/.gitignore: files := driver $(genf) +$(clean): $(out_base)/.gitignore.clean + +$(call include,$(bld_root)/git/gitignore.make) +endif + +# How to. +# +$(call include,$(bld_root)/cxx/o-e.make) +$(call include,$(bld_root)/cxx/cxx-o.make) +$(call include,$(bld_root)/cxx/cxx-d.make) + +$(call include,$(bld_root)/cxx/standard.make) # cxx_standard +ifdef cxx_standard +$(gen): xsd_options += --std $(cxx_standard) +$(call include,$(scf_root)/xsd/tree/xsd-cxx.make) +endif + + +# Dependencies. +# +$(call import,$(src_root)/xsd/makefile) diff --git a/xsd/tests/cxx/tree/any-type/output b/xsd/tests/cxx/tree/any-type/output new file mode 100644 index 0000000..580e7db --- /dev/null +++ b/xsd/tests/cxx/tree/any-type/output @@ -0,0 +1,73 @@ + +t: +t: +t: +t: +t: +t: +t: +t: +s: +s: simple +s: baz +l: one two three +a: any simple content + + + + + + any + any + + + nested 1 + nested 2 + + more + + mi + nested 1x + nested 2ed + content + + data + data + + simple + baz + one two three + + + + + + + + any + any + + + nested 1 + nested 2 + + more + + mi + + nested 1x + + nested 2ed + + content + + + data + data + + simple + baz + one two three + + + diff --git a/xsd/tests/cxx/tree/any-type/test.xml b/xsd/tests/cxx/tree/any-type/test.xml new file mode 100644 index 0000000..7c9035a --- /dev/null +++ b/xsd/tests/cxx/tree/any-type/test.xml @@ -0,0 +1,26 @@ + + + + + any + any + + + nested 1 + nested 2 + + more + + minested 1xnested 2edcontent + + + simple + + one two three + + diff --git a/xsd/tests/cxx/tree/any-type/test.xsd b/xsd/tests/cxx/tree/any-type/test.xsd new file mode 100644 index 0000000..37dcc8d --- /dev/null +++ b/xsd/tests/cxx/tree/any-type/test.xsd @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/xsd/tests/cxx/tree/binary/cdr/driver.cxx b/xsd/tests/cxx/tree/binary/cdr/driver.cxx index 42ca181..a2d7195 100644 --- a/xsd/tests/cxx/tree/binary/cdr/driver.cxx +++ b/xsd/tests/cxx/tree/binary/cdr/driver.cxx @@ -1,12 +1,11 @@ // file : tests/cxx/tree/binary/cdr/driver.cxx -// author : Boris Kolpackov -// copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2006-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file // Test non-polymorphic binary serialization to ACE CDR. // -#include // std::auto_ptr +#include // std::auto_ptr/unique_ptr #include #include @@ -26,7 +25,7 @@ main (int argc, char* argv[]) try { - auto_ptr r (root (argv[1])); + XSD_AUTO_PTR r (root (argv[1])); // Save to a CDR stream. // @@ -38,7 +37,7 @@ main (int argc, char* argv[]) // ACE_InputCDR ace_icdr (ace_ocdr); xml_schema::istream icdr (ace_icdr); - auto_ptr c (new type (icdr)); + XSD_AUTO_PTR c (new type (icdr)); // Compare the two. // @@ -128,6 +127,14 @@ main (int argc, char* argv[]) assert (r->time () == c->time ()); assert (r->date_time () == c->date_time ()); assert (r->duration () == c->duration ()); + + // anySimpleType + // + assert (!r->any_simple_type_attr ().text_content ().empty ()); + assert (r->any_simple_type_attr () == c->any_simple_type_attr ()); + + assert (!r->any_simple_type ().text_content ().empty ()); + assert (r->any_simple_type () == c->any_simple_type ()); } catch (xml_schema::exception const& e) { diff --git a/xsd/tests/cxx/tree/binary/cdr/makefile b/xsd/tests/cxx/tree/binary/cdr/makefile index 67437dc..eb80d35 100644 --- a/xsd/tests/cxx/tree/binary/cdr/makefile +++ b/xsd/tests/cxx/tree/binary/cdr/makefile @@ -1,6 +1,5 @@ # file : tests/cxx/tree/binary/cdr/makefile -# author : Boris Kolpackov -# copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +# copyright : Copyright (c) 2006-2014 Code Synthesis Tools CC # license : GNU GPL v2 + exceptions; see accompanying LICENSE file include $(dir $(lastword $(MAKEFILE_LIST)))../../../../../build/bootstrap.make @@ -30,18 +29,18 @@ $(call import,\ # $(driver): $(obj) $(xerces_c.l) $(ace.l) -$(obj) $(dep): cpp_options := -I$(src_root)/libxsd +$(obj) $(dep): cpp_options := -I$(out_base) -I$(src_base) -I$(src_root)/libxsd $(obj) $(dep): $(xerces_c.l.cpp-options) $(ace.l.cpp-options) genf := $(xsd:.xsd=.hxx) $(xsd:.xsd=.ixx) $(xsd:.xsd=.cxx) gen := $(addprefix $(out_base)/,$(genf)) $(gen): xsd := $(out_root)/xsd/xsd -$(gen): xsd_options := --generate-insertion ACE_OutputCDR \ ---generate-extraction ACE_InputCDR +$(gen): xsd_options += --generate-insertion ACE_OutputCDR \ +--generate-extraction ACE_InputCDR --generate-comparison $(gen): $(out_root)/xsd/xsd -$(call include-dep,$(dep)) +$(call include-dep,$(dep),$(obj),$(gen)) # Convenience alias for default target. # @@ -78,7 +77,12 @@ endif $(call include,$(bld_root)/cxx/o-e.make) $(call include,$(bld_root)/cxx/cxx-o.make) $(call include,$(bld_root)/cxx/cxx-d.make) + +$(call include,$(bld_root)/cxx/standard.make) # cxx_standard +ifdef cxx_standard +$(gen): xsd_options += --std $(cxx_standard) $(call include,$(scf_root)/xsd/tree/xsd-cxx.make) +endif # Dependencies. diff --git a/xsd/tests/cxx/tree/binary/cdr/test.xml b/xsd/tests/cxx/tree/binary/cdr/test.xml index 928b4cf..5cedd98 100644 --- a/xsd/tests/cxx/tree/binary/cdr/test.xml +++ b/xsd/tests/cxx/tree/binary/cdr/test.xml @@ -1,6 +1,7 @@ + xsi:schemaLocation="test test.xsd" + any_simple_type_attr="any simple content"> 1 2 3 @@ -87,5 +88,6 @@ 2001-11+02:00 + any simple content in element diff --git a/xsd/tests/cxx/tree/binary/cdr/test.xsd b/xsd/tests/cxx/tree/binary/cdr/test.xsd index e593f64..0629e94 100644 --- a/xsd/tests/cxx/tree/binary/cdr/test.xsd +++ b/xsd/tests/cxx/tree/binary/cdr/test.xsd @@ -112,7 +112,10 @@ + + + diff --git a/xsd/tests/cxx/tree/binary/makefile b/xsd/tests/cxx/tree/binary/makefile index 8a242c7..7ec2f6a 100644 --- a/xsd/tests/cxx/tree/binary/makefile +++ b/xsd/tests/cxx/tree/binary/makefile @@ -1,6 +1,5 @@ # file : tests/cxx/tree/binary/makefile -# author : Boris Kolpackov -# copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +# copyright : Copyright (c) 2006-2014 Code Synthesis Tools CC # license : GNU GPL v2 + exceptions; see accompanying LICENSE file include $(dir $(lastword $(MAKEFILE_LIST)))../../../../build/bootstrap.make diff --git a/xsd/tests/cxx/tree/binary/polymorphic/driver.cxx b/xsd/tests/cxx/tree/binary/polymorphic/driver.cxx index 3c3e057..8e7256e 100644 --- a/xsd/tests/cxx/tree/binary/polymorphic/driver.cxx +++ b/xsd/tests/cxx/tree/binary/polymorphic/driver.cxx @@ -1,16 +1,17 @@ // file : tests/cxx/tree/binary/polymorphic/driver.cxx -// author : Boris Kolpackov -// copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2006-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file // Test polymorphic binary serialization. // -#include // std::auto_ptr +#include // std::auto_ptr/unique_ptr #include #include #include +#include // ACE_HEX_DUMP + #include "test.hxx" using namespace std; @@ -27,7 +28,7 @@ main (int argc, char* argv[]) try { - auto_ptr r (root (argv[1])); + XSD_AUTO_PTR r (root (argv[1])); // Save to a CDR stream. // @@ -35,11 +36,24 @@ main (int argc, char* argv[]) xml_schema::ostream ocdr (ace_ocdr); ocdr << *r; + /* + // Print the binary representation. + // + cerr << "binary representation size: " << ace_ocdr.total_length () << endl; + + for (const ACE_Message_Block* mb = ace_ocdr.begin (); + mb != 0; + mb = mb->cont ()) + { + ACE_HEX_DUMP ((LM_DEBUG, mb->rd_ptr (), mb->length ())); + } + */ + // Load from a CDR stream. // ACE_InputCDR ace_icdr (ace_ocdr); xml_schema::istream icdr (ace_icdr); - auto_ptr c (new type (icdr)); + XSD_AUTO_PTR c (new type (icdr)); // Compare the two. // diff --git a/xsd/tests/cxx/tree/binary/polymorphic/makefile b/xsd/tests/cxx/tree/binary/polymorphic/makefile index 7e97e00..05c5186 100644 --- a/xsd/tests/cxx/tree/binary/polymorphic/makefile +++ b/xsd/tests/cxx/tree/binary/polymorphic/makefile @@ -1,6 +1,5 @@ # file : tests/cxx/tree/binary/polymorphic/makefile -# author : Boris Kolpackov -# copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +# copyright : Copyright (c) 2006-2014 Code Synthesis Tools CC # license : GNU GPL v2 + exceptions; see accompanying LICENSE file include $(dir $(lastword $(MAKEFILE_LIST)))../../../../../build/bootstrap.make @@ -30,18 +29,19 @@ $(call import,\ # $(driver): $(obj) $(xerces_c.l) $(ace.l) -$(obj) $(dep): cpp_options := -I$(src_root)/libxsd +$(obj) $(dep): cpp_options := -I$(out_base) -I$(src_base) -I$(src_root)/libxsd $(obj) $(dep): $(xerces_c.l.cpp-options) $(ace.l.cpp-options) genf := $(xsd:.xsd=.hxx) $(xsd:.xsd=.ixx) $(xsd:.xsd=.cxx) gen := $(addprefix $(out_base)/,$(genf)) $(gen): xsd := $(out_root)/xsd/xsd -$(gen): xsd_options := --generate-polymorphic --root-element-last \ ---generate-insertion ACE_OutputCDR --generate-extraction ACE_InputCDR +$(gen): xsd_options += --generate-polymorphic --root-element-last \ +--generate-insertion ACE_OutputCDR --generate-extraction ACE_InputCDR \ + --generate-comparison $(gen): $(out_root)/xsd/xsd -$(call include-dep,$(dep)) +$(call include-dep,$(dep),$(obj),$(gen)) # Convenience alias for default target. # @@ -78,7 +78,12 @@ endif $(call include,$(bld_root)/cxx/o-e.make) $(call include,$(bld_root)/cxx/cxx-o.make) $(call include,$(bld_root)/cxx/cxx-d.make) + +$(call include,$(bld_root)/cxx/standard.make) # cxx_standard +ifdef cxx_standard +$(gen): xsd_options += --std $(cxx_standard) $(call include,$(scf_root)/xsd/tree/xsd-cxx.make) +endif # Dependencies. diff --git a/xsd/tests/cxx/tree/binary/xdr/driver.cxx b/xsd/tests/cxx/tree/binary/xdr/driver.cxx index cf2a264..623a953 100644 --- a/xsd/tests/cxx/tree/binary/xdr/driver.cxx +++ b/xsd/tests/cxx/tree/binary/xdr/driver.cxx @@ -1,12 +1,11 @@ // file : tests/cxx/tree/binary/xdr/driver.cxx -// author : Boris Kolpackov -// copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2006-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file // Test non-polymorphic binary serialization to XDR. // -#include // std::auto_ptr +#include // std::auto_ptr/unique_ptr #include // std::memcpy #include #include @@ -17,15 +16,15 @@ using namespace std; using namespace test; extern "C" int -overflow (char* p, char* buf, int n) +overflow (char* p, char* buf, int in) { xml_schema::buffer* dst (reinterpret_cast (p)); - std::size_t size (dst->size ()); + size_t n (static_cast (in)), size (dst->size ()); dst->size (size + n); memcpy (dst->data () + size, buf, n); - return n; + return static_cast (n); } struct underflow_info @@ -35,17 +34,17 @@ struct underflow_info }; extern "C" int -underflow (char* p, char* buf, int n) +underflow (char* p, char* buf, int in) { underflow_info* ui (reinterpret_cast (p)); - std::size_t size (ui->buf->size () - ui->pos); + size_t n (static_cast (in)), size (ui->buf->size () - ui->pos); n = size > n ? n : size; memcpy (buf, ui->buf->data () + ui->pos, n); ui->pos += n; - return n; + return static_cast (n); } int @@ -59,7 +58,7 @@ main (int argc, char* argv[]) try { - auto_ptr r (root (argv[1])); + XSD_AUTO_PTR r (root (argv[1])); // Save to an XDR stream. // @@ -81,7 +80,7 @@ main (int argc, char* argv[]) xdr.x_op = XDR_DECODE; xdrrec_skiprecord (&xdr); xsd::cxx::tree::istream ixdr (xdr); - auto_ptr c (new type (ixdr)); + XSD_AUTO_PTR c (new type (ixdr)); xdr_destroy (&xdr); // Compare the two. @@ -172,6 +171,14 @@ main (int argc, char* argv[]) assert (r->year () == c->year ()); assert (r->year_month () == c->year_month ()); assert (r->time () == c->time ()); + + // anySimpleType + // + assert (!r->any_simple_type_attr ().text_content ().empty ()); + assert (r->any_simple_type_attr () == c->any_simple_type_attr ()); + + assert (!r->any_simple_type ().text_content ().empty ()); + assert (r->any_simple_type () == c->any_simple_type ()); } catch (xml_schema::exception const& e) { diff --git a/xsd/tests/cxx/tree/binary/xdr/makefile b/xsd/tests/cxx/tree/binary/xdr/makefile index 7b3089b..2994134 100644 --- a/xsd/tests/cxx/tree/binary/xdr/makefile +++ b/xsd/tests/cxx/tree/binary/xdr/makefile @@ -1,6 +1,5 @@ # file : tests/cxx/tree/binary/xdr/makefile -# author : Boris Kolpackov -# copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +# copyright : Copyright (c) 2006-2014 Code Synthesis Tools CC # license : GNU GPL v2 + exceptions; see accompanying LICENSE file include $(dir $(lastword $(MAKEFILE_LIST)))../../../../../build/bootstrap.make @@ -26,17 +25,18 @@ $(call import,\ # $(driver): $(obj) $(xerces_c.l) -$(obj) $(dep): cpp_options := -I$(src_root)/libxsd +$(obj) $(dep): cpp_options := -I$(out_base) -I$(src_base) -I$(src_root)/libxsd $(obj) $(dep): $(xerces_c.l.cpp-options) genf := $(xsd:.xsd=.hxx) $(xsd:.xsd=.ixx) $(xsd:.xsd=.cxx) gen := $(addprefix $(out_base)/,$(genf)) $(gen): xsd := $(out_root)/xsd/xsd -$(gen): xsd_options := --generate-insertion XDR --generate-extraction XDR +$(gen): xsd_options += --generate-insertion XDR --generate-extraction XDR \ +--generate-comparison $(gen): $(out_root)/xsd/xsd -$(call include-dep,$(dep)) +$(call include-dep,$(dep),$(obj),$(gen)) # Convenience alias for default target. # @@ -73,7 +73,12 @@ endif $(call include,$(bld_root)/cxx/o-e.make) $(call include,$(bld_root)/cxx/cxx-o.make) $(call include,$(bld_root)/cxx/cxx-d.make) + +$(call include,$(bld_root)/cxx/standard.make) # cxx_standard +ifdef cxx_standard +$(gen): xsd_options += --std $(cxx_standard) $(call include,$(scf_root)/xsd/tree/xsd-cxx.make) +endif # Dependencies. diff --git a/xsd/tests/cxx/tree/binary/xdr/test.xml b/xsd/tests/cxx/tree/binary/xdr/test.xml index 928b4cf..5cedd98 100644 --- a/xsd/tests/cxx/tree/binary/xdr/test.xml +++ b/xsd/tests/cxx/tree/binary/xdr/test.xml @@ -1,6 +1,7 @@ + xsi:schemaLocation="test test.xsd" + any_simple_type_attr="any simple content"> 1 2 3 @@ -87,5 +88,6 @@ 2001-11+02:00 + any simple content in element diff --git a/xsd/tests/cxx/tree/binary/xdr/test.xsd b/xsd/tests/cxx/tree/binary/xdr/test.xsd index e593f64..0629e94 100644 --- a/xsd/tests/cxx/tree/binary/xdr/test.xsd +++ b/xsd/tests/cxx/tree/binary/xdr/test.xsd @@ -112,7 +112,10 @@ + + + diff --git a/xsd/tests/cxx/tree/built-in/driver.cxx b/xsd/tests/cxx/tree/built-in/driver.cxx index a41e4f3..f60ac16 100644 --- a/xsd/tests/cxx/tree/built-in/driver.cxx +++ b/xsd/tests/cxx/tree/built-in/driver.cxx @@ -1,12 +1,11 @@ // file : tests/cxx/tree/built-in/driver.cxx -// author : Boris Kolpackov -// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file // Test built-in type mapping. // -#include // std::auto_ptr +#include // std::auto_ptr/unique_ptr #include #include @@ -15,7 +14,6 @@ using std::cerr; using std::endl; -using std::auto_ptr; int main (int argc, char* argv[]) @@ -26,12 +24,13 @@ main (int argc, char* argv[]) return 1; } - auto_ptr elements (xmlns::test::elements (argv[1])); + XSD_AUTO_PTR elements ( + xmlns::test::elements (argv[1])); - auto_ptr attributes ( + XSD_AUTO_PTR attributes ( xmlns::test::attributes (argv[2])); - auto_ptr inherited ( + XSD_AUTO_PTR inherited ( xmlns::test::inherited (argv[3])); cerr << "elements: " << *elements << endl @@ -53,13 +52,14 @@ main (int argc, char* argv[]) xmlns::test::elements (ostr, *elements, map); std::istringstream istr (ostr.str ()); - auto_ptr elements1 (xmlns::test::elements (istr)); + XSD_AUTO_PTR elements1 ( + xmlns::test::elements (istr)); std::ostringstream ostr1; xmlns::test::elements (ostr1, *elements1, map); if (ostr.str () != ostr1.str ()) - return 1; + return 1; } { @@ -67,7 +67,7 @@ main (int argc, char* argv[]) xmlns::test::attributes (ostr, *attributes, map); std::istringstream istr (ostr.str ()); - auto_ptr attributes1 ( + XSD_AUTO_PTR attributes1 ( xmlns::test::attributes (istr)); std::ostringstream ostr1; @@ -82,7 +82,7 @@ main (int argc, char* argv[]) xmlns::test::inherited (ostr, *inherited, map); std::istringstream istr (ostr.str ()); - auto_ptr inherited1 ( + XSD_AUTO_PTR inherited1 ( xmlns::test::inherited (istr)); std::ostringstream ostr1; diff --git a/xsd/tests/cxx/tree/built-in/makefile b/xsd/tests/cxx/tree/built-in/makefile index bf6301b..3df37c3 100644 --- a/xsd/tests/cxx/tree/built-in/makefile +++ b/xsd/tests/cxx/tree/built-in/makefile @@ -1,6 +1,5 @@ # file : tests/cxx/tree/built-in/makefile -# author : Boris Kolpackov -# copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +# copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC # license : GNU GPL v2 + exceptions; see accompanying LICENSE file include $(dir $(lastword $(MAKEFILE_LIST)))../../../../build/bootstrap.make @@ -27,7 +26,7 @@ $(call import,\ # $(driver): $(obj) $(xerces_c.l) -$(obj) $(dep): cpp_options := -I$(src_root)/libxsd +$(obj) $(dep): cpp_options := -I$(out_base) -I$(src_base) -I$(src_root)/libxsd $(obj) $(dep): $(xerces_c.l.cpp-options) genf := $(xsd:.xsd=.hxx) $(xsd:.xsd=.ixx) $(xsd:.xsd=.cxx) @@ -35,7 +34,7 @@ gen := $(addprefix $(out_base)/,$(genf)) $(gen): xsd := $(out_root)/xsd/xsd -$(gen): xsd_options := \ +$(gen): xsd_options += \ --char-type char \ --generate-inline \ --generate-ostream \ @@ -44,10 +43,9 @@ $(gen): xsd_options := \ --generate-from-base-ctor \ --root-element-all -$(gen): $(src_root)/xsd/xsd - -$(call include-dep,$(dep)) +$(gen): $(out_root)/xsd/xsd +$(call include-dep,$(dep),$(obj),$(gen)) # Convenience alias for default target. # @@ -90,7 +88,12 @@ endif $(call include,$(bld_root)/cxx/o-e.make) $(call include,$(bld_root)/cxx/cxx-o.make) $(call include,$(bld_root)/cxx/cxx-d.make) + +$(call include,$(bld_root)/cxx/standard.make) # cxx_standard +ifdef cxx_standard +$(gen): xsd_options += --std $(cxx_standard) $(call include,$(scf_root)/xsd/tree/xsd-cxx.make) +endif # Dependencies. # diff --git a/xsd/tests/cxx/tree/chameleon/driver.cxx b/xsd/tests/cxx/tree/chameleon/driver.cxx index 6dae28e..80c67da 100644 --- a/xsd/tests/cxx/tree/chameleon/driver.cxx +++ b/xsd/tests/cxx/tree/chameleon/driver.cxx @@ -1,12 +1,11 @@ // file : tests/cxx/tree/chameleon/driver.cxx -// author : Boris Kolpackov -// copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2006-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file // Test chameleon inclusion. // -#include // std::auto_ptr +#include // std::auto_ptr/unique_ptr #include #include "includer.hxx" @@ -25,7 +24,7 @@ main (int argc, char* argv[]) try { - auto_ptr r (root (argv[1])); + XSD_AUTO_PTR r (root (argv[1])); cout << *r << endl; } diff --git a/xsd/tests/cxx/tree/chameleon/makefile b/xsd/tests/cxx/tree/chameleon/makefile index 890de3f..4ae7eb7 100644 --- a/xsd/tests/cxx/tree/chameleon/makefile +++ b/xsd/tests/cxx/tree/chameleon/makefile @@ -1,6 +1,5 @@ # file : tests/cxx/tree/chameleon/makefile -# author : Boris Kolpackov -# copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +# copyright : Copyright (c) 2006-2014 Code Synthesis Tools CC # license : GNU GPL v2 + exceptions; see accompanying LICENSE file include $(dir $(lastword $(MAKEFILE_LIST)))../../../../build/bootstrap.make @@ -27,17 +26,17 @@ $(call import,\ # $(driver): $(obj) $(xerces_c.l) -$(obj) $(dep): cpp_options := -I$(src_root)/libxsd +$(obj) $(dep): cpp_options := -I$(out_base) -I$(src_base) -I$(src_root)/libxsd $(obj) $(dep): $(xerces_c.l.cpp-options) genf := $(xsd:.xsd=.hxx) $(xsd:.xsd=.ixx) $(xsd:.xsd=.cxx) gen := $(addprefix $(out_base)/,$(genf)) $(gen): xsd := $(out_root)/xsd/xsd -$(gen): xsd_options := --root-element root --generate-ostream +$(gen): xsd_options += --root-element root --generate-ostream $(gen): $(out_root)/xsd/xsd -$(call include-dep,$(dep)) +$(call include-dep,$(dep),$(obj),$(gen)) # Convenience alias for default target. # @@ -74,7 +73,12 @@ endif $(call include,$(bld_root)/cxx/o-e.make) $(call include,$(bld_root)/cxx/cxx-o.make) $(call include,$(bld_root)/cxx/cxx-d.make) + +$(call include,$(bld_root)/cxx/standard.make) # cxx_standard +ifdef cxx_standard +$(gen): xsd_options += --std $(cxx_standard) $(call include,$(scf_root)/xsd/tree/xsd-cxx.make) +endif # Dependencies. diff --git a/xsd/tests/cxx/tree/comparison/driver.cxx b/xsd/tests/cxx/tree/comparison/driver.cxx index 07ed7a6..e685050 100644 --- a/xsd/tests/cxx/tree/comparison/driver.cxx +++ b/xsd/tests/cxx/tree/comparison/driver.cxx @@ -1,12 +1,11 @@ // file : tests/cxx/tree/comparison/driver.cxx -// author : Boris Kolpackov -// copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2006-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file // Test generated comparison operators. // -#include // std::auto_ptr +#include // std::auto_ptr/unique_ptr #include #include "test.hxx" @@ -25,7 +24,7 @@ main (int argc, char* argv[]) try { - auto_ptr r (root (argv[1])); + XSD_AUTO_PTR r (root (argv[1])); type::complex_sequence s (r->complex ()); diff --git a/xsd/tests/cxx/tree/comparison/makefile b/xsd/tests/cxx/tree/comparison/makefile index 5d8721a..82cb7b0 100644 --- a/xsd/tests/cxx/tree/comparison/makefile +++ b/xsd/tests/cxx/tree/comparison/makefile @@ -1,6 +1,5 @@ # file : tests/cxx/tree/comparison/makefile -# author : Boris Kolpackov -# copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +# copyright : Copyright (c) 2006-2014 Code Synthesis Tools CC # license : GNU GPL v2 + exceptions; see accompanying LICENSE file include $(dir $(lastword $(MAKEFILE_LIST)))../../../../build/bootstrap.make @@ -27,17 +26,17 @@ $(call import,\ # $(driver): $(obj) $(xerces_c.l) -$(obj) $(dep): cpp_options := -I$(src_root)/libxsd +$(obj) $(dep): cpp_options := -I$(out_base) -I$(src_base) -I$(src_root)/libxsd $(obj) $(dep): $(xerces_c.l.cpp-options) genf := $(xsd:.xsd=.hxx) $(xsd:.xsd=.ixx) $(xsd:.xsd=.cxx) gen := $(addprefix $(out_base)/,$(genf)) $(gen): xsd := $(out_root)/xsd/xsd -$(gen): xsd_options := --generate-comparison +$(gen): xsd_options += --generate-comparison $(gen): $(out_root)/xsd/xsd -$(call include-dep,$(dep)) +$(call include-dep,$(dep),$(obj),$(gen)) # Convenience alias for default target. # @@ -74,7 +73,12 @@ endif $(call include,$(bld_root)/cxx/o-e.make) $(call include,$(bld_root)/cxx/cxx-o.make) $(call include,$(bld_root)/cxx/cxx-d.make) + +$(call include,$(bld_root)/cxx/standard.make) # cxx_standard +ifdef cxx_standard +$(gen): xsd_options += --std $(cxx_standard) $(call include,$(scf_root)/xsd/tree/xsd-cxx.make) +endif # Dependencies. diff --git a/xsd/tests/cxx/tree/compilation/driver.cxx b/xsd/tests/cxx/tree/compilation/driver.cxx index 8135c9b..c2e6298 100644 --- a/xsd/tests/cxx/tree/compilation/driver.cxx +++ b/xsd/tests/cxx/tree/compilation/driver.cxx @@ -1,13 +1,11 @@ // file : tests/cxx/tree/compilation/driver.cxx -// author : Boris Kolpackov -// copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2006-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file // Make sure the runtime library compiles by explicitly instantiating // all the types. // -#include // std::auto_ptr #include #include "test.hxx" @@ -15,7 +13,7 @@ using namespace std; using namespace test; -template class xsd::cxx::tree::simple_type; +template class xsd::cxx::tree::simple_type; // String types. // diff --git a/xsd/tests/cxx/tree/compilation/makefile b/xsd/tests/cxx/tree/compilation/makefile index 93b88db..16dbb91 100644 --- a/xsd/tests/cxx/tree/compilation/makefile +++ b/xsd/tests/cxx/tree/compilation/makefile @@ -1,6 +1,5 @@ # file : tests/cxx/tree/compilation/makefile -# author : Boris Kolpackov -# copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +# copyright : Copyright (c) 2006-2014 Code Synthesis Tools CC # license : GNU GPL v2 + exceptions; see accompanying LICENSE file include $(dir $(lastword $(MAKEFILE_LIST)))../../../../build/bootstrap.make @@ -27,17 +26,17 @@ $(call import,\ # $(driver): $(obj) $(xerces_c.l) -$(obj) $(dep): cpp_options := -I$(src_root)/libxsd +$(obj) $(dep): cpp_options := -I$(out_base) -I$(src_base) -I$(src_root)/libxsd $(obj) $(dep): $(xerces_c.l.cpp-options) genf := $(xsd:.xsd=.hxx) $(xsd:.xsd=.ixx) $(xsd:.xsd=.cxx) gen := $(addprefix $(out_base)/,$(genf)) $(gen): xsd := $(out_root)/xsd/xsd -$(gen): xsd_options := --generate-serialization +$(gen): xsd_options += --generate-serialization $(gen): $(out_root)/xsd/xsd -$(call include-dep,$(dep)) +$(call include-dep,$(dep),$(obj),$(gen)) # Convenience alias for default target. # @@ -74,7 +73,12 @@ endif $(call include,$(bld_root)/cxx/o-e.make) $(call include,$(bld_root)/cxx/cxx-o.make) $(call include,$(bld_root)/cxx/cxx-d.make) + +$(call include,$(bld_root)/cxx/standard.make) # cxx_standard +ifdef cxx_standard +$(gen): xsd_options += --std $(cxx_standard) $(call include,$(scf_root)/xsd/tree/xsd-cxx.make) +endif # Dependencies. diff --git a/xsd/tests/cxx/tree/complex/ctor/driver.cxx b/xsd/tests/cxx/tree/complex/ctor/driver.cxx index 55044a3..8ea8c87 100644 --- a/xsd/tests/cxx/tree/complex/ctor/driver.cxx +++ b/xsd/tests/cxx/tree/complex/ctor/driver.cxx @@ -1,6 +1,5 @@ // file : tests/cxx/tree/complex/ctor/driver.cxx -// author : Boris Kolpackov -// copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2006-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file // Test generation of varous complex type constructors. @@ -11,6 +10,13 @@ #include "test.hxx" +#ifdef XSD_CXX11 +# include // std::move +# define XSD_MOVE(x) std::move(x) +#else +# define XSD_MOVE(x) x +#endif + using namespace std; using namespace test; @@ -64,12 +70,12 @@ main () // e_base b1 (1, "foo", e_complex_type ("bar")); - auto_ptr c2 (new e_complex_type ("bar")); - e_base b2 (1, "foo", c2); + XSD_AUTO_PTR c2 (new e_complex_type ("bar")); + e_base b2 (1, "foo", XSD_MOVE (c2)); - auto_ptr s3 (new e_simple_type ("foo")); - auto_ptr c3 (new e_complex_type ("bar")); - e_base b3 (1, s3, c3); + XSD_AUTO_PTR s3 (new e_simple_type ("foo")); + XSD_AUTO_PTR c3 (new e_complex_type ("bar")); + e_base b3 (1, XSD_MOVE (s3), XSD_MOVE (c3)); assert (b1 == b2); assert (b1 == b3); @@ -79,15 +85,20 @@ main () e_derived d1 (1, "foo", e_complex_type ("bar"), true, "baz", e_complex_type ("biz")); - auto_ptr c2a (new e_complex_type ("bar")); - auto_ptr c2b (new e_complex_type ("biz")); - e_derived d2 (1, "foo", c2a, true, "baz", c2b); - - auto_ptr s3a (new e_simple_type ("foo")); - auto_ptr s3b (new xml_schema::string ("baz")); - auto_ptr c3a (new e_complex_type ("bar")); - auto_ptr c3b (new e_complex_type ("biz")); - e_derived d3 (1, s3a, c3a, true, s3b, c3b); + XSD_AUTO_PTR c2a (new e_complex_type ("bar")); + XSD_AUTO_PTR c2b (new e_complex_type ("biz")); + e_derived d2 (1, "foo", XSD_MOVE (c2a), true, "baz", XSD_MOVE (c2b)); + + XSD_AUTO_PTR s3a (new e_simple_type ("foo")); + XSD_AUTO_PTR s3b (new xml_schema::string ("baz")); + XSD_AUTO_PTR c3a (new e_complex_type ("bar")); + XSD_AUTO_PTR c3b (new e_complex_type ("biz")); + e_derived d3 (1, + XSD_MOVE (s3a), + XSD_MOVE (c3a), + true, + XSD_MOVE (s3b), + XSD_MOVE (c3b)); assert (d1 == d2); assert (d1 == d3); @@ -99,12 +110,12 @@ main () { f_type f1 (xml_schema::type (), 1, "foo", f_complex_type ("bar")); - auto_ptr c2 (new f_complex_type ("bar")); - f_type f2 (1, "foo", c2); + XSD_AUTO_PTR c2 (new f_complex_type ("bar")); + f_type f2 (1, "foo", XSD_MOVE (c2)); - auto_ptr s3 (new f_simple_type ("foo")); - auto_ptr c3 (new f_complex_type ("bar")); - f_type f3 (1, s3, c3); + XSD_AUTO_PTR s3 (new f_simple_type ("foo")); + XSD_AUTO_PTR c3 (new f_complex_type ("bar")); + f_type f3 (1, XSD_MOVE (s3), XSD_MOVE (c3)); assert (f1 == f2); assert (f1 == f3); diff --git a/xsd/tests/cxx/tree/complex/ctor/makefile b/xsd/tests/cxx/tree/complex/ctor/makefile index 66558f5..ffc82b0 100644 --- a/xsd/tests/cxx/tree/complex/ctor/makefile +++ b/xsd/tests/cxx/tree/complex/ctor/makefile @@ -1,6 +1,5 @@ # file : tests/cxx/tree/complex/ctor/makefile -# author : Boris Kolpackov -# copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +# copyright : Copyright (c) 2006-2014 Code Synthesis Tools CC # license : GNU GPL v2 + exceptions; see accompanying LICENSE file include $(dir $(lastword $(MAKEFILE_LIST)))../../../../../build/bootstrap.make @@ -27,19 +26,19 @@ $(call import,\ # $(driver): $(obj) $(xerces_c.l) -$(obj) $(dep): cpp_options := -I$(src_root)/libxsd +$(obj) $(dep): cpp_options := -I$(out_base) -I$(src_base) -I$(src_root)/libxsd $(obj) $(dep): $(xerces_c.l.cpp-options) genf := $(xsd:.xsd=.hxx) $(xsd:.xsd=.ixx) $(xsd:.xsd=.cxx) gen := $(addprefix $(out_base)/,$(genf)) $(gen): xsd := $(out_root)/xsd/xsd -$(gen): xsd_options := --generate-default-ctor --generate-from-base-ctor \ +$(gen): xsd_options += --generate-default-ctor --generate-from-base-ctor \ --generate-doxygen --generate-polymorphic --polymorphic-type-all \ --generate-comparison $(gen): $(out_root)/xsd/xsd -$(call include-dep,$(dep)) +$(call include-dep,$(dep),$(obj),$(gen)) # Convenience alias for default target. # @@ -76,8 +75,12 @@ endif $(call include,$(bld_root)/cxx/o-e.make) $(call include,$(bld_root)/cxx/cxx-o.make) $(call include,$(bld_root)/cxx/cxx-d.make) -$(call include,$(scf_root)/xsd/tree/xsd-cxx.make) +$(call include,$(bld_root)/cxx/standard.make) # cxx_standard +ifdef cxx_standard +$(gen): xsd_options += --std $(cxx_standard) +$(call include,$(scf_root)/xsd/tree/xsd-cxx.make) +endif # Dependencies. # diff --git a/xsd/tests/cxx/tree/complex/makefile b/xsd/tests/cxx/tree/complex/makefile index a0b3294..db6e6a8 100644 --- a/xsd/tests/cxx/tree/complex/makefile +++ b/xsd/tests/cxx/tree/complex/makefile @@ -1,6 +1,5 @@ # file : tests/cxx/tree/complex/makefile -# author : Boris Kolpackov -# copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +# copyright : Copyright (c) 2006-2014 Code Synthesis Tools CC # license : GNU GPL v2 + exceptions; see accompanying LICENSE file include $(dir $(lastword $(MAKEFILE_LIST)))../../../../build/bootstrap.make diff --git a/xsd/tests/cxx/tree/containment/driver.cxx b/xsd/tests/cxx/tree/containment/driver.cxx index cb6c76e..f019de8 100644 --- a/xsd/tests/cxx/tree/containment/driver.cxx +++ b/xsd/tests/cxx/tree/containment/driver.cxx @@ -1,16 +1,22 @@ // file : tests/cxx/tree/containment/driver.cxx -// author : Boris Kolpackov -// copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2006-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file // Test tree node containment. // -#include // std::auto_ptr +#include // std::auto_ptr/unique_ptr #include #include "test.hxx" +#ifdef XSD_CXX11 +# include // std::move +# define XSD_MOVE(x) std::move(x) +#else +# define XSD_MOVE(x) x +#endif + using namespace std; using namespace test; @@ -20,11 +26,11 @@ main () // Change of a container in a sub-tree without ID. // { - auto_ptr i (new inner ()); + XSD_AUTO_PTR i (new inner ()); i->ref ("foo"); outer o; - o.i (i); + o.i (XSD_MOVE (i)); o.ref ("foo"); assert (o.i ()->ref ()->get () == 0); @@ -34,14 +40,14 @@ main () // Change of container in a sub-tree with ID inside. // { - auto_ptr i (new inner ()); + XSD_AUTO_PTR i (new inner ()); inner* p (i.get ()); i->id ("foo"); i->ref ("foo"); assert (i->ref ()->get () == p); outer o; - o.i (i); + o.i (XSD_MOVE (i)); o.ref ("foo"); assert (o.i ()->ref ()->get () == p); @@ -51,10 +57,10 @@ main () // Change of a container in ID. // { - auto_ptr id (new xml_schema::id ("foo")); + XSD_AUTO_PTR id (new xml_schema::id ("foo")); inner i; - i.id (id); + i.id (XSD_MOVE (id)); i.ref ("foo"); assert (i.ref ()->get () == &i); } @@ -62,12 +68,12 @@ main () // Change of a container in a type derived from ID with ID inside. // { - auto_ptr id (new id_ex ("foo")); + XSD_AUTO_PTR id (new id_ex ("foo")); id_ex* p (id.get ()); id->id ("bar"); inner i; - i.id_ex (id); + i.id_ex (XSD_MOVE (id)); i.ref ("foo"); assert (i.ref ()->get () == &i); @@ -81,28 +87,28 @@ main () { id i1 ("a"), i2 ("b"); - auto_ptr ic (new ids); + XSD_AUTO_PTR ic (new ids); ic->id ().push_back (i1); ic->id ().push_back (i2); - auto_ptr r1 (new xml_schema::idrefs); + XSD_AUTO_PTR r1 (new xml_schema::idrefs); r1->push_back (xml_schema::idref ("a")); r1->push_back (xml_schema::idref ("b")); - auto_ptr r2 (new idref_list); + XSD_AUTO_PTR r2 (new idref_list); r2->push_back (xml_schema::idref ("a")); r2->push_back (xml_schema::idref ("b")); - auto_ptr rc1 (new idrefs1); - auto_ptr rc2 (new idrefs2); + XSD_AUTO_PTR rc1 (new idrefs1); + XSD_AUTO_PTR rc2 (new idrefs2); - rc1->idrefs (r1); - rc2->idrefs (r2); + rc1->idrefs (XSD_MOVE (r1)); + rc2->idrefs (XSD_MOVE (r2)); model m; - m.ids (ic); - m.idrefs1 (rc1); - m.idrefs2 (rc2); + m.ids (XSD_MOVE (ic)); + m.idrefs1 (XSD_MOVE (rc1)); + m.idrefs2 (XSD_MOVE (rc2)); assert (m.idrefs1 ().idrefs ()[0].get () != 0); assert (m.idrefs1 ().idrefs ()[1].get () != 0); diff --git a/xsd/tests/cxx/tree/containment/makefile b/xsd/tests/cxx/tree/containment/makefile index fcdd792..d181fb5 100644 --- a/xsd/tests/cxx/tree/containment/makefile +++ b/xsd/tests/cxx/tree/containment/makefile @@ -1,6 +1,5 @@ # file : tests/cxx/tree/containment/makefile -# author : Boris Kolpackov -# copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +# copyright : Copyright (c) 2006-2014 Code Synthesis Tools CC # license : GNU GPL v2 + exceptions; see accompanying LICENSE file include $(dir $(lastword $(MAKEFILE_LIST)))../../../../build/bootstrap.make @@ -27,17 +26,17 @@ $(call import,\ # $(driver): $(obj) $(xerces_c.l) -$(obj) $(dep): cpp_options := -I$(src_root)/libxsd +$(obj) $(dep): cpp_options := -I$(out_base) -I$(src_base) -I$(src_root)/libxsd $(obj) $(dep): $(xerces_c.l.cpp-options) genf := $(xsd:.xsd=.hxx) $(xsd:.xsd=.ixx) $(xsd:.xsd=.cxx) gen := $(addprefix $(out_base)/,$(genf)) $(gen): xsd := $(out_root)/xsd/xsd -$(gen): xsd_options := --generate-default-ctor +$(gen): xsd_options += --generate-default-ctor $(gen): $(out_root)/xsd/xsd -$(call include-dep,$(dep)) +$(call include-dep,$(dep),$(obj),$(gen)) # Convenience alias for default target. # @@ -74,7 +73,12 @@ endif $(call include,$(bld_root)/cxx/o-e.make) $(call include,$(bld_root)/cxx/cxx-o.make) $(call include,$(bld_root)/cxx/cxx-d.make) + +$(call include,$(bld_root)/cxx/standard.make) # cxx_standard +ifdef cxx_standard +$(gen): xsd_options += --std $(cxx_standard) $(call include,$(scf_root)/xsd/tree/xsd-cxx.make) +endif # Dependencies. diff --git a/xsd/tests/cxx/tree/default/general/driver.cxx b/xsd/tests/cxx/tree/default/general/driver.cxx index a48650f..b0df8ba 100644 --- a/xsd/tests/cxx/tree/default/general/driver.cxx +++ b/xsd/tests/cxx/tree/default/general/driver.cxx @@ -1,12 +1,11 @@ // file : tests/cxx/tree/default/general/driver.cxx -// author : Boris Kolpackov -// copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2006-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file // Test default attribute/element values. // -#include // std::auto_ptr +#include // std::auto_ptr/unique_ptr #include #include "test.hxx" @@ -25,7 +24,7 @@ main (int argc, char* argv[]) try { - auto_ptr r (root (argv[1], xml_schema::flags::dont_validate)); + XSD_AUTO_PTR r (root (argv[1], xml_schema::flags::dont_validate)); xml_schema::namespace_infomap map; map["t"].name = "test"; diff --git a/xsd/tests/cxx/tree/default/general/makefile b/xsd/tests/cxx/tree/default/general/makefile index b1b7fca..6c2dfe6 100644 --- a/xsd/tests/cxx/tree/default/general/makefile +++ b/xsd/tests/cxx/tree/default/general/makefile @@ -1,6 +1,5 @@ # file : tests/cxx/tree/default/general/makefile -# author : Boris Kolpackov -# copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +# copyright : Copyright (c) 2006-2014 Code Synthesis Tools CC # license : GNU GPL v2 + exceptions; see accompanying LICENSE file include $(dir $(lastword $(MAKEFILE_LIST)))../../../../../build/bootstrap.make @@ -27,18 +26,18 @@ $(call import,\ # $(driver): $(obj) $(xerces_c.l) -$(obj) $(dep): cpp_options := -I$(src_root)/libxsd +$(obj) $(dep): cpp_options := -I$(out_base) -I$(src_base) -I$(src_root)/libxsd $(obj) $(dep): $(xerces_c.l.cpp-options) genf := $(xsd:.xsd=.hxx) $(xsd:.xsd=.ixx) $(xsd:.xsd=.cxx) gen := $(addprefix $(out_base)/,$(genf)) $(gen): xsd := $(out_root)/xsd/xsd -$(gen): xsd_options := --generate-ostream --generate-serialization \ +$(gen): xsd_options += --generate-ostream --generate-serialization \ --generate-default-ctor --generate-from-base-ctor $(gen): $(out_root)/xsd/xsd -$(call include-dep,$(dep)) +$(call include-dep,$(dep),$(obj),$(gen)) # Convenience alias for default target. # @@ -75,7 +74,12 @@ endif $(call include,$(bld_root)/cxx/o-e.make) $(call include,$(bld_root)/cxx/cxx-o.make) $(call include,$(bld_root)/cxx/cxx-d.make) + +$(call include,$(bld_root)/cxx/standard.make) # cxx_standard +ifdef cxx_standard +$(gen): xsd_options += --std $(cxx_standard) $(call include,$(scf_root)/xsd/tree/xsd-cxx.make) +endif # Dependencies. diff --git a/xsd/tests/cxx/tree/default/general/output b/xsd/tests/cxx/tree/default/general/output index 72a8fa4..396a698 100644 --- a/xsd/tests/cxx/tree/default/general/output +++ b/xsd/tests/cxx/tree/default/general/output @@ -1,28 +1,15 @@ - - - - - diff --git a/xsd/tests/cxx/tree/default/makefile b/xsd/tests/cxx/tree/default/makefile index 218e69c..56fa53d 100644 --- a/xsd/tests/cxx/tree/default/makefile +++ b/xsd/tests/cxx/tree/default/makefile @@ -1,6 +1,5 @@ # file : tests/cxx/tree/default/makefile -# author : Boris Kolpackov -# copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +# copyright : Copyright (c) 2006-2014 Code Synthesis Tools CC # license : GNU GPL v2 + exceptions; see accompanying LICENSE file include $(dir $(lastword $(MAKEFILE_LIST)))../../../../build/bootstrap.make diff --git a/xsd/tests/cxx/tree/default/omit/driver.cxx b/xsd/tests/cxx/tree/default/omit/driver.cxx index cbf69b5..6a074c1 100644 --- a/xsd/tests/cxx/tree/default/omit/driver.cxx +++ b/xsd/tests/cxx/tree/default/omit/driver.cxx @@ -1,12 +1,11 @@ // file : tests/cxx/tree/default/omit/driver.cxx -// author : Boris Kolpackov -// copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2006-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file // Test default attribute omission from the output. // -#include // std::auto_ptr +#include // std::auto_ptr/unique_ptr #include #include "test.hxx" @@ -25,7 +24,7 @@ main (int argc, char* argv[]) try { - auto_ptr r (root (argv[1], xml_schema::flags::dont_validate)); + XSD_AUTO_PTR r (root (argv[1], xml_schema::flags::dont_validate)); cout << *r << endl << "default x: " << derived::x_default_value () << endl diff --git a/xsd/tests/cxx/tree/default/omit/makefile b/xsd/tests/cxx/tree/default/omit/makefile index e0cce27..caaec12 100644 --- a/xsd/tests/cxx/tree/default/omit/makefile +++ b/xsd/tests/cxx/tree/default/omit/makefile @@ -1,6 +1,5 @@ # file : tests/cxx/tree/default/omit/makefile -# author : Boris Kolpackov -# copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +# copyright : Copyright (c) 2006-2014 Code Synthesis Tools CC # license : GNU GPL v2 + exceptions; see accompanying LICENSE file include $(dir $(lastword $(MAKEFILE_LIST)))../../../../../build/bootstrap.make @@ -27,18 +26,18 @@ $(call import,\ # $(driver): $(obj) $(xerces_c.l) -$(obj) $(dep): cpp_options := -I$(src_root)/libxsd +$(obj) $(dep): cpp_options := -I$(out_base) -I$(src_base) -I$(src_root)/libxsd $(obj) $(dep): $(xerces_c.l.cpp-options) genf := $(xsd:.xsd=.hxx) $(xsd:.xsd=.ixx) $(xsd:.xsd=.cxx) gen := $(addprefix $(out_base)/,$(genf)) $(gen): xsd := $(out_root)/xsd/xsd -$(gen): xsd_options := --generate-ostream --generate-serialization \ +$(gen): xsd_options += --generate-ostream --generate-serialization \ --generate-default-ctor --generate-from-base-ctor --omit-default-attributes $(gen): $(out_root)/xsd/xsd -$(call include-dep,$(dep)) +$(call include-dep,$(dep),$(obj),$(gen)) # Convenience alias for default target. # @@ -75,7 +74,12 @@ endif $(call include,$(bld_root)/cxx/o-e.make) $(call include,$(bld_root)/cxx/cxx-o.make) $(call include,$(bld_root)/cxx/cxx-d.make) + +$(call include,$(bld_root)/cxx/standard.make) # cxx_standard +ifdef cxx_standard +$(gen): xsd_options += --std $(cxx_standard) $(call include,$(scf_root)/xsd/tree/xsd-cxx.make) +endif # Dependencies. diff --git a/xsd/tests/cxx/tree/default/omit/output b/xsd/tests/cxx/tree/default/omit/output index eef99a3..150ad58 100644 --- a/xsd/tests/cxx/tree/default/omit/output +++ b/xsd/tests/cxx/tree/default/omit/output @@ -13,9 +13,7 @@ fixed q1: 1 fixed q2: 2 - a - diff --git a/xsd/tests/cxx/tree/detach/driver.cxx b/xsd/tests/cxx/tree/detach/driver.cxx index afcb90d..cabd9ea 100644 --- a/xsd/tests/cxx/tree/detach/driver.cxx +++ b/xsd/tests/cxx/tree/detach/driver.cxx @@ -1,22 +1,30 @@ // file : tests/cxx/tree/detach/driver.cxx -// author : Boris Kolpackov -// copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2006-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file // Test the detach functionality. // -#include // std::auto_ptr +#include // std::auto_ptr/unique_ptr #include #include "test.hxx" +#ifdef XSD_CXX11 +# include // std::move +# define XSD_MOVE(x) std::move(x) +#else +# define XSD_MOVE(x) x +#endif + using namespace std; using namespace test; int main () { + using test::ref; + // Construct the model. // object o1 ("o1"); @@ -57,22 +65,22 @@ main () // Detach one. // - auto_ptr p (m.detach_one ()); + XSD_AUTO_PTR p (m.detach_one ()); assert (p->_container () == 0); assert (p->r ()[0].get () == &p->o ()[1]); assert (m.opt ()->r ()[1].get () == 0); - m.one (p); + m.one (XSD_MOVE (p)); assert (m.opt ()->r ()[1].get () == &m.one ().o ()[0]); p = m.detach_one (); model m1; - m1.one (p); + m1.one (XSD_MOVE (p)); m1.opt (s2); assert (m1.opt ()->r ()[1].get () == &m1.one ().o ()[0]); p = m1.detach_one (); - m.seq ().push_back (p); + m.seq ().push_back (XSD_MOVE (p)); // Detach opt. // @@ -82,7 +90,7 @@ main () assert (p->r ()[0].get () == &p->o ()[1]); assert (m.seq ()[0].r ()[1].get () == 0); - m.seq ().push_back (p); + m.seq ().push_back (XSD_MOVE (p)); // Detach seq. // @@ -91,7 +99,7 @@ main () assert (p->r ()[0].get () == &p->o ()[1]); assert (m.seq ()[0].r ()[1].get () == 0); - m.seq ().push_back (p); + m.seq ().push_back (XSD_MOVE (p)); assert (m.seq ()[0].r ()[1].get () == &m.seq ()[1].o ()[0]); m.seq ().detach (m.seq ().begin (), p); diff --git a/xsd/tests/cxx/tree/detach/makefile b/xsd/tests/cxx/tree/detach/makefile index 938fba2..64def55 100644 --- a/xsd/tests/cxx/tree/detach/makefile +++ b/xsd/tests/cxx/tree/detach/makefile @@ -1,6 +1,5 @@ # file : tests/cxx/tree/detach/makefile -# author : Boris Kolpackov -# copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +# copyright : Copyright (c) 2006-2014 Code Synthesis Tools CC # license : GNU GPL v2 + exceptions; see accompanying LICENSE file include $(dir $(lastword $(MAKEFILE_LIST)))../../../../build/bootstrap.make @@ -27,17 +26,17 @@ $(call import,\ # $(driver): $(obj) $(xerces_c.l) -$(obj) $(dep): cpp_options := -I$(src_root)/libxsd +$(obj) $(dep): cpp_options := -I$(out_base) -I$(src_base) -I$(src_root)/libxsd $(obj) $(dep): $(xerces_c.l.cpp-options) genf := $(xsd:.xsd=.hxx) $(xsd:.xsd=.ixx) $(xsd:.xsd=.cxx) gen := $(addprefix $(out_base)/,$(genf)) $(gen): xsd := $(out_root)/xsd/xsd -$(gen): xsd_options := --generate-detach --generate-default-ctor +$(gen): xsd_options += --generate-detach --generate-default-ctor $(gen): $(out_root)/xsd/xsd -$(call include-dep,$(dep)) +$(call include-dep,$(dep),$(obj),$(gen)) # Convenience alias for default target. # @@ -74,7 +73,12 @@ endif $(call include,$(bld_root)/cxx/o-e.make) $(call include,$(bld_root)/cxx/cxx-o.make) $(call include,$(bld_root)/cxx/cxx-d.make) + +$(call include,$(bld_root)/cxx/standard.make) # cxx_standard +ifdef cxx_standard +$(gen): xsd_options += --std $(cxx_standard) $(call include,$(scf_root)/xsd/tree/xsd-cxx.make) +endif # Dependencies. diff --git a/xsd/tests/cxx/tree/dom-association/dom-parse.cxx b/xsd/tests/cxx/tree/dom-association/dom-parse.cxx new file mode 100644 index 0000000..c065d19 --- /dev/null +++ b/xsd/tests/cxx/tree/dom-association/dom-parse.cxx @@ -0,0 +1,96 @@ +// file : tests/cxx/tree/dom-association/dom-parse.cxx +// copyright : Copyright (c) 2006-2014 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#include "dom-parse.hxx" + +#include + +#include +#include // chLatin_* +#include + +#include +#include + +#include +#include + +using namespace xercesc; +namespace xml = xsd::cxx::xml; +namespace tree = xsd::cxx::tree; + +XSD_DOM_AUTO_PTR +parse (std::istream& is, + const std::string& id, + bool validate) +{ + const XMLCh ls_id [] = {chLatin_L, chLatin_S, chNull}; + + // Get an implementation of the Load-Store (LS) interface. + // + DOMImplementation* impl ( + DOMImplementationRegistry::getDOMImplementation (ls_id)); + + XSD_DOM_AUTO_PTR parser ( + impl->createLSParser (DOMImplementationLS::MODE_SYNCHRONOUS, 0)); + + DOMConfiguration* conf (parser->getDomConfig ()); + + // Discard comment nodes in the document. + // + conf->setParameter (XMLUni::fgDOMComments, false); + + // Enable datatype normalization. + // + conf->setParameter (XMLUni::fgDOMDatatypeNormalization, true); + + // Do not create EntityReference nodes in the DOM tree. No + // EntityReference nodes will be created, only the nodes + // corresponding to their fully expanded substitution text + // will be created. + // + conf->setParameter (XMLUni::fgDOMEntities, false); + + // Perform namespace processing. + // + conf->setParameter (XMLUni::fgDOMNamespaces, true); + + // Do not include ignorable whitespace in the DOM tree. + // + conf->setParameter (XMLUni::fgDOMElementContentWhitespace, false); + + // Enable/Disable validation. + // + conf->setParameter (XMLUni::fgDOMValidate, validate); + conf->setParameter (XMLUni::fgXercesSchema, validate); + conf->setParameter (XMLUni::fgXercesSchemaFullChecking, false); + + // Xerces-C++ 3.1.0 is the first version with working multi import + // support. + // +#if _XERCES_VERSION >= 30100 + conf->setParameter (XMLUni::fgXercesHandleMultipleImports, true); +#endif + + // We will release the DOM document ourselves. + // + conf->setParameter (XMLUni::fgXercesUserAdoptsDOMDocument, true); + + // Set error handler. + // + tree::error_handler eh; + xml::dom::bits::error_handler_proxy ehp (eh); + conf->setParameter (XMLUni::fgDOMErrorHandler, &ehp); + + // Prepare input stream. + // + xml::sax::std_input_source isrc (is, id); + Wrapper4InputSource wrap (&isrc, false); + + XSD_DOM_AUTO_PTR doc (parser->parse (&wrap)); + + eh.throw_if_failed > (); + + return doc; +} diff --git a/xsd/tests/cxx/tree/dom-association/dom-parse.hxx b/xsd/tests/cxx/tree/dom-association/dom-parse.hxx new file mode 100644 index 0000000..2c3bd3f --- /dev/null +++ b/xsd/tests/cxx/tree/dom-association/dom-parse.hxx @@ -0,0 +1,24 @@ +// file : tests/cxx/tree/dom-association/dom-parse.hxx +// copyright : Copyright (c) 2006-2014 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef DOM_PARSE +#define DOM_PARSE + +#include +#include + +#include + +#include + +// Parse an XML document from the standard input stream with an +// optional resource id. Resource id is used in diagnostics as +// well as to locate schemas referenced from inside the document. +// +XSD_DOM_AUTO_PTR +parse (std::istream& is, + const std::string& id, + bool validate); + +#endif // DOM_PARSE diff --git a/xsd/tests/cxx/tree/dom-association/driver.cxx b/xsd/tests/cxx/tree/dom-association/driver.cxx new file mode 100644 index 0000000..edcda50 --- /dev/null +++ b/xsd/tests/cxx/tree/dom-association/driver.cxx @@ -0,0 +1,72 @@ +// file : tests/cxx/tree/dom-association/driver.cxx +// copyright : Copyright (c) 2006-2014 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +// Test DOM association/ownership. +// + +#include // std::auto_ptr/unique_ptr +#include +#include + +#include + +#include "dom-parse.hxx" +#include "test.hxx" + +using namespace std; +using namespace test; +using namespace xercesc; + +int +main (int argc, char* argv[]) +{ + if (argc != 2) + { + cerr << "usage: " << argv[0] << " test.xml" << endl; + return 1; + } + + int r (0); + + XMLPlatformUtils::Initialize (); + + try + { + ifstream ifs; + ifs.exceptions (ifstream::badbit | ifstream::failbit); + ifs.open (argv[1]); + + DOMDocument* ptr; + +#ifdef XSD_CXX11 + xml_schema::dom::unique_ptr doc (parse (ifs, argv[1], true)); + ptr = doc.get (); + unique_ptr r ( + root (std::move (doc), + xml_schema::flags::keep_dom | xml_schema::flags::own_dom)); +#else + xml_schema::dom::auto_ptr doc (parse (ifs, argv[1], true)); + ptr = doc.get (); + auto_ptr r ( + root (doc, + xml_schema::flags::keep_dom | xml_schema::flags::own_dom)); +#endif + + assert (doc.get () == 0); + assert (r->_node ()->getOwnerDocument () == ptr); + } + catch (xml_schema::exception const& e) + { + cerr << e << endl; + r = 1; + } + catch (const std::ios_base::failure&) + { + cerr << argv[1] << ": unable to open or read failure" << endl; + r = 1; + } + + XMLPlatformUtils::Terminate (); + return r; +} diff --git a/xsd/tests/cxx/tree/dom-association/makefile b/xsd/tests/cxx/tree/dom-association/makefile new file mode 100644 index 0000000..4a05d45 --- /dev/null +++ b/xsd/tests/cxx/tree/dom-association/makefile @@ -0,0 +1,92 @@ +# file : tests/cxx/tree/dom-association/makefile +# copyright : Copyright (c) 2006-2014 Code Synthesis Tools CC +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +include $(dir $(lastword $(MAKEFILE_LIST)))../../../../build/bootstrap.make + +xsd := test.xsd +cxx := driver.cxx dom-parse.cxx + +obj := $(addprefix $(out_base)/,$(cxx:.cxx=.o) $(xsd:.xsd=.o)) +dep := $(obj:.o=.o.d) + +driver := $(out_base)/driver +test := $(out_base)/.test +clean := $(out_base)/.clean + + +# Import. +# +$(call import,\ + $(scf_root)/import/libxerces-c/stub.make,\ + l: xerces_c.l,cpp-options: xerces_c.l.cpp-options) + + +# Build. +# +$(driver): $(obj) $(xerces_c.l) + +$(obj) $(dep): cpp_options := -I$(out_base) -I$(src_base) -I$(src_root)/libxsd +$(obj) $(dep): $(xerces_c.l.cpp-options) + +# Define XSD_CXX11 since we include libxsd headers directly. +# +$(call include,$(bld_root)/cxx/standard.make) # cxx_standard +ifeq ($(cxx_standard),c++11) +$(obj) $(dep): cpp_options += -DXSD_CXX11 +endif + +genf := $(xsd:.xsd=.hxx) $(xsd:.xsd=.ixx) $(xsd:.xsd=.cxx) +gen := $(addprefix $(out_base)/,$(genf)) + +$(gen): xsd := $(out_root)/xsd/xsd +$(gen): xsd_options += --generate-ostream +$(gen): $(out_root)/xsd/xsd + +$(call include-dep,$(dep),$(obj),$(gen)) + +# Convenience alias for default target. +# +$(out_base)/: $(driver) + + +# Test. +# +$(test): driver := $(driver) +$(test): $(driver) $(src_base)/test.xml $(src_base)/output + $(call message,test $$1,$$1 $(src_base)/test.xml | diff -u $(src_base)/output -,$(driver)) + +# Clean. +# +$(clean): $(driver).o.clean \ + $(addsuffix .cxx.clean,$(obj)) \ + $(addsuffix .cxx.clean,$(dep)) \ + $(addprefix $(out_base)/,$(xsd:.xsd=.cxx.xsd.clean)) + +# Generated .gitignore. +# +ifeq ($(out_base),$(src_base)) +$(gen): | $(out_base)/.gitignore +$(driver): | $(out_base)/.gitignore + +$(out_base)/.gitignore: files := driver $(genf) +$(clean): $(out_base)/.gitignore.clean + +$(call include,$(bld_root)/git/gitignore.make) +endif + +# How to. +# +$(call include,$(bld_root)/cxx/o-e.make) +$(call include,$(bld_root)/cxx/cxx-o.make) +$(call include,$(bld_root)/cxx/cxx-d.make) + +ifdef cxx_standard +$(gen): xsd_options += --std $(cxx_standard) +$(call include,$(scf_root)/xsd/tree/xsd-cxx.make) +endif + + +# Dependencies. +# +$(call import,$(src_root)/xsd/makefile) diff --git a/xsd/tests/cxx/tree/dom-association/output b/xsd/tests/cxx/tree/dom-association/output new file mode 100644 index 0000000..e69de29 diff --git a/xsd/tests/cxx/tree/dom-association/test.xml b/xsd/tests/cxx/tree/dom-association/test.xml new file mode 100644 index 0000000..624a80c --- /dev/null +++ b/xsd/tests/cxx/tree/dom-association/test.xml @@ -0,0 +1,7 @@ + + + a + + diff --git a/xsd/tests/cxx/tree/dom-association/test.xsd b/xsd/tests/cxx/tree/dom-association/test.xsd new file mode 100644 index 0000000..07bebc7 --- /dev/null +++ b/xsd/tests/cxx/tree/dom-association/test.xsd @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/xsd/tests/cxx/tree/encoding/char/iso-8859-1/driver.cxx b/xsd/tests/cxx/tree/encoding/char/iso-8859-1/driver.cxx index 56b2df8..6a92ae0 100644 --- a/xsd/tests/cxx/tree/encoding/char/iso-8859-1/driver.cxx +++ b/xsd/tests/cxx/tree/encoding/char/iso-8859-1/driver.cxx @@ -1,12 +1,11 @@ // file : tests/cxx/tree/encoding/char/iso-8859-1/driver.cxx -// author : Boris Kolpackov -// copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2006-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file // Test ISO-8859-1 encoding. // -#include // std::auto_ptr +#include // std::auto_ptr/unique_ptr #include #include @@ -36,7 +35,7 @@ main (int argc, char* argv[]) } xsd::cxx::xml::char_transcoder::unrep_char ('?'); - auto_ptr r (root (argv[1])); + XSD_AUTO_PTR r (root (argv[1])); { type::a_sequence const& s (r->a ()); diff --git a/xsd/tests/cxx/tree/encoding/char/iso-8859-1/makefile b/xsd/tests/cxx/tree/encoding/char/iso-8859-1/makefile index 967357f..8a952f7 100644 --- a/xsd/tests/cxx/tree/encoding/char/iso-8859-1/makefile +++ b/xsd/tests/cxx/tree/encoding/char/iso-8859-1/makefile @@ -1,6 +1,5 @@ # file : tests/cxx/tree/encoding/char/iso-8859-1/makefile -# author : Boris Kolpackov -# copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +# copyright : Copyright (c) 2006-2014 Code Synthesis Tools CC # license : GNU GPL v2 + exceptions; see accompanying LICENSE file include $(dir $(lastword $(MAKEFILE_LIST)))../../../../../../build/bootstrap.make @@ -27,18 +26,18 @@ $(call import,\ # $(driver): $(obj) $(xerces_c.l) -$(obj) $(dep): cpp_options := -I$(src_root)/libxsd +$(obj) $(dep): cpp_options := -I$(out_base) -I$(src_base) -I$(src_root)/libxsd $(obj) $(dep): $(xerces_c.l.cpp-options) genf := $(xsd:.xsd=.hxx) $(xsd:.xsd=.ixx) $(xsd:.xsd=.cxx) gen := $(addprefix $(out_base)/,$(genf)) $(gen): xsd := $(out_root)/xsd/xsd -$(gen): xsd_options := --char-encoding iso8859-1 --generate-serialization \ +$(gen): xsd_options += --char-encoding iso8859-1 --generate-serialization \ --generate-doxygen $(gen): $(out_root)/xsd/xsd -$(call include-dep,$(dep)) +$(call include-dep,$(dep),$(obj),$(gen)) # Convenience alias for default target. # @@ -75,7 +74,12 @@ endif $(call include,$(bld_root)/cxx/o-e.make) $(call include,$(bld_root)/cxx/cxx-o.make) $(call include,$(bld_root)/cxx/cxx-d.make) + +$(call include,$(bld_root)/cxx/standard.make) # cxx_standard +ifdef cxx_standard +$(gen): xsd_options += --std $(cxx_standard) $(call include,$(scf_root)/xsd/tree/xsd-cxx.make) +endif # Dependencies. diff --git a/xsd/tests/cxx/tree/encoding/char/iso-8859-1/test.std b/xsd/tests/cxx/tree/encoding/char/iso-8859-1/test.std index ca6297f..d26b30f 100644 --- a/xsd/tests/cxx/tree/encoding/char/iso-8859-1/test.std +++ b/xsd/tests/cxx/tree/encoding/char/iso-8859-1/test.std @@ -1,18 +1,10 @@ - abc - æ - ¢£¤¥ - ??? - abc - aâc - âòbc - diff --git a/xsd/tests/cxx/tree/encoding/char/lcp/driver.cxx b/xsd/tests/cxx/tree/encoding/char/lcp/driver.cxx index 2fb13a3..d44d0fe 100644 --- a/xsd/tests/cxx/tree/encoding/char/lcp/driver.cxx +++ b/xsd/tests/cxx/tree/encoding/char/lcp/driver.cxx @@ -1,13 +1,12 @@ // file : tests/cxx/tree/encoding/char/lcp/driver.cxx -// author : Boris Kolpackov -// copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2006-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file // Test local code page encoding (--char-encoding lcp). // The test just makes sure it still compiles and works. // -#include // std::auto_ptr +#include // std::auto_ptr/unique_ptr #include #include @@ -27,7 +26,7 @@ main (int argc, char* argv[]) try { - auto_ptr r (root (argv[1])); + XSD_AUTO_PTR r (root (argv[1])); xml_schema::namespace_infomap map; map["t"].name = "test"; diff --git a/xsd/tests/cxx/tree/encoding/char/lcp/makefile b/xsd/tests/cxx/tree/encoding/char/lcp/makefile index 518c514..9dc599d 100644 --- a/xsd/tests/cxx/tree/encoding/char/lcp/makefile +++ b/xsd/tests/cxx/tree/encoding/char/lcp/makefile @@ -1,6 +1,5 @@ # file : tests/cxx/tree/encoding/char/lcp/makefile -# author : Boris Kolpackov -# copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +# copyright : Copyright (c) 2006-2014 Code Synthesis Tools CC # license : GNU GPL v2 + exceptions; see accompanying LICENSE file include $(dir $(lastword $(MAKEFILE_LIST)))../../../../../../build/bootstrap.make @@ -27,17 +26,17 @@ $(call import,\ # $(driver): $(obj) $(xerces_c.l) -$(obj) $(dep): cpp_options := -I$(src_root)/libxsd +$(obj) $(dep): cpp_options := -I$(out_base) -I$(src_base) -I$(src_root)/libxsd $(obj) $(dep): $(xerces_c.l.cpp-options) genf := $(xsd:.xsd=.hxx) $(xsd:.xsd=.ixx) $(xsd:.xsd=.cxx) gen := $(addprefix $(out_base)/,$(genf)) $(gen): xsd := $(out_root)/xsd/xsd -$(gen): xsd_options := --generate-serialization --char-encoding lcp +$(gen): xsd_options += --generate-serialization --char-encoding lcp $(gen): $(out_root)/xsd/xsd -$(call include-dep,$(dep)) +$(call include-dep,$(dep),$(obj),$(gen)) # Convenience alias for default target. # @@ -74,7 +73,12 @@ endif $(call include,$(bld_root)/cxx/o-e.make) $(call include,$(bld_root)/cxx/cxx-o.make) $(call include,$(bld_root)/cxx/cxx-d.make) + +$(call include,$(bld_root)/cxx/standard.make) # cxx_standard +ifdef cxx_standard +$(gen): xsd_options += --std $(cxx_standard) $(call include,$(scf_root)/xsd/tree/xsd-cxx.make) +endif # Dependencies. diff --git a/xsd/tests/cxx/tree/encoding/char/lcp/test.std b/xsd/tests/cxx/tree/encoding/char/lcp/test.std index cc20ef7..368826d 100644 --- a/xsd/tests/cxx/tree/encoding/char/lcp/test.std +++ b/xsd/tests/cxx/tree/encoding/char/lcp/test.std @@ -1,6 +1,4 @@ - abcd - diff --git a/xsd/tests/cxx/tree/encoding/char/makefile b/xsd/tests/cxx/tree/encoding/char/makefile index 3e64dd9..587eeb1 100644 --- a/xsd/tests/cxx/tree/encoding/char/makefile +++ b/xsd/tests/cxx/tree/encoding/char/makefile @@ -1,6 +1,5 @@ # file : tests/cxx/tree/encoding/char/makefile -# author : Boris Kolpackov -# copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +# copyright : Copyright (c) 2006-2014 Code Synthesis Tools CC # license : GNU GPL v2 + exceptions; see accompanying LICENSE file include $(dir $(lastword $(MAKEFILE_LIST)))../../../../../build/bootstrap.make diff --git a/xsd/tests/cxx/tree/encoding/char/utf-8/driver.cxx b/xsd/tests/cxx/tree/encoding/char/utf-8/driver.cxx index 0842203..9d12659 100644 --- a/xsd/tests/cxx/tree/encoding/char/utf-8/driver.cxx +++ b/xsd/tests/cxx/tree/encoding/char/utf-8/driver.cxx @@ -1,12 +1,11 @@ // file : tests/cxx/tree/encoding/char/utf-8/driver.cxx -// author : Boris Kolpackov -// copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2006-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file // Test UTF-8 encoding. // -#include // std::auto_ptr +#include // std::auto_ptr/unique_ptr #include #include @@ -26,7 +25,7 @@ main (int argc, char* argv[]) try { - auto_ptr r (root (argv[1])); + XSD_AUTO_PTR r (root (argv[1])); { type::a_sequence const& s (r->a ()); @@ -57,7 +56,7 @@ main (int argc, char* argv[]) xml_schema::namespace_infomap map; map["t"].name = "test"; - root (std::cout, *r, map, "UCS-4LE"); + root (std::cout, *r, map, "ASCII"); } catch (xml_schema::exception const& e) { diff --git a/xsd/tests/cxx/tree/encoding/char/utf-8/makefile b/xsd/tests/cxx/tree/encoding/char/utf-8/makefile index 8c0256e..e2bbdfc 100644 --- a/xsd/tests/cxx/tree/encoding/char/utf-8/makefile +++ b/xsd/tests/cxx/tree/encoding/char/utf-8/makefile @@ -1,6 +1,5 @@ # file : tests/cxx/tree/encoding/char/utf-8/makefile -# author : Boris Kolpackov -# copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +# copyright : Copyright (c) 2006-2014 Code Synthesis Tools CC # license : GNU GPL v2 + exceptions; see accompanying LICENSE file include $(dir $(lastword $(MAKEFILE_LIST)))../../../../../../build/bootstrap.make @@ -27,17 +26,17 @@ $(call import,\ # $(driver): $(obj) $(xerces_c.l) -$(obj) $(dep): cpp_options := -I$(src_root)/libxsd +$(obj) $(dep): cpp_options := -I$(out_base) -I$(src_base) -I$(src_root)/libxsd $(obj) $(dep): $(xerces_c.l.cpp-options) genf := $(xsd:.xsd=.hxx) $(xsd:.xsd=.ixx) $(xsd:.xsd=.cxx) gen := $(addprefix $(out_base)/,$(genf)) $(gen): xsd := $(out_root)/xsd/xsd -$(gen): xsd_options := --generate-serialization --generate-doxygen +$(gen): xsd_options += --generate-serialization --generate-doxygen $(gen): $(out_root)/xsd/xsd -$(call include-dep,$(dep)) +$(call include-dep,$(dep),$(obj),$(gen)) # Convenience alias for default target. # @@ -74,7 +73,12 @@ endif $(call include,$(bld_root)/cxx/o-e.make) $(call include,$(bld_root)/cxx/cxx-o.make) $(call include,$(bld_root)/cxx/cxx-d.make) + +$(call include,$(bld_root)/cxx/standard.make) # cxx_standard +ifdef cxx_standard +$(gen): xsd_options += --std $(cxx_standard) $(call include,$(scf_root)/xsd/tree/xsd-cxx.make) +endif # Dependencies. diff --git a/xsd/tests/cxx/tree/encoding/char/utf-8/test.std b/xsd/tests/cxx/tree/encoding/char/utf-8/test.std index 328fe6d..ffce337 100644 Binary files a/xsd/tests/cxx/tree/encoding/char/utf-8/test.std and b/xsd/tests/cxx/tree/encoding/char/utf-8/test.std differ diff --git a/xsd/tests/cxx/tree/encoding/makefile b/xsd/tests/cxx/tree/encoding/makefile index fcadb8c..2108fa2 100644 --- a/xsd/tests/cxx/tree/encoding/makefile +++ b/xsd/tests/cxx/tree/encoding/makefile @@ -1,6 +1,5 @@ # file : tests/cxx/tree/encoding/makefile -# author : Boris Kolpackov -# copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +# copyright : Copyright (c) 2006-2014 Code Synthesis Tools CC # license : GNU GPL v2 + exceptions; see accompanying LICENSE file include $(dir $(lastword $(MAKEFILE_LIST)))../../../../build/bootstrap.make diff --git a/xsd/tests/cxx/tree/encoding/wchar/driver.cxx b/xsd/tests/cxx/tree/encoding/wchar/driver.cxx index 22cbfb4..6b8d51e 100644 --- a/xsd/tests/cxx/tree/encoding/wchar/driver.cxx +++ b/xsd/tests/cxx/tree/encoding/wchar/driver.cxx @@ -1,12 +1,11 @@ // file : tests/cxx/tree/encoding/wchar/driver.cxx -// author : Boris Kolpackov -// copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2006-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file // Test the wide character mapping. // -#include // std::auto_ptr +#include // std::auto_ptr/unique_ptr #include #include @@ -29,7 +28,7 @@ main (int argc, char* argv[]) // Use dont_validate because we do not have instance's system id (path). // std::ifstream ifs (argv[1]); - auto_ptr r (root (ifs, xml_schema::flags::dont_validate)); + XSD_AUTO_PTR r (root (ifs, xml_schema::flags::dont_validate)); { type::b_sequence const& s (r->b ()); @@ -47,7 +46,7 @@ main (int argc, char* argv[]) xml_schema::namespace_infomap map; map[L"t"].name = L"test"; - root (std::cout, *r, map, L"UCS-4LE"); + root (std::cout, *r, map, L"ASCII"); } catch (xml_schema::exception const& e) { diff --git a/xsd/tests/cxx/tree/encoding/wchar/makefile b/xsd/tests/cxx/tree/encoding/wchar/makefile index fb2faed..e66d3a5 100644 --- a/xsd/tests/cxx/tree/encoding/wchar/makefile +++ b/xsd/tests/cxx/tree/encoding/wchar/makefile @@ -1,6 +1,5 @@ # file : tests/cxx/tree/encoding/wchar/makefile -# author : Boris Kolpackov -# copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +# copyright : Copyright (c) 2006-2014 Code Synthesis Tools CC # license : GNU GPL v2 + exceptions; see accompanying LICENSE file include $(dir $(lastword $(MAKEFILE_LIST)))../../../../../build/bootstrap.make @@ -27,18 +26,18 @@ $(call import,\ # $(driver): $(obj) $(xerces_c.l) -$(obj) $(dep): cpp_options := -I$(src_root)/libxsd +$(obj) $(dep): cpp_options := -I$(out_base) -I$(src_base) -I$(src_root)/libxsd $(obj) $(dep): $(xerces_c.l.cpp-options) genf := $(xsd:.xsd=.hxx) $(xsd:.xsd=.ixx) $(xsd:.xsd=.cxx) gen := $(addprefix $(out_base)/,$(genf)) $(gen): xsd := $(out_root)/xsd/xsd -$(gen): xsd_options := --generate-serialization --generate-doxygen \ +$(gen): xsd_options += --generate-serialization --generate-doxygen \ --char-type wchar_t $(gen): $(out_root)/xsd/xsd -$(call include-dep,$(dep)) +$(call include-dep,$(dep),$(obj),$(gen)) # Convenience alias for default target. # @@ -75,7 +74,12 @@ endif $(call include,$(bld_root)/cxx/o-e.make) $(call include,$(bld_root)/cxx/cxx-o.make) $(call include,$(bld_root)/cxx/cxx-d.make) + +$(call include,$(bld_root)/cxx/standard.make) # cxx_standard +ifdef cxx_standard +$(gen): xsd_options += --std $(cxx_standard) $(call include,$(scf_root)/xsd/tree/xsd-cxx.make) +endif # Dependencies. diff --git a/xsd/tests/cxx/tree/encoding/wchar/test.std b/xsd/tests/cxx/tree/encoding/wchar/test.std index 93d4561..815ba6c 100644 Binary files a/xsd/tests/cxx/tree/encoding/wchar/test.std and b/xsd/tests/cxx/tree/encoding/wchar/test.std differ diff --git a/xsd/tests/cxx/tree/enumeration/ctor/driver.cxx b/xsd/tests/cxx/tree/enumeration/ctor/driver.cxx index 114b7b7..bd2589f 100644 --- a/xsd/tests/cxx/tree/enumeration/ctor/driver.cxx +++ b/xsd/tests/cxx/tree/enumeration/ctor/driver.cxx @@ -1,6 +1,5 @@ // file : tests/cxx/tree/enumeration/ctor/driver.cxx -// author : Boris Kolpackov -// copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2006-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file // Test enumeration constructors. diff --git a/xsd/tests/cxx/tree/enumeration/ctor/makefile b/xsd/tests/cxx/tree/enumeration/ctor/makefile index b33ab94..2fae138 100644 --- a/xsd/tests/cxx/tree/enumeration/ctor/makefile +++ b/xsd/tests/cxx/tree/enumeration/ctor/makefile @@ -1,6 +1,5 @@ # file : tests/cxx/tree/enumeration/ctor/makefile -# author : Boris Kolpackov -# copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +# copyright : Copyright (c) 2006-2014 Code Synthesis Tools CC # license : GNU GPL v2 + exceptions; see accompanying LICENSE file include $(dir $(lastword $(MAKEFILE_LIST)))../../../../../build/bootstrap.make @@ -27,18 +26,18 @@ $(call import,\ # $(driver): $(obj) $(xerces_c.l) -$(obj) $(dep): cpp_options := -I$(src_root)/libxsd +$(obj) $(dep): cpp_options := -I$(out_base) -I$(src_base) -I$(src_root)/libxsd $(obj) $(dep): $(xerces_c.l.cpp-options) genf := $(xsd:.xsd=.hxx) $(xsd:.xsd=.ixx) $(xsd:.xsd=.cxx) gen := $(addprefix $(out_base)/,$(genf)) $(gen): xsd := $(out_root)/xsd/xsd -$(gen): xsd_options := --generate-default-ctor --generate-from-base-ctor \ +$(gen): xsd_options += --generate-default-ctor --generate-from-base-ctor \ --generate-doxygen $(gen): $(out_root)/xsd/xsd -$(call include-dep,$(dep)) +$(call include-dep,$(dep),$(obj),$(gen)) # Convenience alias for default target. # @@ -75,7 +74,12 @@ endif $(call include,$(bld_root)/cxx/o-e.make) $(call include,$(bld_root)/cxx/cxx-o.make) $(call include,$(bld_root)/cxx/cxx-d.make) + +$(call include,$(bld_root)/cxx/standard.make) # cxx_standard +ifdef cxx_standard +$(gen): xsd_options += --std $(cxx_standard) $(call include,$(scf_root)/xsd/tree/xsd-cxx.make) +endif # Dependencies. diff --git a/xsd/tests/cxx/tree/enumeration/inheritance/driver.cxx b/xsd/tests/cxx/tree/enumeration/inheritance/driver.cxx index 358f61d..0a6d5d2 100644 --- a/xsd/tests/cxx/tree/enumeration/inheritance/driver.cxx +++ b/xsd/tests/cxx/tree/enumeration/inheritance/driver.cxx @@ -1,12 +1,12 @@ // file : tests/cxx/tree/enumeration/inheritance/driver.cxx -// author : Boris Kolpackov -// copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2006-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file // Insert test description here. // -#include // std::auto_ptr +#include // std::auto_ptr/unique_ptr +#include #include #include "test.hxx" @@ -25,7 +25,7 @@ main (int argc, char* argv[]) try { - auto_ptr r (root (argv[1])); + XSD_AUTO_PTR r (root (argv[1])); switch (*r) { @@ -39,6 +39,11 @@ main (int argc, char* argv[]) cout << "bottom" << endl; break; } + default: // Suppress warning. + { + assert (false); + break; + } } } catch (xml_schema::exception const& e) diff --git a/xsd/tests/cxx/tree/enumeration/inheritance/makefile b/xsd/tests/cxx/tree/enumeration/inheritance/makefile index c29b0f8..77df855 100644 --- a/xsd/tests/cxx/tree/enumeration/inheritance/makefile +++ b/xsd/tests/cxx/tree/enumeration/inheritance/makefile @@ -1,6 +1,5 @@ # file : tests/cxx/tree/enumeration/inheritance/makefile -# author : Boris Kolpackov -# copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +# copyright : Copyright (c) 2006-2014 Code Synthesis Tools CC # license : GNU GPL v2 + exceptions; see accompanying LICENSE file include $(dir $(lastword $(MAKEFILE_LIST)))../../../../../build/bootstrap.make @@ -27,17 +26,17 @@ $(call import,\ # $(driver): $(obj) $(xerces_c.l) -$(obj) $(dep): cpp_options := -I$(src_root)/libxsd +$(obj) $(dep): cpp_options := -I$(out_base) -I$(src_base) -I$(src_root)/libxsd $(obj) $(dep): $(xerces_c.l.cpp-options) genf := $(xsd:.xsd=.hxx) $(xsd:.xsd=.ixx) $(xsd:.xsd=.cxx) gen := $(addprefix $(out_base)/,$(genf)) $(gen): xsd := $(out_root)/xsd/xsd -$(gen): xsd_options := --generate-ostream +$(gen): xsd_options += --generate-ostream $(gen): $(out_root)/xsd/xsd -$(call include-dep,$(dep)) +$(call include-dep,$(dep),$(obj),$(gen)) # Convenience alias for default target. # @@ -74,7 +73,12 @@ endif $(call include,$(bld_root)/cxx/o-e.make) $(call include,$(bld_root)/cxx/cxx-o.make) $(call include,$(bld_root)/cxx/cxx-d.make) + +$(call include,$(bld_root)/cxx/standard.make) # cxx_standard +ifdef cxx_standard +$(gen): xsd_options += --std $(cxx_standard) $(call include,$(scf_root)/xsd/tree/xsd-cxx.make) +endif # Dependencies. diff --git a/xsd/tests/cxx/tree/enumeration/makefile b/xsd/tests/cxx/tree/enumeration/makefile index 5730a08..8f55b20 100644 --- a/xsd/tests/cxx/tree/enumeration/makefile +++ b/xsd/tests/cxx/tree/enumeration/makefile @@ -1,6 +1,5 @@ # file : tests/cxx/tree/enumeration/makefile -# author : Boris Kolpackov -# copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +# copyright : Copyright (c) 2006-2014 Code Synthesis Tools CC # license : GNU GPL v2 + exceptions; see accompanying LICENSE file include $(dir $(lastword $(MAKEFILE_LIST)))../../../../build/bootstrap.make diff --git a/xsd/tests/cxx/tree/float/driver.cxx b/xsd/tests/cxx/tree/float/driver.cxx index d2ec1dd..a71d2f3 100644 --- a/xsd/tests/cxx/tree/float/driver.cxx +++ b/xsd/tests/cxx/tree/float/driver.cxx @@ -1,13 +1,12 @@ // file : tests/cxx/tree/float/driver.cxx -// author : Boris Kolpackov -// copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2006-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file // Test floating point (xsd:{float, double, decimal}) type parsing // and serialization. // -#include // std::auto_ptr +#include // std::auto_ptr/unique_ptr #include #include "test.hxx" @@ -26,7 +25,7 @@ main (int argc, char* argv[]) try { - auto_ptr r (root (argv[1])); + XSD_AUTO_PTR r (root (argv[1])); r->simple ().push_back (12.129456); r->simple ().push_back (123.129456); diff --git a/xsd/tests/cxx/tree/float/makefile b/xsd/tests/cxx/tree/float/makefile index 21966ba..a585afb 100644 --- a/xsd/tests/cxx/tree/float/makefile +++ b/xsd/tests/cxx/tree/float/makefile @@ -1,6 +1,5 @@ # file : tests/cxx/tree/float/makefile -# author : Boris Kolpackov -# copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +# copyright : Copyright (c) 2006-2014 Code Synthesis Tools CC # license : GNU GPL v2 + exceptions; see accompanying LICENSE file include $(dir $(lastword $(MAKEFILE_LIST)))../../../../build/bootstrap.make @@ -27,17 +26,17 @@ $(call import,\ # $(driver): $(obj) $(xerces_c.l) -$(obj) $(dep): cpp_options := -I$(src_root)/libxsd +$(obj) $(dep): cpp_options := -I$(out_base) -I$(src_base) -I$(src_root)/libxsd $(obj) $(dep): $(xerces_c.l.cpp-options) genf := $(xsd:.xsd=.hxx) $(xsd:.xsd=.ixx) $(xsd:.xsd=.cxx) gen := $(addprefix $(out_base)/,$(genf)) $(gen): xsd := $(out_root)/xsd/xsd -$(gen): xsd_options := --generate-serialization --root-element-all +$(gen): xsd_options += --generate-serialization --root-element-all $(gen): $(out_root)/xsd/xsd -$(call include-dep,$(dep)) +$(call include-dep,$(dep),$(obj),$(gen)) # Convenience alias for default target. # @@ -74,7 +73,12 @@ endif $(call include,$(bld_root)/cxx/o-e.make) $(call include,$(bld_root)/cxx/cxx-o.make) $(call include,$(bld_root)/cxx/cxx-d.make) + +$(call include,$(bld_root)/cxx/standard.make) # cxx_standard +ifdef cxx_standard +$(gen): xsd_options += --std $(cxx_standard) $(call include,$(scf_root)/xsd/tree/xsd-cxx.make) +endif # Dependencies. diff --git a/xsd/tests/cxx/tree/float/test.std b/xsd/tests/cxx/tree/float/test.std index 44264c2..399e28c 100644 --- a/xsd/tests/cxx/tree/float/test.std +++ b/xsd/tests/cxx/tree/float/test.std @@ -1,68 +1,35 @@ - 0 - 1 - 1e+06 - 1e-07 - 0 1 1e+06 1e-07 - 0 - 1 - 100000000000000 - 1e-15 - 0 1 100000000000000 1e-15 - 0 - 1 - 10000 - 100000000000000 - 0.000000000000001 - 0 1 100000000000000 0.000000000000001 - 0 - 1 - 12.34 - 0.12 - 12.13 - 123.1 - 1234 - 0 - 1 - 12.34 - 0.12 - 12.13 - 123.1 - 1234 - -12.12 - -123.1 - diff --git a/xsd/tests/cxx/tree/list/ctor/driver.cxx b/xsd/tests/cxx/tree/list/ctor/driver.cxx index 81743e8..784ae01 100644 --- a/xsd/tests/cxx/tree/list/ctor/driver.cxx +++ b/xsd/tests/cxx/tree/list/ctor/driver.cxx @@ -1,6 +1,5 @@ // file : tests/cxx/tree/list/ctor/driver.cxx -// author : Boris Kolpackov -// copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2006-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file // Test list constructors. diff --git a/xsd/tests/cxx/tree/list/ctor/makefile b/xsd/tests/cxx/tree/list/ctor/makefile index cfda43a..4115606 100644 --- a/xsd/tests/cxx/tree/list/ctor/makefile +++ b/xsd/tests/cxx/tree/list/ctor/makefile @@ -1,6 +1,5 @@ # file : tests/cxx/tree/list/ctor/makefile -# author : Boris Kolpackov -# copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +# copyright : Copyright (c) 2006-2014 Code Synthesis Tools CC # license : GNU GPL v2 + exceptions; see accompanying LICENSE file include $(dir $(lastword $(MAKEFILE_LIST)))../../../../../build/bootstrap.make @@ -27,18 +26,18 @@ $(call import,\ # $(driver): $(obj) $(xerces_c.l) -$(obj) $(dep): cpp_options := -I$(src_root)/libxsd +$(obj) $(dep): cpp_options := -I$(out_base) -I$(src_base) -I$(src_root)/libxsd $(obj) $(dep): $(xerces_c.l.cpp-options) genf := $(xsd:.xsd=.hxx) $(xsd:.xsd=.ixx) $(xsd:.xsd=.cxx) gen := $(addprefix $(out_base)/,$(genf)) $(gen): xsd := $(out_root)/xsd/xsd -$(gen): xsd_options := --generate-default-ctor --generate-from-base-ctor \ +$(gen): xsd_options += --generate-default-ctor --generate-from-base-ctor \ --generate-doxygen $(gen): $(out_root)/xsd/xsd -$(call include-dep,$(dep)) +$(call include-dep,$(dep),$(obj),$(gen)) # Convenience alias for default target. # @@ -75,7 +74,12 @@ endif $(call include,$(bld_root)/cxx/o-e.make) $(call include,$(bld_root)/cxx/cxx-o.make) $(call include,$(bld_root)/cxx/cxx-d.make) + +$(call include,$(bld_root)/cxx/standard.make) # cxx_standard +ifdef cxx_standard +$(gen): xsd_options += --std $(cxx_standard) $(call include,$(scf_root)/xsd/tree/xsd-cxx.make) +endif # Dependencies. diff --git a/xsd/tests/cxx/tree/list/makefile b/xsd/tests/cxx/tree/list/makefile index ae6bb0a..4af3e22 100644 --- a/xsd/tests/cxx/tree/list/makefile +++ b/xsd/tests/cxx/tree/list/makefile @@ -1,6 +1,5 @@ # file : tests/cxx/tree/list/makefile -# author : Boris Kolpackov -# copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +# copyright : Copyright (c) 2006-2014 Code Synthesis Tools CC # license : GNU GPL v2 + exceptions; see accompanying LICENSE file include $(dir $(lastword $(MAKEFILE_LIST)))../../../../build/bootstrap.make diff --git a/xsd/tests/cxx/tree/makefile b/xsd/tests/cxx/tree/makefile index 9b79424..7fd9f63 100644 --- a/xsd/tests/cxx/tree/makefile +++ b/xsd/tests/cxx/tree/makefile @@ -1,30 +1,32 @@ # file : tests/cxx/tree/makefile -# author : Boris Kolpackov -# copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +# copyright : Copyright (c) 2006-2014 Code Synthesis Tools CC # license : GNU GPL v2 + exceptions; see accompanying LICENSE file include $(dir $(lastword $(MAKEFILE_LIST)))../../../build/bootstrap.make -tests := \ -built-in \ -chameleon \ -comparison \ -compilation \ -complex \ -containment \ -default \ -detach \ -encoding \ -enumeration \ -float \ -list \ -name-clash \ -naming \ -polymorphism \ -prefix \ -test-template \ -types-only \ -union \ +tests := \ +any-type \ +built-in \ +chameleon \ +comparison \ +compilation \ +complex \ +containment \ +default \ +detach \ +dom-association \ +encoding \ +enumeration \ +float \ +list \ +name-clash \ +naming \ +order \ +polymorphism \ +prefix \ +test-template \ +types-only \ +union \ wildcard ifeq ($(xsd_with_ace),y) diff --git a/xsd/tests/cxx/tree/name-clash/inheritance/driver.cxx b/xsd/tests/cxx/tree/name-clash/inheritance/driver.cxx index 70e6fc6..07e0c00 100644 --- a/xsd/tests/cxx/tree/name-clash/inheritance/driver.cxx +++ b/xsd/tests/cxx/tree/name-clash/inheritance/driver.cxx @@ -1,12 +1,11 @@ // file : tests/cxx/tree/name-clash/inheritance/driver.cxx -// author : Boris Kolpackov -// copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2006-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file // Test for name clashes across inheritance hierarchy. // -#include // std::auto_ptr +#include // std::auto_ptr/unique_ptr #include #include "test.hxx" @@ -25,7 +24,7 @@ main (int argc, char* argv[]) try { - auto_ptr r (root (argv[1])); + XSD_AUTO_PTR r (root (argv[1])); cout << *r << endl; } diff --git a/xsd/tests/cxx/tree/name-clash/inheritance/makefile b/xsd/tests/cxx/tree/name-clash/inheritance/makefile index b983d91..ea05693 100644 --- a/xsd/tests/cxx/tree/name-clash/inheritance/makefile +++ b/xsd/tests/cxx/tree/name-clash/inheritance/makefile @@ -1,6 +1,5 @@ # file : tests/cxx/tree/name-clash/inheritance/makefile -# author : Boris Kolpackov -# copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +# copyright : Copyright (c) 2006-2014 Code Synthesis Tools CC # license : GNU GPL v2 + exceptions; see accompanying LICENSE file include $(dir $(lastword $(MAKEFILE_LIST)))../../../../../build/bootstrap.make @@ -27,17 +26,17 @@ $(call import,\ # $(driver): $(obj) $(xerces_c.l) -$(obj) $(dep): cpp_options := -I$(src_root)/libxsd +$(obj) $(dep): cpp_options := -I$(out_base) -I$(src_base) -I$(src_root)/libxsd $(obj) $(dep): $(xerces_c.l.cpp-options) genf := $(xsd:.xsd=.hxx) $(xsd:.xsd=.ixx) $(xsd:.xsd=.cxx) gen := $(addprefix $(out_base)/,$(genf)) $(gen): xsd := $(out_root)/xsd/xsd -$(gen): xsd_options := --generate-ostream +$(gen): xsd_options += --generate-ostream $(gen): $(out_root)/xsd/xsd -$(call include-dep,$(dep)) +$(call include-dep,$(dep),$(obj),$(gen)) # Convenience alias for default target. # @@ -74,7 +73,12 @@ endif $(call include,$(bld_root)/cxx/o-e.make) $(call include,$(bld_root)/cxx/cxx-o.make) $(call include,$(bld_root)/cxx/cxx-d.make) + +$(call include,$(bld_root)/cxx/standard.make) # cxx_standard +ifdef cxx_standard +$(gen): xsd_options += --std $(cxx_standard) $(call include,$(scf_root)/xsd/tree/xsd-cxx.make) +endif # Dependencies. diff --git a/xsd/tests/cxx/tree/name-clash/makefile b/xsd/tests/cxx/tree/name-clash/makefile index ef2fdf0..c9a4d0f 100644 --- a/xsd/tests/cxx/tree/name-clash/makefile +++ b/xsd/tests/cxx/tree/name-clash/makefile @@ -1,6 +1,5 @@ # file : tests/cxx/tree/name-clash/makefile -# author : Boris Kolpackov -# copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +# copyright : Copyright (c) 2006-2014 Code Synthesis Tools CC # license : GNU GPL v2 + exceptions; see accompanying LICENSE file include $(dir $(lastword $(MAKEFILE_LIST)))../../../../build/bootstrap.make diff --git a/xsd/tests/cxx/tree/naming/camel/driver.cxx b/xsd/tests/cxx/tree/naming/camel/driver.cxx index 96b88d5..716a544 100644 --- a/xsd/tests/cxx/tree/naming/camel/driver.cxx +++ b/xsd/tests/cxx/tree/naming/camel/driver.cxx @@ -1,12 +1,10 @@ // file : tests/cxx/tree/naming/camel/driver.cxx -// author : Boris Kolpackov -// copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2006-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file // Test camel case (upper for types, lower for functions) naming style. // -#include // std::auto_ptr #include #include @@ -29,6 +27,7 @@ main () { Gender::Value v; v = Gender::female; + XSD_UNUSED (v); } // Anonymous type. @@ -49,6 +48,8 @@ main () // { Type::FooType* p = 0; + XSD_UNUSED (p); + Type::FooOptional o; if (t.foo ().present ()) @@ -61,6 +62,7 @@ main () // { Type::BarType* p = 0; + XSD_UNUSED (p); if (t.bar () != "bar") return 1; @@ -72,9 +74,13 @@ main () // { Type::BazType* p = 0; + XSD_UNUSED (p); + Type::BazSequence s; Type::BazIterator i (s.begin ()); Type::BazConstIterator ci (s.begin ()); + XSD_UNUSED (i); + XSD_UNUSED (ci); if (t.baz () != s) return 1; @@ -88,6 +94,8 @@ main () Type::AnySequence s (t.domDocument ()); Type::AnyIterator i (s.begin ()); Type::AnyConstIterator ci (s.begin ()); + XSD_UNUSED (i); + XSD_UNUSED (ci); if (t.any () != s) return 1; @@ -112,6 +120,8 @@ main () Type::AnyAttributeSet s (t.domDocument ()); Type::AnyAttributeIterator i (s.begin ()); Type::AnyAttributeConstIterator ci (s.begin ()); + XSD_UNUSED (i); + XSD_UNUSED (ci); if (t.anyAttribute () != s) return 1; diff --git a/xsd/tests/cxx/tree/naming/camel/makefile b/xsd/tests/cxx/tree/naming/camel/makefile index e9ce149..6364196 100644 --- a/xsd/tests/cxx/tree/naming/camel/makefile +++ b/xsd/tests/cxx/tree/naming/camel/makefile @@ -1,6 +1,5 @@ # file : tests/cxx/tree/naming/camel/makefile -# author : Boris Kolpackov -# copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +# copyright : Copyright (c) 2006-2014 Code Synthesis Tools CC # license : GNU GPL v2 + exceptions; see accompanying LICENSE file include $(dir $(lastword $(MAKEFILE_LIST)))../../../../../build/bootstrap.make @@ -27,7 +26,7 @@ $(call import,\ # $(driver): $(obj) $(xerces_c.l) -$(obj) $(dep): cpp_options := -I$(src_root)/libxsd +$(obj) $(dep): cpp_options := -I$(out_base) -I$(src_base) -I$(src_root)/libxsd $(obj) $(dep): $(xerces_c.l.cpp-options) genf := $(xsd:.xsd=.hxx) $(xsd:.xsd=.ixx) $(xsd:.xsd=.cxx) @@ -35,7 +34,7 @@ gen := $(addprefix $(out_base)/,$(genf)) $(gen): xsd := $(out_root)/xsd/xsd -$(gen): xsd_options := \ +$(gen): xsd_options += \ --type-naming ucc \ --function-naming lcc \ --generate-ostream \ @@ -45,7 +44,7 @@ $(gen): xsd_options := \ $(gen): $(out_root)/xsd/xsd -$(call include-dep,$(dep)) +$(call include-dep,$(dep),$(obj),$(gen)) # Convenience alias for default target. # @@ -82,7 +81,12 @@ endif $(call include,$(bld_root)/cxx/o-e.make) $(call include,$(bld_root)/cxx/cxx-o.make) $(call include,$(bld_root)/cxx/cxx-d.make) + +$(call include,$(bld_root)/cxx/standard.make) # cxx_standard +ifdef cxx_standard +$(gen): xsd_options += --std $(cxx_standard) $(call include,$(scf_root)/xsd/tree/xsd-cxx.make) +endif # Dependencies. diff --git a/xsd/tests/cxx/tree/naming/java/driver.cxx b/xsd/tests/cxx/tree/naming/java/driver.cxx index 843acff..f35607a 100644 --- a/xsd/tests/cxx/tree/naming/java/driver.cxx +++ b/xsd/tests/cxx/tree/naming/java/driver.cxx @@ -1,12 +1,10 @@ // file : tests/cxx/tree/naming/java/driver.cxx -// author : Boris Kolpackov -// copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2006-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file // Test Java naming style. // -#include // std::auto_ptr #include #include @@ -29,6 +27,7 @@ main () { Gender::Value v; v = Gender::female; + XSD_UNUSED (v); } // Anonymous type. @@ -49,6 +48,7 @@ main () // { Type::FooType* p = 0; + XSD_UNUSED (p); Type::FooOptional o; if (t.getFoo ().present ()) @@ -61,6 +61,7 @@ main () // { Type::BarType* p = 0; + XSD_UNUSED (p); if (t.getBar () != "bar") return 1; @@ -72,9 +73,13 @@ main () // { Type::BazType* p = 0; + XSD_UNUSED (p); + Type::BazSequence s; Type::BazIterator i (s.begin ()); Type::BazConstIterator ci (s.begin ()); + XSD_UNUSED (i); + XSD_UNUSED (ci); if (t.getBaz () != s) return 1; @@ -88,6 +93,8 @@ main () Type::AnySequence s (t.getDomDocument ()); Type::AnyIterator i (s.begin ()); Type::AnyConstIterator ci (s.begin ()); + XSD_UNUSED (i); + XSD_UNUSED (ci); if (t.getAny () != s) return 1; @@ -112,6 +119,8 @@ main () Type::AnyAttributeSet s (t.getDomDocument ()); Type::AnyAttributeIterator i (s.begin ()); Type::AnyAttributeConstIterator ci (s.begin ()); + XSD_UNUSED (i); + XSD_UNUSED (ci); if (t.getAnyAttribute () != s) return 1; diff --git a/xsd/tests/cxx/tree/naming/java/makefile b/xsd/tests/cxx/tree/naming/java/makefile index f8e7d04..83d73e1 100644 --- a/xsd/tests/cxx/tree/naming/java/makefile +++ b/xsd/tests/cxx/tree/naming/java/makefile @@ -1,6 +1,5 @@ # file : tests/cxx/tree/naming/java/makefile -# author : Boris Kolpackov -# copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +# copyright : Copyright (c) 2006-2014 Code Synthesis Tools CC # license : GNU GPL v2 + exceptions; see accompanying LICENSE file include $(dir $(lastword $(MAKEFILE_LIST)))../../../../../build/bootstrap.make @@ -27,7 +26,7 @@ $(call import,\ # $(driver): $(obj) $(xerces_c.l) -$(obj) $(dep): cpp_options := -I$(src_root)/libxsd +$(obj) $(dep): cpp_options := -I$(out_base) -I$(src_base) -I$(src_root)/libxsd $(obj) $(dep): $(xerces_c.l.cpp-options) genf := $(xsd:.xsd=.hxx) $(xsd:.xsd=.ixx) $(xsd:.xsd=.cxx) @@ -35,7 +34,7 @@ gen := $(addprefix $(out_base)/,$(genf)) $(gen): xsd := $(out_root)/xsd/xsd -$(gen): xsd_options := \ +$(gen): xsd_options += \ --type-naming java \ --function-naming java \ --generate-ostream \ @@ -45,7 +44,7 @@ $(gen): xsd_options := \ $(gen): $(out_root)/xsd/xsd -$(call include-dep,$(dep)) +$(call include-dep,$(dep),$(obj),$(gen)) # Convenience alias for default target. # @@ -82,7 +81,12 @@ endif $(call include,$(bld_root)/cxx/o-e.make) $(call include,$(bld_root)/cxx/cxx-o.make) $(call include,$(bld_root)/cxx/cxx-d.make) + +$(call include,$(bld_root)/cxx/standard.make) # cxx_standard +ifdef cxx_standard +$(gen): xsd_options += --std $(cxx_standard) $(call include,$(scf_root)/xsd/tree/xsd-cxx.make) +endif # Dependencies. diff --git a/xsd/tests/cxx/tree/naming/knr/driver.cxx b/xsd/tests/cxx/tree/naming/knr/driver.cxx index fff944b..5038d7b 100644 --- a/xsd/tests/cxx/tree/naming/knr/driver.cxx +++ b/xsd/tests/cxx/tree/naming/knr/driver.cxx @@ -1,12 +1,10 @@ // file : tests/cxx/tree/naming/knr/driver.cxx -// author : Boris Kolpackov -// copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2006-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file // Test K&R naming style. // -#include // std::auto_ptr #include #include @@ -29,6 +27,7 @@ main () { gender::value v; v = gender::female; + XSD_UNUSED (v); } // Anonymous type. @@ -49,6 +48,8 @@ main () // { type::foo_type* p = 0; + XSD_UNUSED (p); + type::foo_optional o; if (t.foo ().present ()) @@ -61,6 +62,7 @@ main () // { type::bar_type* p = 0; + XSD_UNUSED (p); if (t.bar () != "bar") return 1; @@ -72,9 +74,13 @@ main () // { type::baz_type* p = 0; + XSD_UNUSED (p); + type::baz_sequence s; type::baz_iterator i (s.begin ()); type::baz_const_iterator ci (s.begin ()); + XSD_UNUSED (i); + XSD_UNUSED (ci); if (t.baz () != s) return 1; @@ -88,6 +94,8 @@ main () type::any_sequence s (t.dom_document ()); type::any_iterator i (s.begin ()); type::any_const_iterator ci (s.begin ()); + XSD_UNUSED (i); + XSD_UNUSED (ci); if (t.any () != s) return 1; @@ -112,6 +120,8 @@ main () type::any_attribute_set s (t.dom_document ()); type::any_attribute_iterator i (s.begin ()); type::any_attribute_const_iterator ci (s.begin ()); + XSD_UNUSED (i); + XSD_UNUSED (ci); if (t.any_attribute () != s) return 1; diff --git a/xsd/tests/cxx/tree/naming/knr/makefile b/xsd/tests/cxx/tree/naming/knr/makefile index ac9e75e..d8ecbab 100644 --- a/xsd/tests/cxx/tree/naming/knr/makefile +++ b/xsd/tests/cxx/tree/naming/knr/makefile @@ -1,6 +1,5 @@ # file : tests/cxx/tree/naming/knr/makefile -# author : Boris Kolpackov -# copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +# copyright : Copyright (c) 2006-2014 Code Synthesis Tools CC # license : GNU GPL v2 + exceptions; see accompanying LICENSE file include $(dir $(lastword $(MAKEFILE_LIST)))../../../../../build/bootstrap.make @@ -27,7 +26,7 @@ $(call import,\ # $(driver): $(obj) $(xerces_c.l) -$(obj) $(dep): cpp_options := -I$(src_root)/libxsd +$(obj) $(dep): cpp_options := -I$(out_base) -I$(src_base) -I$(src_root)/libxsd $(obj) $(dep): $(xerces_c.l.cpp-options) genf := $(xsd:.xsd=.hxx) $(xsd:.xsd=.ixx) $(xsd:.xsd=.cxx) @@ -35,7 +34,7 @@ gen := $(addprefix $(out_base)/,$(genf)) $(gen): xsd := $(out_root)/xsd/xsd -$(gen): xsd_options := \ +$(gen): xsd_options += \ --type-naming knr \ --function-naming knr \ --generate-ostream \ @@ -45,7 +44,7 @@ $(gen): xsd_options := \ $(gen): $(out_root)/xsd/xsd -$(call include-dep,$(dep)) +$(call include-dep,$(dep),$(obj),$(gen)) # Convenience alias for default target. # @@ -82,7 +81,12 @@ endif $(call include,$(bld_root)/cxx/o-e.make) $(call include,$(bld_root)/cxx/cxx-o.make) $(call include,$(bld_root)/cxx/cxx-d.make) + +$(call include,$(bld_root)/cxx/standard.make) # cxx_standard +ifdef cxx_standard +$(gen): xsd_options += --std $(cxx_standard) $(call include,$(scf_root)/xsd/tree/xsd-cxx.make) +endif # Dependencies. diff --git a/xsd/tests/cxx/tree/naming/makefile b/xsd/tests/cxx/tree/naming/makefile index 90bd7d3..60ac63b 100644 --- a/xsd/tests/cxx/tree/naming/makefile +++ b/xsd/tests/cxx/tree/naming/makefile @@ -1,6 +1,5 @@ # file : tests/cxx/tree/naming/makefile -# author : Boris Kolpackov -# copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +# copyright : Copyright (c) 2006-2014 Code Synthesis Tools CC # license : GNU GPL v2 + exceptions; see accompanying LICENSE file include $(dir $(lastword $(MAKEFILE_LIST)))../../../../build/bootstrap.make diff --git a/xsd/tests/cxx/tree/order/driver.cxx b/xsd/tests/cxx/tree/order/driver.cxx new file mode 100644 index 0000000..01d8d9f --- /dev/null +++ b/xsd/tests/cxx/tree/order/driver.cxx @@ -0,0 +1,65 @@ +// file : tests/cxx/tree/order/driver.cxx +// copyright : Copyright (c) 2006-2014 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +// Test ordered type support. +// + +#include // std::auto_ptr/unique_ptr +#include +#include + +#include +#include + +#include "test.hxx" + +using namespace std; +using namespace test; +using namespace xercesc; + +int +main (int argc, char* argv[]) +{ + if (argc != 2) + { + cerr << "usage: " << argv[0] << " test.xml" << endl; + return 1; + } + + XMLPlatformUtils::Initialize (); + + try + { + XSD_AUTO_PTR r (root_ (argv[1], xml_schema::flags::dont_initialize)); + + root c (*r); + assert (c == *r); + + for (root::t1_const_iterator j (r->t1 ().begin ()); + j != r->t1 ().end (); ++j) + { + const t1_derived& d (*j); + + for (t1_derived::content_order_const_iterator i ( + d.content_order ().begin ()); i != d.content_order ().end (); ++i) + { + cout << i->id << ' ' << i->index << endl; + } + } + + xml_schema::namespace_infomap map; + + map["t"].name = "test"; + map["t1"].name = "test1"; + + root_ (cout, *r, map, "UTF-8", xml_schema::flags::dont_initialize); + } + catch (xml_schema::exception const& e) + { + cerr << e << endl; + return 1; + } + + XMLPlatformUtils::Terminate (); +} diff --git a/xsd/tests/cxx/tree/order/makefile b/xsd/tests/cxx/tree/order/makefile new file mode 100644 index 0000000..0dff0f9 --- /dev/null +++ b/xsd/tests/cxx/tree/order/makefile @@ -0,0 +1,94 @@ +# file : tests/cxx/tree/order/makefile +# copyright : Copyright (c) 2006-2014 Code Synthesis Tools CC +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +include $(dir $(lastword $(MAKEFILE_LIST)))../../../../build/bootstrap.make + +xsd := test.xsd +cxx := driver.cxx + +obj := $(addprefix $(out_base)/,$(cxx:.cxx=.o) $(xsd:.xsd=.o)) +dep := $(obj:.o=.o.d) + +driver := $(out_base)/driver +test := $(out_base)/.test +clean := $(out_base)/.clean + + +# Import. +# +$(call import,\ + $(scf_root)/import/libxerces-c/stub.make,\ + l: xerces_c.l,cpp-options: xerces_c.l.cpp-options) + + +# Build. +# +$(driver): $(obj) $(xerces_c.l) + +$(obj) $(dep): cpp_options := -I$(out_base) -I$(src_base) -I$(src_root)/libxsd +$(obj) $(dep): $(xerces_c.l.cpp-options) + +genf := $(xsd:.xsd=.hxx) $(xsd:.xsd=.ixx) $(xsd:.xsd=.cxx) +gen := $(addprefix $(out_base)/,$(genf)) + +$(gen): xsd := $(out_root)/xsd/xsd +$(gen): xsd_options += --generate-serialization --generate-wildcard \ +--generate-comparison \ +--ordered-type t1_base --ordered-type t1_derived \ +--ordered-type t2_base --ordered-type t2_derived \ +--ordered-type t3_type \ +--ordered-type t4_base --ordered-type t4_derived \ +--ordered-type t5_base --ordered-type t5_derived \ +--ordered-type t6_base --ordered-type t6_derived \ +--ordered-type t7_type +$(gen): $(out_root)/xsd/xsd + +$(call include-dep,$(dep),$(obj),$(gen)) + +# Convenience alias for default target. +# +$(out_base)/: $(driver) + + +# Test. +# +$(test): driver := $(driver) +$(test): $(driver) $(src_base)/test.xml $(src_base)/output + $(call message,test $$1,$$1 $(src_base)/test.xml | diff -u $(src_base)/output -,$(driver)) + +# Clean. +# +$(clean): $(driver).o.clean \ + $(addsuffix .cxx.clean,$(obj)) \ + $(addsuffix .cxx.clean,$(dep)) \ + $(addprefix $(out_base)/,$(xsd:.xsd=.cxx.xsd.clean)) + +# Generated .gitignore. +# +ifeq ($(out_base),$(src_base)) +$(gen): | $(out_base)/.gitignore +$(driver): | $(out_base)/.gitignore + +$(out_base)/.gitignore: files := driver $(genf) +$(clean): $(out_base)/.gitignore.clean + +$(call include,$(bld_root)/git/gitignore.make) +endif + +# How to. +# +$(call include,$(bld_root)/cxx/o-e.make) +$(call include,$(bld_root)/cxx/cxx-o.make) +$(call include,$(bld_root)/cxx/cxx-d.make) + +$(call include,$(bld_root)/cxx/standard.make) # cxx_standard +ifdef cxx_standard +$(gen): xsd_options += --std $(cxx_standard) +$(call include,$(scf_root)/xsd/tree/xsd-cxx.make) +endif + + +# Dependencies. +# +$(call import,$(src_root)/xsd/makefile) diff --git a/xsd/tests/cxx/tree/order/output b/xsd/tests/cxx/tree/order/output new file mode 100644 index 0000000..73442fe --- /dev/null +++ b/xsd/tests/cxx/tree/order/output @@ -0,0 +1,92 @@ +2 0 +1 0 +1 1 +2 1 +3 0 +4 0 +3 1 +4 1 + + + + b1 + a1 + a2 + b2 + c1 + d1 + e1 + d2 + f1 + + + b1 + a1 + b2 + a2 + + + a1 + b1 + c1 + c2 + + + a1 + c1 + + + t1 + + b1 + t2 + + a1 + t3 + + b2 + t4 + + a2 + t5 + + d1 + t6 + + c1 + t7 + + + + t5a + + + t1 + + b1 + t2 + + a1 + t3 + + a2 + t4 + + b2 + t5 + + + + t6 + + + t1 + + a1 + t2 + + b1 + t3 + + + diff --git a/xsd/tests/cxx/tree/order/test.xml b/xsd/tests/cxx/tree/order/test.xml new file mode 100644 index 0000000..cd82936 --- /dev/null +++ b/xsd/tests/cxx/tree/order/test.xml @@ -0,0 +1,71 @@ + + + b1 + a1 + a2 + b2 + c1 + d1 + e1 + d2 + f1 + + + b1 + a1 + b2 + a2 + + + a1 + b1 + c1 + c2 + + + a1 + c1 + + + t1 + b1 + t2 + a1 + t3 + b2 + t4 + a2 + t5 + d1 + t6 + c1 + t7 + + + t5a + + + t1 + b1 + t2 + a1 + t3 + a2 + t4 + b2 + t5 + + + t6 + + + t1 + a1 + t2 + b1 + t3 + + diff --git a/xsd/tests/cxx/tree/order/test.xsd b/xsd/tests/cxx/tree/order/test.xsd new file mode 100644 index 0000000..c30c027 --- /dev/null +++ b/xsd/tests/cxx/tree/order/test.xsd @@ -0,0 +1,130 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/xsd/tests/cxx/tree/polymorphism/comparison/driver.cxx b/xsd/tests/cxx/tree/polymorphism/comparison/driver.cxx index 5e52e70..5394991 100644 --- a/xsd/tests/cxx/tree/polymorphism/comparison/driver.cxx +++ b/xsd/tests/cxx/tree/polymorphism/comparison/driver.cxx @@ -1,12 +1,11 @@ // file : tests/cxx/tree/polymorphism/comparison/driver.cxx -// author : Boris Kolpackov -// copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2006-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file // Test comparison of polymorphic object models. // -#include // std::auto_ptr +#include // std::auto_ptr/unique_ptr #include #include "test.hxx" @@ -25,7 +24,7 @@ main (int argc, char* argv[]) try { - auto_ptr r (root (argv[1])); + XSD_AUTO_PTR r (root (argv[1])); // Equals. // diff --git a/xsd/tests/cxx/tree/polymorphism/comparison/makefile b/xsd/tests/cxx/tree/polymorphism/comparison/makefile index ad2c8ec..ef3e70a 100644 --- a/xsd/tests/cxx/tree/polymorphism/comparison/makefile +++ b/xsd/tests/cxx/tree/polymorphism/comparison/makefile @@ -1,6 +1,5 @@ # file : tests/cxx/tree/polymorphism/comparison/makefile -# author : Boris Kolpackov -# copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +# copyright : Copyright (c) 2006-2014 Code Synthesis Tools CC # license : GNU GPL v2 + exceptions; see accompanying LICENSE file include $(dir $(lastword $(MAKEFILE_LIST)))../../../../../build/bootstrap.make @@ -27,18 +26,18 @@ $(call import,\ # $(driver): $(obj) $(xerces_c.l) -$(obj) $(dep): cpp_options := -I$(src_root)/libxsd +$(obj) $(dep): cpp_options := -I$(out_base) -I$(src_base) -I$(src_root)/libxsd $(obj) $(dep): $(xerces_c.l.cpp-options) genf := $(xsd:.xsd=.hxx) $(xsd:.xsd=.ixx) $(xsd:.xsd=.cxx) gen := $(addprefix $(out_base)/,$(genf)) $(gen): xsd := $(out_root)/xsd/xsd -$(gen): xsd_options := --generate-polymorphic --polymorphic-type base \ +$(gen): xsd_options += --generate-polymorphic --polymorphic-type base \ --generate-comparison $(gen): $(out_root)/xsd/xsd -$(call include-dep,$(dep)) +$(call include-dep,$(dep),$(obj),$(gen)) # Convenience alias for default target. # @@ -75,7 +74,12 @@ endif $(call include,$(bld_root)/cxx/o-e.make) $(call include,$(bld_root)/cxx/cxx-o.make) $(call include,$(bld_root)/cxx/cxx-d.make) + +$(call include,$(bld_root)/cxx/standard.make) # cxx_standard +ifdef cxx_standard +$(gen): xsd_options += --std $(cxx_standard) $(call include,$(scf_root)/xsd/tree/xsd-cxx.make) +endif # Dependencies. diff --git a/xsd/tests/cxx/tree/polymorphism/makefile b/xsd/tests/cxx/tree/polymorphism/makefile index bca8f3f..9215e44 100644 --- a/xsd/tests/cxx/tree/polymorphism/makefile +++ b/xsd/tests/cxx/tree/polymorphism/makefile @@ -1,6 +1,5 @@ # file : tests/cxx/tree/polymorphism/makefile -# author : Boris Kolpackov -# copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +# copyright : Copyright (c) 2006-2014 Code Synthesis Tools CC # license : GNU GPL v2 + exceptions; see accompanying LICENSE file include $(dir $(lastword $(MAKEFILE_LIST)))../../../../build/bootstrap.make diff --git a/xsd/tests/cxx/tree/polymorphism/ostream/driver.cxx b/xsd/tests/cxx/tree/polymorphism/ostream/driver.cxx index 216c887..bfbd2d4 100644 --- a/xsd/tests/cxx/tree/polymorphism/ostream/driver.cxx +++ b/xsd/tests/cxx/tree/polymorphism/ostream/driver.cxx @@ -1,12 +1,11 @@ // file : tests/cxx/tree/polymorphism/ostream/driver.cxx -// author : Boris Kolpackov -// copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2006-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file // Test printing of polymorphic object models. // -#include // std::auto_ptr +#include // std::auto_ptr/unique_ptr #include #include "test.hxx" @@ -25,7 +24,7 @@ main (int argc, char* argv[]) try { - auto_ptr r (root (argv[1])); + XSD_AUTO_PTR r (root (argv[1])); cout << *r << endl; } catch (xml_schema::exception const& e) diff --git a/xsd/tests/cxx/tree/polymorphism/ostream/makefile b/xsd/tests/cxx/tree/polymorphism/ostream/makefile index 661ba16..76a366f 100644 --- a/xsd/tests/cxx/tree/polymorphism/ostream/makefile +++ b/xsd/tests/cxx/tree/polymorphism/ostream/makefile @@ -1,6 +1,5 @@ # file : tests/cxx/tree/polymorphism/ostream/makefile -# author : Boris Kolpackov -# copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +# copyright : Copyright (c) 2006-2014 Code Synthesis Tools CC # license : GNU GPL v2 + exceptions; see accompanying LICENSE file include $(dir $(lastword $(MAKEFILE_LIST)))../../../../../build/bootstrap.make @@ -27,18 +26,18 @@ $(call import,\ # $(driver): $(obj) $(xerces_c.l) -$(obj) $(dep): cpp_options := -I$(src_root)/libxsd +$(obj) $(dep): cpp_options := -I$(out_base) -I$(src_base) -I$(src_root)/libxsd $(obj) $(dep): $(xerces_c.l.cpp-options) genf := $(xsd:.xsd=.hxx) $(xsd:.xsd=.ixx) $(xsd:.xsd=.cxx) gen := $(addprefix $(out_base)/,$(genf)) $(gen): xsd := $(out_root)/xsd/xsd -$(gen): xsd_options := --generate-polymorphic --polymorphic-type-all \ ---generate-ostream +$(gen): xsd_options += --generate-polymorphic --polymorphic-type-all \ +--root-element root --generate-ostream $(gen): $(out_root)/xsd/xsd -$(call include-dep,$(dep)) +$(call include-dep,$(dep),$(obj),$(gen)) # Convenience alias for default target. # @@ -76,7 +75,12 @@ endif $(call include,$(bld_root)/cxx/o-e.make) $(call include,$(bld_root)/cxx/cxx-o.make) $(call include,$(bld_root)/cxx/cxx-d.make) + +$(call include,$(bld_root)/cxx/standard.make) # cxx_standard +ifdef cxx_standard +$(gen): xsd_options += --std $(cxx_standard) $(call include,$(scf_root)/xsd/tree/xsd-cxx.make) +endif # Dependencies. diff --git a/xsd/tests/cxx/tree/polymorphism/ostream/output b/xsd/tests/cxx/tree/polymorphism/ostream/output index bf0e814..e7fbd68 100644 --- a/xsd/tests/cxx/tree/polymorphism/ostream/output +++ b/xsd/tests/cxx/tree/polymorphism/ostream/output @@ -11,3 +11,8 @@ a: a fund: 1 c: c1 c: c2 +base: +a: a +fund: 1 +d: d1 +d: d2 diff --git a/xsd/tests/cxx/tree/polymorphism/ostream/test.xml b/xsd/tests/cxx/tree/polymorphism/ostream/test.xml index 157e15c..5409d2a 100644 --- a/xsd/tests/cxx/tree/polymorphism/ostream/test.xml +++ b/xsd/tests/cxx/tree/polymorphism/ostream/test.xml @@ -1,9 +1,10 @@ - + a1 - a1b - a1c1c2 + a1b + a1c1c2 + a1d1d2 - + diff --git a/xsd/tests/cxx/tree/polymorphism/ostream/test.xsd b/xsd/tests/cxx/tree/polymorphism/ostream/test.xsd index cc1f7a8..ddeaeae 100644 --- a/xsd/tests/cxx/tree/polymorphism/ostream/test.xsd +++ b/xsd/tests/cxx/tree/polymorphism/ostream/test.xsd @@ -1,5 +1,6 @@ - + @@ -7,6 +8,7 @@ + @@ -28,9 +30,21 @@ + + + + + + + + + + + + - + diff --git a/xsd/tests/cxx/tree/polymorphism/same-type/driver.cxx b/xsd/tests/cxx/tree/polymorphism/same-type/driver.cxx index 441a742..0846b04 100644 --- a/xsd/tests/cxx/tree/polymorphism/same-type/driver.cxx +++ b/xsd/tests/cxx/tree/polymorphism/same-type/driver.cxx @@ -1,12 +1,11 @@ // file : tests/cxx/tree/polymorphism/same-type/driver.cxx -// author : Boris Kolpackov -// copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2006-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file // Test substitution group and xsi:type that don't change the type. // -#include // std::auto_ptr +#include // std::auto_ptr/unique_ptr #include #include "test.hxx" @@ -25,7 +24,7 @@ main (int argc, char* argv[]) try { - auto_ptr r (root (argv[1])); + XSD_AUTO_PTR r (root (argv[1])); cout << *r << endl; } diff --git a/xsd/tests/cxx/tree/polymorphism/same-type/makefile b/xsd/tests/cxx/tree/polymorphism/same-type/makefile index c8e7bed..549f590 100644 --- a/xsd/tests/cxx/tree/polymorphism/same-type/makefile +++ b/xsd/tests/cxx/tree/polymorphism/same-type/makefile @@ -1,6 +1,5 @@ # file : tests/cxx/tree/polymorphism/same-type/makefile -# author : Boris Kolpackov -# copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +# copyright : Copyright (c) 2006-2014 Code Synthesis Tools CC # license : GNU GPL v2 + exceptions; see accompanying LICENSE file include $(dir $(lastword $(MAKEFILE_LIST)))../../../../../build/bootstrap.make @@ -27,18 +26,18 @@ $(call import,\ # $(driver): $(obj) $(xerces_c.l) -$(obj) $(dep): cpp_options := -I$(src_root)/libxsd +$(obj) $(dep): cpp_options := -I$(out_base) -I$(src_base) -I$(src_root)/libxsd $(obj) $(dep): $(xerces_c.l.cpp-options) genf := $(xsd:.xsd=.hxx) $(xsd:.xsd=.ixx) $(xsd:.xsd=.cxx) gen := $(addprefix $(out_base)/,$(genf)) $(gen): xsd := $(out_root)/xsd/xsd -$(gen): xsd_options := --generate-ostream --generate-polymorphic \ +$(gen): xsd_options += --generate-ostream --generate-polymorphic \ --root-element root $(gen): $(out_root)/xsd/xsd -$(call include-dep,$(dep)) +$(call include-dep,$(dep),$(obj),$(gen)) # Convenience alias for default target. # @@ -75,7 +74,12 @@ endif $(call include,$(bld_root)/cxx/o-e.make) $(call include,$(bld_root)/cxx/cxx-o.make) $(call include,$(bld_root)/cxx/cxx-d.make) + +$(call include,$(bld_root)/cxx/standard.make) # cxx_standard +ifdef cxx_standard +$(gen): xsd_options += --std $(cxx_standard) $(call include,$(scf_root)/xsd/tree/xsd-cxx.make) +endif # Dependencies. diff --git a/xsd/tests/cxx/tree/prefix/driver.cxx b/xsd/tests/cxx/tree/prefix/driver.cxx index 3ce9832..244f815 100644 --- a/xsd/tests/cxx/tree/prefix/driver.cxx +++ b/xsd/tests/cxx/tree/prefix/driver.cxx @@ -1,12 +1,11 @@ // file : tests/cxx/tree/prefix/driver.cxx -// author : Boris Kolpackov -// copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2006-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file // Test automatic prefix assignment. // -#include // std::auto_ptr +#include // std::auto_ptr/unique_ptr #include #include "test.hxx" @@ -25,7 +24,7 @@ main (int argc, char* argv[]) try { - auto_ptr r (root (argv[1])); + XSD_AUTO_PTR r (root (argv[1])); root (std::cout, *r); } catch (xml_schema::exception const& e) diff --git a/xsd/tests/cxx/tree/prefix/makefile b/xsd/tests/cxx/tree/prefix/makefile index 3317161..688111e 100644 --- a/xsd/tests/cxx/tree/prefix/makefile +++ b/xsd/tests/cxx/tree/prefix/makefile @@ -1,6 +1,5 @@ # file : tests/cxx/tree/prefix/makefile -# author : Boris Kolpackov -# copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +# copyright : Copyright (c) 2006-2014 Code Synthesis Tools CC # license : GNU GPL v2 + exceptions; see accompanying LICENSE file include $(dir $(lastword $(MAKEFILE_LIST)))../../../../build/bootstrap.make @@ -27,18 +26,18 @@ $(call import,\ # $(driver): $(obj) $(xerces_c.l) -$(obj) $(dep): cpp_options := -I$(src_root)/libxsd +$(obj) $(dep): cpp_options := -I$(out_base) -I$(src_base) -I$(src_root)/libxsd $(obj) $(dep): $(xerces_c.l.cpp-options) genf := $(xsd:.xsd=.hxx) $(xsd:.xsd=.ixx) $(xsd:.xsd=.cxx) gen := $(addprefix $(out_base)/,$(genf)) $(gen): xsd := $(out_root)/xsd/xsd -$(gen): xsd_options := --generate-serialization --generate-polymorphic \ ---polymorphic-type foo\\\#base --root-element root +$(gen): xsd_options += --generate-serialization --generate-polymorphic \ +--polymorphic-type foo\#base --root-element root $(gen): $(out_root)/xsd/xsd -$(call include-dep,$(dep)) +$(call include-dep,$(dep),$(obj),$(gen)) # Convenience alias for default target. # @@ -75,7 +74,12 @@ endif $(call include,$(bld_root)/cxx/o-e.make) $(call include,$(bld_root)/cxx/cxx-o.make) $(call include,$(bld_root)/cxx/cxx-d.make) + +$(call include,$(bld_root)/cxx/standard.make) # cxx_standard +ifdef cxx_standard +$(gen): xsd_options += --std $(cxx_standard) $(call include,$(scf_root)/xsd/tree/xsd-cxx.make) +endif # Dependencies. diff --git a/xsd/tests/cxx/tree/prefix/output b/xsd/tests/cxx/tree/prefix/output index 4f40f49..9801a23 100644 --- a/xsd/tests/cxx/tree/prefix/output +++ b/xsd/tests/cxx/tree/prefix/output @@ -1,22 +1,18 @@ - 123 - 1 2 - 1 2 - diff --git a/xsd/tests/cxx/tree/test-template/driver.cxx b/xsd/tests/cxx/tree/test-template/driver.cxx index f36cc10..f28e501 100644 --- a/xsd/tests/cxx/tree/test-template/driver.cxx +++ b/xsd/tests/cxx/tree/test-template/driver.cxx @@ -1,12 +1,11 @@ // file : tests/cxx/tree/test-template/driver.cxx -// author : Boris Kolpackov -// copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2006-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file // Insert test description here. // -#include // std::auto_ptr +#include // std::auto_ptr/unique_ptr #include #include "test.hxx" @@ -25,7 +24,7 @@ main (int argc, char* argv[]) try { - auto_ptr r (root (argv[1])); + XSD_AUTO_PTR r (root (argv[1])); cout << *r << endl; } diff --git a/xsd/tests/cxx/tree/test-template/makefile b/xsd/tests/cxx/tree/test-template/makefile index f94665a..32af96b 100644 --- a/xsd/tests/cxx/tree/test-template/makefile +++ b/xsd/tests/cxx/tree/test-template/makefile @@ -1,6 +1,5 @@ # file : tests/cxx/tree/test-template/makefile -# author : Boris Kolpackov -# copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +# copyright : Copyright (c) 2006-2014 Code Synthesis Tools CC # license : GNU GPL v2 + exceptions; see accompanying LICENSE file include $(dir $(lastword $(MAKEFILE_LIST)))../../../../build/bootstrap.make @@ -27,17 +26,17 @@ $(call import,\ # $(driver): $(obj) $(xerces_c.l) -$(obj) $(dep): cpp_options := -I$(src_root)/libxsd +$(obj) $(dep): cpp_options := -I$(out_base) -I$(src_base) -I$(src_root)/libxsd $(obj) $(dep): $(xerces_c.l.cpp-options) genf := $(xsd:.xsd=.hxx) $(xsd:.xsd=.ixx) $(xsd:.xsd=.cxx) gen := $(addprefix $(out_base)/,$(genf)) $(gen): xsd := $(out_root)/xsd/xsd -$(gen): xsd_options := --generate-ostream +$(gen): xsd_options += --generate-ostream $(gen): $(out_root)/xsd/xsd -$(call include-dep,$(dep)) +$(call include-dep,$(dep),$(obj),$(gen)) # Convenience alias for default target. # @@ -74,7 +73,12 @@ endif $(call include,$(bld_root)/cxx/o-e.make) $(call include,$(bld_root)/cxx/cxx-o.make) $(call include,$(bld_root)/cxx/cxx-d.make) + +$(call include,$(bld_root)/cxx/standard.make) # cxx_standard +ifdef cxx_standard +$(gen): xsd_options += --std $(cxx_standard) $(call include,$(scf_root)/xsd/tree/xsd-cxx.make) +endif # Dependencies. diff --git a/xsd/tests/cxx/tree/types-only/driver.cxx b/xsd/tests/cxx/tree/types-only/driver.cxx index b0caf72..8ba7500 100644 --- a/xsd/tests/cxx/tree/types-only/driver.cxx +++ b/xsd/tests/cxx/tree/types-only/driver.cxx @@ -1,13 +1,11 @@ // file : tests/cxx/tree/types-only/driver.cxx -// author : Boris Kolpackov -// copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2006-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file // Test that code generated without parsing and serialization functions // still compiles. // -#include // std::auto_ptr #include #include "test.hxx" diff --git a/xsd/tests/cxx/tree/types-only/makefile b/xsd/tests/cxx/tree/types-only/makefile index 972de5a..25520a4 100644 --- a/xsd/tests/cxx/tree/types-only/makefile +++ b/xsd/tests/cxx/tree/types-only/makefile @@ -1,6 +1,5 @@ # file : tests/cxx/tree/types-only/makefile -# author : Boris Kolpackov -# copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +# copyright : Copyright (c) 2006-2014 Code Synthesis Tools CC # license : GNU GPL v2 + exceptions; see accompanying LICENSE file include $(dir $(lastword $(MAKEFILE_LIST)))../../../../build/bootstrap.make @@ -27,17 +26,17 @@ $(call import,\ # $(driver): $(obj) $(xerces_c.l) -$(obj) $(dep): cpp_options := -I$(src_root)/libxsd +$(obj) $(dep): cpp_options := -I$(out_base) -I$(src_base) -I$(src_root)/libxsd $(obj) $(dep): $(xerces_c.l.cpp-options) genf := $(xsd:.xsd=.hxx) $(xsd:.xsd=.ixx) $(xsd:.xsd=.cxx) gen := $(addprefix $(out_base)/,$(genf)) $(gen): xsd := $(out_root)/xsd/xsd -$(gen): xsd_options := --suppress-parsing +$(gen): xsd_options += --suppress-parsing $(gen): $(out_root)/xsd/xsd -$(call include-dep,$(dep)) +$(call include-dep,$(dep),$(obj),$(gen)) # Convenience alias for default target. # @@ -74,7 +73,12 @@ endif $(call include,$(bld_root)/cxx/o-e.make) $(call include,$(bld_root)/cxx/cxx-o.make) $(call include,$(bld_root)/cxx/cxx-d.make) + +$(call include,$(bld_root)/cxx/standard.make) # cxx_standard +ifdef cxx_standard +$(gen): xsd_options += --std $(cxx_standard) $(call include,$(scf_root)/xsd/tree/xsd-cxx.make) +endif # Dependencies. diff --git a/xsd/tests/cxx/tree/union/ctor/driver.cxx b/xsd/tests/cxx/tree/union/ctor/driver.cxx index 0aa22ab..14a8565 100644 --- a/xsd/tests/cxx/tree/union/ctor/driver.cxx +++ b/xsd/tests/cxx/tree/union/ctor/driver.cxx @@ -1,6 +1,5 @@ // file : tests/cxx/tree/union/ctor/driver.cxx -// author : Boris Kolpackov -// copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2006-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file // Test union constructors. diff --git a/xsd/tests/cxx/tree/union/ctor/makefile b/xsd/tests/cxx/tree/union/ctor/makefile index 234ee45..1edd762 100644 --- a/xsd/tests/cxx/tree/union/ctor/makefile +++ b/xsd/tests/cxx/tree/union/ctor/makefile @@ -1,6 +1,5 @@ # file : tests/cxx/tree/union/ctor/makefile -# author : Boris Kolpackov -# copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +# copyright : Copyright (c) 2006-2014 Code Synthesis Tools CC # license : GNU GPL v2 + exceptions; see accompanying LICENSE file include $(dir $(lastword $(MAKEFILE_LIST)))../../../../../build/bootstrap.make @@ -27,18 +26,18 @@ $(call import,\ # $(driver): $(obj) $(xerces_c.l) -$(obj) $(dep): cpp_options := -I$(src_root)/libxsd +$(obj) $(dep): cpp_options := -I$(out_base) -I$(src_base) -I$(src_root)/libxsd $(obj) $(dep): $(xerces_c.l.cpp-options) genf := $(xsd:.xsd=.hxx) $(xsd:.xsd=.ixx) $(xsd:.xsd=.cxx) gen := $(addprefix $(out_base)/,$(genf)) $(gen): xsd := $(out_root)/xsd/xsd -$(gen): xsd_options := --generate-default-ctor --generate-from-base-ctor \ +$(gen): xsd_options += --generate-default-ctor --generate-from-base-ctor \ --generate-doxygen $(gen): $(out_root)/xsd/xsd -$(call include-dep,$(dep)) +$(call include-dep,$(dep),$(obj),$(gen)) # Convenience alias for default target. # @@ -75,7 +74,12 @@ endif $(call include,$(bld_root)/cxx/o-e.make) $(call include,$(bld_root)/cxx/cxx-o.make) $(call include,$(bld_root)/cxx/cxx-d.make) + +$(call include,$(bld_root)/cxx/standard.make) # cxx_standard +ifdef cxx_standard +$(gen): xsd_options += --std $(cxx_standard) $(call include,$(scf_root)/xsd/tree/xsd-cxx.make) +endif # Dependencies. diff --git a/xsd/tests/cxx/tree/union/makefile b/xsd/tests/cxx/tree/union/makefile index 5d61aa7..59abec6 100644 --- a/xsd/tests/cxx/tree/union/makefile +++ b/xsd/tests/cxx/tree/union/makefile @@ -1,6 +1,5 @@ # file : tests/cxx/tree/union/makefile -# author : Boris Kolpackov -# copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +# copyright : Copyright (c) 2006-2014 Code Synthesis Tools CC # license : GNU GPL v2 + exceptions; see accompanying LICENSE file include $(dir $(lastword $(MAKEFILE_LIST)))../../../../build/bootstrap.make diff --git a/xsd/tests/cxx/tree/wildcard/driver.cxx b/xsd/tests/cxx/tree/wildcard/driver.cxx index 5bd8229..e2db827 100644 --- a/xsd/tests/cxx/tree/wildcard/driver.cxx +++ b/xsd/tests/cxx/tree/wildcard/driver.cxx @@ -1,18 +1,20 @@ // file : tests/cxx/tree/wildcard/driver.cxx -// author : Boris Kolpackov -// copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2006-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file // Test wildcard (any & anyAttribute) mapping. // -#include // std::auto_ptr +#include // std::auto_ptr/unique_ptr #include #include -#include +#include +#include + +#include "test.hxx" // Get XSD_CXX11 defined. -#include "test.hxx" +#include using namespace std; using namespace test; @@ -170,7 +172,7 @@ main (int argc, char* argv[]) // Test parsing // - auto_ptr r (root (argv[1])); + XSD_AUTO_PTR r (root (argv[1])); print (*r); // Test serialization. @@ -187,7 +189,7 @@ main (int argc, char* argv[]) // cout << iostr.str () << endl // << endl; - auto_ptr copy (root (iostr, argv[1])); + XSD_AUTO_PTR copy (root (iostr, argv[1])); assert (*copy == *r); print (*copy); diff --git a/xsd/tests/cxx/tree/wildcard/makefile b/xsd/tests/cxx/tree/wildcard/makefile index b7b114f..b86c34a 100644 --- a/xsd/tests/cxx/tree/wildcard/makefile +++ b/xsd/tests/cxx/tree/wildcard/makefile @@ -1,6 +1,5 @@ # file : tests/cxx/tree/wildcard/makefile -# author : Boris Kolpackov -# copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +# copyright : Copyright (c) 2006-2014 Code Synthesis Tools CC # license : GNU GPL v2 + exceptions; see accompanying LICENSE file include $(dir $(lastword $(MAKEFILE_LIST)))../../../../build/bootstrap.make @@ -27,18 +26,18 @@ $(call import,\ # $(driver): $(obj) $(xerces_c.l) -$(obj) $(dep): cpp_options := -I$(src_root)/libxsd +$(obj) $(dep): cpp_options := -I$(out_base) -I$(src_base) -I$(src_root)/libxsd $(obj) $(dep): $(xerces_c.l.cpp-options) genf := $(xsd:.xsd=.hxx) $(xsd:.xsd=.ixx) $(xsd:.xsd=.cxx) gen := $(addprefix $(out_base)/,$(genf)) $(gen): xsd := $(out_root)/xsd/xsd -$(gen): xsd_options := --generate-wildcard --generate-default-ctor \ +$(gen): xsd_options += --generate-wildcard --generate-default-ctor \ --generate-from-base-ctor --generate-serialization --generate-comparison $(gen): $(out_root)/xsd/xsd -$(call include-dep,$(dep)) +$(call include-dep,$(dep),$(obj),$(gen)) # Convenience alias for default target. # @@ -75,7 +74,12 @@ endif $(call include,$(bld_root)/cxx/o-e.make) $(call include,$(bld_root)/cxx/cxx-o.make) $(call include,$(bld_root)/cxx/cxx-d.make) + +$(call include,$(bld_root)/cxx/standard.make) # cxx_standard +ifdef cxx_standard +$(gen): xsd_options += --std $(cxx_standard) $(call include,$(scf_root)/xsd/tree/xsd-cxx.make) +endif # Dependencies. diff --git a/xsd/tests/makefile b/xsd/tests/makefile index 435bb3a..661571b 100644 --- a/xsd/tests/makefile +++ b/xsd/tests/makefile @@ -1,6 +1,5 @@ # file : tests/makefile -# author : Boris Kolpackov -# copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +# copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC # license : GNU GPL v2 + exceptions; see accompanying LICENSE file include $(dir $(lastword $(MAKEFILE_LIST)))../build/bootstrap.make diff --git a/xsd/version b/xsd/version index 15a2799..fcdb2e1 100644 --- a/xsd/version +++ b/xsd/version @@ -1 +1 @@ -3.3.0 +4.0.0 diff --git a/xsd/xsd/cxx/elements.cxx b/xsd/xsd/cxx/elements.cxx index d2600dc..dfa2f38 100644 --- a/xsd/xsd/cxx/elements.cxx +++ b/xsd/xsd/cxx/elements.cxx @@ -1,16 +1,14 @@ // file : xsd/cxx/elements.cxx -// author : Boris Kolpackov -// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file #include -#include - #include // std::toupper #include #include #include +#include #include using std::wcerr; @@ -28,7 +26,7 @@ namespace CXX namespace { - WideChar const* keywords[] = { + wchar_t const* keywords[] = { L"NULL", L"and", L"asm", @@ -114,55 +112,47 @@ namespace CXX Context (std::wostream& o, SemanticGraph::Schema& root, SemanticGraph::Path const& path, - StringLiteralMap const* string_literal_map_, - NarrowString const& char_type__, - NarrowString const& char_encoding__, - Boolean include_with_brackets__, - NarrowString const& include_prefix__, - NarrowString const& esymbol, - Containers::Vector const& nsm, - Containers::Vector const& nsr, - Boolean trace_namespace_regex_, - Containers::Vector const& ir, - Boolean trace_include_regex_, - Boolean inline_, - Containers::Vector const& reserved_name) + options_type const& ops, + StringLiteralMap const* string_literal_map_) : os (o), schema_root (root), schema_path (schema_path_), + options (ops), + std (ops.std ()), char_type (char_type_), char_encoding (char_encoding_), L (L_), string_type (string_type_), + auto_ptr (auto_ptr_), string_literal_map (string_literal_map_), - include_with_brackets (include_with_brackets_), - include_prefix (include_prefix_), type_exp (type_exp_), inst_exp (inst_exp_), inl (inl_), ns_mapping_cache (ns_mapping_cache_), schema_path_ (path), xs_ns_ (0), - char_type_ (char_type__), - char_encoding_ (char_encoding__), + char_type_ (ops.char_type ()), + char_encoding_ (ops.char_encoding ()), L_ (char_type == L"wchar_t" ? L"L" : L""), - include_with_brackets_ (include_with_brackets__), - include_prefix_ (include_prefix__), - type_exp_ (esymbol ? esymbol + " " : esymbol), - inst_exp_ (esymbol ? esymbol + "\n" : esymbol), - inl_ (inline_ ? L"inline\n" : L""), + inl_ (ops.generate_inline () ? L"inline\n" : L""), cxx_id_expr_ (L"^(::)?([a-zA-Z_]\\w*)(::[a-zA-Z_]\\w*)*$"), cxx_id_expr (cxx_id_expr_), - trace_namespace_regex (trace_namespace_regex_), urn_mapping_ (L"#^urn.*:([a-zA-Z_].*)$#$1#"), urn_mapping (urn_mapping_), nsr_mapping (nsr_mapping_), nsm_mapping (nsm_mapping_), include_mapping (include_mapping_), - trace_include_regex (trace_include_regex_), reserved_name_map (reserved_name_map_), keyword_set (keyword_set_) { + // Export symbol. + // + { + String es (ops.export_symbol ()); + type_exp_ = es ? es + L" " : es; + inst_exp_ = es ? es + L"\n" : es; + } + // Resolve and cache XML Schema namespace. // { @@ -196,6 +186,12 @@ namespace CXX else string_type_ = L"::std::basic_string< " + char_type + L" >"; + // Automatic pointer type. + // + auto_ptr_ = std >= cxx_version::cxx11 + ? "::std::unique_ptr" + : "::std::auto_ptr"; + // Default encoding. // if (!char_encoding) @@ -209,28 +205,28 @@ namespace CXX // Default mapping. // nsr_mapping_.push_back ( - Regex (L"#^.* (.*?/)??"L"(([a-zA-Z_]\\w*)(/[a-zA-Z_]\\w*)*)/?$#$2#")); + Regex (L"#^.* (.*?/)??" L"(([a-zA-Z_]\\w*)(/[a-zA-Z_]\\w*)*)/?$#$2#")); nsr_mapping_.push_back ( Regex (L"#^.* http://www\\.w3\\.org/2001/XMLSchema$#xml_schema#")); // Custom regex mapping. // - for (Containers::Vector::ConstIterator - i (nsr.begin ()), e (nsr.end ()); i != e; ++i) + for (NarrowStrings::const_iterator i (ops.namespace_regex ().begin ()), + e (ops.namespace_regex ().end ()); i != e; ++i) { - nsr_mapping_.push_back (Regex (*i)); + nsr_mapping_.push_back (Regex (String (*i))); } // Custom direct mapping. // - for (Containers::Vector::ConstIterator - i (nsm.begin ()), e (nsm.end ()); i != e; ++i) + for (NarrowStrings::const_iterator i (ops.namespace_map ().begin ()), + e (ops.namespace_map ().end ()); i != e; ++i) { String s (*i); // Split the string in two parts at the last '='. // - Size pos (s.rfind ('=')); + size_t pos (s.rfind ('=')); if (pos == String::npos) throw InvalidNamespaceMapping (s, "delimiter ('=') not found"); @@ -248,22 +244,22 @@ namespace CXX // Include path regex // - for (Containers::Vector::ConstIterator - i (ir.begin ()), e (ir.end ()); i != e; ++i) + for (NarrowStrings::const_iterator i (ops.include_regex ().begin ()), + e (ops.include_regex ().end ()); i != e; ++i) { - include_mapping_.push_back (Regex (*i)); + include_mapping_.push_back (Regex (String (*i))); } // Reserved names. // - for (Containers::Vector::ConstIterator - i (reserved_name.begin ()), e (reserved_name.end ()); i != e; ++i) + for (NarrowStrings::const_iterator i (ops.reserved_name ().begin ()), + e (ops.reserved_name ().end ()); i != e; ++i) { String s (*i); // Split the string in two parts at '='. // - Size pos (s.find ('=')); + size_t pos (s.find ('=')); if (pos == String::npos) reserved_name_map_[s] = L""; @@ -273,7 +269,7 @@ namespace CXX // Populate the keyword set. // - for (Size i (0); i < sizeof (keywords) / sizeof (char*); ++i) + for (size_t i (0); i < sizeof (keywords) / sizeof (char*); ++i) keyword_set_.insert (keywords[i]); } @@ -287,7 +283,7 @@ namespace CXX using SemanticGraph::Sources; String tmp; - MapMapping::ConstIterator i (nsm_mapping.find (ns.name ())); + MapMapping::const_iterator i (nsm_mapping.find (ns.name ())); if (i != nsm_mapping.end ()) { @@ -317,20 +313,18 @@ namespace CXX if (!path.empty ()) { + path.normalize (); + // Try to use the portable representation of the path. If that // fails, fall back to the native representation. // try { - pair = path.string (); + pair = path.posix_string (); } catch (SemanticGraph::InvalidPath const&) { -#if !defined(BOOST_FILESYSTEM_VERSION) || BOOST_FILESYSTEM_VERSION == 2 - pair = path.native_file_string (); -#else pair = path.string (); -#endif } } @@ -338,7 +332,7 @@ namespace CXX // Check cache first // - MappingCache::ConstIterator i (ns_mapping_cache.find (pair)); + MappingCache::const_iterator i (ns_mapping_cache.find (pair)); if (i != ns_mapping_cache.end ()) { @@ -346,32 +340,34 @@ namespace CXX } else { - if (trace_namespace_regex) + bool trace (options.namespace_regex_trace ()); + + if (trace) wcerr << "namespace: '" << pair << "'" << endl; - Boolean found (false); + bool found (false); Regex colon (L"#/#::#"); - for (RegexMapping::ConstReverseIterator e (nsr_mapping.rbegin ()); + for (RegexMapping::const_reverse_iterator e (nsr_mapping.rbegin ()); e != nsr_mapping.rend (); ++e) { - if (trace_namespace_regex) - wcerr << "try: '" << e->pattern () << "' : "; + if (trace) + wcerr << "try: '" << e->regex () << "' : "; if (e->match (pair)) { - tmp = e->merge (pair); - tmp = colon.merge (tmp); // replace `/' with `::' + tmp = e->replace (pair); + tmp = colon.replace (tmp); // replace `/' with `::' // Check the result. // found = cxx_id_expr.match (tmp); - if (trace_namespace_regex) + if (trace) wcerr << "'" << tmp << "' : "; } - if (trace_namespace_regex) + if (trace) wcerr << (found ? '+' : '-') << endl; if (found) @@ -392,7 +388,7 @@ namespace CXX } else { - tmp = colon.merge (n); // replace `/' with `::' + tmp = colon.replace (n); // replace `/' with `::' if (!cxx_id_expr.match (tmp)) { @@ -401,8 +397,8 @@ namespace CXX if (urn_mapping.match (n)) { Regex filter (L"#[.:-]#_#"); - tmp = urn_mapping.merge (n); - tmp = filter.merge (tmp); + tmp = urn_mapping.replace (n); + tmp = filter.replace (tmp); if (!cxx_id_expr.match (tmp)) throw NoNamespaceMapping ( @@ -496,7 +492,7 @@ namespace CXX } String Context:: - fq_name (SemanticGraph::Nameable& n, Char const* name_key) + fq_name (SemanticGraph::Nameable& n, char const* name_key) { using namespace SemanticGraph; @@ -548,17 +544,17 @@ namespace CXX escape (String const& name) { String r; - Size n (name.size ()); + size_t n (name.size ()); // In most common cases we will have that many chars. // r.reserve (n); - for (Size i (0); i < n; ++i) + for (size_t i (0); i < n; ++i) { - Boolean first (i == 0); + bool first (i == 0); - UnsignedLong u (unicode_char (name, i)); // May advance i. + unsigned int u (unicode_char (name, i)); // May advance i. if (first) { @@ -574,7 +570,7 @@ namespace CXX u == '_')) r.push_back ('_'); else - r.push_back (static_cast (u)); + r.push_back (static_cast (u)); } if (r.empty ()) @@ -582,7 +578,7 @@ namespace CXX // Custom reserved words. // - ReservedNameMap::ConstIterator i (reserved_name_map.find (r)); + ReservedNameMap::const_iterator i (reserved_name_map.find (r)); if (i != reserved_name_map.end ()) { @@ -618,14 +614,14 @@ namespace CXX // String - charlit (UnsignedLong u) + charlit (unsigned int u) { String r ("\\x"); - Boolean lead (true); + bool lead (true); - for (Long i (7); i >= 0; --i) + for (int i (7); i >= 0; --i) { - UnsignedLong x ((u >> (i * 4)) & 0x0F); + unsigned int x ((u >> (i * 4)) & 0x0F); if (lead) { @@ -645,7 +641,7 @@ namespace CXX strlit_ascii (String const& str) { String r; - Size n (str.size ()); + size_t n (str.size ()); // In most common cases we will have that many chars. // @@ -653,11 +649,11 @@ namespace CXX r += '"'; - Boolean escape (false); + bool escape (false); - for (Size i (0); i < n; ++i) + for (size_t i (0); i < n; ++i) { - UnsignedLong u (Context::unicode_char (str, i)); // May advance i. + unsigned int u (Context::unicode_char (str, i)); // May advance i. // [128 - ] - unrepresentable // 127 - \x7F @@ -738,7 +734,7 @@ namespace CXX } default: { - r += static_cast (u); + r += static_cast (u); break; } } @@ -756,7 +752,7 @@ namespace CXX return r; } - const UnsignedLong utf8_first_char_mask[5] = + const unsigned int utf8_first_char_mask[5] = { 0x00, 0x00, 0xC0, 0xE0, 0xF0 }; @@ -765,7 +761,7 @@ namespace CXX strlit_utf8 (String const& str) { String r; - Size n (str.size ()); + size_t n (str.size ()); // In most common cases we will have that many chars. // @@ -773,11 +769,11 @@ namespace CXX r += '"'; - Boolean escape (false); + bool escape (false); - for (Size i (0); i < n; ++i) + for (size_t i (0); i < n; ++i) { - UnsignedLong u (Context::unicode_char (str, i)); // May advance i. + unsigned int u (Context::unicode_char (str, i)); // May advance i. // [128 - ] - UTF-8 // 127 - \x7F @@ -858,15 +854,15 @@ namespace CXX } default: { - r += static_cast (u); + r += static_cast (u); break; } } } else { - UnsignedLong count; - UnsignedLong tmp[4]; + unsigned int count (0); + unsigned int tmp[4]; if (u < 0x800) count = 2; @@ -895,10 +891,13 @@ namespace CXX case 1: { tmp[0] = u | utf8_first_char_mask[count]; + break; } + default: + assert (false); } - for (UnsignedLong j (0); j < count; ++j) + for (unsigned int j (0); j < count; ++j) r += charlit (tmp[j]); escape = true; @@ -914,7 +913,7 @@ namespace CXX strlit_iso8859_1 (String const& str) { String r; - Size n (str.size ()); + size_t n (str.size ()); // In most common cases we will have that many chars. // @@ -922,11 +921,11 @@ namespace CXX r += '"'; - Boolean escape (false); + bool escape (false); - for (Size i (0); i < n; ++i) + for (size_t i (0); i < n; ++i) { - UnsignedLong u (Context::unicode_char (str, i)); // May advance i. + unsigned int u (Context::unicode_char (str, i)); // May advance i. // [256 - ] - unrepresentable // [127 - 255] - \xXX @@ -1007,7 +1006,7 @@ namespace CXX } default: { - r += static_cast (u); + r += static_cast (u); break; } } @@ -1034,7 +1033,7 @@ namespace CXX strlit_utf32 (String const& str) { String r; - Size n (str.size ()); + size_t n (str.size ()); // In most common cases we will have that many chars. // @@ -1042,11 +1041,11 @@ namespace CXX r += L"L\""; - Boolean escape (false); + bool escape (false); - for (Size i (0); i < n; ++i) + for (size_t i (0); i < n; ++i) { - UnsignedLong u (Context::unicode_char (str, i)); // May advance i. + unsigned int u (Context::unicode_char (str, i)); // May advance i. // [128 - ] - \xUUUUUUUU // 127 - \x7F @@ -1105,9 +1104,10 @@ namespace CXX { if (escape) { - // Close and open the string so there are no clashes. + // Close and open the string so there are no clashes. C++11 + // requires a space between " and L. // - r += L"\"L\""; + r += L"\" L\""; escape = false; } @@ -1125,7 +1125,7 @@ namespace CXX } default: { - r += static_cast (u); + r += static_cast (u); break; } } @@ -1148,7 +1148,7 @@ namespace CXX // First see if we have a custom mapping. // assert (string_literal_map != 0); - StringLiteralMap::ConstIterator i (string_literal_map->find (str)); + StringLiteralMap::const_iterator i (string_literal_map->find (str)); if (i != string_literal_map->end ()) return i->second; @@ -1175,16 +1175,16 @@ namespace CXX { String r; - WideChar const* s (str.c_str ()); - Size size (str.size ()); + wchar_t const* s (str.c_str ()); + size_t size (str.size ()); // In most common cases we will have that many chars. // r.reserve (size); - for (WideChar const* p (s); p < s + size; ++p) + for (wchar_t const* p (s); p < s + size; ++p) { - UnsignedLong u (unicode_char (p)); // May advance p. + unsigned int u (unicode_char (p)); // May advance p. // We are going to treat \v, \f and \n as unrepresentable // here even though they can be present in C++ source code. @@ -1192,7 +1192,7 @@ namespace CXX if (u > 127 || (u < 32 && u != '\t')) r += L'?'; else - r += static_cast (u); + r += static_cast (u); } return r; @@ -1201,30 +1201,31 @@ namespace CXX String Context:: process_include_path (String const& name) const { - String path (include_prefix + name); + String path (String (options.include_prefix ()) + name); + bool trace (options.include_regex_trace ()); - if (trace_include_regex) + if (trace) wcerr << "include: '" << path << "'" << endl; String r; - Boolean found (false); + bool found (false); - for (RegexMapping::ConstReverseIterator e (include_mapping.rbegin ()); + for (RegexMapping::const_reverse_iterator e (include_mapping.rbegin ()); e != include_mapping.rend (); ++e) { - if (trace_include_regex) - wcerr << "try: '" << e->pattern () << "' : "; + if (trace) + wcerr << "try: '" << e->regex () << "' : "; if (e->match (path)) { - r = e->merge (path); + r = e->replace (path); found = true; - if (trace_include_regex) + if (trace) wcerr << "'" << r << "' : "; } - if (trace_include_regex) + if (trace) wcerr << (found ? '+' : '-') << endl; if (found) @@ -1236,8 +1237,8 @@ namespace CXX if (!r.empty () && r[0] != L'"' && r[0] != L'<') { - WideChar op (include_with_brackets ? L'<' : L'"'); - WideChar cl (include_with_brackets ? L'>' : L'"'); + wchar_t op (options.include_with_brackets () ? L'<' : L'"'); + wchar_t cl (options.include_with_brackets () ? L'>' : L'"'); r = op + r + cl; } @@ -1247,7 +1248,7 @@ namespace CXX // Namespace // - Void Namespace:: + void Namespace:: pre (Type& n) { String ns (ctx_.ns_name (n)); @@ -1281,7 +1282,7 @@ namespace CXX } while (true); } - Void Namespace:: + void Namespace:: post (Type& n) { String ns (ctx_.ns_name (n)); diff --git a/xsd/xsd/cxx/elements.hxx b/xsd/xsd/cxx/elements.hxx index 59938c5..4b36da9 100644 --- a/xsd/xsd/cxx/elements.hxx +++ b/xsd/xsd/cxx/elements.hxx @@ -1,31 +1,29 @@ // file : xsd/cxx/elements.hxx -// author : Boris Kolpackov -// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file #ifndef CXX_ELEMENTS_HXX #define CXX_ELEMENTS_HXX +#include +#include +#include #include -#include -#include -#include -#include - -#include +#include #include #include +#include #include + +#include #include namespace CXX { using std::endl; - typedef WideString String; - // On some platforms std::toupper can be something other than a // function with C++ linkage. @@ -39,7 +37,7 @@ namespace CXX struct UnrepresentableCharacter { - UnrepresentableCharacter (String const& str, Size pos) + UnrepresentableCharacter (String const& str, size_t pos) : str_ (str), pos_ (pos) { } @@ -50,7 +48,7 @@ namespace CXX return str_; } - Size + size_t position () const { return pos_; @@ -58,14 +56,14 @@ namespace CXX private: String str_; - Size pos_; + size_t pos_; }; struct NoNamespaceMapping { NoNamespaceMapping (SemanticGraph::Path const& file, - UnsignedLong line, - UnsignedLong column, + size_t line, + size_t column, String const& ns) : file_ (file), line_ (line), @@ -81,13 +79,13 @@ namespace CXX return file_; } - UnsignedLong + size_t line () const { return line_; } - UnsignedLong + size_t column () const { return column_; @@ -101,8 +99,8 @@ namespace CXX private: SemanticGraph::Path file_; - UnsignedLong line_; - UnsignedLong column_; + size_t line_; + size_t column_; String ns_; }; @@ -136,57 +134,47 @@ namespace CXX class Context { public: - typedef BackendElements::Regex::Pattern RegexPat; - typedef BackendElements::Regex::Expression Regex; - typedef Cult::Containers::Vector RegexMapping; - typedef Cult::Containers::Map MapMapping; - typedef Cult::Containers::Map MappingCache; + typedef cutl::re::wregex RegexPat; + typedef cutl::re::wregexsub Regex; + typedef std::vector RegexMapping; + typedef std::map MapMapping; + typedef std::map MappingCache; - typedef Cult::Containers::Map ReservedNameMap; - typedef Cult::Containers::Set KeywordSet; + typedef std::map ReservedNameMap; + typedef std::set KeywordSet; + + typedef CXX::options options_type; public: Context (std::wostream& o, SemanticGraph::Schema& root, SemanticGraph::Path const& path, - StringLiteralMap const* custom_literals_map, - NarrowString const& char_type__, - NarrowString const& char_encoding__, - Boolean include_with_brackets__, - NarrowString const& include_prefix__, - NarrowString const& esymbol, - Containers::Vector const& nsm, - Containers::Vector const& nsr, - Boolean trace_namespace_regex_, - Containers::Vector const& include_regex, - Boolean trace_include_regex_, - Boolean inline_, - Containers::Vector const& reserved_name); + options_type const& ops, + StringLiteralMap const* custom_literals_map); protected: Context (Context& c) : os (c.os), schema_root (c.schema_root), schema_path (c.schema_path), + options (c.options), + std (c.std), char_type (c.char_type), char_encoding (c.char_encoding), L (c.L), string_type (c.string_type), + auto_ptr (c.auto_ptr), string_literal_map (c.string_literal_map), - include_with_brackets (c.include_with_brackets), - include_prefix (c.include_prefix), type_exp (c.type_exp), inst_exp (c.inst_exp), inl (c.inl), ns_mapping_cache (c.ns_mapping_cache), xs_ns_ (c.xs_ns_), cxx_id_expr (c.cxx_id_expr), - trace_namespace_regex (c.trace_namespace_regex), urn_mapping (c.urn_mapping), nsr_mapping (c.nsr_mapping), nsm_mapping (c.nsm_mapping), include_mapping (c.include_mapping), - trace_include_regex (c.trace_include_regex), reserved_name_map (c.reserved_name_map), keyword_set (c.keyword_set) { @@ -196,25 +184,24 @@ namespace CXX : os (o), schema_root (c.schema_root), schema_path (c.schema_path), + options (c.options), + std (c.std), char_type (c.char_type), char_encoding (c.char_encoding), L (c.L), string_type (c.string_type), + auto_ptr (c.auto_ptr), string_literal_map (c.string_literal_map), - include_with_brackets (c.include_with_brackets), - include_prefix (c.include_prefix), type_exp (c.type_exp), inst_exp (c.inst_exp), inl (c.inl), ns_mapping_cache (c.ns_mapping_cache), xs_ns_ (c.xs_ns_), cxx_id_expr (c.cxx_id_expr), - trace_namespace_regex (c.trace_namespace_regex), urn_mapping (c.urn_mapping), nsr_mapping (c.nsr_mapping), nsm_mapping (c.nsm_mapping), include_mapping (c.include_mapping), - trace_include_regex (c.trace_include_regex), reserved_name_map (c.reserved_name_map), keyword_set (c.keyword_set) { @@ -232,11 +219,11 @@ namespace CXX // advanced by 1 if this Unicode character takes more than one // underlying character. // - static UnsignedLong - unicode_char (String const& str, Size& pos); + static unsigned int + unicode_char (String const& str, size_t& pos); - static UnsignedLong - unicode_char (WideChar const*& p); + static unsigned int + unicode_char (wchar_t const*& p); // Escape C++ keywords and illegal characters. // @@ -283,7 +270,7 @@ namespace CXX // Fully-qualified C++ name. // String - fq_name (SemanticGraph::Nameable& n, Char const* name_key = "name"); + fq_name (SemanticGraph::Nameable& n, char const* name_key = "name"); public: static SemanticGraph::Type& @@ -294,7 +281,7 @@ namespace CXX process_include_path (String const&) const; public: - static Boolean + static bool skip (SemanticGraph::Member& m) { // "Subsequent" local element. @@ -303,28 +290,28 @@ namespace CXX m.context ().count ("min") == 0; } - static UnsignedLong + static size_t min (SemanticGraph::Member const& m) { - return m.context ().get ("min"); + return m.context ().get ("min"); } - static UnsignedLong + static size_t min (SemanticGraph::Any const& a) { - return a.context ().get ("min"); + return a.context ().get ("min"); } - static UnsignedLong + static size_t max (SemanticGraph::Member const& m) { - return m.context ().get ("max"); + return m.context ().get ("max"); } - static UnsignedLong + static size_t max (SemanticGraph::Any const& a) { - return a.context ().get ("max"); + return a.context ().get ("max"); } public: @@ -342,14 +329,17 @@ namespace CXX SemanticGraph::Schema& schema_root; SemanticGraph::Path const& schema_path; + options_type const& options; + + cxx_version std; + String& char_type; String& char_encoding; String& L; // string literal prefix String& string_type; - StringLiteralMap const* string_literal_map; + String& auto_ptr; - Boolean& include_with_brackets; - String& include_prefix; + StringLiteralMap const* string_literal_map; String& type_exp; String& inst_exp; @@ -367,9 +357,7 @@ namespace CXX String char_encoding_; String L_; String string_type_; - - Boolean include_with_brackets_; - String include_prefix_; + String auto_ptr_; String type_exp_; String inst_exp_; @@ -378,7 +366,6 @@ namespace CXX private: RegexPat const cxx_id_expr_; RegexPat const& cxx_id_expr; - Boolean trace_namespace_regex; Regex urn_mapping_; RegexMapping nsr_mapping_; MapMapping nsm_mapping_; @@ -389,7 +376,6 @@ namespace CXX RegexMapping include_mapping_; RegexMapping const& include_mapping; - Boolean trace_include_regex; ReservedNameMap const& reserved_name_map; ReservedNameMap reserved_name_map_; @@ -398,16 +384,16 @@ namespace CXX KeywordSet keyword_set_; }; - inline UnsignedLong Context:: - unicode_char (String const& str, Size& pos) + inline unsigned int Context:: + unicode_char (String const& str, size_t& pos) { - if (sizeof (WideChar) == 4) + if (sizeof (wchar_t) == 4) { return str[pos]; } - else if (sizeof (WideChar) == 2) + else if (sizeof (wchar_t) == 2) { - WideChar x (str[pos]); + wchar_t x (str[pos]); if (x < 0xD800 || x > 0xDBFF) return x; @@ -418,16 +404,16 @@ namespace CXX return 0; } - inline UnsignedLong Context:: - unicode_char (WideChar const*& p) + inline unsigned int Context:: + unicode_char (wchar_t const*& p) { - if (sizeof (WideChar) == 4) + if (sizeof (wchar_t) == 4) { return *p; } - else if (sizeof (WideChar) == 2) + else if (sizeof (wchar_t) == 2) { - WideChar x (*p); + wchar_t x (*p); if (x < 0xD800 || x > 0xDBFF) return x; @@ -438,6 +424,21 @@ namespace CXX return 0; } + // Sources traverser that goes into each schema only once. + // + struct Sources: Traversal::Sources + { + virtual void + traverse (SemanticGraph::Sources& s) + { + if (schemas_.insert (&s.schema ()).second) + Traversal::Sources::traverse (s); + } + + private: + std::set schemas_; + }; + // Usual namespace mapping. // struct Namespace: Traversal::Namespace @@ -447,10 +448,10 @@ namespace CXX // First scope name if always empty (global scope). The last flag // signals the last scope. // - virtual Void - enter (Type&, String const& name, Boolean last) = 0; + virtual void + enter (Type&, String const& name, bool last) = 0; - virtual Void + virtual void leave () = 0; }; @@ -465,10 +466,10 @@ namespace CXX { } - virtual Void + virtual void pre (Type&); - virtual Void + virtual void post (Type&); private: @@ -476,36 +477,35 @@ namespace CXX ScopeTracker* st_; }; - // // template struct Has : X { - Has (Boolean& result) + Has (bool& result) : result_ (result) { } - virtual Void + virtual void traverse (typename X::Type&) { result_ = true; } private: - Boolean& result_; + bool& result_; }; // Checks if scope 'Y' names any of 'X' // template - Boolean + bool has (Y& y) { using SemanticGraph::Scope; - Boolean result (false); + bool result (false); Has t (result); for (Scope::NamesIterator i (y.names_begin ()), e (y.names_end ()); @@ -518,12 +518,12 @@ namespace CXX // Checks if the compositor has any particle of 'X' // template - Boolean + bool has_particle (SemanticGraph::Compositor& y) { using SemanticGraph::Compositor; - Boolean result (false); + bool result (false); Has t (result); for (Compositor::ContainsIterator i (y.contains_begin ()), @@ -543,7 +543,7 @@ namespace CXX // Specialization for Complex // template - Boolean + bool has_particle (SemanticGraph::Complex& c) { return c.contains_compositor_p () && @@ -562,61 +562,61 @@ namespace CXX Traversal::Fundamental::Id, Traversal::Fundamental::IdRef { - virtual Void + virtual void fundamental_type (SemanticGraph::Fundamental::Type& t) = 0; - virtual Void + virtual void fundamental_template (SemanticGraph::Fundamental::Type& t) = 0; - virtual Void + virtual void traverse (SemanticGraph::Fundamental::Type& t) { fundamental_type (t); } - virtual Void + virtual void traverse (SemanticGraph::Fundamental::String& t) { fundamental_template (t); } - virtual Void + virtual void traverse (SemanticGraph::Fundamental::NormalizedString& t) { fundamental_template (t); } - virtual Void + virtual void traverse (SemanticGraph::Fundamental::Token& t) { fundamental_template (t); } - virtual Void + virtual void traverse (SemanticGraph::Fundamental::Name& t) { fundamental_template (t); } - virtual Void + virtual void traverse (SemanticGraph::Fundamental::NameToken& t) { fundamental_template (t); } - virtual Void + virtual void traverse (SemanticGraph::Fundamental::NCName& t) { fundamental_template (t); } - virtual Void + virtual void traverse (SemanticGraph::Fundamental::Id& t) { fundamental_template (t); } - virtual Void + virtual void traverse (SemanticGraph::Fundamental::IdRef& t) { fundamental_template (t); diff --git a/xsd/xsd/cxx/literal-map.cxx b/xsd/xsd/cxx/literal-map.cxx index c531b5e..24bfc52 100644 --- a/xsd/xsd/cxx/literal-map.cxx +++ b/xsd/xsd/cxx/literal-map.cxx @@ -1,6 +1,5 @@ // file : xsd/cxx/literal-map.cxx -// author : Boris Kolpackov -// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file #include // std::auto_ptr @@ -9,7 +8,6 @@ #include #include -#include #include @@ -45,7 +43,7 @@ namespace CXX locator_ = l; } - virtual Void + virtual void startElement (const XMLCh* const, const XMLCh* const lname, const XMLCh* const, @@ -81,7 +79,7 @@ namespace CXX } } - virtual Void + virtual void endElement (const XMLCh* const, const XMLCh* const lname, const XMLCh* const) @@ -115,13 +113,8 @@ namespace CXX state_ = s_entry; } -#if _XERCES_VERSION >= 30000 - virtual Void + virtual void characters (const XMLCh* const s, const XMLSize_t length) -#else - virtual Void - characters (const XMLCh* const s, const unsigned int length) -#endif { String str (XML::transcode (s, length)); @@ -131,9 +124,9 @@ namespace CXX lit_ += str; else { - for (Size i (0); i < str.size (); ++i) + for (size_t i (0); i < str.size (); ++i) { - WideChar c (str[i]); + wchar_t c (str[i]); if (c != 0x20 && c != 0x0A && c != 0x0D && c != 0x09) { @@ -149,44 +142,37 @@ namespace CXX // enum Severity {s_warning, s_error, s_fatal}; - virtual Void + virtual void warning (const SAXParseException& e) { handle (e, s_warning); } - virtual Void + virtual void error (const SAXParseException& e) { handle (e, s_error); } - virtual Void + virtual void fatalError (const SAXParseException& e) { handle (e, s_fatal); } - virtual Void + virtual void resetErrors () { } - Void + void handle (const SAXParseException& e, Severity s) { - wcerr << file_ << ":"; - -#if _XERCES_VERSION >= 30000 - wcerr << e.getLineNumber () << ":" << e.getColumnNumber () << ": "; -#else - XMLSSize_t l (e.getLineNumber ()); - XMLSSize_t c (e.getColumnNumber ()); - wcerr << (l == -1 ? 0 : l) << ":" << (c == -1 ? 0 : c) << ": "; -#endif - String msg (XML::transcode (e.getMessage ())); - wcerr << (s == s_warning ? "warning: " : "error: ") << msg << endl; + + wcerr << file_ << ":" + << e.getLineNumber () << ":" << e.getColumnNumber () << ": " + << (s == s_warning ? "warning: " : "error: ") << msg << endl; if (s != s_warning) throw Failed (); @@ -195,37 +181,17 @@ namespace CXX size_t line () const { - size_t r (0); - - if (locator_ != 0) - { -#if _XERCES_VERSION >= 30000 - r = static_cast (locator_->getLineNumber ()); -#else - XMLSSize_t l (locator_->getLineNumber ()); - r = l == -1 ? 0 : static_cast (l); -#endif - } - - return r; + return locator_ != 0 + ? static_cast (locator_->getLineNumber ()) + : 0; } size_t col () const { - size_t r (0); - - if (locator_ != 0) - { -#if _XERCES_VERSION >= 30000 - r = static_cast (locator_->getColumnNumber ()); -#else - XMLSSize_t c (locator_->getColumnNumber ()); - r = c == -1 ? 0 : static_cast (c); -#endif - } - - return r; + return locator_ != 0 + ? static_cast (locator_->getColumnNumber ()) + : 0; } private: @@ -243,8 +209,8 @@ namespace CXX String file_; StringLiteralMap& map_; - Boolean str_seen_; - Boolean lit_seen_; + bool str_seen_; + bool lit_seen_; String str_; String lit_; diff --git a/xsd/xsd/cxx/literal-map.hxx b/xsd/xsd/cxx/literal-map.hxx index 6edeb00..987a531 100644 --- a/xsd/xsd/cxx/literal-map.hxx +++ b/xsd/xsd/cxx/literal-map.hxx @@ -1,20 +1,17 @@ // file : xsd/cxx/literal-map.hxx -// author : Boris Kolpackov -// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file #ifndef CXX_LITERAL_MAP_HXX #define CXX_LITERAL_MAP_HXX -#include -#include +#include + +#include namespace CXX { - using namespace Cult; - typedef WideString String; - - typedef Cult::Containers::Map StringLiteralMap; + typedef std::map StringLiteralMap; bool read_literal_map (NarrowString const& file, StringLiteralMap& map); diff --git a/xsd/xsd/cxx/option-types.cxx b/xsd/xsd/cxx/option-types.cxx new file mode 100644 index 0000000..78424f0 --- /dev/null +++ b/xsd/xsd/cxx/option-types.cxx @@ -0,0 +1,48 @@ +// file : xsd/cxx/option-types.cxx +// copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#include +#include + +#include + +using namespace std; + +namespace CXX +{ + // + // cxx_version + // + + static const char* cxx_version_[] = + { + "c++98", + "c++11" + }; + + string cxx_version:: + string () const + { + return cxx_version_[v_]; + } + + istream& + operator>> (istream& is, cxx_version& v) + { + string s; + is >> s; + + if (!is.fail ()) + { + if (s == "c++98") + v = cxx_version::cxx98; + else if (s == "c++11") + v = cxx_version::cxx11; + else + is.setstate (istream::failbit); + } + + return is; + } +} diff --git a/xsd/xsd/cxx/option-types.hxx b/xsd/xsd/cxx/option-types.hxx new file mode 100644 index 0000000..b2377ba --- /dev/null +++ b/xsd/xsd/cxx/option-types.hxx @@ -0,0 +1,35 @@ +// file : xsd/cxx/option-types.hxx +// copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef XSD_OPTION_TYPES_HXX +#define XSD_OPTION_TYPES_HXX + +#include +#include + +namespace CXX +{ + struct cxx_version + { + enum value + { + cxx98, + cxx11 + }; + + cxx_version (value v = value (0)) : v_ (v) {} + operator value () const {return v_;} + + std::string + string () const; + + private: + value v_; + }; + + std::istream& + operator>> (std::istream&, cxx_version&); +} + +#endif // XSD_OPTION_TYPES_HXX diff --git a/xsd/xsd/cxx/options.cli b/xsd/xsd/cxx/options.cli new file mode 100644 index 0000000..8133b25 --- /dev/null +++ b/xsd/xsd/cxx/options.cli @@ -0,0 +1,551 @@ +// file : xsd/cxx/options.cli +// copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +include ; // std::size_t + +include ; // NarrowString, NarrowStrings + +include ; + +include ; + +namespace CXX +{ + class options: ::options = 0 + { + // Language. + // + cxx_version --std = cxx_version::cxx98 + { + "", + "Specify the C++ standard that the generated code should conform to. + Valid values are \cb{c++98} (default) and \cb{c++11}. + + The C++ standard affects various aspects of the generated code that + are discussed in more detail in various mapping-specific + documentation. Overall, when C++11 is selected, the generated + code relies on the move semantics and uses \cb{std::unique_ptr} + instead of deprecated \cb{std::auto_ptr}. + + When the C++11 mode is selected, you normally don't need to + perform any extra steps other than enable C++11 in your C++ + compiler, if required. The XSD compiler will automatically + add the necessary macro defines to the generated header files + that will switch the header-only XSD runtime library (\cb{libxsd}) + to the C++11 mode. However, if you include any of the XSD runtime + headers directly in your application (normally you just include + the generated headers), then you will need to define the + \cb{XSD_CXX11} macro for your entire project." + }; + + // Character type and encoding. + // + NarrowString --char-type = "char" + { + "", + "Generate code using the provided character instead of the + default \cb{char}. Valid values are \cb{char} and \cb{wchar_t}." + }; + + NarrowString --char-encoding + { + "", + "Specify the character encoding that should be used in the generated + code. Valid values for the \cb{char} character type are \cb{utf8} + (default), \cb{iso8859-1}, \cb{lcp} (Xerces-C++ local code page), + and \cb{custom}. If you pass \cb{custom} as the value then you will + need to include the transcoder implementation header for your + encoding at the beginning of the generated header files (see the + \cb{--hxx-prologue} option). + + For the \cb{wchar_t} character type the only valid value is \cb{auto} + and the encoding is automatically selected between UTF-16 and + UTF-32/UCS-4, depending on the \cb{wchar_t} type size." + }; + + // Output options. + // + NarrowString --output-dir + { + "", + "Write generated files to instead of the current directory." + }; + + bool --generate-inline + { + "Generate simple functions inline. This option triggers creation of + the inline file." + }; + + // Extern XML Schema. + // + bool --generate-xml-schema + { + "Generate a C++ header file as if the schema being compiled defines the + XML Schema namespace. For the C++/Tree mapping, the resulting file will + contain definitions for all XML Schema built-in types. For the + C++/Parser mapping, the resulting file will contain definitions for + all the parser skeletons and implementations corresponding to the + XML Schema built-in types. + + The schema file provided to the compiler need not exist and is only + used to derive the name of the resulting header file. Use the + \cb{--extern-xml-schema} option to include this file in the + generated files for other schemas." + }; + + NarrowString --extern-xml-schema + { + "", + "Include a header file derived from instead of generating the + XML Schema namespace mapping inline. The provided file need not + exist and is only used to derive the name of the included header + file. Use the \cb{--generate-xml-schema} option to generate this + header file." + }; + + // Namespace mapping. + // + NarrowStrings --namespace-map + { + "=", + "Map XML Schema namespace to C++ namespace . Repeat + this option to specify mapping for more than one XML Schema namespace. + For example, the following option: + + \cb{--namespace-map http://example.com/foo/bar=foo::bar} + + Will map the \cb{http://example.com/foo/bar} XML Schema namespace to + the \cb{foo::bar} C++ namespace." + }; + + NarrowStrings --namespace-regex + { + "", + "Add to the list of regular expressions used to translate XML + Schema namespace names to C++ namespace names. is a Perl-like + regular expression in the form + \c{\b{/}\i{pattern}\b{/}\i{replacement}\b{/}}. Any character can be + used as a delimiter instead of \cb{/}. Escaping of the delimiter + character in \ci{pattern} or \ci{replacement} is not supported. + + All the regular expressions are pushed into a stack with the last + specified expression considered first. The first match that + succeeds is used. Regular expressions are applied to a string in + the form + + \c{\i{filename} \i{namespace}} + + For example, if you have file \cb{hello.xsd} with namespace + \cb{http://example.com/hello} and you run \cb{xsd} on this file, + then the string in question will be: + + \cb{hello.xsd. http://example.com/hello} + + For the built-in XML Schema namespace the string is: + + \cb{XMLSchema.xsd http://www.w3.org/2001/XMLSchema} + + The following three steps are performed for each regular expression + until the match is found: + + 1. The expression is applied and if the result is empty the next + expression is considered. + + 2. All \cb{/} are replaced with \cb{::}. + + 3. The result is verified to be a valid C++ scope name (e.g., + \cb{foo::bar}). If this test succeeds, the result is used as a + C++ namespace name. + + As an example, the following expression maps XML Schema namespaces + in the form \cb{http://example.com/foo/bar} to C++ namespaces in the + form \cb{foo::bar}: + + \cb{%.* http://example.com/(.+)%$1%} + + See also the REGEX AND SHELL QUOTING section below." + }; + + bool --namespace-regex-trace + { + "Trace the process of applying regular expressions specified with the + \cb{--namespace-regex} option. Use this option to find out why your + regular expressions don't do what you expected them to do." + }; + + // Reserved names. + // + NarrowStrings --reserved-name + { + "[=]", + "Add name to the list of names that should not be used as + identifiers. The name can optionally be followed by \cb{=} and the + replacement name that should be used instead. All the C++ keywords + are already in this list." + }; + + // Include options. + // + bool --include-with-brackets + { + "Use angle brackets (<>) instead of quotes (\"\") in generated + \cb{#include} directives." + }; + + NarrowString --include-prefix + { + "", + "Add to generated \cb{#include} directive paths. + + For example, if you had the following import element in your schema + + \cb{} + + and compiled this fragment with \cb{--include-prefix schemas/}, then + the include directive in the generated code would be: + + \cb{#include \"schemas/base.hxx\"}" + }; + + NarrowStrings --include-regex + { + "", + "Add to the list of regular expressions used to transform + \cb{#include} directive paths. is a Perl-like regular + expression in the form \c{\b{/}\i{pattern}\b{/}\i{replacement}\b{/}}. + Any character can be used as a delimiter instead of \cb{/}. Escaping + of the delimiter character in \ci{pattern} or \ci{replacement} is not + supported. + + All the regular expressions are pushed into a stack with the last + specified expression considered first. The first match that succeeds + is used. + + As an example, the following expression transforms paths in the form + \cb{schemas/foo/bar} to paths in the form \cb{generated/foo/bar}: + + \cb{%schemas/(.+)%generated/$1%} + + See also the REGEX AND SHELL QUOTING section below." + }; + + bool --include-regex-trace + { + "Trace the process of applying regular expressions specified with the + \cb{--include-regex} option. Use this option to find out why your + regular expressions don't do what you expected them to do." + }; + + NarrowString --guard-prefix + { + "", + "Add to generated header inclusion guards. The prefix is + transformed to upper case and characters that are illegal in a + preprocessor macro name are replaced with underscores. If this + option is not specified then the directory part of the input schema + file is used as a prefix." + }; + + // File suffixes. + // + NarrowString --hxx-suffix = ".hxx" + { + "", + "Use the provided instead of the default \cb{.hxx} to + construct the name of the header file. Note that this suffix is also + used to construct names of header files corresponding to + included/imported schemas." + }; + + NarrowString --ixx-suffix = ".ixx" + { + "", + "Use the provided instead of the default \cb{.ixx} to + construct the name of the inline file." + }; + + NarrowString --cxx-suffix = ".cxx" + { + "", + "Use the provided instead of the default \cb{.cxx} to + construct the name of the source file." + }; + + NarrowString --fwd-suffix = "-fwd.hxx" + { + "", + "Use the provided instead of the default \cb{-fwd.hxx} to + construct the name of the forward declaration file." + }; + + NarrowString --hxx-regex + { + "", + "Use the provided expression to construct the name of the header file. + is a Perl-like regular expression in the form + \c{\b{/}\i{pattern}\b{/}\i{replacement}\b{/}}. + Note that this expression is also used to construct names of header + files corresponding to included/imported schemas. See also the REGEX + AND SHELL QUOTING section below." + }; + + NarrowString --ixx-regex + { + "", + "Use the provided expression to construct the name of the inline file. + is a Perl-like regular expression in the form + \c{\b{/}\i{pattern}\b{/}\i{replacement}\b{/}}. See also the REGEX AND + SHELL QUOTING section below." + }; + + NarrowString --cxx-regex + { + "", + "Use the provided expression to construct the name of the source file. + is a Perl-like regular expression in the form + \c{\b{/}\i{pattern}\b{/}\i{replacement}\b{/}}. See also the REGEX AND + SHELL QUOTING section below." + }; + + NarrowString --fwd-regex + { + "", + "Use the provided expression to construct the name of the forward + declaration file. is a Perl-like regular expression in the + form \c{\b{/}\i{pattern}\b{/}\i{replacement}\b{/}}. See also the REGEX + AND SHELL QUOTING section below." + }; + + // Prologues/epilogues. + // + NarrowStrings --hxx-prologue + { + "", + "Insert at the beginning of the header file." + }; + + NarrowStrings --ixx-prologue + { + "", + "Insert at the beginning of the inline file." + }; + + NarrowStrings --cxx-prologue + { + "", + "Insert at the beginning of the source file." + }; + + NarrowStrings --fwd-prologue + { + "", + "Insert at the beginning of the forward declaration file." + }; + + NarrowStrings --prologue + { + "", + "Insert at the beginning of each generated file for which + there is no file-specific prologue." + }; + + NarrowStrings --hxx-epilogue + { + "", + "Insert at the end of the header file." + }; + + NarrowStrings --ixx-epilogue + { + "", + "Insert at the end of the inline file." + }; + + NarrowStrings --cxx-epilogue + { + "", + "Insert at the end of the source file." + }; + + NarrowStrings --fwd-epilogue + { + "", + "Insert at the end of the forward declaration file." + }; + + NarrowStrings --epilogue + { + "", + "Insert at the end of each generated file for which there + is no file-specific epilogue." + }; + + NarrowString --hxx-prologue-file + { + "", + "Insert the content of the at the beginning of the header file." + }; + + NarrowString --ixx-prologue-file + { + "", + "Insert the content of the at the beginning of the inline file." + }; + + NarrowString --cxx-prologue-file + { + "", + "Insert the content of the at the beginning of the source file." + }; + + NarrowString --fwd-prologue-file + { + "", + "Insert the content of the at the beginning of the forward + declaration file." + }; + + NarrowString --prologue-file + { + "", + "Insert the content of the at the beginning of each generated + file for which there is no file-specific prologue file." + }; + + NarrowString --hxx-epilogue-file + { + "", + "Insert the content of the at the end of the header file." + }; + + NarrowString --ixx-epilogue-file + { + "", + "Insert the content of the at the end of the inline file." + }; + + NarrowString --cxx-epilogue-file + { + "", + "Insert the content of the at the end of the source file." + }; + + NarrowString --fwd-epilogue-file + { + "", + "Insert the content of the at the end of the forward declaration + file." + }; + + NarrowString --epilogue-file + { + "", + "Insert the content of the at the end of each generated file + for which there is no file-specific epilogue file." + }; + + // Export options. + // + NarrowString --export-symbol + { + "", + "Insert in places where DLL export/import control statements + (\cb{__declspec(dllexport/dllimport)}) are necessary." + }; + + bool --export-xml-schema + { + "Export/import types in the XML Schema namespace using the export + symbol provided with the \cb{--export-symbol} option. The + \cb{XSD_NO_EXPORT} macro can be used to omit this code during C++ + compilation, which may be useful if you would like to use the same + generated code across multiple platforms." + }; + + bool --export-maps + { + "Export polymorphism support maps from a Win32 DLL into which this + generated code is placed. This is necessary when your type hierarchy + is split across several DLLs since otherwise each DLL will have its + own set of maps. In this situation the generated code for the DLL + which contains base types and/or substitution group heads should be + compiled with this option and the generated code for all other DLLs + should be compiled with \cb{--import-maps}. This option is only valid + together with \cb{--generate-polymorphic}. The \cb{XSD_NO_EXPORT} + macro can be used to omit this code during C++ compilation, which may + be useful if you would like to use the same generated code across + multiple platforms." + }; + + bool --import-maps + { + "Import polymorphism support maps to a Win32 DLL or executable into + which this generated code is linked. See the \cb{--export-maps} + option documentation for details. This options is only valid together + with \cb{--generate-polymorphic}. The \cb{XSD_NO_EXPORT} macro can be + used to omit this code during C++ compilation, which may be useful if + you would like to use the same generated code across multiple + platforms." + }; + + // Make dependency generation. + // + bool --generate-dep + { + "Generate \cb{make} dependency information. This option triggers the + creation of the \cb{.d} file containing the dependencies of the + generated files on the main schema file as well as all the schema + files that it includes/imports, transitively. This dependency file + is then normally included into the main \cb{makefile} to implement + automatic dependency tracking. + + Note also that automatic dependency generation is not supported in + the file-per-type mode (\cb{--file-per-type}). In this case, all + the generated files are produced with a single compiler invocation + and depend on all the schemas. As a result, it is easier to establish + such a dependency manually, perhaps with the help of the + \cb{--file-list*} options." + }; + + bool --generate-dep-only + { + "Generate \cb{make} dependency information only." + }; + + bool --dep-phony + { + "Generate phony targets for included/imported schema files, causing + each to depend on nothing. Such dummy rules work around \cb{make} + errors caused by the removal of schema files without also updating + the dependency file to match." + }; + + NarrowStrings --dep-target + { + "", + "Change the target of the dependency rule. By default it contains + all the generated C++ files as well as the dependency file itself, + without any directory prefixes. If you require multiple targets, + then you can specify them as a single, space-separated argument or + you can repeat this option multiple times." + }; + + NarrowString --dep-suffix = ".d" + { + "", + "Use the provided instead of the default \cb{.d} to + construct the name of the dependency file." + }; + + NarrowString --dep-regex + { + "", + "Use the provided expression to construct the name of the dependency + file. is a Perl-like regular expression in the form + \c{\b{/}\i{pattern}\b{/}\i{replacement}\b{/}}. See also the REGEX + AND SHELL QUOTING section below." + }; + }; +} diff --git a/xsd/xsd/cxx/options.cxx b/xsd/xsd/cxx/options.cxx new file mode 100644 index 0000000..1d2e8fd --- /dev/null +++ b/xsd/xsd/cxx/options.cxx @@ -0,0 +1,638 @@ +// This code was generated by CLI, a command line interface +// compiler for C++. +// + +// Begin prologue. +// +#include +// +// End prologue. + +#include + +#include +#include +#include +#include +#include +#include + +namespace cli +{ + template + struct parser + { + static void + parse (X& x, bool& xs, scanner& s) + { + std::string o (s.next ()); + + if (s.more ()) + { + std::string v (s.next ()); + std::istringstream is (v); + if (!(is >> x && is.eof ())) + throw invalid_value (o, v); + } + else + throw missing_value (o); + + xs = true; + } + }; + + template <> + struct parser + { + static void + parse (bool& x, scanner& s) + { + s.next (); + x = true; + } + }; + + template <> + struct parser + { + static void + parse (std::string& x, bool& xs, scanner& s) + { + const char* o (s.next ()); + + if (s.more ()) + x = s.next (); + else + throw missing_value (o); + + xs = true; + } + }; + + template + struct parser > + { + static void + parse (std::vector& c, bool& xs, scanner& s) + { + X x; + bool dummy; + parser::parse (x, dummy, s); + c.push_back (x); + xs = true; + } + }; + + template + struct parser > + { + static void + parse (std::set& c, bool& xs, scanner& s) + { + X x; + bool dummy; + parser::parse (x, dummy, s); + c.insert (x); + xs = true; + } + }; + + template + struct parser > + { + static void + parse (std::map& m, bool& xs, scanner& s) + { + std::string o (s.next ()); + + if (s.more ()) + { + std::string ov (s.next ()); + std::string::size_type p = ov.find ('='); + + if (p == std::string::npos) + { + K k = K (); + + if (!ov.empty ()) + { + std::istringstream ks (ov); + + if (!(ks >> k && ks.eof ())) + throw invalid_value (o, ov); + } + + m[k] = V (); + } + else + { + K k = K (); + V v = V (); + std::string kstr (ov, 0, p); + std::string vstr (ov, p + 1); + + if (!kstr.empty ()) + { + std::istringstream ks (kstr); + + if (!(ks >> k && ks.eof ())) + throw invalid_value (o, ov); + } + + if (!vstr.empty ()) + { + std::istringstream vs (vstr); + + if (!(vs >> v && vs.eof ())) + throw invalid_value (o, ov); + } + + m[k] = v; + } + } + else + throw missing_value (o); + + xs = true; + } + }; + + template + void + thunk (X& x, scanner& s) + { + parser::parse (x.*M, s); + } + + template + void + thunk (X& x, scanner& s) + { + parser::parse (x.*M, x.*S, s); + } +} + +#include +#include + +namespace CXX +{ + // options + // + + options:: + options () + : std_ (cxx_version::cxx98), + std_specified_ (false), + char_type_ ("char"), + char_type_specified_ (false), + char_encoding_ (), + char_encoding_specified_ (false), + output_dir_ (), + output_dir_specified_ (false), + generate_inline_ (), + generate_xml_schema_ (), + extern_xml_schema_ (), + extern_xml_schema_specified_ (false), + namespace_map_ (), + namespace_map_specified_ (false), + namespace_regex_ (), + namespace_regex_specified_ (false), + namespace_regex_trace_ (), + reserved_name_ (), + reserved_name_specified_ (false), + include_with_brackets_ (), + include_prefix_ (), + include_prefix_specified_ (false), + include_regex_ (), + include_regex_specified_ (false), + include_regex_trace_ (), + guard_prefix_ (), + guard_prefix_specified_ (false), + hxx_suffix_ (".hxx"), + hxx_suffix_specified_ (false), + ixx_suffix_ (".ixx"), + ixx_suffix_specified_ (false), + cxx_suffix_ (".cxx"), + cxx_suffix_specified_ (false), + fwd_suffix_ ("-fwd.hxx"), + fwd_suffix_specified_ (false), + hxx_regex_ (), + hxx_regex_specified_ (false), + ixx_regex_ (), + ixx_regex_specified_ (false), + cxx_regex_ (), + cxx_regex_specified_ (false), + fwd_regex_ (), + fwd_regex_specified_ (false), + hxx_prologue_ (), + hxx_prologue_specified_ (false), + ixx_prologue_ (), + ixx_prologue_specified_ (false), + cxx_prologue_ (), + cxx_prologue_specified_ (false), + fwd_prologue_ (), + fwd_prologue_specified_ (false), + prologue_ (), + prologue_specified_ (false), + hxx_epilogue_ (), + hxx_epilogue_specified_ (false), + ixx_epilogue_ (), + ixx_epilogue_specified_ (false), + cxx_epilogue_ (), + cxx_epilogue_specified_ (false), + fwd_epilogue_ (), + fwd_epilogue_specified_ (false), + epilogue_ (), + epilogue_specified_ (false), + hxx_prologue_file_ (), + hxx_prologue_file_specified_ (false), + ixx_prologue_file_ (), + ixx_prologue_file_specified_ (false), + cxx_prologue_file_ (), + cxx_prologue_file_specified_ (false), + fwd_prologue_file_ (), + fwd_prologue_file_specified_ (false), + prologue_file_ (), + prologue_file_specified_ (false), + hxx_epilogue_file_ (), + hxx_epilogue_file_specified_ (false), + ixx_epilogue_file_ (), + ixx_epilogue_file_specified_ (false), + cxx_epilogue_file_ (), + cxx_epilogue_file_specified_ (false), + fwd_epilogue_file_ (), + fwd_epilogue_file_specified_ (false), + epilogue_file_ (), + epilogue_file_specified_ (false), + export_symbol_ (), + export_symbol_specified_ (false), + export_xml_schema_ (), + export_maps_ (), + import_maps_ (), + generate_dep_ (), + generate_dep_only_ (), + dep_phony_ (), + dep_target_ (), + dep_target_specified_ (false), + dep_suffix_ (".d"), + dep_suffix_specified_ (false), + dep_regex_ (), + dep_regex_specified_ (false) + { + } + + void options:: + print_usage (::std::wostream& os) + { + os << "--std Specify the C++ standard that the generated code" << ::std::endl + << " should conform to." << ::std::endl; + + os << "--char-type Generate code using the provided character " << ::std::endl + << " instead of the default 'char'." << ::std::endl; + + os << "--char-encoding Specify the character encoding that should be used" << ::std::endl + << " in the generated code." << ::std::endl; + + os << "--output-dir Write generated files to instead of the" << ::std::endl + << " current directory." << ::std::endl; + + os << "--generate-inline Generate simple functions inline." << ::std::endl; + + os << "--generate-xml-schema Generate a C++ header file as if the schema being" << ::std::endl + << " compiled defines the XML Schema namespace." << ::std::endl; + + os << "--extern-xml-schema Include a header file derived from instead" << ::std::endl + << " of generating the XML Schema namespace mapping" << ::std::endl + << " inline." << ::std::endl; + + os << "--namespace-map = Map XML Schema namespace to C++ namespace" << ::std::endl + << " ." << ::std::endl; + + os << "--namespace-regex Add to the list of regular expressions" << ::std::endl + << " used to translate XML Schema namespace names to" << ::std::endl + << " C++ namespace names." << ::std::endl; + + os << "--namespace-regex-trace Trace the process of applying regular expressions" << ::std::endl + << " specified with the '--namespace-regex' option." << ::std::endl; + + os << "--reserved-name [=] Add name to the list of names that should not" << ::std::endl + << " be used as identifiers." << ::std::endl; + + os << "--include-with-brackets Use angle brackets (<>) instead of quotes (\"\") in" << ::std::endl + << " generated '#include' directives." << ::std::endl; + + os << "--include-prefix Add to generated '#include' directive" << ::std::endl + << " paths." << ::std::endl; + + os << "--include-regex Add to the list of regular expressions" << ::std::endl + << " used to transform '#include' directive paths." << ::std::endl; + + os << "--include-regex-trace Trace the process of applying regular expressions" << ::std::endl + << " specified with the '--include-regex' option." << ::std::endl; + + os << "--guard-prefix Add to generated header inclusion guards." << ::std::endl; + + os << "--hxx-suffix Use the provided instead of the default" << ::std::endl + << " '.hxx' to construct the name of the header file." << ::std::endl; + + os << "--ixx-suffix Use the provided instead of the default" << ::std::endl + << " '.ixx' to construct the name of the inline file." << ::std::endl; + + os << "--cxx-suffix Use the provided instead of the default" << ::std::endl + << " '.cxx' to construct the name of the source file." << ::std::endl; + + os << "--fwd-suffix Use the provided instead of the default" << ::std::endl + << " '-fwd.hxx' to construct the name of the forward" << ::std::endl + << " declaration file." << ::std::endl; + + os << "--hxx-regex Use the provided expression to construct the name" << ::std::endl + << " of the header file." << ::std::endl; + + os << "--ixx-regex Use the provided expression to construct the name" << ::std::endl + << " of the inline file." << ::std::endl; + + os << "--cxx-regex Use the provided expression to construct the name" << ::std::endl + << " of the source file." << ::std::endl; + + os << "--fwd-regex Use the provided expression to construct the name" << ::std::endl + << " of the forward declaration file." << ::std::endl; + + os << "--hxx-prologue Insert at the beginning of the header file." << ::std::endl; + + os << "--ixx-prologue Insert at the beginning of the inline file." << ::std::endl; + + os << "--cxx-prologue Insert at the beginning of the source file." << ::std::endl; + + os << "--fwd-prologue Insert at the beginning of the forward" << ::std::endl + << " declaration file." << ::std::endl; + + os << "--prologue Insert at the beginning of each generated" << ::std::endl + << " file for which there is no file-specific prologue." << ::std::endl; + + os << "--hxx-epilogue Insert at the end of the header file." << ::std::endl; + + os << "--ixx-epilogue Insert at the end of the inline file." << ::std::endl; + + os << "--cxx-epilogue Insert at the end of the source file." << ::std::endl; + + os << "--fwd-epilogue Insert at the end of the forward" << ::std::endl + << " declaration file." << ::std::endl; + + os << "--epilogue Insert at the end of each generated file" << ::std::endl + << " for which there is no file-specific epilogue." << ::std::endl; + + os << "--hxx-prologue-file Insert the content of the at the beginning" << ::std::endl + << " of the header file." << ::std::endl; + + os << "--ixx-prologue-file Insert the content of the at the beginning" << ::std::endl + << " of the inline file." << ::std::endl; + + os << "--cxx-prologue-file Insert the content of the at the beginning" << ::std::endl + << " of the source file." << ::std::endl; + + os << "--fwd-prologue-file Insert the content of the at the beginning" << ::std::endl + << " of the forward declaration file." << ::std::endl; + + os << "--prologue-file Insert the content of the at the beginning" << ::std::endl + << " of each generated file for which there is no" << ::std::endl + << " file-specific prologue file." << ::std::endl; + + os << "--hxx-epilogue-file Insert the content of the at the end of the" << ::std::endl + << " header file." << ::std::endl; + + os << "--ixx-epilogue-file Insert the content of the at the end of the" << ::std::endl + << " inline file." << ::std::endl; + + os << "--cxx-epilogue-file Insert the content of the at the end of the" << ::std::endl + << " source file." << ::std::endl; + + os << "--fwd-epilogue-file Insert the content of the at the end of the" << ::std::endl + << " forward declaration file." << ::std::endl; + + os << "--epilogue-file Insert the content of the at the end of" << ::std::endl + << " each generated file for which there is no" << ::std::endl + << " file-specific epilogue file." << ::std::endl; + + os << "--export-symbol Insert in places where DLL export/import" << ::std::endl + << " control statements" << ::std::endl + << " ('__declspec(dllexport/dllimport)') are necessary." << ::std::endl; + + os << "--export-xml-schema Export/import types in the XML Schema namespace" << ::std::endl + << " using the export symbol provided with the" << ::std::endl + << " '--export-symbol' option." << ::std::endl; + + os << "--export-maps Export polymorphism support maps from a Win32 DLL" << ::std::endl + << " into which this generated code is placed." << ::std::endl; + + os << "--import-maps Import polymorphism support maps to a Win32 DLL or" << ::std::endl + << " executable into which this generated code is" << ::std::endl + << " linked." << ::std::endl; + + os << "--generate-dep Generate 'make' dependency information." << ::std::endl; + + os << "--generate-dep-only Generate 'make' dependency information only." << ::std::endl; + + os << "--dep-phony Generate phony targets for included/imported" << ::std::endl + << " schema files, causing each to depend on nothing." << ::std::endl; + + os << "--dep-target Change the target of the dependency rule." << ::std::endl; + + os << "--dep-suffix Use the provided instead of the default" << ::std::endl + << " '.d' to construct the name of the dependency file." << ::std::endl; + + os << "--dep-regex Use the provided expression to construct the name" << ::std::endl + << " of the dependency file." << ::std::endl; + } + + typedef + std::map + _cli_options_map; + + static _cli_options_map _cli_options_map_; + + struct _cli_options_map_init + { + _cli_options_map_init () + { + _cli_options_map_["--std"] = + &::cli::thunk< options, cxx_version, &options::std_, + &options::std_specified_ >; + _cli_options_map_["--char-type"] = + &::cli::thunk< options, NarrowString, &options::char_type_, + &options::char_type_specified_ >; + _cli_options_map_["--char-encoding"] = + &::cli::thunk< options, NarrowString, &options::char_encoding_, + &options::char_encoding_specified_ >; + _cli_options_map_["--output-dir"] = + &::cli::thunk< options, NarrowString, &options::output_dir_, + &options::output_dir_specified_ >; + _cli_options_map_["--generate-inline"] = + &::cli::thunk< options, bool, &options::generate_inline_ >; + _cli_options_map_["--generate-xml-schema"] = + &::cli::thunk< options, bool, &options::generate_xml_schema_ >; + _cli_options_map_["--extern-xml-schema"] = + &::cli::thunk< options, NarrowString, &options::extern_xml_schema_, + &options::extern_xml_schema_specified_ >; + _cli_options_map_["--namespace-map"] = + &::cli::thunk< options, NarrowStrings, &options::namespace_map_, + &options::namespace_map_specified_ >; + _cli_options_map_["--namespace-regex"] = + &::cli::thunk< options, NarrowStrings, &options::namespace_regex_, + &options::namespace_regex_specified_ >; + _cli_options_map_["--namespace-regex-trace"] = + &::cli::thunk< options, bool, &options::namespace_regex_trace_ >; + _cli_options_map_["--reserved-name"] = + &::cli::thunk< options, NarrowStrings, &options::reserved_name_, + &options::reserved_name_specified_ >; + _cli_options_map_["--include-with-brackets"] = + &::cli::thunk< options, bool, &options::include_with_brackets_ >; + _cli_options_map_["--include-prefix"] = + &::cli::thunk< options, NarrowString, &options::include_prefix_, + &options::include_prefix_specified_ >; + _cli_options_map_["--include-regex"] = + &::cli::thunk< options, NarrowStrings, &options::include_regex_, + &options::include_regex_specified_ >; + _cli_options_map_["--include-regex-trace"] = + &::cli::thunk< options, bool, &options::include_regex_trace_ >; + _cli_options_map_["--guard-prefix"] = + &::cli::thunk< options, NarrowString, &options::guard_prefix_, + &options::guard_prefix_specified_ >; + _cli_options_map_["--hxx-suffix"] = + &::cli::thunk< options, NarrowString, &options::hxx_suffix_, + &options::hxx_suffix_specified_ >; + _cli_options_map_["--ixx-suffix"] = + &::cli::thunk< options, NarrowString, &options::ixx_suffix_, + &options::ixx_suffix_specified_ >; + _cli_options_map_["--cxx-suffix"] = + &::cli::thunk< options, NarrowString, &options::cxx_suffix_, + &options::cxx_suffix_specified_ >; + _cli_options_map_["--fwd-suffix"] = + &::cli::thunk< options, NarrowString, &options::fwd_suffix_, + &options::fwd_suffix_specified_ >; + _cli_options_map_["--hxx-regex"] = + &::cli::thunk< options, NarrowString, &options::hxx_regex_, + &options::hxx_regex_specified_ >; + _cli_options_map_["--ixx-regex"] = + &::cli::thunk< options, NarrowString, &options::ixx_regex_, + &options::ixx_regex_specified_ >; + _cli_options_map_["--cxx-regex"] = + &::cli::thunk< options, NarrowString, &options::cxx_regex_, + &options::cxx_regex_specified_ >; + _cli_options_map_["--fwd-regex"] = + &::cli::thunk< options, NarrowString, &options::fwd_regex_, + &options::fwd_regex_specified_ >; + _cli_options_map_["--hxx-prologue"] = + &::cli::thunk< options, NarrowStrings, &options::hxx_prologue_, + &options::hxx_prologue_specified_ >; + _cli_options_map_["--ixx-prologue"] = + &::cli::thunk< options, NarrowStrings, &options::ixx_prologue_, + &options::ixx_prologue_specified_ >; + _cli_options_map_["--cxx-prologue"] = + &::cli::thunk< options, NarrowStrings, &options::cxx_prologue_, + &options::cxx_prologue_specified_ >; + _cli_options_map_["--fwd-prologue"] = + &::cli::thunk< options, NarrowStrings, &options::fwd_prologue_, + &options::fwd_prologue_specified_ >; + _cli_options_map_["--prologue"] = + &::cli::thunk< options, NarrowStrings, &options::prologue_, + &options::prologue_specified_ >; + _cli_options_map_["--hxx-epilogue"] = + &::cli::thunk< options, NarrowStrings, &options::hxx_epilogue_, + &options::hxx_epilogue_specified_ >; + _cli_options_map_["--ixx-epilogue"] = + &::cli::thunk< options, NarrowStrings, &options::ixx_epilogue_, + &options::ixx_epilogue_specified_ >; + _cli_options_map_["--cxx-epilogue"] = + &::cli::thunk< options, NarrowStrings, &options::cxx_epilogue_, + &options::cxx_epilogue_specified_ >; + _cli_options_map_["--fwd-epilogue"] = + &::cli::thunk< options, NarrowStrings, &options::fwd_epilogue_, + &options::fwd_epilogue_specified_ >; + _cli_options_map_["--epilogue"] = + &::cli::thunk< options, NarrowStrings, &options::epilogue_, + &options::epilogue_specified_ >; + _cli_options_map_["--hxx-prologue-file"] = + &::cli::thunk< options, NarrowString, &options::hxx_prologue_file_, + &options::hxx_prologue_file_specified_ >; + _cli_options_map_["--ixx-prologue-file"] = + &::cli::thunk< options, NarrowString, &options::ixx_prologue_file_, + &options::ixx_prologue_file_specified_ >; + _cli_options_map_["--cxx-prologue-file"] = + &::cli::thunk< options, NarrowString, &options::cxx_prologue_file_, + &options::cxx_prologue_file_specified_ >; + _cli_options_map_["--fwd-prologue-file"] = + &::cli::thunk< options, NarrowString, &options::fwd_prologue_file_, + &options::fwd_prologue_file_specified_ >; + _cli_options_map_["--prologue-file"] = + &::cli::thunk< options, NarrowString, &options::prologue_file_, + &options::prologue_file_specified_ >; + _cli_options_map_["--hxx-epilogue-file"] = + &::cli::thunk< options, NarrowString, &options::hxx_epilogue_file_, + &options::hxx_epilogue_file_specified_ >; + _cli_options_map_["--ixx-epilogue-file"] = + &::cli::thunk< options, NarrowString, &options::ixx_epilogue_file_, + &options::ixx_epilogue_file_specified_ >; + _cli_options_map_["--cxx-epilogue-file"] = + &::cli::thunk< options, NarrowString, &options::cxx_epilogue_file_, + &options::cxx_epilogue_file_specified_ >; + _cli_options_map_["--fwd-epilogue-file"] = + &::cli::thunk< options, NarrowString, &options::fwd_epilogue_file_, + &options::fwd_epilogue_file_specified_ >; + _cli_options_map_["--epilogue-file"] = + &::cli::thunk< options, NarrowString, &options::epilogue_file_, + &options::epilogue_file_specified_ >; + _cli_options_map_["--export-symbol"] = + &::cli::thunk< options, NarrowString, &options::export_symbol_, + &options::export_symbol_specified_ >; + _cli_options_map_["--export-xml-schema"] = + &::cli::thunk< options, bool, &options::export_xml_schema_ >; + _cli_options_map_["--export-maps"] = + &::cli::thunk< options, bool, &options::export_maps_ >; + _cli_options_map_["--import-maps"] = + &::cli::thunk< options, bool, &options::import_maps_ >; + _cli_options_map_["--generate-dep"] = + &::cli::thunk< options, bool, &options::generate_dep_ >; + _cli_options_map_["--generate-dep-only"] = + &::cli::thunk< options, bool, &options::generate_dep_only_ >; + _cli_options_map_["--dep-phony"] = + &::cli::thunk< options, bool, &options::dep_phony_ >; + _cli_options_map_["--dep-target"] = + &::cli::thunk< options, NarrowStrings, &options::dep_target_, + &options::dep_target_specified_ >; + _cli_options_map_["--dep-suffix"] = + &::cli::thunk< options, NarrowString, &options::dep_suffix_, + &options::dep_suffix_specified_ >; + _cli_options_map_["--dep-regex"] = + &::cli::thunk< options, NarrowString, &options::dep_regex_, + &options::dep_regex_specified_ >; + } + }; + + static _cli_options_map_init _cli_options_map_init_; + + bool options:: + _parse (const char* o, ::cli::scanner& s) + { + _cli_options_map::const_iterator i (_cli_options_map_.find (o)); + + if (i != _cli_options_map_.end ()) + { + (*(i->second)) (*this, s); + return true; + } + + // options base + // + if (::options::_parse (o, s)) + return true; + + return false; + } +} + +// Begin epilogue. +// +// +// End epilogue. + diff --git a/xsd/xsd/cxx/options.hxx b/xsd/xsd/cxx/options.hxx new file mode 100644 index 0000000..dea93a0 --- /dev/null +++ b/xsd/xsd/cxx/options.hxx @@ -0,0 +1,440 @@ +// This code was generated by CLI, a command line interface +// compiler for C++. +// + +#ifndef CXX_OPTIONS_HXX +#define CXX_OPTIONS_HXX + +// Begin prologue. +// +// +// End prologue. + +#include + +#include + +#include + +#include + +namespace CXX +{ + class options: public ::options + { + public: + // Option accessors. + // + const cxx_version& + std () const; + + bool + std_specified () const; + + const NarrowString& + char_type () const; + + bool + char_type_specified () const; + + const NarrowString& + char_encoding () const; + + bool + char_encoding_specified () const; + + const NarrowString& + output_dir () const; + + bool + output_dir_specified () const; + + const bool& + generate_inline () const; + + const bool& + generate_xml_schema () const; + + const NarrowString& + extern_xml_schema () const; + + bool + extern_xml_schema_specified () const; + + const NarrowStrings& + namespace_map () const; + + bool + namespace_map_specified () const; + + const NarrowStrings& + namespace_regex () const; + + bool + namespace_regex_specified () const; + + const bool& + namespace_regex_trace () const; + + const NarrowStrings& + reserved_name () const; + + bool + reserved_name_specified () const; + + const bool& + include_with_brackets () const; + + const NarrowString& + include_prefix () const; + + bool + include_prefix_specified () const; + + const NarrowStrings& + include_regex () const; + + bool + include_regex_specified () const; + + const bool& + include_regex_trace () const; + + const NarrowString& + guard_prefix () const; + + bool + guard_prefix_specified () const; + + const NarrowString& + hxx_suffix () const; + + bool + hxx_suffix_specified () const; + + const NarrowString& + ixx_suffix () const; + + bool + ixx_suffix_specified () const; + + const NarrowString& + cxx_suffix () const; + + bool + cxx_suffix_specified () const; + + const NarrowString& + fwd_suffix () const; + + bool + fwd_suffix_specified () const; + + const NarrowString& + hxx_regex () const; + + bool + hxx_regex_specified () const; + + const NarrowString& + ixx_regex () const; + + bool + ixx_regex_specified () const; + + const NarrowString& + cxx_regex () const; + + bool + cxx_regex_specified () const; + + const NarrowString& + fwd_regex () const; + + bool + fwd_regex_specified () const; + + const NarrowStrings& + hxx_prologue () const; + + bool + hxx_prologue_specified () const; + + const NarrowStrings& + ixx_prologue () const; + + bool + ixx_prologue_specified () const; + + const NarrowStrings& + cxx_prologue () const; + + bool + cxx_prologue_specified () const; + + const NarrowStrings& + fwd_prologue () const; + + bool + fwd_prologue_specified () const; + + const NarrowStrings& + prologue () const; + + bool + prologue_specified () const; + + const NarrowStrings& + hxx_epilogue () const; + + bool + hxx_epilogue_specified () const; + + const NarrowStrings& + ixx_epilogue () const; + + bool + ixx_epilogue_specified () const; + + const NarrowStrings& + cxx_epilogue () const; + + bool + cxx_epilogue_specified () const; + + const NarrowStrings& + fwd_epilogue () const; + + bool + fwd_epilogue_specified () const; + + const NarrowStrings& + epilogue () const; + + bool + epilogue_specified () const; + + const NarrowString& + hxx_prologue_file () const; + + bool + hxx_prologue_file_specified () const; + + const NarrowString& + ixx_prologue_file () const; + + bool + ixx_prologue_file_specified () const; + + const NarrowString& + cxx_prologue_file () const; + + bool + cxx_prologue_file_specified () const; + + const NarrowString& + fwd_prologue_file () const; + + bool + fwd_prologue_file_specified () const; + + const NarrowString& + prologue_file () const; + + bool + prologue_file_specified () const; + + const NarrowString& + hxx_epilogue_file () const; + + bool + hxx_epilogue_file_specified () const; + + const NarrowString& + ixx_epilogue_file () const; + + bool + ixx_epilogue_file_specified () const; + + const NarrowString& + cxx_epilogue_file () const; + + bool + cxx_epilogue_file_specified () const; + + const NarrowString& + fwd_epilogue_file () const; + + bool + fwd_epilogue_file_specified () const; + + const NarrowString& + epilogue_file () const; + + bool + epilogue_file_specified () const; + + const NarrowString& + export_symbol () const; + + bool + export_symbol_specified () const; + + const bool& + export_xml_schema () const; + + const bool& + export_maps () const; + + const bool& + import_maps () const; + + const bool& + generate_dep () const; + + const bool& + generate_dep_only () const; + + const bool& + dep_phony () const; + + const NarrowStrings& + dep_target () const; + + bool + dep_target_specified () const; + + const NarrowString& + dep_suffix () const; + + bool + dep_suffix_specified () const; + + const NarrowString& + dep_regex () const; + + bool + dep_regex_specified () const; + + // Print usage information. + // + static void + print_usage (::std::wostream&); + + // Implementation details. + // + protected: + options (); + + bool + _parse (const char*, ::cli::scanner&); + + public: + cxx_version std_; + bool std_specified_; + NarrowString char_type_; + bool char_type_specified_; + NarrowString char_encoding_; + bool char_encoding_specified_; + NarrowString output_dir_; + bool output_dir_specified_; + bool generate_inline_; + bool generate_xml_schema_; + NarrowString extern_xml_schema_; + bool extern_xml_schema_specified_; + NarrowStrings namespace_map_; + bool namespace_map_specified_; + NarrowStrings namespace_regex_; + bool namespace_regex_specified_; + bool namespace_regex_trace_; + NarrowStrings reserved_name_; + bool reserved_name_specified_; + bool include_with_brackets_; + NarrowString include_prefix_; + bool include_prefix_specified_; + NarrowStrings include_regex_; + bool include_regex_specified_; + bool include_regex_trace_; + NarrowString guard_prefix_; + bool guard_prefix_specified_; + NarrowString hxx_suffix_; + bool hxx_suffix_specified_; + NarrowString ixx_suffix_; + bool ixx_suffix_specified_; + NarrowString cxx_suffix_; + bool cxx_suffix_specified_; + NarrowString fwd_suffix_; + bool fwd_suffix_specified_; + NarrowString hxx_regex_; + bool hxx_regex_specified_; + NarrowString ixx_regex_; + bool ixx_regex_specified_; + NarrowString cxx_regex_; + bool cxx_regex_specified_; + NarrowString fwd_regex_; + bool fwd_regex_specified_; + NarrowStrings hxx_prologue_; + bool hxx_prologue_specified_; + NarrowStrings ixx_prologue_; + bool ixx_prologue_specified_; + NarrowStrings cxx_prologue_; + bool cxx_prologue_specified_; + NarrowStrings fwd_prologue_; + bool fwd_prologue_specified_; + NarrowStrings prologue_; + bool prologue_specified_; + NarrowStrings hxx_epilogue_; + bool hxx_epilogue_specified_; + NarrowStrings ixx_epilogue_; + bool ixx_epilogue_specified_; + NarrowStrings cxx_epilogue_; + bool cxx_epilogue_specified_; + NarrowStrings fwd_epilogue_; + bool fwd_epilogue_specified_; + NarrowStrings epilogue_; + bool epilogue_specified_; + NarrowString hxx_prologue_file_; + bool hxx_prologue_file_specified_; + NarrowString ixx_prologue_file_; + bool ixx_prologue_file_specified_; + NarrowString cxx_prologue_file_; + bool cxx_prologue_file_specified_; + NarrowString fwd_prologue_file_; + bool fwd_prologue_file_specified_; + NarrowString prologue_file_; + bool prologue_file_specified_; + NarrowString hxx_epilogue_file_; + bool hxx_epilogue_file_specified_; + NarrowString ixx_epilogue_file_; + bool ixx_epilogue_file_specified_; + NarrowString cxx_epilogue_file_; + bool cxx_epilogue_file_specified_; + NarrowString fwd_epilogue_file_; + bool fwd_epilogue_file_specified_; + NarrowString epilogue_file_; + bool epilogue_file_specified_; + NarrowString export_symbol_; + bool export_symbol_specified_; + bool export_xml_schema_; + bool export_maps_; + bool import_maps_; + bool generate_dep_; + bool generate_dep_only_; + bool dep_phony_; + NarrowStrings dep_target_; + bool dep_target_specified_; + NarrowString dep_suffix_; + bool dep_suffix_specified_; + NarrowString dep_regex_; + bool dep_regex_specified_; + }; +} + +#include + +// Begin epilogue. +// +// +// End epilogue. + +#endif // CXX_OPTIONS_HXX diff --git a/xsd/xsd/cxx/options.ixx b/xsd/xsd/cxx/options.ixx new file mode 100644 index 0000000..0a8cafa --- /dev/null +++ b/xsd/xsd/cxx/options.ixx @@ -0,0 +1,601 @@ +// This code was generated by CLI, a command line interface +// compiler for C++. +// + +// Begin prologue. +// +// +// End prologue. + +namespace CXX +{ + // options + // + + inline const cxx_version& options:: + std () const + { + return this->std_; + } + + inline bool options:: + std_specified () const + { + return this->std_specified_; + } + + inline const NarrowString& options:: + char_type () const + { + return this->char_type_; + } + + inline bool options:: + char_type_specified () const + { + return this->char_type_specified_; + } + + inline const NarrowString& options:: + char_encoding () const + { + return this->char_encoding_; + } + + inline bool options:: + char_encoding_specified () const + { + return this->char_encoding_specified_; + } + + inline const NarrowString& options:: + output_dir () const + { + return this->output_dir_; + } + + inline bool options:: + output_dir_specified () const + { + return this->output_dir_specified_; + } + + inline const bool& options:: + generate_inline () const + { + return this->generate_inline_; + } + + inline const bool& options:: + generate_xml_schema () const + { + return this->generate_xml_schema_; + } + + inline const NarrowString& options:: + extern_xml_schema () const + { + return this->extern_xml_schema_; + } + + inline bool options:: + extern_xml_schema_specified () const + { + return this->extern_xml_schema_specified_; + } + + inline const NarrowStrings& options:: + namespace_map () const + { + return this->namespace_map_; + } + + inline bool options:: + namespace_map_specified () const + { + return this->namespace_map_specified_; + } + + inline const NarrowStrings& options:: + namespace_regex () const + { + return this->namespace_regex_; + } + + inline bool options:: + namespace_regex_specified () const + { + return this->namespace_regex_specified_; + } + + inline const bool& options:: + namespace_regex_trace () const + { + return this->namespace_regex_trace_; + } + + inline const NarrowStrings& options:: + reserved_name () const + { + return this->reserved_name_; + } + + inline bool options:: + reserved_name_specified () const + { + return this->reserved_name_specified_; + } + + inline const bool& options:: + include_with_brackets () const + { + return this->include_with_brackets_; + } + + inline const NarrowString& options:: + include_prefix () const + { + return this->include_prefix_; + } + + inline bool options:: + include_prefix_specified () const + { + return this->include_prefix_specified_; + } + + inline const NarrowStrings& options:: + include_regex () const + { + return this->include_regex_; + } + + inline bool options:: + include_regex_specified () const + { + return this->include_regex_specified_; + } + + inline const bool& options:: + include_regex_trace () const + { + return this->include_regex_trace_; + } + + inline const NarrowString& options:: + guard_prefix () const + { + return this->guard_prefix_; + } + + inline bool options:: + guard_prefix_specified () const + { + return this->guard_prefix_specified_; + } + + inline const NarrowString& options:: + hxx_suffix () const + { + return this->hxx_suffix_; + } + + inline bool options:: + hxx_suffix_specified () const + { + return this->hxx_suffix_specified_; + } + + inline const NarrowString& options:: + ixx_suffix () const + { + return this->ixx_suffix_; + } + + inline bool options:: + ixx_suffix_specified () const + { + return this->ixx_suffix_specified_; + } + + inline const NarrowString& options:: + cxx_suffix () const + { + return this->cxx_suffix_; + } + + inline bool options:: + cxx_suffix_specified () const + { + return this->cxx_suffix_specified_; + } + + inline const NarrowString& options:: + fwd_suffix () const + { + return this->fwd_suffix_; + } + + inline bool options:: + fwd_suffix_specified () const + { + return this->fwd_suffix_specified_; + } + + inline const NarrowString& options:: + hxx_regex () const + { + return this->hxx_regex_; + } + + inline bool options:: + hxx_regex_specified () const + { + return this->hxx_regex_specified_; + } + + inline const NarrowString& options:: + ixx_regex () const + { + return this->ixx_regex_; + } + + inline bool options:: + ixx_regex_specified () const + { + return this->ixx_regex_specified_; + } + + inline const NarrowString& options:: + cxx_regex () const + { + return this->cxx_regex_; + } + + inline bool options:: + cxx_regex_specified () const + { + return this->cxx_regex_specified_; + } + + inline const NarrowString& options:: + fwd_regex () const + { + return this->fwd_regex_; + } + + inline bool options:: + fwd_regex_specified () const + { + return this->fwd_regex_specified_; + } + + inline const NarrowStrings& options:: + hxx_prologue () const + { + return this->hxx_prologue_; + } + + inline bool options:: + hxx_prologue_specified () const + { + return this->hxx_prologue_specified_; + } + + inline const NarrowStrings& options:: + ixx_prologue () const + { + return this->ixx_prologue_; + } + + inline bool options:: + ixx_prologue_specified () const + { + return this->ixx_prologue_specified_; + } + + inline const NarrowStrings& options:: + cxx_prologue () const + { + return this->cxx_prologue_; + } + + inline bool options:: + cxx_prologue_specified () const + { + return this->cxx_prologue_specified_; + } + + inline const NarrowStrings& options:: + fwd_prologue () const + { + return this->fwd_prologue_; + } + + inline bool options:: + fwd_prologue_specified () const + { + return this->fwd_prologue_specified_; + } + + inline const NarrowStrings& options:: + prologue () const + { + return this->prologue_; + } + + inline bool options:: + prologue_specified () const + { + return this->prologue_specified_; + } + + inline const NarrowStrings& options:: + hxx_epilogue () const + { + return this->hxx_epilogue_; + } + + inline bool options:: + hxx_epilogue_specified () const + { + return this->hxx_epilogue_specified_; + } + + inline const NarrowStrings& options:: + ixx_epilogue () const + { + return this->ixx_epilogue_; + } + + inline bool options:: + ixx_epilogue_specified () const + { + return this->ixx_epilogue_specified_; + } + + inline const NarrowStrings& options:: + cxx_epilogue () const + { + return this->cxx_epilogue_; + } + + inline bool options:: + cxx_epilogue_specified () const + { + return this->cxx_epilogue_specified_; + } + + inline const NarrowStrings& options:: + fwd_epilogue () const + { + return this->fwd_epilogue_; + } + + inline bool options:: + fwd_epilogue_specified () const + { + return this->fwd_epilogue_specified_; + } + + inline const NarrowStrings& options:: + epilogue () const + { + return this->epilogue_; + } + + inline bool options:: + epilogue_specified () const + { + return this->epilogue_specified_; + } + + inline const NarrowString& options:: + hxx_prologue_file () const + { + return this->hxx_prologue_file_; + } + + inline bool options:: + hxx_prologue_file_specified () const + { + return this->hxx_prologue_file_specified_; + } + + inline const NarrowString& options:: + ixx_prologue_file () const + { + return this->ixx_prologue_file_; + } + + inline bool options:: + ixx_prologue_file_specified () const + { + return this->ixx_prologue_file_specified_; + } + + inline const NarrowString& options:: + cxx_prologue_file () const + { + return this->cxx_prologue_file_; + } + + inline bool options:: + cxx_prologue_file_specified () const + { + return this->cxx_prologue_file_specified_; + } + + inline const NarrowString& options:: + fwd_prologue_file () const + { + return this->fwd_prologue_file_; + } + + inline bool options:: + fwd_prologue_file_specified () const + { + return this->fwd_prologue_file_specified_; + } + + inline const NarrowString& options:: + prologue_file () const + { + return this->prologue_file_; + } + + inline bool options:: + prologue_file_specified () const + { + return this->prologue_file_specified_; + } + + inline const NarrowString& options:: + hxx_epilogue_file () const + { + return this->hxx_epilogue_file_; + } + + inline bool options:: + hxx_epilogue_file_specified () const + { + return this->hxx_epilogue_file_specified_; + } + + inline const NarrowString& options:: + ixx_epilogue_file () const + { + return this->ixx_epilogue_file_; + } + + inline bool options:: + ixx_epilogue_file_specified () const + { + return this->ixx_epilogue_file_specified_; + } + + inline const NarrowString& options:: + cxx_epilogue_file () const + { + return this->cxx_epilogue_file_; + } + + inline bool options:: + cxx_epilogue_file_specified () const + { + return this->cxx_epilogue_file_specified_; + } + + inline const NarrowString& options:: + fwd_epilogue_file () const + { + return this->fwd_epilogue_file_; + } + + inline bool options:: + fwd_epilogue_file_specified () const + { + return this->fwd_epilogue_file_specified_; + } + + inline const NarrowString& options:: + epilogue_file () const + { + return this->epilogue_file_; + } + + inline bool options:: + epilogue_file_specified () const + { + return this->epilogue_file_specified_; + } + + inline const NarrowString& options:: + export_symbol () const + { + return this->export_symbol_; + } + + inline bool options:: + export_symbol_specified () const + { + return this->export_symbol_specified_; + } + + inline const bool& options:: + export_xml_schema () const + { + return this->export_xml_schema_; + } + + inline const bool& options:: + export_maps () const + { + return this->export_maps_; + } + + inline const bool& options:: + import_maps () const + { + return this->import_maps_; + } + + inline const bool& options:: + generate_dep () const + { + return this->generate_dep_; + } + + inline const bool& options:: + generate_dep_only () const + { + return this->generate_dep_only_; + } + + inline const bool& options:: + dep_phony () const + { + return this->dep_phony_; + } + + inline const NarrowStrings& options:: + dep_target () const + { + return this->dep_target_; + } + + inline bool options:: + dep_target_specified () const + { + return this->dep_target_specified_; + } + + inline const NarrowString& options:: + dep_suffix () const + { + return this->dep_suffix_; + } + + inline bool options:: + dep_suffix_specified () const + { + return this->dep_suffix_specified_; + } + + inline const NarrowString& options:: + dep_regex () const + { + return this->dep_regex_; + } + + inline bool options:: + dep_regex_specified () const + { + return this->dep_regex_specified_; + } +} + +// Begin epilogue. +// +// +// End epilogue. diff --git a/xsd/xsd/cxx/parser/attribute-validation-source.cxx b/xsd/xsd/cxx/parser/attribute-validation-source.cxx index 536e2da..7ed54e4 100644 --- a/xsd/xsd/cxx/parser/attribute-validation-source.cxx +++ b/xsd/xsd/cxx/parser/attribute-validation-source.cxx @@ -1,6 +1,5 @@ // file : xsd/cxx/parser/attribute-validation-source.cxx -// author : Boris Kolpackov -// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file #include @@ -23,7 +22,7 @@ namespace CXX { } - virtual Void + virtual void traverse (SemanticGraph::Attribute& a) { String const& name (a.name ()); @@ -39,7 +38,7 @@ namespace CXX os << "n == " << strlit (name) << " && ns.empty ()"; } - virtual Void + virtual void traverse (SemanticGraph::AnyAttribute& a) { String const& ns (a.definition_namespace ().name ()); @@ -93,7 +92,7 @@ namespace CXX { } - virtual Void + virtual void traverse (Type& a) { String const& name (ename (a)); @@ -120,10 +119,20 @@ namespace CXX os << "this->" << inst << "->" << post << " ();" << "this->" << name << " ();"; else - os << arg_type (type) << " tmp (this->" << inst << "->" << - post << " ());" - << "this->" << name << " (tmp);" - << endl; + { + // Don't create an lvalue in C++11 (think std::unique_ptr). + // In C++98 we do it for compatibility with older/broken + // compilers (e.g., IBM xlC that needs an lvalue to pass + // std::auto_ptr). + // + if (std == cxx_version::cxx98) + os << arg_type (type) << " tmp (this->" << inst << "->" << + post << " ());" + << "this->" << name << " (tmp);"; + else + os << "this->" << name << " (this->" << inst << "->" << + post << " ());"; + } os << "}"; @@ -149,7 +158,7 @@ namespace CXX { } - virtual Void + virtual void traverse (Type& a) { os << "if ("; @@ -177,7 +186,7 @@ namespace CXX { } - virtual Void + virtual void traverse (Type& a) { if (!a.optional_p ()) @@ -195,7 +204,7 @@ namespace CXX { } - virtual Void + virtual void traverse (Type& a) { if (!a.optional_p ()) @@ -227,16 +236,16 @@ namespace CXX names_attribute_state_check_ >> attribute_state_check_; } - virtual Void + virtual void traverse (Type& c) { - Boolean has_att (has (c)); - Boolean has_any (has (c)); + bool has_att (has (c)); + bool has_any (has (c)); if (!has_att && !has_any) return; - Boolean has_req_att (false); + bool has_req_att (false); if (has_att) { RequiredAttributeTest test (has_req_att); @@ -380,12 +389,12 @@ namespace CXX }; } - Void + void generate_attribute_validation_source (Context& ctx) { Traversal::Schema schema; - Traversal::Sources sources; + Sources sources; Traversal::Names schema_names; Namespace ns (ctx); diff --git a/xsd/xsd/cxx/parser/attribute-validation-source.hxx b/xsd/xsd/cxx/parser/attribute-validation-source.hxx index a11f434..10438fd 100644 --- a/xsd/xsd/cxx/parser/attribute-validation-source.hxx +++ b/xsd/xsd/cxx/parser/attribute-validation-source.hxx @@ -1,6 +1,5 @@ // file : xsd/cxx/parser/attribute-validation-source.hxx -// author : Boris Kolpackov -// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file #ifndef CXX_PARSER_ATTRIBUTE_VALIDATION_SOURCE_HXX @@ -12,7 +11,7 @@ namespace CXX { namespace Parser { - Void + void generate_attribute_validation_source (Context&); } } diff --git a/xsd/xsd/cxx/parser/characters-validation-source.cxx b/xsd/xsd/cxx/parser/characters-validation-source.cxx index 236f2f5..ddecc70 100644 --- a/xsd/xsd/cxx/parser/characters-validation-source.cxx +++ b/xsd/xsd/cxx/parser/characters-validation-source.cxx @@ -1,6 +1,5 @@ // file : xsd/cxx/parser/characters-validation-source.cxx -// author : Boris Kolpackov -// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file #include @@ -23,7 +22,7 @@ namespace CXX { } - virtual Void + virtual void traverse (Type& c) { if (!c.mixed_p ()) @@ -46,7 +45,7 @@ namespace CXX }; } - Void + void generate_characters_validation_source (Context& ctx) { //@@ Most of the time there is no mixed content type so @@ -56,7 +55,7 @@ namespace CXX // Traversal::Schema schema; - Traversal::Sources sources; + Sources sources; Traversal::Names schema_names; Namespace ns (ctx); diff --git a/xsd/xsd/cxx/parser/characters-validation-source.hxx b/xsd/xsd/cxx/parser/characters-validation-source.hxx index 2c1a1b1..219df3e 100644 --- a/xsd/xsd/cxx/parser/characters-validation-source.hxx +++ b/xsd/xsd/cxx/parser/characters-validation-source.hxx @@ -1,6 +1,5 @@ // file : xsd/cxx/parser/characters-validation-source.hxx -// author : Boris Kolpackov -// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file #ifndef CXX_PARSER_CHARACTERS_VALIDATION_SOURCE_HXX @@ -12,7 +11,7 @@ namespace CXX { namespace Parser { - Void + void generate_characters_validation_source (Context&); } } diff --git a/xsd/xsd/cxx/parser/cli.hxx b/xsd/xsd/cxx/parser/cli.hxx deleted file mode 100644 index bc7ca1a..0000000 --- a/xsd/xsd/cxx/parser/cli.hxx +++ /dev/null @@ -1,154 +0,0 @@ -// file : xsd/cxx/parser/cli.hxx -// author : Boris Kolpackov -// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC -// license : GNU GPL v2 + exceptions; see accompanying LICENSE file - -#ifndef CXX_PARSER_CLI_HXX -#define CXX_PARSER_CLI_HXX - -#include - -#include - -#include -#include - -namespace CXX -{ - namespace Parser - { - namespace CLI - { - using namespace Cult::Types; - - typedef Char const Key[]; - - extern Key type_map; - extern Key char_encoding; - extern Key char_type; - extern Key output_dir; - extern Key xml_parser; - extern Key generate_inline; - extern Key generate_validation; - extern Key suppress_validation; - extern Key generate_polymorphic; - extern Key generate_noop_impl; - extern Key generate_print_impl; - extern Key generate_test_driver; - extern Key force_overwrite; - extern Key root_element_first; - extern Key root_element_last; - extern Key root_element; - extern Key generate_xml_schema; - extern Key extern_xml_schema; - extern Key skel_type_suffix; - extern Key skel_file_suffix; - extern Key impl_type_suffix; - extern Key impl_file_suffix; - extern Key namespace_map; - extern Key namespace_regex; - extern Key namespace_regex_trace; - extern Key reserved_name; - extern Key include_with_brackets; - extern Key include_prefix; - extern Key include_regex; - extern Key include_regex_trace; - extern Key guard_prefix; - extern Key hxx_suffix; - extern Key ixx_suffix; - extern Key cxx_suffix; - extern Key hxx_regex; - extern Key ixx_regex; - extern Key cxx_regex; - extern Key hxx_prologue; - extern Key ixx_prologue; - extern Key cxx_prologue; - extern Key prologue; - extern Key hxx_epilogue; - extern Key ixx_epilogue; - extern Key cxx_epilogue; - extern Key epilogue; - extern Key hxx_prologue_file; - extern Key ixx_prologue_file; - extern Key cxx_prologue_file; - extern Key prologue_file; - extern Key hxx_epilogue_file; - extern Key ixx_epilogue_file; - extern Key cxx_epilogue_file; - extern Key epilogue_file; - extern Key export_symbol; - extern Key export_maps; - extern Key import_maps; - extern Key show_anonymous; - extern Key show_sloc; - extern Key proprietary_license; - - typedef Cult::CLI::Options< - type_map, Cult::Containers::Vector, - char_type, NarrowString, - char_encoding, NarrowString, - output_dir, NarrowString, - xml_parser, NarrowString, - generate_inline, Boolean, - generate_validation, Boolean, - suppress_validation, Boolean, - generate_polymorphic, Boolean, - generate_noop_impl, Boolean, - generate_print_impl, Boolean, - generate_test_driver, Boolean, - force_overwrite, Boolean, - root_element_first, Boolean, - root_element_last, Boolean, - root_element, NarrowString, - generate_xml_schema, Boolean, - extern_xml_schema, NarrowString, - skel_type_suffix, NarrowString, - skel_file_suffix, NarrowString, - impl_type_suffix, NarrowString, - impl_file_suffix, NarrowString, - namespace_map, Cult::Containers::Vector, - namespace_regex, Cult::Containers::Vector, - namespace_regex_trace, Boolean, - reserved_name, Cult::Containers::Vector, - include_with_brackets, Boolean, - include_prefix, NarrowString, - include_regex, Cult::Containers::Vector, - include_regex_trace, Boolean, - guard_prefix, NarrowString, - hxx_suffix, NarrowString, - ixx_suffix, NarrowString, - cxx_suffix, NarrowString, - hxx_regex, NarrowString, - ixx_regex, NarrowString, - cxx_regex, NarrowString, - hxx_prologue, Cult::Containers::Vector, - ixx_prologue, Cult::Containers::Vector, - cxx_prologue, Cult::Containers::Vector, - prologue, Cult::Containers::Vector, - hxx_epilogue, Cult::Containers::Vector, - ixx_epilogue, Cult::Containers::Vector, - cxx_epilogue, Cult::Containers::Vector, - epilogue, Cult::Containers::Vector, - hxx_prologue_file, NarrowString, - ixx_prologue_file, NarrowString, - cxx_prologue_file, NarrowString, - prologue_file, NarrowString, - hxx_epilogue_file, NarrowString, - ixx_epilogue_file, NarrowString, - cxx_epilogue_file, NarrowString, - epilogue_file, NarrowString, - export_symbol, NarrowString, - export_maps, Boolean, - import_maps, Boolean, - show_anonymous, Boolean, - show_sloc, Boolean, - proprietary_license, Boolean - - > Options; - - struct OptionsSpec: Cult::CLI::OptionsSpec {}; - } - } -} - -#endif // CXX_PARSER_CLI_HXX diff --git a/xsd/xsd/cxx/parser/driver-source.cxx b/xsd/xsd/cxx/parser/driver-source.cxx index b48b0e0..510c965 100644 --- a/xsd/xsd/cxx/parser/driver-source.cxx +++ b/xsd/xsd/cxx/parser/driver-source.cxx @@ -1,18 +1,18 @@ // file : xsd/cxx/parser/driver-source.cxx -// author : Boris Kolpackov -// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file +#include +#include +#include + #include #include #include #include -#include -#include - -#include +using namespace std; namespace CXX { @@ -20,23 +20,22 @@ namespace CXX { namespace { - typedef - Cult::Containers::Map - TypeInstanceMap; - - typedef Cult::Containers::Set InstanceSet; + typedef map TypeInstanceMap; + typedef set InstanceSet; // For base types we only want member's types, but not the // base itself. // - struct BaseType: Traversal::Complex, Context + struct BaseType: Traversal::Complex, + Traversal::List, + Context { - BaseType (Context& c) - : Context (c) + BaseType (Context& c, Traversal::NodeBase& def) + : Context (c), def_ (def) { } - virtual Void + virtual void traverse (SemanticGraph::Complex& c) { inherits (c); @@ -44,6 +43,15 @@ namespace CXX if (!restriction_p (c)) names (c); } + + virtual void + traverse (SemanticGraph::List& l) + { + def_.dispatch (l.argumented ().type ()); + } + + private: + Traversal::NodeBase& def_; }; struct ParserDef: Traversal::Type, @@ -109,7 +117,7 @@ namespace CXX Context { ParserDef (Context& c, TypeInstanceMap& map, InstanceSet& set) - : Context (c), map_ (map), set_ (set), base_ (c) + : Context (c), map_ (map), set_ (set), base_ (c, *this) { *this >> inherits_ >> base_ >> inherits_; @@ -119,7 +127,7 @@ namespace CXX names_ >> member_ >> belongs_ >> *this; } - virtual Void + virtual void traverse (SemanticGraph::Type& t) { if (map_.find (&t) == map_.end ()) @@ -131,7 +139,7 @@ namespace CXX } } - virtual Void + virtual void traverse (SemanticGraph::List& l) { if (map_.find (&l) == map_.end ()) @@ -145,7 +153,7 @@ namespace CXX } } - virtual Void + virtual void traverse (SemanticGraph::Complex& c) { if (map_.find (&c) == map_.end ()) @@ -164,13 +172,13 @@ namespace CXX // anyType & anySimpleType. // - virtual Void + virtual void traverse (SemanticGraph::AnyType& t) { fund_type (t, "any_type"); } - virtual Void + virtual void traverse (SemanticGraph::AnySimpleType& t) { fund_type (t, "any_simple_type"); @@ -178,7 +186,7 @@ namespace CXX // Boolean. // - virtual Void + virtual void traverse (SemanticGraph::Fundamental::Boolean& t) { fund_type (t, "boolean"); @@ -186,79 +194,79 @@ namespace CXX // Integral types. // - virtual Void + virtual void traverse (SemanticGraph::Fundamental::Byte& t) { fund_type (t, "byte"); } - virtual Void + virtual void traverse (SemanticGraph::Fundamental::UnsignedByte& t) { fund_type (t, "unsigned_byte"); } - virtual Void + virtual void traverse (SemanticGraph::Fundamental::Short& t) { fund_type (t, "short"); } - virtual Void + virtual void traverse (SemanticGraph::Fundamental::UnsignedShort& t) { fund_type (t, "unsigned_short"); } - virtual Void + virtual void traverse (SemanticGraph::Fundamental::Int& t) { fund_type (t, "int"); } - virtual Void + virtual void traverse (SemanticGraph::Fundamental::UnsignedInt& t) { fund_type (t, "unsigned_int"); } - virtual Void + virtual void traverse (SemanticGraph::Fundamental::Long& t) { fund_type (t, "long"); } - virtual Void + virtual void traverse (SemanticGraph::Fundamental::UnsignedLong& t) { fund_type (t, "unsigned_long"); } - virtual Void + virtual void traverse (SemanticGraph::Fundamental::Integer& t) { fund_type (t, "integer"); } - virtual Void + virtual void traverse (SemanticGraph::Fundamental::NonPositiveInteger& t) { fund_type (t, "non_positive_integer"); } - virtual Void + virtual void traverse (SemanticGraph::Fundamental::NonNegativeInteger& t) { fund_type (t, "non_negative_integer"); } - virtual Void + virtual void traverse (SemanticGraph::Fundamental::PositiveInteger& t) { fund_type (t, "positive_integer"); } - virtual Void + virtual void traverse (SemanticGraph::Fundamental::NegativeInteger& t) { fund_type (t, "negative_integer"); @@ -266,19 +274,19 @@ namespace CXX // Floats. // - virtual Void + virtual void traverse (SemanticGraph::Fundamental::Float& t) { fund_type (t, "float"); } - virtual Void + virtual void traverse (SemanticGraph::Fundamental::Double& t) { fund_type (t, "double"); } - virtual Void + virtual void traverse (SemanticGraph::Fundamental::Decimal& t) { fund_type (t, "decimal"); @@ -286,49 +294,49 @@ namespace CXX // Strings. // - virtual Void + virtual void traverse (SemanticGraph::Fundamental::String& t) { fund_type (t, "string"); } - virtual Void + virtual void traverse (SemanticGraph::Fundamental::NormalizedString& t) { fund_type (t, "normalized_string"); } - virtual Void + virtual void traverse (SemanticGraph::Fundamental::Token& t) { fund_type (t, "token"); } - virtual Void + virtual void traverse (SemanticGraph::Fundamental::NameToken& t) { fund_type (t, "nmtoken"); } - virtual Void + virtual void traverse (SemanticGraph::Fundamental::NameTokens& t) { fund_type (t, "nmtokens"); } - virtual Void + virtual void traverse (SemanticGraph::Fundamental::Name& t) { fund_type (t, "name"); } - virtual Void + virtual void traverse (SemanticGraph::Fundamental::NCName& t) { fund_type (t, "ncname"); } - virtual Void + virtual void traverse (SemanticGraph::Fundamental::Language& t) { fund_type (t, "language"); @@ -337,7 +345,7 @@ namespace CXX // Qualified name. // - virtual Void + virtual void traverse (SemanticGraph::Fundamental::QName& t) { fund_type (t, "qname"); @@ -346,19 +354,19 @@ namespace CXX // ID/IDREF. // - virtual Void + virtual void traverse (SemanticGraph::Fundamental::Id& t) { fund_type (t, "id"); } - virtual Void + virtual void traverse (SemanticGraph::Fundamental::IdRef& t) { fund_type (t, "idref"); } - virtual Void + virtual void traverse (SemanticGraph::Fundamental::IdRefs& t) { fund_type (t, "idrefs"); @@ -366,7 +374,7 @@ namespace CXX // URI. // - virtual Void + virtual void traverse (SemanticGraph::Fundamental::AnyURI& t) { fund_type (t, "uri"); @@ -374,13 +382,13 @@ namespace CXX // Binary. // - virtual Void + virtual void traverse (SemanticGraph::Fundamental::Base64Binary& t) { fund_type (t, "base64_binary"); } - virtual Void + virtual void traverse (SemanticGraph::Fundamental::HexBinary& t) { fund_type (t, "hex_binary"); @@ -389,55 +397,55 @@ namespace CXX // Date/time. // - virtual Void + virtual void traverse (SemanticGraph::Fundamental::Date& t) { fund_type (t, "date"); } - virtual Void + virtual void traverse (SemanticGraph::Fundamental::DateTime& t) { fund_type (t, "date_time"); } - virtual Void + virtual void traverse (SemanticGraph::Fundamental::Duration& t) { fund_type (t, "duration"); } - virtual Void + virtual void traverse (SemanticGraph::Fundamental::Day& t) { fund_type (t, "day"); } - virtual Void + virtual void traverse (SemanticGraph::Fundamental::Month& t) { fund_type (t, "month"); } - virtual Void + virtual void traverse (SemanticGraph::Fundamental::MonthDay& t) { fund_type (t, "month_day"); } - virtual Void + virtual void traverse (SemanticGraph::Fundamental::Year& t) { fund_type (t, "year"); } - virtual Void + virtual void traverse (SemanticGraph::Fundamental::YearMonth& t) { fund_type (t, "year_month"); } - virtual Void + virtual void traverse (SemanticGraph::Fundamental::Time& t) { fund_type (t, "time"); @@ -445,20 +453,20 @@ namespace CXX // Entity. // - virtual Void + virtual void traverse (SemanticGraph::Fundamental::Entity& t) { fund_type (t, "entity"); } - virtual Void + virtual void traverse (SemanticGraph::Fundamental::Entities& t) { fund_type (t, "entities"); } private: - virtual Void + virtual void fund_type (SemanticGraph::Type& t, String const& name) { if (map_.find (&t) == map_.end ()) @@ -476,7 +484,7 @@ namespace CXX String base_name (escape (raw_name + L"_p")); String name (base_name); - for (UnsignedLong i (1); set_.find (name) != set_.end (); ++i) + for (size_t i (1); set_.find (name) != set_.end (); ++i) { std::wostringstream os; os << i; @@ -516,7 +524,7 @@ namespace CXX names_ >> *this; } - virtual Void + virtual void traverse (SemanticGraph::Complex& c) { inherits (c, inherits_); @@ -525,7 +533,7 @@ namespace CXX names (c, names_); } - virtual Void + virtual void traverse (SemanticGraph::List& l) { if (!first_) @@ -536,7 +544,7 @@ namespace CXX os << map_[&l.argumented ().type ()]; } - virtual Void + virtual void traverse (SemanticGraph::Member& m) { if (skip (m)) @@ -556,7 +564,7 @@ namespace CXX Traversal::Inherits inherits_; Traversal::Names names_; - Boolean first_; + bool first_; }; struct ParserConnect: Traversal::List, @@ -564,7 +572,7 @@ namespace CXX Context { ParserConnect (Context& c, TypeInstanceMap& map) - : Context (c), map_ (map), base_ (c) + : Context (c), map_ (map), base_ (c, *this) { *this >> inherits_ >> base_ >> inherits_; @@ -574,7 +582,7 @@ namespace CXX names_ >> member_ >> belongs_ >> *this; } - virtual Void + virtual void traverse (SemanticGraph::List& l) { if (type_set_.find (&l) == type_set_.end ()) @@ -587,7 +595,7 @@ namespace CXX } } - virtual Void + virtual void traverse (SemanticGraph::Complex& c) { if (type_set_.find (&c) == type_set_.end ()) @@ -613,7 +621,7 @@ namespace CXX } private: - Boolean + bool has_members (SemanticGraph::Complex& c) { using SemanticGraph::Complex; @@ -636,7 +644,7 @@ namespace CXX private: TypeInstanceMap& map_; - Cult::Containers::Set type_set_; + set type_set_; BaseType base_; Traversal::Inherits inherits_; @@ -647,7 +655,7 @@ namespace CXX }; } - Void + void generate_driver_source (Context& ctx) { // Figure out the root element. Validator should have made sure @@ -656,7 +664,7 @@ namespace CXX SemanticGraph::Element* root (0); { Traversal::Schema schema; - Traversal::Sources sources; + Sources sources; schema >> sources >> schema; @@ -740,7 +748,7 @@ namespace CXX root_p << "." << post << " ());" << endl; - if (ctx.options.value ()) + if (ctx.options.generate_print_impl ()) { PrintCall t (ctx, root->name (), "v"); t.dispatch (root_type); diff --git a/xsd/xsd/cxx/parser/driver-source.hxx b/xsd/xsd/cxx/parser/driver-source.hxx index 9b5a8b1..53e19d8 100644 --- a/xsd/xsd/cxx/parser/driver-source.hxx +++ b/xsd/xsd/cxx/parser/driver-source.hxx @@ -1,6 +1,5 @@ // file : xsd/cxx/parser/driver-source.hxx -// author : Boris Kolpackov -// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file #ifndef CXX_PARSER_DRIVER_SOURCE_HXX @@ -12,7 +11,7 @@ namespace CXX { namespace Parser { - Void + void generate_driver_source (Context&); } } diff --git a/xsd/xsd/cxx/parser/element-validation-source.cxx b/xsd/xsd/cxx/parser/element-validation-source.cxx index 211a0d3..b2c244e 100644 --- a/xsd/xsd/cxx/parser/element-validation-source.cxx +++ b/xsd/xsd/cxx/parser/element-validation-source.cxx @@ -1,14 +1,15 @@ // file : xsd/cxx/parser/element-validation-source.cxx -// author : Boris Kolpackov -// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file +#include + #include #include #include -#include +using namespace std; namespace CXX { @@ -16,8 +17,7 @@ namespace CXX { namespace { - typedef Cult::Containers::Vector Particles; - + typedef vector Particles; // // @@ -31,7 +31,7 @@ namespace CXX { } - virtual Void + virtual void traverse (SemanticGraph::Element& e) { String const& name (e.name ()); @@ -62,7 +62,7 @@ namespace CXX } } - virtual Void + virtual void traverse (SemanticGraph::Any& a) { String const& ns (a.definition_namespace ().name ()); @@ -109,7 +109,7 @@ namespace CXX } } - virtual Void + virtual void traverse (SemanticGraph::Compositor& c) { // This compositor should already have been tested for @@ -117,9 +117,9 @@ namespace CXX // Particles const& p (c.context ().get ("prefixes")); - Boolean paren (p.size () != 1); + bool paren (p.size () != 1); - for (Particles::ConstIterator i (p.begin ()), e (p.end ()); + for (Particles::const_iterator i (p.begin ()), e (p.end ()); i != e;) { if (paren) @@ -150,21 +150,21 @@ namespace CXX { } - virtual Void + virtual void traverse (SemanticGraph::Element& e) { String ns (e.qualified_p () ? e.namespace_ ().name () : String ()); os << strlit (ns) << ", " << strlit (e.name ()); } - virtual Void + virtual void traverse (SemanticGraph::Any& a) { String const& ns (*a.namespace_begin ()); os << strlit (ns) << ", " << L << "\"*\""; } - virtual Void + virtual void traverse (SemanticGraph::Compositor& c) { Particles const& p (c.context ().get ("prefixes")); @@ -187,7 +187,7 @@ namespace CXX // Generate sub-parser setup code as well as the pre/post calls. // - Void + void pre_post_calls (SemanticGraph::Particle& p) { using SemanticGraph::Element; @@ -196,20 +196,23 @@ namespace CXX if (Element* e = dynamic_cast (&p)) { SemanticGraph::Type& type (e->type ()); - Boolean poly (polymorphic && !anonymous (type)); + String const& fq_type (fq_name (type)); + bool poly (polymorphic && !anonymous (type)); String name, inst, def_parser, map; if (e->context ().count("name")) { name = ename (*e); - inst = poly ? emember_cache (*e) : emember (*e); if (poly) { def_parser = emember (*e); map = emember_map (*e); + inst = "p"; } + else + inst = L"this->" + emember (*e); } else { @@ -222,13 +225,15 @@ namespace CXX Element& fe (dynamic_cast(ip.first->named ())); name = ename (fe); - inst = poly ? emember_cache (fe) : emember (fe); if (poly) { def_parser = emember (fe); map = emember_map (fe); + inst = "p"; } + else + inst = L"this->" + emember (fe); } if (poly) @@ -243,8 +248,10 @@ namespace CXX type_id += type_ns; } - os << "if (t == 0 && this->" << def_parser << " != 0)" << endl - << "this->" << inst << " = this->" << def_parser << ";" + os << fq_type << "* p = 0;" + << endl + << "if (t == 0 && this->" << def_parser << " != 0)" << endl + << inst << " = this->" << def_parser << ";" << "else" << "{" << string_type << " ts (" << fq_name (type) << @@ -254,7 +261,7 @@ namespace CXX << "t = &ts;" << endl << "if (this->" << def_parser << " != 0 && *t == ts)" << endl - << "this->" << inst << " = this->" << def_parser << ";" + << inst << " = this->" << def_parser << ";" << "else" << "{"; @@ -269,36 +276,51 @@ namespace CXX " > (*t);" << endl << "if (this->" << map << " != 0)" << endl - << "this->" << inst << " = dynamic_cast< " << - fq_name (type) << "* > (" << endl + << inst << " = dynamic_cast< " << fq_type << "* > (" << endl << "this->" << map << "->find (*t));" - << "else" << endl - << "this->" << inst << " = 0;" << "}" << "}"; } os << "this->" << complex_base << "::context_.top ()." << - "parser_ = this->" << inst << ";" + "parser_ = " << inst << ";" << endl - << "if (this->" << inst << ")" << endl - << "this->" << inst << "->pre ();" + << "if (" << inst << ")" << endl + << inst << "->pre ();" << "}" << "else" // start - << "{" - << "if (this->" << inst << ")" + << "{"; + + if (poly) + os << fq_type << "* p =" << endl + << "dynamic_cast< " << fq_type << "* > (" << endl + << "this->" << complex_base << "::context_.top ().parser_);" + << endl; + + os << "if (" << inst << ")" << "{"; String const& ret (ret_type (type)); String const& post (post_name (type)); if (ret == L"void") - os << "this->" << inst << "->" << post << " ();" + os << inst << "->" << post << " ();" << "this->" << name << " ();"; else - os << arg_type (type) << " tmp (this->" << inst << "->" << - post << " ());" - << "this->" << name << " (tmp);"; + { + // Don't create an lvalue in C++11 (think std::unique_ptr). + // In C++98 we do it for compatibility with older/broken + // compilers (e.g., IBM xlC that needs an lvalue to pass + // std::auto_ptr). + // + if (std == cxx_version::cxx98) + os << arg_type (type) << " tmp (" << inst << "->" << + post << " ());" + << "this->" << name << " (tmp);"; + else + os << "this->" << name << " (" << inst << "->" << + post << " ());"; + } os << "}"; } @@ -331,10 +353,10 @@ namespace CXX { } - virtual Void + virtual void traverse (SemanticGraph::Element& e) { - UnsignedLong state (e.context ().get ("state")); + size_t state (e.context ().get ("state")); if (state != 0) os << "else "; @@ -382,14 +404,14 @@ namespace CXX { } - virtual Void + virtual void traverse (SemanticGraph::Particle& p) { using SemanticGraph::Element; - UnsignedLong state (p.context ().get ("state")); + size_t state (p.context ().get ("state")); - UnsignedLong min (p.min ()), max (p.max ()); + size_t min (p.min ()), max (p.max ()); os << "case " << state << "UL:" << endl << "{"; @@ -465,15 +487,15 @@ namespace CXX << "}"; // case } - virtual Void + virtual void traverse (SemanticGraph::Compositor& c) { using SemanticGraph::Compositor; - UnsignedLong max (c.max ()); - UnsignedLong min (c.context ().get ("effective-min")); - UnsignedLong n (c.context ().get ("comp-number")); - UnsignedLong state (c.context ().get ("state")); + size_t max (c.max ()); + size_t min (c.context ().get ("effective-min")); + size_t n (c.context ().get ("comp-number")); + size_t state (c.context ().get ("state")); String func (c.is_a () ? "choice_" : "sequence_"); @@ -483,7 +505,7 @@ namespace CXX << "unsigned long s (~0UL);" << endl; - Boolean first (true); + bool first (true); for (Compositor::ContainsIterator ci (c.contains_begin ()); ci != c.contains_end (); ++ci) @@ -496,7 +518,7 @@ namespace CXX if (!p.context ().count ("prefix")) break; - UnsignedLong state (p.context ().get ("state")); + size_t state (p.context ().get ("state")); if (first) first = false; @@ -599,8 +621,8 @@ namespace CXX ParticleInCompositor { ParticleInSequence (Context& c, - UnsignedLong state, - UnsignedLong next_state, + size_t state, + size_t next_state, SemanticGraph::Complex& type) : ParticleInCompositor (c, type), state_ (state), particle_name_ (c) @@ -617,10 +639,10 @@ namespace CXX next_state_ = L"~0"; } - virtual Void + virtual void traverse (SemanticGraph::Particle& p) { - UnsignedLong min (p.min ()), max (p.max ()); + size_t min (p.min ()), max (p.max ()); os << "case " << state_ << "UL:" << endl << "{" @@ -694,14 +716,14 @@ namespace CXX << "}"; // case } - virtual Void + virtual void traverse (SemanticGraph::Compositor& c) { using SemanticGraph::Compositor; - UnsignedLong max (c.max ()); - UnsignedLong min (c.context ().get ("effective-min")); - UnsignedLong n (c.context ().get ("comp-number")); + size_t max (c.max ()); + size_t min (c.context ().get ("effective-min")); + size_t n (c.context ().get ("comp-number")); String func (c.is_a () ? "choice_" : "sequence_"); @@ -711,7 +733,7 @@ namespace CXX << "unsigned long s (~0UL);" << endl; - Boolean first (true); + bool first (true); for (Compositor::ContainsIterator ci (c.contains_begin ()); ci != c.contains_end (); ++ci) @@ -724,7 +746,7 @@ namespace CXX if (!p.context ().count ("prefix")) break; - UnsignedLong state (p.context ().get ("state")); + size_t state (p.context ().get ("state")); if (first) first = false; @@ -816,7 +838,7 @@ namespace CXX } private: - UnsignedLong state_; + size_t state_; String next_state_; ParticleName particle_name_; @@ -837,7 +859,7 @@ namespace CXX } - virtual Void + virtual void traverse (SemanticGraph::All& a) { if (!a.context().count ("comp-number")) // Empty compositor. @@ -878,7 +900,7 @@ namespace CXX Element& e (dynamic_cast (ci->particle ())); String ns (e.qualified_p () ? e.namespace_ ().name () : String ()); - UnsignedLong state (e.context ().get ("state")); + size_t state (e.context ().get ("state")); os << "if (count[" << state << "UL] == 0)" << endl << "this->_expected_element (" << endl @@ -894,7 +916,7 @@ namespace CXX << "}"; } - virtual Void + virtual void traverse (SemanticGraph::Choice& c) { if (!c.context().count ("comp-number")) // Empty compositor. @@ -902,7 +924,7 @@ namespace CXX using SemanticGraph::Compositor; - UnsignedLong n (c.context ().get ("comp-number")); + size_t n (c.context ().get ("comp-number")); os << "void " << ename (type_) << "::" << endl << "choice_" << n << " (unsigned long& state," << endl @@ -940,7 +962,7 @@ namespace CXX Traversal::Choice::traverse (c); } - virtual Void + virtual void traverse (SemanticGraph::Sequence& s) { if (!s.context().count ("comp-number")) // Empty compositor. @@ -948,7 +970,7 @@ namespace CXX using SemanticGraph::Compositor; - UnsignedLong n (s.context ().get ("comp-number")); + size_t n (s.context ().get ("comp-number")); os << "void " << ename (type_) << "::" << endl << "sequence_" << n << " (unsigned long& state," << endl @@ -963,7 +985,7 @@ namespace CXX << "switch (state)" << "{"; - UnsignedLong state (0); + size_t state (0); for (Compositor::ContainsIterator ci (s.contains_begin ()), ce (s.contains_end ()); ci != ce;) @@ -986,7 +1008,7 @@ namespace CXX ci->particle ().is_a () && !ci->particle ().context().count ("comp-number")); - UnsignedLong next (ci == ce ? 0 : state + 1); + size_t next (ci == ce ? 0 : state + 1); ParticleInSequence t (*this, state++, next, type_); t.dispatch (p); @@ -1014,12 +1036,12 @@ namespace CXX Traversal::Compositor, Context { - CompositorPre (Context& c, SemanticGraph::Complex& type) - : Context (c), type_ (type) + CompositorPre (Context& c) + : Context (c) { } - virtual Void + virtual void traverse (SemanticGraph::All& a) { // Clear the counts and push the initial state. @@ -1031,7 +1053,7 @@ namespace CXX traverse (c); } - virtual Void + virtual void traverse (SemanticGraph::Compositor&) // Choice and sequence. { os << "v_state_& vs = *static_cast< v_state_* > (" << @@ -1042,9 +1064,6 @@ namespace CXX << "vd.state = 0;" << "vd.count = 0;"; } - - private: - SemanticGraph::Complex& type_; }; @@ -1060,7 +1079,7 @@ namespace CXX { } - virtual Void + virtual void traverse (SemanticGraph::All&) { // The 'all' state machine reaches the final state only @@ -1078,14 +1097,14 @@ namespace CXX << endl; } - virtual Void + virtual void traverse (SemanticGraph::Compositor& c) // Choice and sequence. { using SemanticGraph::Compositor; - UnsignedLong max (c.max ()); - UnsignedLong min (c.context ().get ("effective-min")); - UnsignedLong n (c.context ().get ("comp-number")); + size_t max (c.max ()); + size_t min (c.context ().get ("effective-min")); + size_t n (c.context ().get ("comp-number")); String func (c.is_a () ? "choice_" : "sequence_"); @@ -1117,7 +1136,7 @@ namespace CXX << "unsigned long s = ~0UL;" << endl; - Boolean first (true); + bool first (true); // Note that we don't need to worry about the compositor // being empty - this case is handled by our caller. @@ -1133,7 +1152,7 @@ namespace CXX if (!p.context ().count ("prefix")) break; - UnsignedLong state (p.context ().get ("state")); + size_t state (p.context ().get ("state")); if (first) first = false; @@ -1230,12 +1249,12 @@ namespace CXX Traversal::Compositor, Context { - CompositorEndElement (Context& c, SemanticGraph::Complex& type) - : Context (c), type_ (type) + CompositorEndElement (Context& c) + : Context (c) { } - virtual Void + virtual void traverse (SemanticGraph::All&) { os << "all_0 (vd.state, v_all_count_.top (), " << @@ -1243,7 +1262,7 @@ namespace CXX << endl; } - virtual Void + virtual void traverse (SemanticGraph::Compositor&) // Choice and sequence. { os << "assert (vd.func != 0);" @@ -1253,9 +1272,6 @@ namespace CXX << "vs.size--;" // pop << endl; } - - private: - SemanticGraph::Complex& type_; }; @@ -1265,12 +1281,12 @@ namespace CXX Traversal::Compositor, Context { - CompositorPost (Context& c, SemanticGraph::Complex& type) - : Context (c), type_ (type), particle_name_ (c) + CompositorPost (Context& c) + : Context (c), particle_name_ (c) { } - virtual Void + virtual void traverse (SemanticGraph::All& a) { using SemanticGraph::Element; @@ -1289,7 +1305,7 @@ namespace CXX << "all_0 (vd.state, v_all_count_.top (), empty, empty, 0, true);" << "}"; - if (a.context ().get ("effective-min") != 0) + if (a.context ().get ("effective-min") != 0) { os << "else" << endl << "this->_expected_element (" << endl; @@ -1304,10 +1320,10 @@ namespace CXX << "v_all_count_.pop ();"; } - virtual Void + virtual void traverse (SemanticGraph::Compositor& c) // Choice and sequence. { - UnsignedLong min (c.context ().get ("effective-min")); + size_t min (c.context ().get ("effective-min")); os << "v_state_& vs = *static_cast< v_state_* > (" << "this->v_state_stack_.top ());" @@ -1343,7 +1359,6 @@ namespace CXX } private: - SemanticGraph::Complex& type_; ParticleName particle_name_; }; @@ -1357,7 +1372,7 @@ namespace CXX { } - virtual Void + virtual void traverse (Type& c) { // Nothing to generate if we don't have any elements and wildcards. @@ -1374,7 +1389,7 @@ namespace CXX // Don't use restriction_p here since we don't want special // treatment of anyType. // - Boolean restriction ( + bool restriction ( c.inherits_p () && c.inherits ().is_a ()); @@ -1476,7 +1491,7 @@ namespace CXX } { - CompositorEndElement t (*this, c); + CompositorEndElement t (*this); t.dispatch (comp); } @@ -1495,7 +1510,7 @@ namespace CXX << endl; { - CompositorPre t (*this, c); + CompositorPre t (*this); t.dispatch (comp); } @@ -1543,7 +1558,7 @@ namespace CXX } { - CompositorPost t (*this, c); + CompositorPost t (*this); t.dispatch (c.contains_compositor ().compositor ()); } @@ -1559,7 +1574,7 @@ namespace CXX }; } - Void + void generate_element_validation_source (Context& ctx) { ctx.os << "#include " << endl @@ -1567,7 +1582,7 @@ namespace CXX Traversal::Schema schema; - Traversal::Sources sources; + Sources sources; Traversal::Names schema_names; Namespace ns (ctx); diff --git a/xsd/xsd/cxx/parser/element-validation-source.hxx b/xsd/xsd/cxx/parser/element-validation-source.hxx index 544b8f1..b9bd70b 100644 --- a/xsd/xsd/cxx/parser/element-validation-source.hxx +++ b/xsd/xsd/cxx/parser/element-validation-source.hxx @@ -1,6 +1,5 @@ // file : xsd/cxx/parser/element-validation-source.hxx -// author : Boris Kolpackov -// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file #ifndef CXX_PARSER_ELEMENT_VALIDATION_SOURCE_HXX @@ -12,7 +11,7 @@ namespace CXX { namespace Parser { - Void + void generate_element_validation_source (Context&); } } diff --git a/xsd/xsd/cxx/parser/elements.cxx b/xsd/xsd/cxx/parser/elements.cxx index b3458c7..889eea4 100644 --- a/xsd/xsd/cxx/parser/elements.cxx +++ b/xsd/xsd/cxx/parser/elements.cxx @@ -1,6 +1,5 @@ // file : xsd/cxx/parser/elements.cxx -// author : Boris Kolpackov -// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file #include @@ -9,60 +8,16 @@ namespace CXX { namespace Parser { - // Keep this symbol first to help HP-UX linker (long symbols?). - // - Content::Value Context:: - content (SemanticGraph::Complex& c) - { - using namespace SemanticGraph; - - if (c.mixed_p ()) - return Content::mixed; - - if (c.inherits_p ()) - { - Type& base (c.inherits ().base ()); - - if (Complex* cb = dynamic_cast (&base)) - return content (*cb); - - if (base.is_a ()) - return Content::complex; - - // Everyhting else (built-in type and AnySimpleType) is simple - // content. - // - return Content::simple; - } - else - return Content::complex; - } - Context:: Context (std::wostream& o, SemanticGraph::Schema& root, SemanticGraph::Path const& path, - CLI::Options const& ops, + options_type const& ops, StringLiteralMap const* map, Regex const* he, Regex const* ie, Regex const* hie) - : CXX::Context (o, - root, - path, - map, - ops.value (), - ops.value (), - ops.value (), - ops.value (), - ops.value (), - ops.value (), - ops.value (), - ops.value (), - ops.value (), - ops.value (), - ops.value (), - ops.value ()), + : CXX::Context (o, root, path, ops, map), options (ops), xml_parser (xml_parser_), simple_base (simple_base_), @@ -77,11 +32,11 @@ namespace CXX hxx_expr (he), ixx_expr (ie), hxx_impl_expr (hie), - xml_parser_ (ops.value ()), - validation_ ((ops.value () == "expat" || - ops.value ()) && - !ops.value ()), - polymorphic_ (ops.value ()) + xml_parser_ (ops.xml_parser ()), + validation_ ((ops.xml_parser () == "expat" || + ops.generate_validation ()) && + !ops.suppress_validation ()), + polymorphic_ (ops.generate_polymorphic ()) { if (char_type == L"char") std_string_type = L"::std::string"; @@ -144,7 +99,34 @@ namespace CXX { } - Boolean Context:: + Content::Value Context:: + content (SemanticGraph::Complex& c) + { + using namespace SemanticGraph; + + if (c.mixed_p ()) + return Content::mixed; + + if (c.inherits_p ()) + { + Type& base (c.inherits ().base ()); + + if (Complex* cb = dynamic_cast (&base)) + return content (*cb); + + if (base.is_a ()) + return Content::complex; + + // Everyhting else (built-in type and AnySimpleType) is simple + // content. + // + return Content::simple; + } + else + return Content::complex; + } + + bool Context:: anonymous (SemanticGraph::Type& t) { return t.context ().count ("anonymous"); @@ -180,12 +162,6 @@ namespace CXX return m.context ().get ("member"); } - String const& Context:: - emember_cache (SemanticGraph::Member& m) - { - return m.context ().get ("member-cache"); - } - String const& Context:: emember_map (SemanticGraph::Member& m) { @@ -200,20 +176,20 @@ namespace CXX // Includes // - Void TypeForward:: + void TypeForward:: traverse (SemanticGraph::Type& t) { os << "class " << t.context ().get (name_key_) << ";"; } - Void Includes:: + void Includes:: traverse_ (SemanticGraph::Uses& u) { // Support for weak (forward) inclusion used in the file-per-type // compilation model. // SemanticGraph::Schema& s (u.schema ()); - Boolean weak (u.context ().count ("weak")); + bool weak (u.context ().count ("weak")); if (weak && (type_ == header || type_ == impl_header)) { @@ -233,6 +209,7 @@ namespace CXX s.context ().count ("renamed") ? s.context ().get ("renamed") : u.path ()); + path.normalize (); // Try to use the portable representation of the path. If that // fails, fall back to the native representation. @@ -240,15 +217,11 @@ namespace CXX NarrowString path_str; try { - path_str = path.string (); + path_str = path.posix_string (); } catch (SemanticGraph::InvalidPath const&) { -#if !defined(BOOST_FILESYSTEM_VERSION) || BOOST_FILESYSTEM_VERSION == 2 - path_str = path.native_file_string (); -#else path_str = path.string (); -#endif } String inc_path; @@ -258,12 +231,12 @@ namespace CXX case header: case source: { - inc_path = ctx_.hxx_expr->merge (path_str); + inc_path = ctx_.hxx_expr->replace (path_str); break; } case impl_header: { - inc_path = ctx_.hxx_impl_expr->merge (path_str); + inc_path = ctx_.hxx_impl_expr->replace (path_str); break; } } diff --git a/xsd/xsd/cxx/parser/elements.hxx b/xsd/xsd/cxx/parser/elements.hxx index ee5ca86..31f5d87 100644 --- a/xsd/xsd/cxx/parser/elements.hxx +++ b/xsd/xsd/cxx/parser/elements.hxx @@ -1,6 +1,5 @@ // file : xsd/cxx/parser/elements.hxx -// author : Boris Kolpackov -// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file #ifndef CXX_PARSER_ELEMENTS_HXX @@ -8,11 +7,13 @@ #include -#include +#include + +#include #include -#include +#include namespace CXX { @@ -33,13 +34,15 @@ namespace CXX class Context: public CXX::Context { public: - typedef BackendElements::Regex::Expression Regex; + typedef cutl::re::regexsub Regex; + + typedef Parser::options options_type; public: Context (std::wostream&, SemanticGraph::Schema&, SemanticGraph::Path const& path, - CLI::Options const&, + options_type const&, StringLiteralMap const*, Regex const* hxx_expr, Regex const* ixx_expr, @@ -50,7 +53,7 @@ namespace CXX Context (Context& c, std::wostream& o); public: - Boolean + bool restriction_p (SemanticGraph::Complex& c) const { if (c.inherits_p () && @@ -69,7 +72,7 @@ namespace CXX content (SemanticGraph::Complex&); public: - static Boolean + static bool anonymous (SemanticGraph::Type&); public: @@ -89,9 +92,6 @@ namespace CXX static String const& emember (SemanticGraph::Member&); - static String const& - emember_cache (SemanticGraph::Member&); - static String const& emember_map (SemanticGraph::Member&); @@ -100,7 +100,7 @@ namespace CXX eimpl (SemanticGraph::Type&); public: - CLI::Options const& options; + options_type const& options; String& xml_parser; String& simple_base; String& complex_base; @@ -109,8 +109,8 @@ namespace CXX String& cerr_inst; String& parser_map; String& std_string_type; - Boolean& validation; - Boolean& polymorphic; + bool& validation; + bool& polymorphic; Regex const* hxx_expr; Regex const* ixx_expr; @@ -125,20 +125,20 @@ namespace CXX String cerr_inst_; String parser_map_; String std_string_type_; - Boolean validation_; - Boolean polymorphic_; + bool validation_; + bool polymorphic_; }; // // struct RequiredAttributeTest: Traversal::Attribute { - RequiredAttributeTest (Boolean& result) + RequiredAttributeTest (bool& result) : result_ (result) { } - virtual Void + virtual void traverse (Type& a) { if (!result_ && !a.optional_p ()) @@ -146,7 +146,7 @@ namespace CXX } private: - Boolean& result_; + bool& result_; }; // @@ -156,14 +156,14 @@ namespace CXX Traversal::Member, Context { - ParserParamDecl (Context& c, Boolean name_arg) + ParserParamDecl (Context& c, bool name_arg) : Context (c), first_ (true), name_arg_ (name_arg) { inherits_ >> *this; names_ >> *this; } - virtual Void + virtual void traverse (SemanticGraph::Complex& c) { inherits (c, inherits_); @@ -172,7 +172,7 @@ namespace CXX names (c, names_); } - virtual Void + virtual void traverse (SemanticGraph::List& l) { if (!first_) @@ -188,7 +188,7 @@ namespace CXX os << " /* " << comment (l.name ()) << " item */"; } - virtual Void + virtual void traverse (SemanticGraph::Member& m) { if (skip (m)) return; @@ -210,8 +210,8 @@ namespace CXX Traversal::Inherits inherits_; Traversal::Names names_; - Boolean first_; - Boolean name_arg_; + bool first_; + bool name_arg_; }; @@ -219,16 +219,16 @@ namespace CXX // struct TypeForward: Traversal::Type, Context { - TypeForward (Context& c, Char const* name_key) + TypeForward (Context& c, char const* name_key) : Context (c), name_key_ (name_key) { } - virtual Void + virtual void traverse (SemanticGraph::Type& t); private: - Char const* name_key_; + char const* name_key_; }; struct Includes: Traversal::Imports, @@ -250,20 +250,20 @@ namespace CXX schema_ >> schema_names_ >> namespace_ >> names_ >> type_forward_; } - virtual Void + virtual void traverse (SemanticGraph::Imports& i) { traverse_ (i); } - virtual Void + virtual void traverse (SemanticGraph::Includes& i) { traverse_ (i); } private: - Void + void traverse_ (SemanticGraph::Uses&); private: @@ -281,21 +281,23 @@ namespace CXX // struct RootElement: Traversal::Element { - RootElement (CLI::Options const& options, + typedef Parser::options options_type; + + RootElement (options_type const& options, SemanticGraph::Element*& element) : options_ (options), element_ (element) { } - virtual Void + virtual void traverse (Type& e) { - if (options_.value ()) + if (options_.root_element_first ()) { if (element_ == 0) element_ = &e; } - else if (String name = options_.value ()) + else if (String name = options_.root_element ()) { if (e.name () == name) element_ = &e; @@ -305,7 +307,7 @@ namespace CXX } private: - CLI::Options const& options_; + options_type const& options_; SemanticGraph::Element*& element_; }; } diff --git a/xsd/xsd/cxx/parser/generator.cxx b/xsd/xsd/cxx/parser/generator.cxx index b3aee76..e17986b 100644 --- a/xsd/xsd/cxx/parser/generator.cxx +++ b/xsd/xsd/cxx/parser/generator.cxx @@ -1,8 +1,19 @@ // file : xsd/cxx/parser/generator.cxx -// author : Boris Kolpackov -// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file +#include +#include +#include + +#include + +#include +#include +#include + +#include + #include #include #include @@ -28,49 +39,28 @@ #include #include -#include - -#include -#include -#include -#include - -#include -#include - -#include - -#include - -#include +#include #include "../../../libxsd/xsd/cxx/version.hxx" using std::endl; using std::wcerr; +using std::wcout; using namespace XSDFrontend::SemanticGraph; // // -typedef -boost::filesystem::wifstream -WideInputFileStream; - -typedef -boost::filesystem::wofstream -WideOutputFileStream; - -typedef -boost::filesystem::ifstream -NarrowInputFileStream; +typedef std::wifstream WideInputFileStream; +typedef std::wofstream WideOutputFileStream; +typedef std::ifstream NarrowInputFileStream; namespace CXX { namespace { - Char const copyright_gpl[] = - "// Copyright (C) 2005-2010 Code Synthesis Tools CC\n" + char const copyright_gpl[] = + "// Copyright (c) 2005-2014 Code Synthesis Tools CC\n" "//\n" "// This program was generated by CodeSynthesis XSD, an XML Schema to\n" "// C++ data binding compiler.\n" @@ -103,8 +93,8 @@ namespace CXX "// in the accompanying FLOSSE file.\n" "//\n\n"; - Char const copyright_proprietary[] = - "// Copyright (C) 2005-2010 Code Synthesis Tools CC\n" + char const copyright_proprietary[] = + "// Copyright (c) 2005-2014 Code Synthesis Tools CC\n" "//\n" "// This program was generated by CodeSynthesis XSD, an XML Schema\n" "// to C++ data binding compiler, in the Proprietary License mode.\n" @@ -113,7 +103,7 @@ namespace CXX "// conditions.\n" "//\n\n"; - Char const copyright_impl[] = + char const copyright_impl[] = "// Not copyrighted - public domain.\n" "//\n" "// This sample parser implementation was generated by CodeSynthesis XSD,\n" @@ -122,442 +112,24 @@ namespace CXX "//\n\n"; } - namespace Parser - { - namespace CLI - { - extern Key type_map = "type-map"; - extern Key char_type = "char-type"; - extern Key char_encoding = "char-encoding"; - extern Key output_dir = "output-dir"; - extern Key xml_parser = "xml-parser"; - extern Key generate_inline = "generate-inline"; - extern Key generate_validation = "generate-validation"; - extern Key suppress_validation = "suppress-validation"; - extern Key generate_polymorphic = "generate-polymorphic"; - extern Key generate_noop_impl = "generate-noop-impl"; - extern Key generate_print_impl = "generate-print-impl"; - extern Key generate_test_driver = "generate-test-driver"; - extern Key force_overwrite = "force-overwrite"; - extern Key root_element_first = "root-element-first"; - extern Key root_element_last = "root-element-last"; - extern Key root_element = "root-element"; - extern Key generate_xml_schema = "generate-xml-schema"; - extern Key extern_xml_schema = "extern-xml-schema"; - extern Key skel_type_suffix = "skel-type-suffix"; - extern Key skel_file_suffix = "skel-file-suffix"; - extern Key impl_type_suffix = "impl-type-suffix"; - extern Key impl_file_suffix = "impl-file-suffix"; - extern Key namespace_map = "namespace-map"; - extern Key namespace_regex = "namespace-regex"; - extern Key namespace_regex_trace = "namespace-regex-trace"; - extern Key reserved_name = "reserved-name"; - extern Key include_with_brackets = "include-with-brackets"; - extern Key include_prefix = "include-prefix"; - extern Key include_regex = "include-regex"; - extern Key include_regex_trace = "include-regex-trace"; - extern Key guard_prefix = "guard-prefix"; - extern Key hxx_suffix = "hxx-suffix"; - extern Key ixx_suffix = "ixx-suffix"; - extern Key cxx_suffix = "cxx-suffix"; - extern Key hxx_regex = "hxx-regex"; - extern Key ixx_regex = "ixx-regex"; - extern Key cxx_regex = "cxx-regex"; - extern Key hxx_prologue = "hxx-prologue"; - extern Key ixx_prologue = "ixx-prologue"; - extern Key cxx_prologue = "cxx-prologue"; - extern Key prologue = "prologue"; - extern Key hxx_epilogue = "hxx-epilogue"; - extern Key ixx_epilogue = "ixx-epilogue"; - extern Key cxx_epilogue = "cxx-epilogue"; - extern Key epilogue = "epilogue"; - extern Key hxx_prologue_file = "hxx-prologue-file"; - extern Key ixx_prologue_file = "ixx-prologue-file"; - extern Key cxx_prologue_file = "cxx-prologue-file"; - extern Key prologue_file = "prologue-file"; - extern Key hxx_epilogue_file = "hxx-epilogue-file"; - extern Key ixx_epilogue_file = "ixx-epilogue-file"; - extern Key cxx_epilogue_file = "cxx-epilogue-file"; - extern Key epilogue_file = "epilogue-file"; - extern Key export_symbol = "export-symbol"; - extern Key export_maps = "export-maps"; - extern Key import_maps = "import-maps"; - extern Key show_anonymous = "show-anonymous"; - extern Key show_sloc = "show-sloc"; - extern Key proprietary_license = "proprietary-license"; - } - } - - Void Parser::Generator:: + void Parser::Generator:: usage () { - std::wostream& e (wcerr); - ::CLI::Indent::Clip< ::CLI::OptionsUsage, WideChar> clip (e); - - e << "--type-map " << endl - << " Read XML Schema to C++ type mapping information\n" - << " from . Repeat this option to specify\n" - << " several type maps. Type maps are considered in\n" - << " order of appearance and the first match is used." - << endl; - - e << "--char-type " << endl - << " Use as the base character type. Valid\n" - << " values are 'char' (default) and 'wchar_t'." - << endl; - - e << "--char-encoding " << endl - << " Specify the character encoding that should be used\n" - << " in the object model. Valid values for the 'char'\n" - << " character type are 'utf8' (default), 'iso8859-1',\n" - << " 'lcp', and 'custom'. For the 'wchar_t' character\n" - << " type the only valid value is 'auto'." - << endl; - - e << "--output-dir " << endl - << " Write generated files to instead of current\n" - << " directory." - << endl; - - e << "--xml-parser " << endl - << " Use as the underlying XML parser. Valid\n" - << " values are 'xerces' (default) and 'expat'." - << endl; - - e << "--generate-inline" << endl - << " Generate certain functions inline." - << endl; - - e << "--generate-validation" << endl - << " Generate validation code." - << endl; - - e << "--suppress-validation" << endl - << " Suppress the generation of validation code." - << endl; - - e << "--generate-polymorphic" << endl - << " Generate polymorphism-aware code. Specify this\n" - << " option if you use substitution groups or xsi:type." - << endl; - - e << "--generate-noop-impl" << endl - << " Generate a sample parser implementation that\n" - << " does nothing (no operation)." - << endl; - - e << "--generate-print-impl" << endl - << " Generate a sample parser implementation that\n" - << " prints the XML data to STDOUT." - << endl; - - e << "--generate-test-driver" << endl - << " Generate a test driver for the sample parser\n" - << " implementation." - << endl; - - e << "--force-overwrite" << endl - << " Force overwriting of the existing implementation\n" - << " and test driver files." - << endl; - - e << "--root-element-first" << endl - << " Indicate that the first global element is the\n" - << " document root." - << endl; - - e << "--root-element-last" << endl - << " Indicate that the last global element is the\n" - << " document root." - << endl; - - e << "--root-element " << endl - << " Indicate that is the document root." - << endl; - - e << "--generate-xml-schema" << endl - << " Generate a C++ header file as if the schema being\n" - << " compiled defines the XML Schema namespace." - << endl; - - e << "--extern-xml-schema " << endl - << " Generate code as if the XML Schema namespace was\n" - << " defined in and xsd:included in the schema\n" - << " being compiled." - << endl; - - e << "--skel-type-suffix " << endl - << " Use instead of the default '_pskel' to\n" - << " construct the names of generated parser skeletons." - << endl; - - e << "--skel-file-suffix " << endl - << " Use instead of the default '-pskel' to\n" - << " construct the names of generated parser skeleton\n" - << " files." - << endl; - - e << "--impl-type-suffix " << endl - << " Use instead of the default '_pimpl' to\n" - << " construct the names of parser implementations for\n" - << " the built-in XML Schema types and sample parser\n" - << " implementations." - << endl; - - e << "--impl-file-suffix " << endl - << " Use instead of the default '-pimpl' to\n" - << " construct the names of generated sample parser\n" - << " implementation files." - << endl; - - e << "--namespace-map =" << endl - << " Map XML Schema namespace to C++ namespace\n" - << " . Repeat this option to specify mapping for\n" - << " more than one XML Schema namespace." - << endl; - - e << "--namespace-regex " << endl - << " Add to the list of regular expressions\n" - << " used to translate XML Schema namespace names to\n" - << " C++ namespace names." - << endl; - - e << "--namespace-regex-trace" << endl - << " Trace the process of applying regular expressions\n" - << " specified with the --namespace-regex option." - << endl; - - e << "--reserved-name " << endl - << " Add to the list of names that should not\n" - << " be used as identifiers. The name can optionally\n" - << " be followed by '=' and the replacement name that\n" - << " should be used instead." - << endl; - - e << "--include-with-brackets" << endl - << " Use angle brackets (<>) instead of quotes (\"\") in\n" - << " generated #include directives." - << endl; - - e << "--include-prefix " << endl - << " Add to generated #include directive\n" - << " paths." - << endl; - - e << "--include-regex " << endl - << " Add to the list of regular expressions\n" - << " used to transform #include directive paths." - << endl; - - e << "--include-regex-trace" << endl - << " Trace the process of applying regular expressions\n" - << " specified with the --include-regex option." - << endl; - - e << "--guard-prefix " << endl - << " Add to generated header inclusion guards." - << endl; - - e << "--hxx-suffix " << endl - << " Use instead of the default '.hxx' to\n" - << " construct the name of the header file." - << endl; - - e << "--ixx-suffix " << endl - << " Use instead of the default '.ixx' to\n" - << " construct the name of the inline file." - << endl; - - e << "--cxx-suffix " << endl - << " Use instead of the default '.cxx' to\n" - << " construct the name of the source file." - << endl; - - e << "--hxx-regex " << endl - << " Use to construct the name of the header\n" - << " file." - << endl; - - e << "--ixx-regex " << endl - << " Use to construct the name of the inline\n" - << " file." - << endl; - - e << "--cxx-regex " << endl - << " Use to construct the name of the source\n" - << " file." - << endl; - - - // Prologues. - // - e << "--hxx-prologue " << endl - << " Insert at the beginning of the header file." - << endl; - - e << "--ixx-prologue " << endl - << " Insert at the beginning of the inline file." - << endl; - - e << "--cxx-prologue " << endl - << " Insert at the beginning of the source file." - << endl; - - e << "--prologue " << endl - << " Insert at the beginning of each generated\n" - << " file for which there is no file-specific prologue." - << endl; - - - // Epilogues. - // - e << "--hxx-epilogue " << endl - << " Insert at the end of the header file." - << endl; - - e << "--ixx-epilogue " << endl - << " Insert at the end of the inline file." - << endl; - - e << "--cxx-epilogue " << endl - << " Insert at the end of the source file." - << endl; - - e << "--epilogue " << endl - << " Insert at the end of each generated file\n" - << " for which there is no file-specific epilogue." - << endl; - - - // Prologue files. - // - e << "--hxx-prologue-file " << endl - << " Insert the content of the at the beginning\n" - << " of the header file." - << endl; - - e << "--ixx-prologue-file " << endl - << " Insert the content of the at the beginning\n" - << " of the inline file." - << endl; - - e << "--cxx-prologue-file " << endl - << " Insert the content of the at the beginning\n" - << " of the source file." - << endl; - - e << "--prologue-file " << endl - << " Insert the content of the at the beginning\n" - << " of each generated file for which there is no file-\n" - << " specific prologue file." - << endl; - - - // Epilogue files. - // - e << "--hxx-epilogue-file " << endl - << " Insert the content of the at the end of\n" - << " the header file." - << endl; - - e << "--ixx-epilogue-file " << endl - << " Insert the content of the at the end of\n" - << " the inline file." - << endl; - - e << "--cxx-epilogue-file " << endl - << " Insert the content of the at the end of\n" - << " the source file." - << endl; - - e << "--epilogue-file " << endl - << " Insert the content of the at the end of\n" - << " each generated file for which there is no file-\n" - << " specific epilogue file." - << endl; - - - // Misc. - // - e << "--custom-literals " << endl - << " Load custom XML string to C++ literal mappings\n" - << " from ." - << endl; - - e << "--export-symbol " << endl - << " Export symbol for Win32 DLL export/import control." - << endl; - - e << "--export-maps" << endl - << " Export polymorphism support maps from Win32 DLL." - << endl; - - e << "--import-maps" << endl - << " Import polymorphism support maps from Win32 DLL." - << endl; - - e << "--show-anonymous" << endl - << " Show elements and attributes that are of anonymous\n" - << " types." - << endl; - - e << "--show-sloc" << endl - << " Show the number of generated physical source lines\n" - << " of code (SLOC)." - << endl; - - e << "--sloc-limit " << endl - << " Check that the number of generated physical source\n" - << " lines of code (SLOC) does not exceed ." - << endl; - - e << "--options-file " << endl - << " Read additional options from . Each option\n" - << " should appear on a separate line optionally\n" - << " followed by space and an argument." - << endl; - - e << "--proprietary-license" << endl - << " Indicate that the generated code is licensed under\n" - << " a proprietary license instead of the GPL." - << endl; + CXX::Parser::options::print_usage (wcout); + CXX::options::print_usage (wcout); } - Parser::CLI::OptionsSpec Parser::Generator:: - options_spec () - { - CLI::OptionsSpec spec; - - spec.option ().default_value ("char"); - spec.option ().default_value ("xerces"); - - spec.option ().default_value ("-pskel"); - spec.option ().default_value ("_pskel"); - spec.option ().default_value ("-pimpl"); - spec.option ().default_value ("_pimpl"); - - spec.option ().default_value (".hxx"); - spec.option ().default_value (".ixx"); - spec.option ().default_value (".cxx"); - - return spec; - } - - namespace { template - Void + void open (S& ifs, NarrowString const& path) { try { -#if !defined(BOOST_FILESYSTEM_VERSION) || BOOST_FILESYSTEM_VERSION == 2 - Path fs_path (path, boost::filesystem::native); -#else - Path fs_path (path.c_str()); -#endif - ifs.open (fs_path, std::ios_base::in | std::ios_base::binary); + Path fs_path (path); + ifs.open (fs_path.string ().c_str (), + std::ios_base::in | std::ios_base::binary); if (!ifs.is_open ()) { @@ -576,7 +148,7 @@ namespace CXX } } - Void + void append (WideOutputFileStream& os, NarrowString const& path, WideInputFileStream& default_is) @@ -596,16 +168,15 @@ namespace CXX } } - Void + void append (WideOutputFileStream& os, - Cult::Containers::Vector const& primary, - Cult::Containers::Vector const& def) + NarrowStrings const& primary, + NarrowStrings const& def) { - Cult::Containers::Vector const& v ( - primary.empty () ? def : primary); + NarrowStrings const& v (primary.empty () ? def : primary); - for (Containers::Vector::ConstIterator - i (v.begin ()), e (v.end ()); i != e; ++i) + for (NarrowStrings::const_iterator i (v.begin ()), e (v.end ()); + i != e; ++i) { os << i->c_str () << endl; } @@ -613,25 +184,24 @@ namespace CXX } - UnsignedLong Parser::Generator:: - generate (Parser::CLI::Options const& ops, + size_t Parser::Generator:: + generate (Parser::options const& ops, Schema& schema, Path const& file_path, - Boolean fpt, + bool fpt, StringLiteralMap const& string_literal_map, - Boolean gen_driver, + bool gen_driver, const WarningSet& disabled_warnings, FileList& file_list, AutoUnlinks& unlinks) { using std::ios_base; - namespace Indentation = BackendElements::Indentation; - typedef BackendElements::Regex::Expression Regex; + typedef cutl::re::regexsub Regex; try { - Boolean generate_xml_schema (ops.value ()); + bool generate_xml_schema (ops.generate_xml_schema ()); // We could be compiling several schemas at once in which case // handling of the --generate-xml-schema option gets tricky: we @@ -640,23 +210,19 @@ namespace CXX // if (generate_xml_schema) { - if (NarrowString name = ops.value ()) + if (NarrowString name = ops.extern_xml_schema ()) { -#if !defined(BOOST_FILESYSTEM_VERSION) || BOOST_FILESYSTEM_VERSION == 2 - if (file_path.native_file_string () != name) -#else if (file_path.string () != name) -#endif generate_xml_schema = false; } } - Boolean impl (!generate_xml_schema && - (ops.value () || - ops.value ())); + bool impl (!generate_xml_schema && + (ops.generate_noop_impl () || + ops.generate_print_impl ())); - Boolean driver (gen_driver && !generate_xml_schema && - ops.value ()); + bool driver (gen_driver && !generate_xml_schema && + ops.generate_test_driver ()); // Evaluate the graph for possibility of generating something useful. // @@ -674,9 +240,9 @@ namespace CXX proc.process (ops, schema, file_path, string_literal_map); } - Boolean validation ((ops.value () == "expat" || - ops.value ()) && - !ops.value ()); + bool validation ((ops.xml_parser () == "expat" || + ops.generate_validation ()) && + !ops.suppress_validation ()); // Compute state machine info. // @@ -691,11 +257,11 @@ namespace CXX TypeMap::Namespaces type_map; { using namespace TypeMap; - typedef Containers::Vector Files; - Files const& files (ops.value ()); + NarrowStrings const& files (ops.type_map ()); - for (Files::ConstIterator f (files.begin ()); f != files.end (); ++f ) + for (NarrowStrings::const_iterator f (files.begin ()); + f != files.end (); ++f ) { NarrowInputFileStream ifs; open (ifs, *f); @@ -712,7 +278,7 @@ namespace CXX // String-based types. // - String char_type (ops.value ()); + String char_type (ops.char_type ()); String string_type; if (char_type == L"char") @@ -723,12 +289,14 @@ namespace CXX string_type = L"::std::basic_string< " + char_type + L" >"; String xns; + String auto_ptr; { Context ctx (std::wcerr, schema, file_path, ops, 0, 0, 0, 0); xns = ctx.xs_ns_name (); + auto_ptr = ctx.auto_ptr; } - String buffer (L"::std::auto_ptr< " + xns + L"::buffer >"); + String buffer (auto_ptr + L"< " + xns + L"::buffer >"); TypeMap::Namespace xsd ("http://www\\.w3\\.org/2001/XMLSchema"); xsd.types_push_back ("string", string_type); @@ -800,7 +368,7 @@ namespace CXX type_map.push_back (xsd); - // Everyhting else maps to void. + // Everything else maps to void. // TypeMap::Namespace rest (".*"); rest.types_push_back (".*", "void", "void"); @@ -816,39 +384,33 @@ namespace CXX // // - Boolean inline_ (ops.value () && - !generate_xml_schema); - - Boolean source (!generate_xml_schema); + bool inline_ (ops.generate_inline () && !generate_xml_schema); + bool source (!generate_xml_schema); // Generate code. // -#if !defined(BOOST_FILESYSTEM_VERSION) || BOOST_FILESYSTEM_VERSION == 2 - NarrowString name (file_path.leaf ()); -#else - NarrowString name (file_path.filename().string()); -#endif - NarrowString skel_suffix (ops.value ()); - NarrowString impl_suffix (ops.value ()); - - NarrowString hxx_suffix (ops.value ()); - NarrowString ixx_suffix (ops.value ()); - NarrowString cxx_suffix (ops.value ()); + NarrowString name (file_path.leaf ().string ()); + NarrowString skel_suffix (ops.skel_file_suffix ()); + NarrowString impl_suffix (ops.impl_file_suffix ()); + + NarrowString hxx_suffix (ops.hxx_suffix ()); + NarrowString ixx_suffix (ops.ixx_suffix ()); + NarrowString cxx_suffix (ops.cxx_suffix ()); Regex hxx_expr ( - ops.value ().empty () + ops.hxx_regex ().empty () ? "#^(.+?)(\\.[^./\\\\]+)?$#$1" + skel_suffix + hxx_suffix + "#" - : ops.value ()); + : ops.hxx_regex ()); Regex ixx_expr ( - ops.value ().empty () + ops.ixx_regex ().empty () ? "#^(.+?)(\\.[^./\\\\]+)?$#$1" + skel_suffix + ixx_suffix + "#" - : ops.value ()); + : ops.ixx_regex ()); Regex cxx_expr ( - ops.value ().empty () + ops.cxx_regex ().empty () ? "#^(.+?)(\\.[^./\\\\]+)?$#$1" + skel_suffix + cxx_suffix + "#" - : ops.value ()); + : ops.cxx_regex ()); Regex hxx_impl_expr; @@ -870,7 +432,7 @@ namespace CXX if (!hxx_expr.match (name)) { wcerr << "error: header expression '" << - hxx_expr.pattern () << "' does not match '" << + hxx_expr.regex ().str ().c_str () << "' does not match '" << name.c_str () << "'" << endl; throw Failed (); } @@ -878,7 +440,7 @@ namespace CXX if (inline_ && !ixx_expr.match (name)) { wcerr << "error: inline expression '" << - ixx_expr.pattern () << "' does not match '" << + ixx_expr.regex ().str ().c_str () << "' does not match '" << name.c_str () << "'" << endl; throw Failed (); } @@ -886,7 +448,7 @@ namespace CXX if (source && !cxx_expr.match (name)) { wcerr << "error: source expression '" << - cxx_expr.pattern () << "' does not match '" << + cxx_expr.regex ().str ().c_str () << "' does not match '" << name.c_str () << "'" << endl; throw Failed (); } @@ -896,7 +458,7 @@ namespace CXX if (!hxx_impl_expr.match (name)) { wcerr << "error: implementation header expression '" << - hxx_impl_expr.pattern () << "' does not match '" << + hxx_impl_expr.regex ().str ().c_str () << "' does not match '" << name.c_str () << "'" << endl; throw Failed (); } @@ -904,7 +466,7 @@ namespace CXX if (!cxx_impl_expr.match (name)) { wcerr << "error: implementation source expression '" << - cxx_impl_expr.pattern () << "' does not match '" << + cxx_impl_expr.regex ().str ().c_str () << "' does not match '" << name.c_str () << "'" << endl; throw Failed (); } @@ -912,15 +474,15 @@ namespace CXX if (!cxx_driver_expr.match (name)) { wcerr << "error: driver source expression '" << - cxx_driver_expr.pattern () << "' does not match '" << + cxx_driver_expr.regex ().str ().c_str () << "' does not match '" << name.c_str () << "'" << endl; throw Failed (); } } - NarrowString hxx_name (hxx_expr.merge (name)); - NarrowString ixx_name (inline_ ? ixx_expr.merge (name) : NarrowString ()); - NarrowString cxx_name (source ? cxx_expr.merge (name) : NarrowString ()); + NarrowString hxx_name (hxx_expr.replace (name)); + NarrowString ixx_name (inline_ ? ixx_expr.replace (name) : NarrowString ()); + NarrowString cxx_name (source ? cxx_expr.replace (name) : NarrowString ()); NarrowString hxx_impl_name; NarrowString cxx_impl_name; @@ -928,20 +490,14 @@ namespace CXX if (impl || driver) { - hxx_impl_name = hxx_impl_expr.merge (name); - cxx_impl_name = cxx_impl_expr.merge (name); - cxx_driver_name = cxx_driver_expr.merge (name); + hxx_impl_name = hxx_impl_expr.replace (name); + cxx_impl_name = cxx_impl_expr.replace (name); + cxx_driver_name = cxx_driver_expr.replace (name); } -#if !defined(BOOST_FILESYSTEM_VERSION) || BOOST_FILESYSTEM_VERSION == 2 - Path hxx_path (hxx_name, boost::filesystem::native); - Path ixx_path (ixx_name, boost::filesystem::native); - Path cxx_path (cxx_name, boost::filesystem::native); -#else - Path hxx_path (hxx_name.c_str()); - Path ixx_path (ixx_name.c_str()); - Path cxx_path (cxx_name.c_str()); -#endif + Path hxx_path (hxx_name); + Path ixx_path (ixx_name); + Path cxx_path (cxx_name); Path hxx_impl_path; Path cxx_impl_path; @@ -949,28 +505,18 @@ namespace CXX if (impl || driver) { -#if !defined(BOOST_FILESYSTEM_VERSION) || BOOST_FILESYSTEM_VERSION == 2 - hxx_impl_path = Path (hxx_impl_name, boost::filesystem::native); - cxx_impl_path = Path (cxx_impl_name, boost::filesystem::native); - cxx_driver_path = Path (cxx_driver_name, boost::filesystem::native); -#else - hxx_impl_path = Path (hxx_impl_name.c_str()); - cxx_impl_path = Path (cxx_impl_name.c_str()); - cxx_driver_path = Path (cxx_driver_name.c_str()); -#endif + hxx_impl_path = Path (hxx_impl_name); + cxx_impl_path = Path (cxx_impl_name); + cxx_driver_path = Path (cxx_driver_name); } Path out_dir; - if (NarrowString dir = ops.value ()) + if (NarrowString dir = ops.output_dir ()) { try { -#if !defined(BOOST_FILESYSTEM_VERSION) || BOOST_FILESYSTEM_VERSION == 2 - out_dir = Path (dir, boost::filesystem::native); -#else - out_dir = Path (dir.c_str()); -#endif + out_dir = Path (dir); } catch (InvalidPath const&) { @@ -985,7 +531,7 @@ namespace CXX // unless the user added the directory so that we propagate this // to the output files. // - Path fpt_dir (file_path.branch_path ()); + Path fpt_dir (file_path.directory ()); if (!fpt_dir.empty ()) out_dir /= fpt_dir; @@ -1014,9 +560,10 @@ namespace CXX if (impl) { - if (!ops.value ()) + if (!ops.force_overwrite ()) { - WideInputFileStream tmp (hxx_impl_path, ios_base::in); + WideInputFileStream tmp ( + hxx_impl_path.string ().c_str (), ios_base::in); if (tmp.is_open ()) { @@ -1028,7 +575,7 @@ namespace CXX tmp.close (); } - hxx_impl.open (hxx_impl_path, ios_base::out); + hxx_impl.open (hxx_impl_path.string ().c_str (), ios_base::out); if (!hxx_impl.is_open ()) { @@ -1038,15 +585,12 @@ namespace CXX } unlinks.add (hxx_impl_path); -#if !defined(BOOST_FILESYSTEM_VERSION) || BOOST_FILESYSTEM_VERSION == 2 - file_list.push_back (hxx_impl_path.native_file_string ()); -#else file_list.push_back (hxx_impl_path.string ()); -#endif - if (!ops.value ()) + if (!ops.force_overwrite ()) { - WideInputFileStream tmp (cxx_impl_path, ios_base::in); + WideInputFileStream tmp ( + cxx_impl_path.string ().c_str (), ios_base::in); if (tmp.is_open ()) { @@ -1058,7 +602,7 @@ namespace CXX tmp.close (); } - cxx_impl.open (cxx_impl_path, ios_base::out); + cxx_impl.open (cxx_impl_path.string ().c_str (), ios_base::out); if (!cxx_impl.is_open ()) { @@ -1068,18 +612,15 @@ namespace CXX } unlinks.add (cxx_impl_path); -#if !defined(BOOST_FILESYSTEM_VERSION) || BOOST_FILESYSTEM_VERSION == 2 - file_list.push_back (cxx_impl_path.native_file_string ()); -#else file_list.push_back (cxx_impl_path.string ()); -#endif } if (driver) { - if (!ops.value ()) + if (!ops.force_overwrite ()) { - WideInputFileStream tmp (cxx_driver_path, ios_base::in); + WideInputFileStream tmp ( + cxx_driver_path.string ().c_str (), ios_base::in); if (tmp.is_open ()) { @@ -1091,7 +632,7 @@ namespace CXX tmp.close (); } - cxx_driver.open (cxx_driver_path, ios_base::out); + cxx_driver.open (cxx_driver_path.string ().c_str (), ios_base::out); if (!cxx_driver.is_open ()) { @@ -1101,16 +642,12 @@ namespace CXX } unlinks.add (cxx_driver_path); -#if !defined(BOOST_FILESYSTEM_VERSION) || BOOST_FILESYSTEM_VERSION == 2 - file_list.push_back (cxx_driver_path.native_file_string ()); -#else file_list.push_back (cxx_driver_path.string ()); -#endif } // Open the skel files. // - WideOutputFileStream hxx (hxx_path, ios_base::out); + WideOutputFileStream hxx (hxx_path.string ().c_str (), ios_base::out); WideOutputFileStream ixx; WideOutputFileStream cxx; @@ -1121,15 +658,11 @@ namespace CXX } unlinks.add (hxx_path); -#if !defined(BOOST_FILESYSTEM_VERSION) || BOOST_FILESYSTEM_VERSION == 2 - file_list.push_back (hxx_path.native_file_string ()); -#else file_list.push_back (hxx_path.string ()); -#endif if (inline_) { - ixx.open (ixx_path, ios_base::out); + ixx.open (ixx_path.string ().c_str (), ios_base::out); if (!ixx.is_open ()) { @@ -1138,17 +671,13 @@ namespace CXX } unlinks.add (ixx_path); -#if !defined(BOOST_FILESYSTEM_VERSION) || BOOST_FILESYSTEM_VERSION == 2 - file_list.push_back (ixx_path.native_file_string ()); -#else file_list.push_back (ixx_path.string ()); -#endif } if (source) { - cxx.open (cxx_path, ios_base::out); + cxx.open (cxx_path.string ().c_str (), ios_base::out); if (!cxx.is_open ()) { @@ -1157,19 +686,13 @@ namespace CXX } unlinks.add (cxx_path); -#if !defined(BOOST_FILESYSTEM_VERSION) || BOOST_FILESYSTEM_VERSION == 2 - file_list.push_back (cxx_path.native_file_string ()); -#else file_list.push_back (cxx_path.string ()); -#endif } // Print copyright and license. // - Char const* copyright ( - ops.value () - ? copyright_proprietary - : copyright_gpl); + char const* copyright ( + ops.proprietary_license () ? copyright_proprietary : copyright_gpl); hxx << copyright; @@ -1192,7 +715,7 @@ namespace CXX // WideInputFileStream prologue; { - NarrowString name (ops.value ()); + NarrowString name (ops.prologue_file ()); if (name) open (prologue, name); @@ -1202,7 +725,7 @@ namespace CXX // WideInputFileStream epilogue; { - NarrowString name (ops.value ()); + NarrowString name (ops.epilogue_file ()); if (name) open (epilogue, name); @@ -1210,21 +733,25 @@ namespace CXX // SLOC counter. // - UnsignedLong sloc (0); - Boolean show_sloc (ops.value ()); + size_t sloc_total (0); + bool show_sloc (ops.show_sloc ()); + + typedef + compiler::ostream_filter + ind_filter; + + typedef + compiler::ostream_filter + sloc_filter; // // Regex guard_expr ("/([a-z])([A-Z])/$1_$2/"); // Split words. - NarrowString guard_prefix (ops.value ()); + NarrowString guard_prefix (ops.guard_prefix ()); if (!guard_prefix) -#if !defined(BOOST_FILESYSTEM_VERSION) || BOOST_FILESYSTEM_VERSION == 2 - guard_prefix = file_path.branch_path ().native_directory_string (); -#else - guard_prefix = file_path.branch_path ().string (); -#endif + guard_prefix = file_path.directory ().string (); if (guard_prefix) guard_prefix += '_'; @@ -1241,9 +768,9 @@ namespace CXX &ixx_expr, &hxx_impl_expr); - Indentation::Clip hxx_sloc (hxx); + sloc_filter sloc (hxx); - String guard (guard_expr.merge (guard_prefix + hxx_name)); + String guard (guard_expr.replace (guard_prefix + hxx_name)); guard = ctx.escape (guard); // Make it a C++ id. std::transform (guard.begin (), guard.end(), guard.begin (), upcase); @@ -1251,14 +778,21 @@ namespace CXX << "#define " << guard << endl << endl; + if (ctx.std >= cxx_version::cxx11) + { + hxx << "#ifndef XSD_CXX11" << endl + << "#define XSD_CXX11" << endl + << "#endif" << endl + << endl; + } + // Copy prologue. // hxx << "// Begin prologue." << endl << "//" << endl; - append ( - hxx, ops.value (), ops.value ()); - append (hxx, ops.value (), prologue); + append (hxx, ops.hxx_prologue (), ops.prologue ()); + append (hxx, ops.hxx_prologue_file (), prologue); hxx << "//" << endl << "// End prologue." << endl @@ -1273,38 +807,33 @@ namespace CXX << "#endif" << endl << endl; - { - hxx << "#include " << endl - << endl; - - // Set auto-indentation. - // - Indentation::Clip hxx_clip (hxx); + hxx << "#include " << endl + << endl; + // Generate. + // + { + ind_filter ind (hxx); // We don't want to indent prologues/epilogues. - // Generate. - // if (!generate_xml_schema) generate_parser_forward (ctx); generate_parser_header (ctx, generate_xml_schema); + } + if (inline_) + hxx << "#include " << ctx.process_include_path (ixx_name) << endl; - if (inline_) - hxx << "#include " << ctx.process_include_path (ixx_name) << endl; - - hxx << "#include " << endl - << endl; - } + hxx << "#include " << endl + << endl; // Copy epilogue. // hxx << "// Begin epilogue." << endl << "//" << endl; - append (hxx, ops.value (), epilogue); - append ( - hxx, ops.value (), ops.value ()); + append (hxx, ops.hxx_epilogue_file (), epilogue); + append (hxx, ops.hxx_epilogue (), ops.epilogue ()); hxx << "//" << endl << "// End epilogue." << endl @@ -1313,12 +842,9 @@ namespace CXX hxx << "#endif // " << guard << endl; if (show_sloc) - { - wcerr << hxx_path << ": " - << hxx_sloc.buffer ().count () << endl; + wcerr << hxx_path << ": " << sloc.stream ().count () << endl; - sloc += hxx_sloc.buffer ().count (); - } + sloc_total += sloc.stream ().count (); } @@ -1335,30 +861,24 @@ namespace CXX &ixx_expr, &hxx_impl_expr); - Indentation::Clip ixx_sloc (ixx); - + sloc_filter sloc (ixx); // Copy prologue. // ixx << "// Begin prologue." << endl << "//" << endl; - append ( - ixx, ops.value (), ops.value ()); - append (ixx, ops.value (), prologue); + append (ixx, ops.ixx_prologue (), ops.prologue ()); + append (ixx, ops.ixx_prologue_file (), prologue); ixx << "//" << endl << "// End prologue." << endl << endl; + // Generate. + // { - // Set auto-indentation. - // - Indentation::Clip ixx_clip (ixx); - - - // Generate. - // + ind_filter ind (ixx); // We don't want to indent prologues/epilogues. generate_parser_inline (ctx); } @@ -1367,21 +887,17 @@ namespace CXX ixx << "// Begin epilogue." << endl << "//" << endl; - append (ixx, ops.value (), epilogue); - append ( - ixx, ops.value (), ops.value ()); + append (ixx, ops.ixx_epilogue_file (), epilogue); + append (ixx, ops.ixx_epilogue (), ops.epilogue ()); ixx << "//" << endl << "// End epilogue." << endl << endl; if (show_sloc) - { - wcerr << ixx_path << ": " - << ixx_sloc.buffer ().count () << endl; + wcerr << ixx_path << ": " << sloc.stream ().count () << endl; - sloc += ixx_sloc.buffer ().count (); - } + sloc_total += sloc.stream ().count (); } @@ -1398,28 +914,30 @@ namespace CXX &ixx_expr, &hxx_impl_expr); - Indentation::Clip cxx_sloc (cxx); + sloc_filter sloc (cxx); // Copy prologue. // cxx << "// Begin prologue." << endl << "//" << endl; - append ( - cxx, ops.value (), ops.value ()); - append (cxx, ops.value (), prologue); + append (cxx, ops.cxx_prologue (), ops.prologue ()); + append (cxx, ops.cxx_prologue_file (), prologue); cxx << "//" << endl << "// End prologue." << endl << endl; - { - // Set auto-indentation. - // - Indentation::Clip cxx_clip (cxx); + cxx << "#include " << endl + << endl; - cxx << "#include " << ctx.process_include_path (hxx_name) << endl - << endl; + cxx << "#include " << ctx.process_include_path (hxx_name) << endl + << endl; + + // Generate. + // + { + ind_filter ind (cxx); // We don't want to indent prologues/epilogues. if (!inline_) generate_parser_inline (ctx); @@ -1434,26 +952,25 @@ namespace CXX } } + cxx << "#include " << endl + << endl; + // Copy epilogue. // cxx << "// Begin epilogue." << endl << "//" << endl; - append (cxx, ops.value (), epilogue); - append ( - cxx, ops.value (), ops.value ()); + append (cxx, ops.cxx_epilogue_file (), epilogue); + append (cxx, ops.cxx_epilogue (), ops.epilogue ()); cxx << "//" << endl << "// End epilogue." << endl << endl; if (show_sloc) - { - wcerr << cxx_path << ": " - << cxx_sloc.buffer ().count () << endl; + wcerr << cxx_path << ": " << sloc.stream ().count () << endl; - sloc += cxx_sloc.buffer ().count (); - } + sloc_total += sloc.stream ().count (); } // HXX impl @@ -1469,7 +986,7 @@ namespace CXX &ixx_expr, &hxx_impl_expr); - String guard (guard_expr.merge (guard_prefix + hxx_impl_name)); + String guard (guard_expr.replace (guard_prefix + hxx_impl_name)); guard = ctx.escape (guard); // Make it a C++ id. std::transform (guard.begin (), guard.end(), guard.begin (), upcase); @@ -1477,14 +994,11 @@ namespace CXX << "#define " << guard << endl << endl; - { - // Set auto-indentation. - // - Indentation::Clip clip (hxx_impl); - - hxx_impl << "#include " << ctx.process_include_path (hxx_name) - << endl << endl; + hxx_impl << "#include " << ctx.process_include_path (hxx_name) + << endl << endl; + { + ind_filter ind (hxx_impl); generate_impl_header (ctx); } @@ -1504,14 +1018,13 @@ namespace CXX &ixx_expr, &hxx_impl_expr); - // Set auto-indentation. - // - Indentation::Clip clip (cxx_impl); - cxx_impl << "#include " << ctx.process_include_path (hxx_impl_name) << endl << endl; - generate_impl_source (ctx); + { + ind_filter ind (cxx_impl); + generate_impl_source (ctx); + } } // CXX driver @@ -1527,17 +1040,16 @@ namespace CXX &ixx_expr, &hxx_impl_expr); - // Set auto-indentation. - // - Indentation::Clip clip (cxx_driver); - cxx_driver << "#include " << ctx.process_include_path (hxx_impl_name) << endl << endl; - generate_driver_source (ctx); + { + ind_filter ind (cxx_driver); + generate_driver_source (ctx); + } } - return sloc; + return sloc_total; } catch (UnrepresentableCharacter const& e) { @@ -1569,18 +1081,18 @@ namespace CXX throw Failed (); } - catch (BackendElements::Regex::Format const& e) + catch (cutl::re::format const& e) { wcerr << "error: invalid regex: '" << - e.expression ().c_str () << "': " << + e.regex ().c_str () << "': " << e.description ().c_str () << endl; throw Failed (); } - catch (BackendElements::Regex::Format const& e) + catch (cutl::re::wformat const& e) { wcerr << "error: invalid regex: '" << - e.expression () << "': " << e.description () << endl; + e.regex () << "': " << e.description ().c_str () << endl; throw Failed (); } diff --git a/xsd/xsd/cxx/parser/generator.hxx b/xsd/xsd/cxx/parser/generator.hxx index eaa1ecd..784ca9d 100644 --- a/xsd/xsd/cxx/parser/generator.hxx +++ b/xsd/xsd/cxx/parser/generator.hxx @@ -1,50 +1,38 @@ // file : xsd/cxx/parser/generator.hxx -// author : Boris Kolpackov -// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file #ifndef CXX_PARSER_GENERATOR_HXX #define CXX_PARSER_GENERATOR_HXX -#include - -#include - -#include -#include - #include // Path #include #include +#include #include -#include +#include namespace CXX { namespace Parser { - using namespace Cult::Types; - class Generator { public: - static Void + static void usage (); - static CLI::OptionsSpec - options_spec (); - struct Failed {}; - static UnsignedLong - generate (CLI::Options const& options, + static size_t + generate (options const&, XSDFrontend::SemanticGraph::Schema&, XSDFrontend::SemanticGraph::Path const& file, - Boolean file_per_type, + bool file_per_type, StringLiteralMap const&, - Boolean gen_driver, + bool gen_driver, const WarningSet& disabled_warnings, FileList& file_list, AutoUnlinks& unlinks); diff --git a/xsd/xsd/cxx/parser/impl-header.cxx b/xsd/xsd/cxx/parser/impl-header.cxx index ff635f1..a3d47a4 100644 --- a/xsd/xsd/cxx/parser/impl-header.cxx +++ b/xsd/xsd/cxx/parser/impl-header.cxx @@ -1,6 +1,5 @@ // file : xsd/cxx/parser/impl-header.cxx -// author : Boris Kolpackov -// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file #include @@ -21,7 +20,7 @@ namespace CXX { } - virtual Void + virtual void traverse (Type& e) { String const& name (eimpl (e)); @@ -51,7 +50,7 @@ namespace CXX { } - virtual Void + virtual void traverse (Type& l) { String const& name (eimpl (l)); @@ -98,7 +97,7 @@ namespace CXX { } - virtual Void + virtual void traverse (Type& u) { String const& name (eimpl (u)); @@ -130,7 +129,7 @@ namespace CXX { } - virtual Void + virtual void traverse (Type& m) { if (skip (m)) @@ -161,7 +160,7 @@ namespace CXX names_parser_callback_ >> parser_callback_; } - virtual Void + virtual void traverse (Type& c) { String const& name (eimpl (c)); @@ -202,12 +201,12 @@ namespace CXX }; } - Void + void generate_impl_header (Context& ctx) { Traversal::Schema schema; - Traversal::Sources sources; + Sources sources; Includes includes (ctx, Includes::impl_header); Traversal::Names schema_names; diff --git a/xsd/xsd/cxx/parser/impl-header.hxx b/xsd/xsd/cxx/parser/impl-header.hxx index dd63e52..273201b 100644 --- a/xsd/xsd/cxx/parser/impl-header.hxx +++ b/xsd/xsd/cxx/parser/impl-header.hxx @@ -1,6 +1,5 @@ // file : xsd/cxx/parser/impl-header.hxx -// author : Boris Kolpackov -// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file #ifndef CXX_PARSER_IMPL_HEADER_HXX @@ -12,7 +11,7 @@ namespace CXX { namespace Parser { - Void + void generate_impl_header (Context&); } } diff --git a/xsd/xsd/cxx/parser/impl-source.cxx b/xsd/xsd/cxx/parser/impl-source.cxx index b951f6a..ad85f81 100644 --- a/xsd/xsd/cxx/parser/impl-source.cxx +++ b/xsd/xsd/cxx/parser/impl-source.cxx @@ -1,6 +1,5 @@ // file : xsd/cxx/parser/impl-source.cxx -// author : Boris Kolpackov -// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file #include @@ -22,7 +21,7 @@ namespace CXX { } - virtual Void + virtual void traverse (Type& e) { String const& name (eimpl (e)); @@ -57,7 +56,7 @@ namespace CXX os << arg_type (base) << " v (" << post_name (base) << " ());" << endl; - if (options.value ()) + if (options.generate_print_impl ()) { PrintCall t (*this, e.name (), "v"); t.dispatch (base); @@ -91,7 +90,7 @@ namespace CXX { } - virtual Void + virtual void traverse (Type& l) { String const& name (eimpl (l)); @@ -126,7 +125,7 @@ namespace CXX if (arg != L"void") { - if (options.value ()) + if (options.generate_print_impl ()) { PrintCall t (*this, type.name (), item); t.dispatch (type); @@ -164,7 +163,7 @@ namespace CXX { } - virtual Void + virtual void traverse (Type& u) { String const& name (eimpl (u)); @@ -186,7 +185,7 @@ namespace CXX << "_characters (const " << string_type << "& s)" << "{"; - if (options.value ()) + if (options.generate_print_impl ()) os << cout_inst << " << " << strlit (u.name () + L": ") << " << s << std::endl;"; else @@ -221,7 +220,7 @@ namespace CXX { } - virtual Void + virtual void traverse (Type& m) { if (skip (m)) @@ -244,7 +243,7 @@ namespace CXX if (arg != L"void") { - if (options.value ()) + if (options.generate_print_impl ()) { PrintCall t (*this, m.name (), name); t.dispatch (m.type ()); @@ -268,12 +267,12 @@ namespace CXX names_parser_callback_ >> parser_callback_; } - virtual Void + virtual void traverse (Type& c) { String const& name (eimpl (c)); - Boolean restriction (restriction_p (c)); + bool restriction (restriction_p (c)); os << "// " << name << endl << "//" << endl @@ -314,7 +313,7 @@ namespace CXX os << arg_type (base) << " v (" << post_name (base) << " ());" << endl; - if (options.value ()) + if (options.generate_print_impl ()) { PrintCall t (*this, c.name (), "v"); t.dispatch (base); @@ -354,15 +353,15 @@ namespace CXX }; } - Void + void generate_impl_source (Context& ctx) { - if (ctx.options.value ()) + if (ctx.options.generate_print_impl ()) ctx.os << "#include " << endl << endl; Traversal::Schema schema; - Traversal::Sources sources; + Sources sources; Traversal::Names schema_names; Namespace ns (ctx); Traversal::Names names; diff --git a/xsd/xsd/cxx/parser/impl-source.hxx b/xsd/xsd/cxx/parser/impl-source.hxx index 0d60162..b6f9b3d 100644 --- a/xsd/xsd/cxx/parser/impl-source.hxx +++ b/xsd/xsd/cxx/parser/impl-source.hxx @@ -1,6 +1,5 @@ // file : xsd/cxx/parser/impl-source.hxx -// author : Boris Kolpackov -// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file #ifndef CXX_PARSER_IMPL_SOURCE_HXX @@ -12,7 +11,7 @@ namespace CXX { namespace Parser { - Void + void generate_impl_source (Context&); } } diff --git a/xsd/xsd/cxx/parser/name-processor.cxx b/xsd/xsd/cxx/parser/name-processor.cxx index d323187..219a3c9 100644 --- a/xsd/xsd/cxx/parser/name-processor.cxx +++ b/xsd/xsd/cxx/parser/name-processor.cxx @@ -1,66 +1,47 @@ // file : xsd/cxx/parser/name-processor.cxx -// author : Boris Kolpackov -// copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2006-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file +#include +#include +#include +#include + #include #include #include -#include -#include -#include +using namespace std; namespace CXX { namespace Parser { - NameProcessor:: - NameProcessor () - { - // Dummy ctor, helps with long symbols on HP-UX. - } - namespace { // // - typedef Cult::Containers::Set NameSet; + typedef set NameSet; class Context: public CXX::Context { public: - Context (CLI::Options const& ops, + Context (Parser::options const& ops, SemanticGraph::Schema& root, SemanticGraph::Path const& path, StringLiteralMap const* map) - : CXX::Context (std::wcerr, - root, - path, - map, - ops.value (), - ops.value (), - ops.value (), - ops.value (), - ops.value (), - ops.value (), - ops.value (), - ops.value (), - ops.value (), - ops.value (), - ops.value (), - ops.value ()), - skel_suffix_ (ops.value ()), - impl_suffix_ (ops.value ()), - impl (ops.value () || - ops.value () || - ops.value ()), + : CXX::Context (std::wcerr, root, path, ops, map), + skel_suffix_ (ops.skel_type_suffix ()), + impl_suffix_ (ops.impl_type_suffix ()), + impl (ops.generate_noop_impl () || + ops.generate_print_impl () || + ops.generate_test_driver ()), skel_suffix (skel_suffix_), impl_suffix (impl_suffix_), global_type_names (global_type_names_), - polymorphic (ops.value ()) + polymorphic (ops.generate_polymorphic ()) { } @@ -82,7 +63,7 @@ namespace CXX String base_name (escape (n)); String name (base_name); - for (UnsignedLong i (1); set.find (name) != set.end (); ++i) + for (size_t i (1); set.find (name) != set.end (); ++i) { std::wostringstream os; os << i; @@ -97,16 +78,16 @@ namespace CXX String const skel_suffix_; String const impl_suffix_; - Cult::Containers::Map global_type_names_; + map global_type_names_; public: - Boolean const impl; + bool const impl; String const& skel_suffix; String const& impl_suffix; - Cult::Containers::Map& global_type_names; + map& global_type_names; - Boolean polymorphic; + bool polymorphic; }; @@ -119,7 +100,7 @@ namespace CXX { } - virtual Void + virtual void traverse (Type& m) { if (Parser::Context::skip (m)) @@ -139,7 +120,7 @@ namespace CXX { } - virtual Void + virtual void traverse (Type& m) { if (Parser::Context::skip (m)) @@ -155,9 +136,6 @@ namespace CXX m.is_a () && !m.type ().context ().count ("anonymous")) { - m.context ().set ( - "member-cache", find_name (base + L"_parser_cache_", set_)); - m.context ().set ( "member-map", find_name (base + L"_parser_map_", set_)); @@ -245,7 +223,7 @@ namespace CXX { } - virtual Void + virtual void traverse (Type& m) { if (Parser::Context::skip (m)) @@ -282,17 +260,17 @@ namespace CXX { } - virtual Void + virtual void traverse (Type& m) { if (Parser::Context::skip (m)) return; - Boolean poly (polymorphic && + bool poly (polymorphic && m.is_a () && !m.type ().context ().count ("anonymous")); - String parser, member, member_cache, member_map, member_map_impl; + String parser, member, member_map, member_map_impl; try { @@ -306,7 +284,6 @@ namespace CXX if (poly) { - member_cache = bm.context ().get ("member-cache"); member_map = bm.context ().get ("member-map"); member_map_impl = bm.context ().get ("member-map-impl"); } @@ -322,7 +299,6 @@ namespace CXX if (poly) { - member_cache = find_name (base + L"_parser_cache_", set_); member_map = find_name (base + L"_parser_map_", set_); member_map_impl = find_name (base + L"_parser_map_impl_", set_); } @@ -333,7 +309,6 @@ namespace CXX if (poly) { - m.context ().set ("member-cache", member_cache); m.context ().set ("member-map", member_map); m.context ().set ("member-map-impl", member_map_impl); } @@ -349,7 +324,7 @@ namespace CXX { } - virtual Void + virtual void traverse (Type& c) { SemanticGraph::Context& cc (c.context ()); @@ -371,7 +346,7 @@ namespace CXX // inheriting by restriction in which case we need to have // the same names as our base. // - Boolean restriction (false); + bool restriction (false); if (c.inherits_p ()) { @@ -464,7 +439,7 @@ namespace CXX { } - virtual Void + virtual void traverse (SemanticGraph::Type& t) { SemanticGraph::Context& c (t.context ()); @@ -533,7 +508,7 @@ namespace CXX String base_name (escape (L"post_" + n)); String post (base_name); - for (UnsignedLong i (1); set.find (post) != set.end (); ++i) + for (size_t i (1); set.find (post) != set.end (); ++i) { std::wostringstream os; os << i; @@ -556,7 +531,7 @@ namespace CXX { } - virtual Void + virtual void traverse (Type& ns) { NameSet& type_set (global_type_names[ns.name ()]); @@ -634,7 +609,7 @@ namespace CXX // anyType & anySimpleType. // - virtual Void + virtual void traverse (SemanticGraph::AnyType& t) { t.context ().set ("name", make_skel_name ("any_type")); @@ -642,7 +617,7 @@ namespace CXX t.context ().set ("post", String ("post_any_type")); } - virtual Void + virtual void traverse (SemanticGraph::AnySimpleType& t) { t.context ().set ("name", make_skel_name ("any_simple_type")); @@ -652,7 +627,7 @@ namespace CXX // Boolean. // - virtual Void + virtual void traverse (SemanticGraph::Fundamental::Boolean& t) { t.context ().set ("name", make_skel_name ("boolean")); @@ -662,7 +637,7 @@ namespace CXX // Integral types. // - virtual Void + virtual void traverse (SemanticGraph::Fundamental::Byte& t) { t.context ().set ("name", make_skel_name ("byte")); @@ -670,7 +645,7 @@ namespace CXX t.context ().set ("post", String ("post_byte")); } - virtual Void + virtual void traverse (SemanticGraph::Fundamental::UnsignedByte& t) { t.context ().set ("name", make_skel_name ("unsigned_byte")); @@ -678,7 +653,7 @@ namespace CXX t.context ().set ("post", String ("post_unsigned_byte")); } - virtual Void + virtual void traverse (SemanticGraph::Fundamental::Short& t) { t.context ().set ("name", make_skel_name ("short")); @@ -686,7 +661,7 @@ namespace CXX t.context ().set ("post", String ("post_short")); } - virtual Void + virtual void traverse (SemanticGraph::Fundamental::UnsignedShort& t) { t.context ().set ("name", make_skel_name ("unsigned_short")); @@ -694,7 +669,7 @@ namespace CXX t.context ().set ("post", String ("post_unsigned_short")); } - virtual Void + virtual void traverse (SemanticGraph::Fundamental::Int& t) { t.context ().set ("name", make_skel_name ("int")); @@ -702,7 +677,7 @@ namespace CXX t.context ().set ("post", String ("post_int")); } - virtual Void + virtual void traverse (SemanticGraph::Fundamental::UnsignedInt& t) { t.context ().set ("name", make_skel_name ("unsigned_int")); @@ -710,7 +685,7 @@ namespace CXX t.context ().set ("post", String ("post_unsigned_int")); } - virtual Void + virtual void traverse (SemanticGraph::Fundamental::Long& t) { t.context ().set ("name", make_skel_name ("long")); @@ -718,7 +693,7 @@ namespace CXX t.context ().set ("post", String ("post_long")); } - virtual Void + virtual void traverse (SemanticGraph::Fundamental::UnsignedLong& t) { t.context ().set ("name", make_skel_name ("unsigned_long")); @@ -726,7 +701,7 @@ namespace CXX t.context ().set ("post", String ("post_unsigned_long")); } - virtual Void + virtual void traverse (SemanticGraph::Fundamental::Integer& t) { t.context ().set ("name", make_skel_name ("integer")); @@ -734,7 +709,7 @@ namespace CXX t.context ().set ("post", String ("post_integer")); } - virtual Void + virtual void traverse (SemanticGraph::Fundamental::NonPositiveInteger& t) { t.context ().set ("name", make_skel_name ("non_positive_integer")); @@ -742,7 +717,7 @@ namespace CXX t.context ().set ("post", String ("post_non_positive_integer")); } - virtual Void + virtual void traverse (SemanticGraph::Fundamental::NonNegativeInteger& t) { t.context ().set ("name", make_skel_name ("non_negative_integer")); @@ -750,7 +725,7 @@ namespace CXX t.context ().set ("post", String ("post_non_negative_integer")); } - virtual Void + virtual void traverse (SemanticGraph::Fundamental::PositiveInteger& t) { t.context ().set ("name", make_skel_name ("positive_integer")); @@ -758,7 +733,7 @@ namespace CXX t.context ().set ("post", String ("post_positive_integer")); } - virtual Void + virtual void traverse (SemanticGraph::Fundamental::NegativeInteger& t) { t.context ().set ("name", make_skel_name ("negative_integer")); @@ -768,7 +743,7 @@ namespace CXX // Floats. // - virtual Void + virtual void traverse (SemanticGraph::Fundamental::Float& t) { t.context ().set ("name", make_skel_name ("float")); @@ -776,7 +751,7 @@ namespace CXX t.context ().set ("post", String ("post_float")); } - virtual Void + virtual void traverse (SemanticGraph::Fundamental::Double& t) { t.context ().set ("name", make_skel_name ("double")); @@ -784,7 +759,7 @@ namespace CXX t.context ().set ("post", String ("post_double")); } - virtual Void + virtual void traverse (SemanticGraph::Fundamental::Decimal& t) { t.context ().set ("name", make_skel_name ("decimal")); @@ -794,7 +769,7 @@ namespace CXX // Strings. // - virtual Void + virtual void traverse (SemanticGraph::Fundamental::String& t) { t.context ().set ("name", make_skel_name ("string")); @@ -802,7 +777,7 @@ namespace CXX t.context ().set ("post", String ("post_string")); } - virtual Void + virtual void traverse (SemanticGraph::Fundamental::NormalizedString& t) { t.context ().set ("name", make_skel_name ("normalized_string")); @@ -810,7 +785,7 @@ namespace CXX t.context ().set ("post", String ("post_normalized_string")); } - virtual Void + virtual void traverse (SemanticGraph::Fundamental::Token& t) { t.context ().set ("name", make_skel_name ("token")); @@ -818,7 +793,7 @@ namespace CXX t.context ().set ("post", String ("post_token")); } - virtual Void + virtual void traverse (SemanticGraph::Fundamental::NameToken& t) { t.context ().set ("name", make_skel_name ("nmtoken")); @@ -826,7 +801,7 @@ namespace CXX t.context ().set ("post", String ("post_nmtoken")); } - virtual Void + virtual void traverse (SemanticGraph::Fundamental::NameTokens& t) { t.context ().set ("name", make_skel_name ("nmtokens")); @@ -834,7 +809,7 @@ namespace CXX t.context ().set ("post", String ("post_nmtokens")); } - virtual Void + virtual void traverse (SemanticGraph::Fundamental::Name& t) { t.context ().set ("name", make_skel_name ("name")); @@ -842,7 +817,7 @@ namespace CXX t.context ().set ("post", String ("post_name")); } - virtual Void + virtual void traverse (SemanticGraph::Fundamental::NCName& t) { t.context ().set ("name", make_skel_name ("ncname")); @@ -850,7 +825,7 @@ namespace CXX t.context ().set ("post", String ("post_ncname")); } - virtual Void + virtual void traverse (SemanticGraph::Fundamental::Language& t) { t.context ().set ("name", make_skel_name ("language")); @@ -861,7 +836,7 @@ namespace CXX // Qualified name. // - virtual Void + virtual void traverse (SemanticGraph::Fundamental::QName& t) { t.context ().set ("name", make_skel_name ("qname")); @@ -872,7 +847,7 @@ namespace CXX // ID/IDREF. // - virtual Void + virtual void traverse (SemanticGraph::Fundamental::Id& t) { t.context ().set ("name", make_skel_name ("id")); @@ -880,7 +855,7 @@ namespace CXX t.context ().set ("post", String ("post_id")); } - virtual Void + virtual void traverse (SemanticGraph::Fundamental::IdRef& t) { t.context ().set ("name", make_skel_name ("idref")); @@ -888,7 +863,7 @@ namespace CXX t.context ().set ("post", String ("post_idref")); } - virtual Void + virtual void traverse (SemanticGraph::Fundamental::IdRefs& t) { t.context ().set ("name", make_skel_name ("idrefs")); @@ -898,7 +873,7 @@ namespace CXX // URI. // - virtual Void + virtual void traverse (SemanticGraph::Fundamental::AnyURI& t) { t.context ().set ("name", make_skel_name ("uri")); @@ -908,7 +883,7 @@ namespace CXX // Binary. // - virtual Void + virtual void traverse (SemanticGraph::Fundamental::Base64Binary& t) { t.context ().set ("name", make_skel_name ("base64_binary")); @@ -916,7 +891,7 @@ namespace CXX t.context ().set ("post", String ("post_base64_binary")); } - virtual Void + virtual void traverse (SemanticGraph::Fundamental::HexBinary& t) { t.context ().set ("name", make_skel_name ("hex_binary")); @@ -927,7 +902,7 @@ namespace CXX // Date/time. // - virtual Void + virtual void traverse (SemanticGraph::Fundamental::Date& t) { t.context ().set ("name", make_skel_name ("date")); @@ -935,7 +910,7 @@ namespace CXX t.context ().set ("post", String ("post_date")); } - virtual Void + virtual void traverse (SemanticGraph::Fundamental::DateTime& t) { t.context ().set ("name", make_skel_name ("date_time")); @@ -943,7 +918,7 @@ namespace CXX t.context ().set ("post", String ("post_date_time")); } - virtual Void + virtual void traverse (SemanticGraph::Fundamental::Duration& t) { t.context ().set ("name", make_skel_name ("duration")); @@ -951,7 +926,7 @@ namespace CXX t.context ().set ("post", String ("post_duration")); } - virtual Void + virtual void traverse (SemanticGraph::Fundamental::Day& t) { t.context ().set ("name", make_skel_name ("gday")); @@ -959,7 +934,7 @@ namespace CXX t.context ().set ("post", String ("post_gday")); } - virtual Void + virtual void traverse (SemanticGraph::Fundamental::Month& t) { t.context ().set ("name", make_skel_name ("gmonth")); @@ -967,7 +942,7 @@ namespace CXX t.context ().set ("post", String ("post_gmonth")); } - virtual Void + virtual void traverse (SemanticGraph::Fundamental::MonthDay& t) { t.context ().set ("name", make_skel_name ("gmonth_day")); @@ -975,7 +950,7 @@ namespace CXX t.context ().set ("post", String ("post_gmonth_day")); } - virtual Void + virtual void traverse (SemanticGraph::Fundamental::Year& t) { t.context ().set ("name", make_skel_name ("gyear")); @@ -983,7 +958,7 @@ namespace CXX t.context ().set ("post", String ("post_gyear")); } - virtual Void + virtual void traverse (SemanticGraph::Fundamental::YearMonth& t) { t.context ().set ("name", make_skel_name ("gyear_month")); @@ -991,7 +966,7 @@ namespace CXX t.context ().set ("post", String ("post_gyear_month")); } - virtual Void + virtual void traverse (SemanticGraph::Fundamental::Time& t) { t.context ().set ("name", make_skel_name ("time")); @@ -1001,7 +976,7 @@ namespace CXX // Entity. // - virtual Void + virtual void traverse (SemanticGraph::Fundamental::Entity& t) { t.context ().set ("name", make_skel_name ("entity")); @@ -1009,7 +984,7 @@ namespace CXX t.context ().set ("post", String ("post_entity")); } - virtual Void + virtual void traverse (SemanticGraph::Fundamental::Entities& t) { t.context ().set ("name", make_skel_name ("entities")); @@ -1038,7 +1013,7 @@ namespace CXX Traversal::Includes, Traversal::Imports { - virtual Void + virtual void traverse (SemanticGraph::Sources& sr) { SemanticGraph::Schema& s (sr.schema ()); @@ -1050,7 +1025,7 @@ namespace CXX } } - virtual Void + virtual void traverse (SemanticGraph::Includes& i) { SemanticGraph::Schema& s (i.schema ()); @@ -1062,7 +1037,7 @@ namespace CXX } } - virtual Void + virtual void traverse (SemanticGraph::Imports& i) { SemanticGraph::Schema& s (i.schema ()); @@ -1080,7 +1055,7 @@ namespace CXX // struct Implies: Traversal::Implies { - virtual Void + virtual void traverse (SemanticGraph::Implies& i) { SemanticGraph::Schema& s (i.schema ()); @@ -1093,8 +1068,8 @@ namespace CXX } }; - Void - process_impl (CLI::Options const& ops, + void + process_impl (options const& ops, SemanticGraph::Schema& tu, SemanticGraph::Path const& file, StringLiteralMap const& map) @@ -1169,7 +1144,7 @@ namespace CXX // { Traversal::Schema schema; - Traversal::Sources sources; + Sources sources; schema >> sources >> schema; @@ -1189,8 +1164,8 @@ namespace CXX } } - Void NameProcessor:: - process (CLI::Options const& ops, + void NameProcessor:: + process (options const& ops, SemanticGraph::Schema& tu, SemanticGraph::Path const& file, StringLiteralMap const& map) diff --git a/xsd/xsd/cxx/parser/name-processor.hxx b/xsd/xsd/cxx/parser/name-processor.hxx index 5c28371..0460ea4 100644 --- a/xsd/xsd/cxx/parser/name-processor.hxx +++ b/xsd/xsd/cxx/parser/name-processor.hxx @@ -1,6 +1,5 @@ // file : xsd/cxx/parser/name-processor.hxx -// author : Boris Kolpackov -// copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2006-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file #ifndef CXX_PARSER_NAME_PROCESSOR_HXX @@ -8,22 +7,20 @@ #include +#include + #include -#include +#include namespace CXX { namespace Parser { - using namespace Cult::Types; - class NameProcessor { public: - NameProcessor (); // Dummy ctor, helps with long symbols on HP-UX. - - Void - process (CLI::Options const& ops, + void + process (options const&, XSDFrontend::SemanticGraph::Schema&, XSDFrontend::SemanticGraph::Path const& file, StringLiteralMap const& map); diff --git a/xsd/xsd/cxx/parser/options.cli b/xsd/xsd/cxx/parser/options.cli new file mode 100644 index 0000000..227bb51 --- /dev/null +++ b/xsd/xsd/cxx/parser/options.cli @@ -0,0 +1,148 @@ +// file : xsd/cxx/parser/options.cli +// copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +include ; // std::size_t + +include ; // NarrowString, NarrowStrings + +include ; + +namespace CXX +{ + namespace Parser + { + class options: CXX::options + { + NarrowStrings --type-map + { + "", + "Read XML Schema to C++ type mapping information from . + Repeat this option to specify several type maps. Type maps are + considered in order of appearance and the first match is used. By + default all user-defined types are mapped to \cb{void}. See the + TYPE MAP section below for more information." + }; + + NarrowString --xml-parser = "xerces" + { + "", + "Use as the underlying XML parser. Valid values are + \cb{xerces} for Xerces-C++ (default) and \cb{expat} for Expat." + }; + + // Features. + // + bool --generate-validation + { + "Generate validation code. The validation code (\"perfect parser\") + ensures that instance documents conform to the schema. Validation + code is generated by default when the selected underlying XML parser + is non-validating (\cb{expat})." + }; + + bool --suppress-validation + { + "Suppress the generation of validation code. Validation is suppressed + by default when the selected underlying XML parser is validating + (\cb{xerces})." + }; + + bool --generate-polymorphic + { + "Generate polymorphism-aware code. Specify this option if you use + substitution groups or \cb{xsi:type}." + }; + + bool --generate-noop-impl + { + "Generate a sample parser implementation that does nothing (no + operation). The sample implementation can then be filled with + the application-specific code. For an input file in the form + \cb{name.xsd} this option triggers the generation of two + additional C++ files in the form: \cb{name-pimpl.hxx} (parser + implementation header file) and \cb{name-pimpl.cxx} (parser + implementation source file)." + }; + + bool --generate-print-impl + { + "Generate a sample parser implementation that prints the XML data + to \c{STDOUT}. For an input file in the form \cb{name.xsd} this + option triggers the generation of two additional C++ files in the + form: \cb{name-pimpl.hxx} (parser implementation header file) and + \cb{name-pimpl.cxx} (parser implementation source file)." + }; + + bool --generate-test-driver + { + "Generate a test driver for the sample parser implementation. For an + input file in the form \cb{name.xsd} this option triggers the + generation of an additional C++ file in the form + \cb{name-driver.cxx}." + }; + + bool --force-overwrite + { + "Force overwriting of the existing implementation and test driver + files. Use this option only if you do not mind loosing the changes + you have made in the sample implementation or test driver files." + }; + + // Root element. + // + bool --root-element-first + { + "Indicate that the first global element is the document root. This + information is used to generate the test driver for the sample + implementation." + }; + + bool --root-element-last + { + "Indicate that the last global element is the document root. This + information is used to generate the test driver for the sample + implementation." + }; + + NarrowString --root-element + { + "", + "Indicate that is the document root. This information is + used to generate the test driver for the sample implementation." + }; + + // Suffixes. + // + NarrowString --skel-type-suffix = "_pskel" + { + "", + "Use the provided instead of the default \cb{_pskel} to + construct the names of the generated parser skeletons." + }; + + NarrowString --skel-file-suffix = "-pskel" + { + "", + "Use the provided instead of the default \cb{-pskel} to + construct the names of the generated parser skeleton files." + }; + + NarrowString --impl-type-suffix = "_pimpl" + { + "", + "Use the provided instead of the default \cb{_pimpl} to + construct the names of the parser implementations for the built-in + XML Schema types as well as sample parser implementations." + }; + + NarrowString --impl-file-suffix = "-pimpl" + { + "", + "Use the provided instead of the default \cb{-pimpl} to + construct the names of the generated sample parser implementation + files." + }; + }; + } +} diff --git a/xsd/xsd/cxx/parser/options.cxx b/xsd/xsd/cxx/parser/options.cxx new file mode 100644 index 0000000..6f18446 --- /dev/null +++ b/xsd/xsd/cxx/parser/options.cxx @@ -0,0 +1,581 @@ +// This code was generated by CLI, a command line interface +// compiler for C++. +// + +// Begin prologue. +// +#include +// +// End prologue. + +#include + +#include +#include +#include +#include +#include +#include + +namespace cli +{ + template + struct parser + { + static void + parse (X& x, bool& xs, scanner& s) + { + std::string o (s.next ()); + + if (s.more ()) + { + std::string v (s.next ()); + std::istringstream is (v); + if (!(is >> x && is.eof ())) + throw invalid_value (o, v); + } + else + throw missing_value (o); + + xs = true; + } + }; + + template <> + struct parser + { + static void + parse (bool& x, scanner& s) + { + s.next (); + x = true; + } + }; + + template <> + struct parser + { + static void + parse (std::string& x, bool& xs, scanner& s) + { + const char* o (s.next ()); + + if (s.more ()) + x = s.next (); + else + throw missing_value (o); + + xs = true; + } + }; + + template + struct parser > + { + static void + parse (std::vector& c, bool& xs, scanner& s) + { + X x; + bool dummy; + parser::parse (x, dummy, s); + c.push_back (x); + xs = true; + } + }; + + template + struct parser > + { + static void + parse (std::set& c, bool& xs, scanner& s) + { + X x; + bool dummy; + parser::parse (x, dummy, s); + c.insert (x); + xs = true; + } + }; + + template + struct parser > + { + static void + parse (std::map& m, bool& xs, scanner& s) + { + std::string o (s.next ()); + + if (s.more ()) + { + std::string ov (s.next ()); + std::string::size_type p = ov.find ('='); + + if (p == std::string::npos) + { + K k = K (); + + if (!ov.empty ()) + { + std::istringstream ks (ov); + + if (!(ks >> k && ks.eof ())) + throw invalid_value (o, ov); + } + + m[k] = V (); + } + else + { + K k = K (); + V v = V (); + std::string kstr (ov, 0, p); + std::string vstr (ov, p + 1); + + if (!kstr.empty ()) + { + std::istringstream ks (kstr); + + if (!(ks >> k && ks.eof ())) + throw invalid_value (o, ov); + } + + if (!vstr.empty ()) + { + std::istringstream vs (vstr); + + if (!(vs >> v && vs.eof ())) + throw invalid_value (o, ov); + } + + m[k] = v; + } + } + else + throw missing_value (o); + + xs = true; + } + }; + + template + void + thunk (X& x, scanner& s) + { + parser::parse (x.*M, s); + } + + template + void + thunk (X& x, scanner& s) + { + parser::parse (x.*M, x.*S, s); + } +} + +#include +#include + +namespace CXX +{ + namespace Parser + { + // options + // + + options:: + options () + : type_map_ (), + type_map_specified_ (false), + xml_parser_ ("xerces"), + xml_parser_specified_ (false), + generate_validation_ (), + suppress_validation_ (), + generate_polymorphic_ (), + generate_noop_impl_ (), + generate_print_impl_ (), + generate_test_driver_ (), + force_overwrite_ (), + root_element_first_ (), + root_element_last_ (), + root_element_ (), + root_element_specified_ (false), + skel_type_suffix_ ("_pskel"), + skel_type_suffix_specified_ (false), + skel_file_suffix_ ("-pskel"), + skel_file_suffix_specified_ (false), + impl_type_suffix_ ("_pimpl"), + impl_type_suffix_specified_ (false), + impl_file_suffix_ ("-pimpl"), + impl_file_suffix_specified_ (false) + { + } + + options:: + options (int& argc, + char** argv, + bool erase, + ::cli::unknown_mode opt, + ::cli::unknown_mode arg) + : type_map_ (), + type_map_specified_ (false), + xml_parser_ ("xerces"), + xml_parser_specified_ (false), + generate_validation_ (), + suppress_validation_ (), + generate_polymorphic_ (), + generate_noop_impl_ (), + generate_print_impl_ (), + generate_test_driver_ (), + force_overwrite_ (), + root_element_first_ (), + root_element_last_ (), + root_element_ (), + root_element_specified_ (false), + skel_type_suffix_ ("_pskel"), + skel_type_suffix_specified_ (false), + skel_file_suffix_ ("-pskel"), + skel_file_suffix_specified_ (false), + impl_type_suffix_ ("_pimpl"), + impl_type_suffix_specified_ (false), + impl_file_suffix_ ("-pimpl"), + impl_file_suffix_specified_ (false) + { + ::cli::argv_scanner s (argc, argv, erase); + _parse (s, opt, arg); + } + + options:: + options (int start, + int& argc, + char** argv, + bool erase, + ::cli::unknown_mode opt, + ::cli::unknown_mode arg) + : type_map_ (), + type_map_specified_ (false), + xml_parser_ ("xerces"), + xml_parser_specified_ (false), + generate_validation_ (), + suppress_validation_ (), + generate_polymorphic_ (), + generate_noop_impl_ (), + generate_print_impl_ (), + generate_test_driver_ (), + force_overwrite_ (), + root_element_first_ (), + root_element_last_ (), + root_element_ (), + root_element_specified_ (false), + skel_type_suffix_ ("_pskel"), + skel_type_suffix_specified_ (false), + skel_file_suffix_ ("-pskel"), + skel_file_suffix_specified_ (false), + impl_type_suffix_ ("_pimpl"), + impl_type_suffix_specified_ (false), + impl_file_suffix_ ("-pimpl"), + impl_file_suffix_specified_ (false) + { + ::cli::argv_scanner s (start, argc, argv, erase); + _parse (s, opt, arg); + } + + options:: + options (int& argc, + char** argv, + int& end, + bool erase, + ::cli::unknown_mode opt, + ::cli::unknown_mode arg) + : type_map_ (), + type_map_specified_ (false), + xml_parser_ ("xerces"), + xml_parser_specified_ (false), + generate_validation_ (), + suppress_validation_ (), + generate_polymorphic_ (), + generate_noop_impl_ (), + generate_print_impl_ (), + generate_test_driver_ (), + force_overwrite_ (), + root_element_first_ (), + root_element_last_ (), + root_element_ (), + root_element_specified_ (false), + skel_type_suffix_ ("_pskel"), + skel_type_suffix_specified_ (false), + skel_file_suffix_ ("-pskel"), + skel_file_suffix_specified_ (false), + impl_type_suffix_ ("_pimpl"), + impl_type_suffix_specified_ (false), + impl_file_suffix_ ("-pimpl"), + impl_file_suffix_specified_ (false) + { + ::cli::argv_scanner s (argc, argv, erase); + _parse (s, opt, arg); + end = s.end (); + } + + options:: + options (int start, + int& argc, + char** argv, + int& end, + bool erase, + ::cli::unknown_mode opt, + ::cli::unknown_mode arg) + : type_map_ (), + type_map_specified_ (false), + xml_parser_ ("xerces"), + xml_parser_specified_ (false), + generate_validation_ (), + suppress_validation_ (), + generate_polymorphic_ (), + generate_noop_impl_ (), + generate_print_impl_ (), + generate_test_driver_ (), + force_overwrite_ (), + root_element_first_ (), + root_element_last_ (), + root_element_ (), + root_element_specified_ (false), + skel_type_suffix_ ("_pskel"), + skel_type_suffix_specified_ (false), + skel_file_suffix_ ("-pskel"), + skel_file_suffix_specified_ (false), + impl_type_suffix_ ("_pimpl"), + impl_type_suffix_specified_ (false), + impl_file_suffix_ ("-pimpl"), + impl_file_suffix_specified_ (false) + { + ::cli::argv_scanner s (start, argc, argv, erase); + _parse (s, opt, arg); + end = s.end (); + } + + options:: + options (::cli::scanner& s, + ::cli::unknown_mode opt, + ::cli::unknown_mode arg) + : type_map_ (), + type_map_specified_ (false), + xml_parser_ ("xerces"), + xml_parser_specified_ (false), + generate_validation_ (), + suppress_validation_ (), + generate_polymorphic_ (), + generate_noop_impl_ (), + generate_print_impl_ (), + generate_test_driver_ (), + force_overwrite_ (), + root_element_first_ (), + root_element_last_ (), + root_element_ (), + root_element_specified_ (false), + skel_type_suffix_ ("_pskel"), + skel_type_suffix_specified_ (false), + skel_file_suffix_ ("-pskel"), + skel_file_suffix_specified_ (false), + impl_type_suffix_ ("_pimpl"), + impl_type_suffix_specified_ (false), + impl_file_suffix_ ("-pimpl"), + impl_file_suffix_specified_ (false) + { + _parse (s, opt, arg); + } + + void options:: + print_usage (::std::wostream& os) + { + os << "--type-map Read XML Schema to C++ type mapping information" << ::std::endl + << " from ." << ::std::endl; + + os << "--xml-parser Use as the underlying XML parser." << ::std::endl; + + os << "--generate-validation Generate validation code." << ::std::endl; + + os << "--suppress-validation Suppress the generation of validation code." << ::std::endl; + + os << "--generate-polymorphic Generate polymorphism-aware code." << ::std::endl; + + os << "--generate-noop-impl Generate a sample parser implementation that does" << ::std::endl + << " nothing (no operation)." << ::std::endl; + + os << "--generate-print-impl Generate a sample parser implementation that" << ::std::endl + << " prints the XML data to 'STDOUT'." << ::std::endl; + + os << "--generate-test-driver Generate a test driver for the sample parser" << ::std::endl + << " implementation." << ::std::endl; + + os << "--force-overwrite Force overwriting of the existing implementation" << ::std::endl + << " and test driver files." << ::std::endl; + + os << "--root-element-first Indicate that the first global element is the" << ::std::endl + << " document root." << ::std::endl; + + os << "--root-element-last Indicate that the last global element is the" << ::std::endl + << " document root." << ::std::endl; + + os << "--root-element Indicate that is the document root." << ::std::endl; + + os << "--skel-type-suffix Use the provided instead of the default" << ::std::endl + << " '_pskel' to construct the names of the generated" << ::std::endl + << " parser skeletons." << ::std::endl; + + os << "--skel-file-suffix Use the provided instead of the default" << ::std::endl + << " '-pskel' to construct the names of the generated" << ::std::endl + << " parser skeleton files." << ::std::endl; + + os << "--impl-type-suffix Use the provided instead of the default" << ::std::endl + << " '_pimpl' to construct the names of the parser" << ::std::endl + << " implementations for the built-in XML Schema types" << ::std::endl + << " as well as sample parser implementations." << ::std::endl; + + os << "--impl-file-suffix Use the provided instead of the default" << ::std::endl + << " '-pimpl' to construct the names of the generated" << ::std::endl + << " sample parser implementation files." << ::std::endl; + } + + typedef + std::map + _cli_options_map; + + static _cli_options_map _cli_options_map_; + + struct _cli_options_map_init + { + _cli_options_map_init () + { + _cli_options_map_["--type-map"] = + &::cli::thunk< options, NarrowStrings, &options::type_map_, + &options::type_map_specified_ >; + _cli_options_map_["--xml-parser"] = + &::cli::thunk< options, NarrowString, &options::xml_parser_, + &options::xml_parser_specified_ >; + _cli_options_map_["--generate-validation"] = + &::cli::thunk< options, bool, &options::generate_validation_ >; + _cli_options_map_["--suppress-validation"] = + &::cli::thunk< options, bool, &options::suppress_validation_ >; + _cli_options_map_["--generate-polymorphic"] = + &::cli::thunk< options, bool, &options::generate_polymorphic_ >; + _cli_options_map_["--generate-noop-impl"] = + &::cli::thunk< options, bool, &options::generate_noop_impl_ >; + _cli_options_map_["--generate-print-impl"] = + &::cli::thunk< options, bool, &options::generate_print_impl_ >; + _cli_options_map_["--generate-test-driver"] = + &::cli::thunk< options, bool, &options::generate_test_driver_ >; + _cli_options_map_["--force-overwrite"] = + &::cli::thunk< options, bool, &options::force_overwrite_ >; + _cli_options_map_["--root-element-first"] = + &::cli::thunk< options, bool, &options::root_element_first_ >; + _cli_options_map_["--root-element-last"] = + &::cli::thunk< options, bool, &options::root_element_last_ >; + _cli_options_map_["--root-element"] = + &::cli::thunk< options, NarrowString, &options::root_element_, + &options::root_element_specified_ >; + _cli_options_map_["--skel-type-suffix"] = + &::cli::thunk< options, NarrowString, &options::skel_type_suffix_, + &options::skel_type_suffix_specified_ >; + _cli_options_map_["--skel-file-suffix"] = + &::cli::thunk< options, NarrowString, &options::skel_file_suffix_, + &options::skel_file_suffix_specified_ >; + _cli_options_map_["--impl-type-suffix"] = + &::cli::thunk< options, NarrowString, &options::impl_type_suffix_, + &options::impl_type_suffix_specified_ >; + _cli_options_map_["--impl-file-suffix"] = + &::cli::thunk< options, NarrowString, &options::impl_file_suffix_, + &options::impl_file_suffix_specified_ >; + } + }; + + static _cli_options_map_init _cli_options_map_init_; + + bool options:: + _parse (const char* o, ::cli::scanner& s) + { + _cli_options_map::const_iterator i (_cli_options_map_.find (o)); + + if (i != _cli_options_map_.end ()) + { + (*(i->second)) (*this, s); + return true; + } + + // options base + // + if (::CXX::options::_parse (o, s)) + return true; + + return false; + } + + void options:: + _parse (::cli::scanner& s, + ::cli::unknown_mode opt_mode, + ::cli::unknown_mode arg_mode) + { + bool opt = true; + + while (s.more ()) + { + const char* o = s.peek (); + + if (std::strcmp (o, "--") == 0) + { + s.skip (); + opt = false; + continue; + } + + if (opt && _parse (o, s)); + else if (opt && std::strncmp (o, "-", 1) == 0 && o[1] != '\0') + { + switch (opt_mode) + { + case ::cli::unknown_mode::skip: + { + s.skip (); + continue; + } + case ::cli::unknown_mode::stop: + { + break; + } + case ::cli::unknown_mode::fail: + { + throw ::cli::unknown_option (o); + } + } + + break; + } + else + { + switch (arg_mode) + { + case ::cli::unknown_mode::skip: + { + s.skip (); + continue; + } + case ::cli::unknown_mode::stop: + { + break; + } + case ::cli::unknown_mode::fail: + { + throw ::cli::unknown_argument (o); + } + } + + break; + } + } + } + } +} + +// Begin epilogue. +// +// +// End epilogue. + diff --git a/xsd/xsd/cxx/parser/options.hxx b/xsd/xsd/cxx/parser/options.hxx new file mode 100644 index 0000000..976f93b --- /dev/null +++ b/xsd/xsd/cxx/parser/options.hxx @@ -0,0 +1,183 @@ +// This code was generated by CLI, a command line interface +// compiler for C++. +// + +#ifndef CXX_PARSER_OPTIONS_HXX +#define CXX_PARSER_OPTIONS_HXX + +// Begin prologue. +// +// +// End prologue. + +#include + +#include + +#include + +namespace CXX +{ + namespace Parser + { + class options: public ::CXX::options + { + public: + options (int& argc, + char** argv, + bool erase = false, + ::cli::unknown_mode option = ::cli::unknown_mode::fail, + ::cli::unknown_mode argument = ::cli::unknown_mode::stop); + + options (int start, + int& argc, + char** argv, + bool erase = false, + ::cli::unknown_mode option = ::cli::unknown_mode::fail, + ::cli::unknown_mode argument = ::cli::unknown_mode::stop); + + options (int& argc, + char** argv, + int& end, + bool erase = false, + ::cli::unknown_mode option = ::cli::unknown_mode::fail, + ::cli::unknown_mode argument = ::cli::unknown_mode::stop); + + options (int start, + int& argc, + char** argv, + int& end, + bool erase = false, + ::cli::unknown_mode option = ::cli::unknown_mode::fail, + ::cli::unknown_mode argument = ::cli::unknown_mode::stop); + + options (::cli::scanner&, + ::cli::unknown_mode option = ::cli::unknown_mode::fail, + ::cli::unknown_mode argument = ::cli::unknown_mode::stop); + + options (); + + // Option accessors. + // + const NarrowStrings& + type_map () const; + + bool + type_map_specified () const; + + const NarrowString& + xml_parser () const; + + bool + xml_parser_specified () const; + + const bool& + generate_validation () const; + + const bool& + suppress_validation () const; + + const bool& + generate_polymorphic () const; + + const bool& + generate_noop_impl () const; + + const bool& + generate_print_impl () const; + + const bool& + generate_test_driver () const; + + const bool& + force_overwrite () const; + + const bool& + root_element_first () const; + + const bool& + root_element_last () const; + + const NarrowString& + root_element () const; + + bool + root_element_specified () const; + + const NarrowString& + skel_type_suffix () const; + + bool + skel_type_suffix_specified () const; + + const NarrowString& + skel_file_suffix () const; + + bool + skel_file_suffix_specified () const; + + const NarrowString& + impl_type_suffix () const; + + bool + impl_type_suffix_specified () const; + + const NarrowString& + impl_file_suffix () const; + + bool + impl_file_suffix_specified () const; + + // Print usage information. + // + static void + print_usage (::std::wostream&); + + // Implementation details. + // + protected: + bool + _parse (const char*, ::cli::scanner&); + + private: + void + _parse (::cli::scanner&, + ::cli::unknown_mode option, + ::cli::unknown_mode argument); + + public: + NarrowStrings type_map_; + bool type_map_specified_; + NarrowString xml_parser_; + bool xml_parser_specified_; + bool generate_validation_; + bool suppress_validation_; + bool generate_polymorphic_; + bool generate_noop_impl_; + bool generate_print_impl_; + bool generate_test_driver_; + bool force_overwrite_; + bool root_element_first_; + bool root_element_last_; + NarrowString root_element_; + bool root_element_specified_; + NarrowString skel_type_suffix_; + bool skel_type_suffix_specified_; + NarrowString skel_file_suffix_; + bool skel_file_suffix_specified_; + NarrowString impl_type_suffix_; + bool impl_type_suffix_specified_; + NarrowString impl_file_suffix_; + bool impl_file_suffix_specified_; + }; + } +} + +#include + +// Begin epilogue. +// +// +// End epilogue. + +#endif // CXX_PARSER_OPTIONS_HXX diff --git a/xsd/xsd/cxx/parser/options.ixx b/xsd/xsd/cxx/parser/options.ixx new file mode 100644 index 0000000..22ab11d --- /dev/null +++ b/xsd/xsd/cxx/parser/options.ixx @@ -0,0 +1,160 @@ +// This code was generated by CLI, a command line interface +// compiler for C++. +// + +// Begin prologue. +// +// +// End prologue. + +namespace CXX +{ + namespace Parser + { + // options + // + + inline const NarrowStrings& options:: + type_map () const + { + return this->type_map_; + } + + inline bool options:: + type_map_specified () const + { + return this->type_map_specified_; + } + + inline const NarrowString& options:: + xml_parser () const + { + return this->xml_parser_; + } + + inline bool options:: + xml_parser_specified () const + { + return this->xml_parser_specified_; + } + + inline const bool& options:: + generate_validation () const + { + return this->generate_validation_; + } + + inline const bool& options:: + suppress_validation () const + { + return this->suppress_validation_; + } + + inline const bool& options:: + generate_polymorphic () const + { + return this->generate_polymorphic_; + } + + inline const bool& options:: + generate_noop_impl () const + { + return this->generate_noop_impl_; + } + + inline const bool& options:: + generate_print_impl () const + { + return this->generate_print_impl_; + } + + inline const bool& options:: + generate_test_driver () const + { + return this->generate_test_driver_; + } + + inline const bool& options:: + force_overwrite () const + { + return this->force_overwrite_; + } + + inline const bool& options:: + root_element_first () const + { + return this->root_element_first_; + } + + inline const bool& options:: + root_element_last () const + { + return this->root_element_last_; + } + + inline const NarrowString& options:: + root_element () const + { + return this->root_element_; + } + + inline bool options:: + root_element_specified () const + { + return this->root_element_specified_; + } + + inline const NarrowString& options:: + skel_type_suffix () const + { + return this->skel_type_suffix_; + } + + inline bool options:: + skel_type_suffix_specified () const + { + return this->skel_type_suffix_specified_; + } + + inline const NarrowString& options:: + skel_file_suffix () const + { + return this->skel_file_suffix_; + } + + inline bool options:: + skel_file_suffix_specified () const + { + return this->skel_file_suffix_specified_; + } + + inline const NarrowString& options:: + impl_type_suffix () const + { + return this->impl_type_suffix_; + } + + inline bool options:: + impl_type_suffix_specified () const + { + return this->impl_type_suffix_specified_; + } + + inline const NarrowString& options:: + impl_file_suffix () const + { + return this->impl_file_suffix_; + } + + inline bool options:: + impl_file_suffix_specified () const + { + return this->impl_file_suffix_specified_; + } + } +} + +// Begin epilogue. +// +// +// End epilogue. diff --git a/xsd/xsd/cxx/parser/parser-forward.cxx b/xsd/xsd/cxx/parser/parser-forward.cxx index a4e8ae7..faf427a 100644 --- a/xsd/xsd/cxx/parser/parser-forward.cxx +++ b/xsd/xsd/cxx/parser/parser-forward.cxx @@ -1,6 +1,5 @@ // file : xsd/cxx/parser/parser-forward.cxx -// author : Boris Kolpackov -// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file #include @@ -21,7 +20,7 @@ namespace CXX { } - virtual Void + virtual void traverse (Type& e) { os << "class " << ename (e) << ";"; @@ -37,7 +36,7 @@ namespace CXX { } - virtual Void + virtual void traverse (Type& l) { os << "class " << ename (l) << ";"; @@ -53,7 +52,7 @@ namespace CXX { } - virtual Void + virtual void traverse (Type& u) { os << "class " << ename (u) << ";"; @@ -69,7 +68,7 @@ namespace CXX { } - virtual Void + virtual void traverse (Type& c) { os << "class " << ename (c) << ";"; @@ -77,7 +76,7 @@ namespace CXX }; } - Void + void generate_parser_forward (Context& ctx) { ctx.os << "// Forward declarations" << endl @@ -85,7 +84,7 @@ namespace CXX Traversal::Schema schema; - Traversal::Sources sources; + Sources sources; Traversal::Names schema_names; Namespace ns (ctx); diff --git a/xsd/xsd/cxx/parser/parser-forward.hxx b/xsd/xsd/cxx/parser/parser-forward.hxx index a8a17f1..53c7049 100644 --- a/xsd/xsd/cxx/parser/parser-forward.hxx +++ b/xsd/xsd/cxx/parser/parser-forward.hxx @@ -1,6 +1,5 @@ // file : xsd/cxx/parser/parser-forward.hxx -// author : Boris Kolpackov -// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file #ifndef CXX_PARSER_PARSER_FORWARD_HXX @@ -12,7 +11,7 @@ namespace CXX { namespace Parser { - Void + void generate_parser_forward (Context&); } } diff --git a/xsd/xsd/cxx/parser/parser-header.cxx b/xsd/xsd/cxx/parser/parser-header.cxx index aade743..800a4b9 100644 --- a/xsd/xsd/cxx/parser/parser-header.cxx +++ b/xsd/xsd/cxx/parser/parser-header.cxx @@ -1,13 +1,16 @@ // file : xsd/cxx/parser/parser-header.cxx -// author : Boris Kolpackov -// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file +#include + #include #include #include +using namespace std; + namespace CXX { namespace Parser @@ -21,7 +24,7 @@ namespace CXX { } - virtual Void + virtual void traverse (Type& e) { String const& name (ename (e)); @@ -41,7 +44,7 @@ namespace CXX String const& ret (ret_type (e)); - Boolean same (ret == ret_type (base)); + bool same (ret == ret_type (base)); os << "virtual " << ret << endl << post_name (e) << " ()" << @@ -71,7 +74,7 @@ namespace CXX { } - virtual Void + virtual void traverse (Type& l) { String const& name (ename (l)); @@ -173,7 +176,7 @@ namespace CXX { } - virtual Void + virtual void traverse (Type& u) { String const& name (ename (u)); @@ -222,7 +225,7 @@ namespace CXX { } - virtual Void + virtual void traverse (Type& m) { if (skip (m)) return; @@ -251,7 +254,7 @@ namespace CXX { } - virtual Void + virtual void traverse (Type& m) { if (skip (m)) @@ -281,7 +284,7 @@ namespace CXX { } - virtual Void + virtual void traverse (Type& m) { if (skip (m)) @@ -295,8 +298,7 @@ namespace CXX m.is_a () && !anonymous (m.type ())) { - os << type << "* " << emember_cache (m) << ";" - << "const " << parser_map << "* " << emember_map (m) << ";" + os << "const " << parser_map << "* " << emember_map (m) << ";" << endl; } } @@ -316,14 +318,13 @@ namespace CXX } - virtual Void + virtual void traverse (SemanticGraph::All& a) { if (!a.context().count ("comp-number")) return; - UnsignedLong state_count ( - a.context().get ("state-count")); + size_t state_count (a.context().get ("state-count")); os << "void" << endl << "all_0 (unsigned long& state," << endl @@ -338,13 +339,13 @@ namespace CXX << endl; } - virtual Void + virtual void traverse (SemanticGraph::Choice& c) { if (!c.context().count ("comp-number")) return; - UnsignedLong n (c.context ().get ("comp-number")); + size_t n (c.context ().get ("comp-number")); os << "void" << endl << "choice_" << n << " (unsigned long& state," << endl @@ -358,13 +359,13 @@ namespace CXX Traversal::Choice::traverse (c); } - virtual Void + virtual void traverse (SemanticGraph::Sequence& s) { if (!s.context().count ("comp-number")) return; - UnsignedLong n (s.context ().get ("comp-number")); + size_t n (s.context ().get ("comp-number")); os << "void" << endl << "sequence_" << n << " (unsigned long& state," << endl @@ -392,7 +393,7 @@ namespace CXX { } - virtual Void + virtual void traverse (Type& a) { if (!a.optional_p ()) @@ -419,7 +420,7 @@ namespace CXX names_attribute_validation_state_ >> attribute_validation_state_; } - virtual Void + virtual void traverse (Type& c) { String const& name (ename (c)); @@ -428,15 +429,15 @@ namespace CXX // generate parser callbacks, etc. since they are the same as in // the base. We only need the parsing/validation code. // - Boolean restriction (restriction_p (c)); + bool restriction (restriction_p (c)); - Boolean he (has (c)); - Boolean ha (has (c)); + bool he (has (c)); + bool ha (has (c)); - Boolean hae (has_particle (c)); - Boolean haa (has (c)); + bool hae (has_particle (c)); + bool haa (has (c)); - Boolean hra (false); // Has required attribute. + bool hra (false); // Has required attribute. if (ha) { RequiredAttributeTest test (hra); @@ -472,7 +473,7 @@ namespace CXX String const& ret (ret_type (c)); - Boolean same (c.inherits_p () && + bool same (c.inherits_p () && ret == ret_type (c.inherits ().base ())); os << "virtual " << ret << endl @@ -606,7 +607,7 @@ namespace CXX if (validation && (he || hae)) { - UnsignedLong depth (c.context ().get ("depth")); + size_t depth (c.context ().get ("depth")); os << "protected:" << endl; @@ -770,13 +771,13 @@ namespace CXX // anyType & anySimpleType. // - virtual Void + virtual void traverse (SemanticGraph::AnyType& t) { gen_typedef (t, "void", "any_type_pskel", "any_type_pimpl"); } - virtual Void + virtual void traverse (SemanticGraph::AnySimpleType& t) { gen_typedef (t, "void", @@ -785,7 +786,7 @@ namespace CXX // Boolean. // - virtual Void + virtual void traverse (SemanticGraph::Fundamental::Boolean& t) { gen_typedef (t, "bool", "boolean_pskel", "boolean_pimpl"); @@ -793,72 +794,72 @@ namespace CXX // Integral types. // - virtual Void + virtual void traverse (SemanticGraph::Fundamental::Byte& t) { gen_typedef (t, "signed char", "byte_pskel", "byte_pimpl"); } - virtual Void + virtual void traverse (SemanticGraph::Fundamental::UnsignedByte& t) { gen_typedef (t, "unsigned char", "unsigned_byte_pskel", "unsigned_byte_pimpl"); } - virtual Void + virtual void traverse (SemanticGraph::Fundamental::Short& t) { gen_typedef (t, "short", "short_pskel", "short_pimpl"); } - virtual Void + virtual void traverse (SemanticGraph::Fundamental::UnsignedShort& t) { gen_typedef (t, "unsigned short", "unsigned_short_pskel", "unsigned_short_pimpl"); } - virtual Void + virtual void traverse (SemanticGraph::Fundamental::Int& t) { gen_typedef (t, "int", "int_pskel", "int_pimpl"); } - virtual Void + virtual void traverse (SemanticGraph::Fundamental::UnsignedInt& t) { gen_typedef (t, "unsigned int", "unsigned_int_pskel", "unsigned_int_pimpl"); } - virtual Void + virtual void traverse (SemanticGraph::Fundamental::Long& t) { gen_typedef (t, "long long", "long_pskel", "long_pimpl"); } - virtual Void + virtual void traverse (SemanticGraph::Fundamental::UnsignedLong& t) { gen_typedef (t, "unsigned long long", "unsigned_long_pskel", "unsigned_long_pimpl"); } - virtual Void + virtual void traverse (SemanticGraph::Fundamental::Integer& t) { gen_typedef (t, "long long", "integer_pskel", "integer_pimpl"); } - virtual Void + virtual void traverse (SemanticGraph::Fundamental::NegativeInteger& t) { gen_typedef (t, "long long", "negative_integer_pskel", "negative_integer_pimpl"); } - virtual Void + virtual void traverse (SemanticGraph::Fundamental::NonPositiveInteger& t) { gen_typedef (t, "long long", @@ -866,14 +867,14 @@ namespace CXX "non_positive_integer_pimpl"); } - virtual Void + virtual void traverse (SemanticGraph::Fundamental::PositiveInteger& t) { gen_typedef (t, "unsigned long long", "positive_integer_pskel", "positive_integer_pimpl"); } - virtual Void + virtual void traverse (SemanticGraph::Fundamental::NonNegativeInteger& t) { gen_typedef (t, "unsigned long long", @@ -883,19 +884,19 @@ namespace CXX // Floats. // - virtual Void + virtual void traverse (SemanticGraph::Fundamental::Float& t) { gen_typedef (t, "float", "float_pskel", "float_pimpl"); } - virtual Void + virtual void traverse (SemanticGraph::Fundamental::Double& t) { gen_typedef (t, "double", "double_pskel", "double_pimpl"); } - virtual Void + virtual void traverse (SemanticGraph::Fundamental::Decimal& t) { gen_typedef (t, "double", "decimal_pskel", "decimal_pimpl"); @@ -903,33 +904,33 @@ namespace CXX // Strings. // - virtual Void + virtual void traverse (SemanticGraph::Fundamental::String& t) { gen_typedef (t, string_type_, "string_pskel", "string_pimpl"); } - virtual Void + virtual void traverse (SemanticGraph::Fundamental::NormalizedString& t) { gen_typedef (t, string_type_, "normalized_string_pskel", "normalized_string_pimpl"); } - virtual Void + virtual void traverse (SemanticGraph::Fundamental::Token& t) { gen_typedef (t, string_type_, "token_pskel", "token_pimpl"); } - virtual Void + virtual void traverse (SemanticGraph::Fundamental::NameToken& t) { nmtoken_ = gen_typedef (t, string_type_, "nmtoken_pskel", "nmtoken_pimpl"); } - virtual Void + virtual void traverse (SemanticGraph::Fundamental::NameTokens& t) { // NMTOKENS uses NMTOKEN implementation to parse individual items. @@ -941,19 +942,19 @@ namespace CXX "nmtokens_pskel", "nmtokens_pimpl"); } - virtual Void + virtual void traverse (SemanticGraph::Fundamental::Name& t) { gen_typedef (t, string_type_, "name_pskel", "name_pimpl"); } - virtual Void + virtual void traverse (SemanticGraph::Fundamental::NCName& t) { gen_typedef (t, string_type_, "ncname_pskel", "ncname_pimpl"); } - virtual Void + virtual void traverse (SemanticGraph::Fundamental::Language& t) { gen_typedef (t, string_type_, "language_pskel", "language_pimpl"); @@ -961,7 +962,7 @@ namespace CXX // Qualified name. // - virtual Void + virtual void traverse (SemanticGraph::Fundamental::QName& t) { gen_typedef (t, xs_ns_ + L"::qname", "qname_pskel", "qname_pimpl"); @@ -969,19 +970,19 @@ namespace CXX // ID/IDREF. // - virtual Void + virtual void traverse (SemanticGraph::Fundamental::Id& t) { gen_typedef (t, string_type_, "id_pskel", "id_pimpl"); } - virtual Void + virtual void traverse (SemanticGraph::Fundamental::IdRef& t) { idref_ = gen_typedef (t, string_type_, "idref_pskel", "idref_pimpl"); } - virtual Void + virtual void traverse (SemanticGraph::Fundamental::IdRefs& t) { // IDREFS uses IDREF implementation to parse individual items. @@ -995,7 +996,7 @@ namespace CXX // URI. // - virtual Void + virtual void traverse (SemanticGraph::Fundamental::AnyURI& t) { gen_typedef (t, string_type_, "uri_pskel", "uri_pimpl"); @@ -1003,78 +1004,78 @@ namespace CXX // Binary. // - virtual Void + virtual void traverse (SemanticGraph::Fundamental::Base64Binary& t) { - String buffer (L"::std::auto_ptr< " + xs_ns_ + L"::buffer >"); + String buffer (auto_ptr + L"< " + xs_ns_ + L"::buffer >"); gen_typedef (t, buffer, "base64_binary_pskel", "base64_binary_pimpl"); } - virtual Void + virtual void traverse (SemanticGraph::Fundamental::HexBinary& t) { - String buffer (L"::std::auto_ptr< " + xs_ns_ + L"::buffer >"); + String buffer (auto_ptr + L"< " + xs_ns_ + L"::buffer >"); gen_typedef (t, buffer, "hex_binary_pskel", "hex_binary_pimpl"); } // Date/time. // - virtual Void + virtual void traverse (SemanticGraph::Fundamental::Date& t) { gen_typedef (t, xs_ns_ + L"::date", "date_pskel", "date_pimpl"); } - virtual Void + virtual void traverse (SemanticGraph::Fundamental::DateTime& t) { gen_typedef (t, xs_ns_ + L"::date_time", "date_time_pskel", "date_time_pimpl"); } - virtual Void + virtual void traverse (SemanticGraph::Fundamental::Duration& t) { gen_typedef (t, xs_ns_ + L"::duration", "duration_pskel", "duration_pimpl"); } - virtual Void + virtual void traverse (SemanticGraph::Fundamental::Day& t) { gen_typedef (t, xs_ns_ + L"::gday", "gday_pskel", "gday_pimpl"); } - virtual Void + virtual void traverse (SemanticGraph::Fundamental::Month& t) { gen_typedef (t, xs_ns_ + L"::gmonth", "gmonth_pskel", "gmonth_pimpl"); } - virtual Void + virtual void traverse (SemanticGraph::Fundamental::MonthDay& t) { gen_typedef (t, xs_ns_ + L"::gmonth_day", "gmonth_day_pskel", "gmonth_day_pimpl"); } - virtual Void + virtual void traverse (SemanticGraph::Fundamental::Year& t) { gen_typedef (t, xs_ns_ + L"::gyear", "gyear_pskel", "gyear_pimpl"); } - virtual Void + virtual void traverse (SemanticGraph::Fundamental::YearMonth& t) { gen_typedef (t, xs_ns_ + L"::gyear_month", "gyear_month_pskel", "gyear_month_pimpl"); } - virtual Void + virtual void traverse (SemanticGraph::Fundamental::Time& t) { gen_typedef (t, xs_ns_ + L"::time", "time_pskel", "time_pimpl"); @@ -1082,18 +1083,18 @@ namespace CXX // Entity. // - virtual Void + virtual void traverse (SemanticGraph::Fundamental::Entity&) { } - virtual Void + virtual void traverse (SemanticGraph::Fundamental::Entities&) { } private: - Boolean + bool gen_typedef (SemanticGraph::Type& t, String const& type, String const& pskel, @@ -1120,8 +1121,8 @@ namespace CXX String impl_ns_; String string_type_; - Boolean idref_; - Boolean nmtoken_; + bool idref_; + bool nmtoken_; }; struct FundNamespace: Namespace, Context @@ -1258,8 +1259,8 @@ namespace CXX }; } - Void - generate_parser_header (Context& ctx, Boolean generate_xml_schema) + void + generate_parser_header (Context& ctx, bool generate_xml_schema) { String c (ctx.char_type); @@ -1295,11 +1296,11 @@ namespace CXX NarrowString extern_xml_schema; if (!generate_xml_schema) - extern_xml_schema = ctx.options.value (); + extern_xml_schema = ctx.options.extern_xml_schema (); if (extern_xml_schema) { - String name (ctx.hxx_expr->merge (extern_xml_schema)); + String name (ctx.hxx_expr->replace (extern_xml_schema)); ctx.os << "#include " << ctx.process_include_path (name) << endl << endl; @@ -1308,12 +1309,12 @@ namespace CXX // if (ctx.schema_root.context ().count ("includes")) { - typedef Cult::Containers::Set Includes; + typedef set Includes; Includes const& is ( ctx.schema_root.context ().get ("includes")); - for (Includes::ConstReverseIterator i (is.rbegin ()); + for (Includes::const_reverse_iterator i (is.rbegin ()); i != is.rend (); ++i) { ctx.os << "#include " << *i << endl; @@ -1357,12 +1358,12 @@ namespace CXX // if (ctx.schema_root.context ().count ("includes")) { - typedef Cult::Containers::Set Includes; + typedef set Includes; Includes const& is ( ctx.schema_root.context ().get ("includes")); - for (Includes::ConstReverseIterator i (is.rbegin ()); + for (Includes::const_reverse_iterator i (is.rbegin ()); i != is.rend (); ++i) { ctx.os << "#include " << *i << endl; @@ -1412,7 +1413,7 @@ namespace CXX { Traversal::Schema schema; - Traversal::Sources sources; + Sources sources; Includes includes (ctx, Includes::header); Traversal::Names schema_names; diff --git a/xsd/xsd/cxx/parser/parser-header.hxx b/xsd/xsd/cxx/parser/parser-header.hxx index c4e114d..467dcb5 100644 --- a/xsd/xsd/cxx/parser/parser-header.hxx +++ b/xsd/xsd/cxx/parser/parser-header.hxx @@ -1,6 +1,5 @@ // file : xsd/cxx/parser/parser-header.hxx -// author : Boris Kolpackov -// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file #ifndef CXX_PARSER_PARSER_HEADER_HXX @@ -12,8 +11,8 @@ namespace CXX { namespace Parser { - Void - generate_parser_header (Context&, Boolean generate_xml_schema); + void + generate_parser_header (Context&, bool generate_xml_schema); } } diff --git a/xsd/xsd/cxx/parser/parser-inline.cxx b/xsd/xsd/cxx/parser/parser-inline.cxx index b491b72..87ba92c 100644 --- a/xsd/xsd/cxx/parser/parser-inline.cxx +++ b/xsd/xsd/cxx/parser/parser-inline.cxx @@ -1,6 +1,5 @@ // file : xsd/cxx/parser/parser-inline.cxx -// author : Boris Kolpackov -// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file #include @@ -23,7 +22,7 @@ namespace CXX { } - virtual Void + virtual void traverse (Type& l) { String const& name (ename (l)); @@ -75,7 +74,7 @@ namespace CXX { } - virtual Void + virtual void traverse (Type& m) { if (skip (m)) @@ -84,7 +83,7 @@ namespace CXX String const& scope (ename (m.scope ())); String const& parser (eparser (m)); - Boolean poly (polymorphic && + bool poly (polymorphic && m.is_a () && !anonymous (m.type ())); @@ -117,7 +116,7 @@ namespace CXX { } - virtual Void + virtual void traverse (Type& m) { if (skip (m)) return; @@ -138,7 +137,7 @@ namespace CXX { } - virtual Void + virtual void traverse (Type& m) { if (skip (m)) return; @@ -159,14 +158,14 @@ namespace CXX } } - Boolean + bool comma () const { return !first_; } private: - Boolean first_; + bool first_; }; struct ParserBaseSet: Traversal::Complex, @@ -180,7 +179,7 @@ namespace CXX names_ >> member_; } - virtual Void + virtual void traverse (SemanticGraph::Complex& c) { inherits (c, inherits_); @@ -189,7 +188,7 @@ namespace CXX names (c, names_); } - virtual Void + virtual void traverse (SemanticGraph::List& l) { String const& name (ename (l)); @@ -212,14 +211,13 @@ namespace CXX { } - virtual Void + virtual void traverse (SemanticGraph::All& a) { if (!a.context().count ("comp-number")) return; - UnsignedLong state_count ( - a.context().get ("state-count")); + size_t state_count (a.context().get ("state-count")); os << "," << endl << " v_all_count_ (" << state_count << "UL, v_all_first_)"; @@ -242,15 +240,15 @@ namespace CXX names_parser_member_set_ >> parser_member_set_; } - virtual Void + virtual void traverse (Type& c) { - Boolean he (has (c)); - Boolean ha (has (c)); + bool he (has (c)); + bool ha (has (c)); - Boolean hae (has_particle (c)); + bool hae (has_particle (c)); - Boolean hra (false); // Has required attribute. + bool hra (false); // Has required attribute. if (ha) { RequiredAttributeTest test (hra); @@ -258,7 +256,7 @@ namespace CXX names (c, names_test); } - Boolean restriction (restriction_p (c)); + bool restriction (restriction_p (c)); if (!((!restriction && (he || ha)) || (validation && (he || hae || hra)))) @@ -305,7 +303,7 @@ namespace CXX << name << " ()" << endl << ": "; - Boolean comma (false); + bool comma (false); if (!restriction && (he || ha)) { @@ -364,13 +362,13 @@ namespace CXX }; } - Void + void generate_parser_inline (Context& ctx) { // Emit "weak" header includes that are used in the file-per-type // compilation model. // - if (!ctx.options.value ()) + if (!ctx.options.generate_inline ()) { Traversal::Schema schema; Includes includes (ctx, Includes::source); @@ -381,7 +379,7 @@ namespace CXX Traversal::Schema schema; - Traversal::Sources sources; + Sources sources; Traversal::Names schema_names; Namespace ns (ctx); diff --git a/xsd/xsd/cxx/parser/parser-inline.hxx b/xsd/xsd/cxx/parser/parser-inline.hxx index 51f5b93..aff2ad2 100644 --- a/xsd/xsd/cxx/parser/parser-inline.hxx +++ b/xsd/xsd/cxx/parser/parser-inline.hxx @@ -1,6 +1,5 @@ // file : xsd/cxx/parser/parser-inline.hxx -// author : Boris Kolpackov -// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file #ifndef CXX_PARSER_PARSER_INLINE_HXX @@ -12,7 +11,7 @@ namespace CXX { namespace Parser { - Void + void generate_parser_inline (Context&); } } diff --git a/xsd/xsd/cxx/parser/parser-source.cxx b/xsd/xsd/cxx/parser/parser-source.cxx index 99bc566..2ee5273 100644 --- a/xsd/xsd/cxx/parser/parser-source.cxx +++ b/xsd/xsd/cxx/parser/parser-source.cxx @@ -1,6 +1,5 @@ // file : xsd/cxx/parser/parser-source.cxx -// author : Boris Kolpackov -// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file #include @@ -21,7 +20,7 @@ namespace CXX { } - virtual Void + virtual void traverse (Type& e) { String const& name (ename (e)); @@ -29,7 +28,7 @@ namespace CXX SemanticGraph::Type& base (e.inherits ().base ()); - Boolean same (ret == ret_type (base)); + bool same (ret == ret_type (base)); if (same || ret == L"void" || polymorphic) { @@ -79,7 +78,7 @@ namespace CXX if (validation) { - Boolean gen (!anonymous (e)); + bool gen (!anonymous (e)); // We normally don't need to enter anonymous types into // the inheritance map. The only exception is when an @@ -89,16 +88,21 @@ namespace CXX if (!gen) { // The first instance that this anonymous type classifies - // is the prototype for others if any. + // is the prototype for others if any. If this type does + // not classify anything (e.g., it is a base), then we + // don't need to do anything. // - SemanticGraph::Instance& i ( - e.classifies_begin ()->instance ()); - - if (SemanticGraph::Element* e = - dynamic_cast (&i)) + if (e.classifies_begin () != e.classifies_end ()) { - if (e->substitutes_p ()) - gen = true; + SemanticGraph::Instance& i ( + e.classifies_begin ()->instance ()); + + if (SemanticGraph::Element* e = + dynamic_cast (&i)) + { + if (e->substitutes_p ()) + gen = true; + } } } @@ -126,7 +130,7 @@ namespace CXX { } - virtual Void + virtual void traverse (Type& l) { String const& name (ename (l)); @@ -222,7 +226,7 @@ namespace CXX { } - virtual Void + virtual void traverse (Type& u) { String const& name (ename (u)); @@ -277,15 +281,13 @@ namespace CXX { } - virtual Void + virtual void traverse (Type& e) { if (skip (e)) return; - Boolean poly (polymorphic && !anonymous (e.type ())); - - String const& inst (poly ? emember_cache (e) : emember (e)); + bool poly (polymorphic && !anonymous (e.type ())); os << "if ("; @@ -316,9 +318,12 @@ namespace CXX os << ")" << "{"; + String inst; + if (poly) { SemanticGraph::Type& t (e.type ()); + inst = "p"; // For pre-computing length. // @@ -334,8 +339,10 @@ namespace CXX String const& member (emember (e)); String const& member_map (emember_map (e)); - os << "if (t == 0 && this->" << member << " != 0)" << endl - << "this->" << inst << " = this->" << member << ";" + os << fq_type << "* p = 0;" + << endl + << "if (t == 0 && this->" << member << " != 0)" << endl + << inst << " = this->" << member << ";" << "else" << "{" << string_type << " ts (" << fq_type << @@ -345,21 +352,21 @@ namespace CXX << "t = &ts;" << endl << "if (this->" << member << " != 0 && *t == ts)" << endl - << "this->" << inst << " = this->" << member << ";" + << inst << " = this->" << member << ";" << "else if (this->" << member_map << " != 0)" << endl - << "this->" << inst << " = dynamic_cast< " << fq_type << + << inst << " = dynamic_cast< " << fq_type << "* > (" << endl << "this->" << member_map << "->find (*t));" - << "else" << endl - << "this->" << inst << " = 0;" << "}"; } + else + inst = L"this->" + emember (e); os << "this->" << complex_base << "::context_.top ().parser_ = " << - "this->" << inst << ";" + inst << ";" << endl - << "if (this->" << inst << ")" << endl - << "this->" << inst << "->pre ();" // _start_element calls _pre + << "if (" << inst << ")" << endl + << inst << "->pre ();" // _start_element calls _pre << endl << "return true;" << "}"; @@ -376,16 +383,14 @@ namespace CXX { } - virtual Void + virtual void traverse (Type& e) { if (skip (e)) return; - Boolean poly (polymorphic && !anonymous (e.type ())); - + bool poly (polymorphic && !anonymous (e.type ())); String const& name (ename (e)); - String const& inst (poly ? emember_cache (e) : emember (e)); os << "if ("; @@ -421,18 +426,31 @@ namespace CXX SemanticGraph::Type& type (e.type ()); String const& post (post_name (type)); + String inst; + + if (poly) + { + String const& fq_type (fq_name (type)); + inst = "p"; - os << "if (this->" << inst << ")"; + os << fq_type << "* p =" << endl + << "dynamic_cast< " << fq_type << "* > (" << endl + << "this->" << complex_base << "::context_.top ().parser_);" + << endl; + } + else + inst = L"this->" + emember (e); + + os << "if (" << inst << ")"; if (ret_type (type) == L"void") os << "{" - << "this->" << inst << "->" << post << " ();" + << inst << "->" << post << " ();" << "this->" << name << " ();" << "}"; else os << endl - << "this->" << name << " (this->" << inst << "->" << - post << " ());" + << "this->" << name << " (" << inst << "->" << post << " ());" << endl; os << "return true;" @@ -449,7 +467,7 @@ namespace CXX { } - virtual Void + virtual void traverse (Type& a) { String const& name (ename (a)); @@ -500,7 +518,7 @@ namespace CXX { } - virtual Void + virtual void traverse (Type& m) { if (skip (m)) @@ -538,14 +556,14 @@ namespace CXX names_attribute_ >> attribute_; } - virtual Void + virtual void traverse (Type& c) { - Boolean he (has (c)); - Boolean ha (has (c)); + bool he (has (c)); + bool ha (has (c)); String const& ret (ret_type (c)); - Boolean same (c.inherits_p () && + bool same (c.inherits_p () && ret == ret_type (c.inherits ().base ())); String const& name (ename (c)); @@ -581,7 +599,7 @@ namespace CXX if (c.inherits_p () && validation) { - Boolean gen (!anonymous (c)); + bool gen (!anonymous (c)); // We normally don't need to enter anonymous types into // the inheritance map. The only exception is when an @@ -591,16 +609,21 @@ namespace CXX if (!gen) { // The first instance that this anonymous type classifies - // is the prototype for others if any. + // is the prototype for others if any. If this type does + // not classify anything (e.g., it is a base), then we + // don't need to do anything. // - SemanticGraph::Instance& i ( - c.classifies_begin ()->instance ()); - - if (SemanticGraph::Element* e = - dynamic_cast (&i)) + if (c.classifies_begin () != c.classifies_end ()) { - if (e->substitutes_p ()) - gen = true; + SemanticGraph::Instance& i ( + c.classifies_begin ()->instance ()); + + if (SemanticGraph::Element* e = + dynamic_cast (&i)) + { + if (e->substitutes_p ()) + gen = true; + } } } @@ -655,7 +678,7 @@ namespace CXX // Don't use restriction_p here since we don't want special // treatment of anyType. // - Boolean restriction ( + bool restriction ( c.inherits_p () && c.inherits ().is_a ()); @@ -782,7 +805,7 @@ namespace CXX { } - virtual Void + virtual void traverse (Type& e) { if (e.substitutes_p ()) @@ -809,7 +832,7 @@ namespace CXX }; } - Void + void generate_parser_source (Context& ctx) { if (ctx.polymorphic) @@ -822,8 +845,8 @@ namespace CXX else ctx.os << endl; - Boolean import_maps (ctx.options.value ()); - Boolean export_maps (ctx.options.value ()); + bool import_maps (ctx.options.import_maps ()); + bool export_maps (ctx.options.export_maps ()); if (import_maps || export_maps) { @@ -896,7 +919,7 @@ namespace CXX // Emit "weak" header includes that are used in the file-per-type // compilation model. // - if (ctx.options.value ()) + if (ctx.options.generate_inline ()) { Traversal::Schema schema; Includes includes (ctx, Includes::source); @@ -906,7 +929,7 @@ namespace CXX } Traversal::Schema schema; - Traversal::Sources sources; + Sources sources; Traversal::Names schema_names; Namespace ns (ctx); diff --git a/xsd/xsd/cxx/parser/parser-source.hxx b/xsd/xsd/cxx/parser/parser-source.hxx index f6496ea..6e206b4 100644 --- a/xsd/xsd/cxx/parser/parser-source.hxx +++ b/xsd/xsd/cxx/parser/parser-source.hxx @@ -1,6 +1,5 @@ // file : xsd/cxx/parser/parser-source.hxx -// author : Boris Kolpackov -// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file #ifndef CXX_PARSER_PARSER_SOURCE_HXX @@ -12,7 +11,7 @@ namespace CXX { namespace Parser { - Void + void generate_parser_source (Context&); } } diff --git a/xsd/xsd/cxx/parser/print-impl-common.hxx b/xsd/xsd/cxx/parser/print-impl-common.hxx index 5a91931..516273a 100644 --- a/xsd/xsd/cxx/parser/print-impl-common.hxx +++ b/xsd/xsd/cxx/parser/print-impl-common.hxx @@ -1,6 +1,5 @@ // file : xsd/cxx/parser/print-impl-common.hxx -// author : Boris Kolpackov -// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file #ifndef CXX_PARSER_PRINT_IMPL_COMMON_HXX @@ -74,7 +73,7 @@ namespace CXX { } - virtual Void + virtual void traverse (SemanticGraph::Type&) { gen_user_type (); @@ -82,7 +81,7 @@ namespace CXX // Boolean. // - virtual Void + virtual void traverse (SemanticGraph::Fundamental::Boolean& t) { if (default_type (t, "bool")) @@ -96,7 +95,7 @@ namespace CXX // Integral types. // - virtual Void + virtual void traverse (SemanticGraph::Fundamental::Byte& t) { if (default_type (t, "signed char")) @@ -108,7 +107,7 @@ namespace CXX gen_user_type (); } - virtual Void + virtual void traverse (SemanticGraph::Fundamental::UnsignedByte& t) { if (default_type (t, "unsigned char")) @@ -120,7 +119,7 @@ namespace CXX gen_user_type (); } - virtual Void + virtual void traverse (SemanticGraph::Fundamental::Short& t) { if (default_type (t, "short")) @@ -132,7 +131,7 @@ namespace CXX gen_user_type (); } - virtual Void + virtual void traverse (SemanticGraph::Fundamental::UnsignedShort& t) { if (default_type (t, "unsigned short")) @@ -144,7 +143,7 @@ namespace CXX gen_user_type (); } - virtual Void + virtual void traverse (SemanticGraph::Fundamental::Int& t) { if (default_type (t, "int")) @@ -156,7 +155,7 @@ namespace CXX gen_user_type (); } - virtual Void + virtual void traverse (SemanticGraph::Fundamental::UnsignedInt& t) { if (default_type (t, "unsigned int")) @@ -168,7 +167,7 @@ namespace CXX gen_user_type (); } - virtual Void + virtual void traverse (SemanticGraph::Fundamental::Long& t) { if (default_type (t, "long long")) @@ -180,7 +179,7 @@ namespace CXX gen_user_type (); } - virtual Void + virtual void traverse (SemanticGraph::Fundamental::UnsignedLong& t) { if (default_type (t, "unsigned long long")) @@ -192,7 +191,7 @@ namespace CXX gen_user_type (); } - virtual Void + virtual void traverse (SemanticGraph::Fundamental::Integer& t) { if (default_type (t, "long long")) @@ -204,7 +203,7 @@ namespace CXX gen_user_type (); } - virtual Void + virtual void traverse (SemanticGraph::Fundamental::NegativeInteger& t) { if (default_type (t, "long long")) @@ -216,7 +215,7 @@ namespace CXX gen_user_type (); } - virtual Void + virtual void traverse (SemanticGraph::Fundamental::NonPositiveInteger& t) { if (default_type (t, "long long")) @@ -228,7 +227,7 @@ namespace CXX gen_user_type (); } - virtual Void + virtual void traverse (SemanticGraph::Fundamental::PositiveInteger& t) { if (default_type (t, "unsigned long long")) @@ -240,7 +239,7 @@ namespace CXX gen_user_type (); } - virtual Void + virtual void traverse (SemanticGraph::Fundamental::NonNegativeInteger& t) { if (default_type (t, "unsigned long long")) @@ -254,7 +253,7 @@ namespace CXX // Floats. // - virtual Void + virtual void traverse (SemanticGraph::Fundamental::Float& t) { if (default_type (t, "float")) @@ -266,7 +265,7 @@ namespace CXX gen_user_type (); } - virtual Void + virtual void traverse (SemanticGraph::Fundamental::Double& t) { if (default_type (t, "double")) @@ -278,7 +277,7 @@ namespace CXX gen_user_type (); } - virtual Void + virtual void traverse (SemanticGraph::Fundamental::Decimal& t) { if (default_type (t, "double")) @@ -292,61 +291,61 @@ namespace CXX // Strings. // - virtual Void + virtual void traverse (SemanticGraph::Fundamental::String& t) { gen_string (t); } - virtual Void + virtual void traverse (SemanticGraph::Fundamental::NormalizedString& t) { gen_string (t); } - virtual Void + virtual void traverse (SemanticGraph::Fundamental::Token& t) { gen_string (t); } - virtual Void + virtual void traverse (SemanticGraph::Fundamental::NameToken& t) { gen_string (t); } - virtual Void + virtual void traverse (SemanticGraph::Fundamental::Name& t) { gen_string (t); } - virtual Void + virtual void traverse (SemanticGraph::Fundamental::NCName& t) { gen_string (t); } - virtual Void + virtual void traverse (SemanticGraph::Fundamental::Language& t) { gen_string (t); } - virtual Void + virtual void traverse (SemanticGraph::Fundamental::Id& t) { gen_string (t); } - virtual Void + virtual void traverse (SemanticGraph::Fundamental::IdRef& t) { gen_string (t); } - virtual Void + virtual void traverse (SemanticGraph::Fundamental::AnyURI& t) { gen_string (t); @@ -355,13 +354,13 @@ namespace CXX // String sequences. // - virtual Void + virtual void traverse (SemanticGraph::Fundamental::NameTokens& t) { gen_sequence (t); } - virtual Void + virtual void traverse (SemanticGraph::Fundamental::IdRefs& t) { gen_sequence (t); @@ -370,7 +369,7 @@ namespace CXX // QName // - virtual Void + virtual void traverse (SemanticGraph::Fundamental::QName& t) { if (default_type (t, xs_ns_name () + L"::qname")) @@ -391,13 +390,13 @@ namespace CXX // Binary. // - virtual Void + virtual void traverse (SemanticGraph::Fundamental::Base64Binary& t) { gen_buffer (t); } - virtual Void + virtual void traverse (SemanticGraph::Fundamental::HexBinary& t) { gen_buffer (t); @@ -405,7 +404,7 @@ namespace CXX // Date/time. // - virtual Void + virtual void traverse (SemanticGraph::Fundamental::Date& t) { if (default_type (t, xs_ns_name () + L"::date")) @@ -421,7 +420,7 @@ namespace CXX gen_user_type (); } - virtual Void + virtual void traverse (SemanticGraph::Fundamental::DateTime& t) { if (default_type (t, xs_ns_name () + L"::date_time")) @@ -440,7 +439,7 @@ namespace CXX gen_user_type (); } - virtual Void + virtual void traverse (SemanticGraph::Fundamental::Duration& t) { if (default_type (t, xs_ns_name () + L"::duration")) @@ -463,7 +462,7 @@ namespace CXX gen_user_type (); } - virtual Void + virtual void traverse (SemanticGraph::Fundamental::Day& t) { if (default_type (t, xs_ns_name () + L"::gday")) @@ -477,7 +476,7 @@ namespace CXX gen_user_type (); } - virtual Void + virtual void traverse (SemanticGraph::Fundamental::Month& t) { if (default_type (t, xs_ns_name () + L"::gmonth")) @@ -491,7 +490,7 @@ namespace CXX gen_user_type (); } - virtual Void + virtual void traverse (SemanticGraph::Fundamental::MonthDay& t) { if (default_type (t, xs_ns_name () + L"::gmonth_day")) @@ -506,7 +505,7 @@ namespace CXX gen_user_type (); } - virtual Void + virtual void traverse (SemanticGraph::Fundamental::Year& t) { if (default_type (t, xs_ns_name () + L"::gyear")) @@ -520,7 +519,7 @@ namespace CXX gen_user_type (); } - virtual Void + virtual void traverse (SemanticGraph::Fundamental::YearMonth& t) { if (default_type (t, xs_ns_name () + L"::gyear_month")) @@ -535,7 +534,7 @@ namespace CXX gen_user_type (); } - virtual Void + virtual void traverse (SemanticGraph::Fundamental::Time& t) { if (default_type (t, xs_ns_name () + L"::time")) @@ -605,7 +604,7 @@ namespace CXX void gen_buffer (SemanticGraph::Type& t) { - String type (L"::std::auto_ptr< " + xs_ns_name () + L"::buffer >"); + String type (auto_ptr + L"< " + xs_ns_name () + L"::buffer >"); if (default_type (t, type)) { diff --git a/xsd/xsd/cxx/parser/state-processor.cxx b/xsd/xsd/cxx/parser/state-processor.cxx index 7fe3ff6..86f97ce 100644 --- a/xsd/xsd/cxx/parser/state-processor.cxx +++ b/xsd/xsd/cxx/parser/state-processor.cxx @@ -1,8 +1,10 @@ // file : xsd/cxx/parser/state-processor.cxx -// author : Boris Kolpackov -// copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2006-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file +#include +#include + #include #include @@ -10,9 +12,7 @@ #include #include -#include - -#include +using namespace std; namespace CXX { @@ -20,8 +20,9 @@ namespace CXX { namespace { - typedef Cult::Containers::Vector Particles; + typedef vector Particles; + /* void print (Particles const& p) { @@ -30,7 +31,7 @@ namespace CXX wcerr << "prefixes: " << endl; - for (Particles::ConstIterator i (p.begin ()); i != p.end (); ++i) + for (Particles::const_iterator i (p.begin ()); i != p.end (); ++i) { if (SemanticGraph::Element* e = dynamic_cast (*i)) @@ -45,6 +46,7 @@ namespace CXX wcerr << endl; } + */ // // @@ -52,10 +54,10 @@ namespace CXX Traversal::Choice, Traversal::Sequence { - Particle (UnsignedLong& all, - UnsignedLong& choice, - UnsignedLong& sequence, - UnsignedLong& depth) + Particle (size_t& all, + size_t& choice, + size_t& sequence, + size_t& depth) : all_ (all), choice_ (choice), sequence_ (sequence), @@ -63,7 +65,7 @@ namespace CXX { } - virtual Void + virtual void traverse (SemanticGraph::All& a) { using SemanticGraph::Compositor; @@ -78,8 +80,8 @@ namespace CXX // compositor cannot contain any nested compositors. // - UnsignedLong state (0); - UnsignedLong min (0); + size_t state (0); + size_t min (0); for (Compositor::ContainsIterator ci (a.contains_begin ()); ci != a.contains_end (); ++ci) @@ -101,7 +103,7 @@ namespace CXX { a.context ().set ("comp-number", choice_++); a.context ().set ("prefixes", prefixes_); - a.context ().set ("state-count", UnsignedLong (prefixes_.size ())); + a.context ().set ("state-count", size_t (prefixes_.size ())); // effective-min = min * actual-min // @@ -114,7 +116,7 @@ namespace CXX } } - virtual Void + virtual void traverse (SemanticGraph::Choice& c) { using SemanticGraph::Compositor; @@ -126,8 +128,8 @@ namespace CXX // the actual value specified in the schema. // - UnsignedLong state (0); - UnsignedLong min (1); + size_t state (0); + size_t min (1); for (Compositor::ContainsIterator ci (c.contains_begin ()); ci != c.contains_end (); ++ci) @@ -144,7 +146,7 @@ namespace CXX } else { - UnsignedLong depth (0); + size_t depth (0); Particle t (all_, choice_, sequence_, depth); t.dispatch (p); @@ -159,7 +161,7 @@ namespace CXX t.prefixes_.end ().base ()); if (min == 1 && - p.context ().get ("effective-min") == 0) + p.context ().get ("effective-min") == 0) min = 0; } @@ -183,7 +185,7 @@ namespace CXX } } - virtual Void + virtual void traverse (SemanticGraph::Sequence& s) { using SemanticGraph::Compositor; @@ -195,9 +197,9 @@ namespace CXX // of the actual value specified in the schema. // - Boolean prefix (true); - UnsignedLong state (0); - UnsignedLong min (0); + bool prefix (true); + size_t state (0); + size_t min (0); for (Compositor::ContainsIterator ci (s.contains_begin ()); ci != s.contains_end (); ++ci) @@ -217,7 +219,7 @@ namespace CXX } else { - UnsignedLong depth (0); + size_t depth (0); Particle t (all_, choice_, sequence_, depth); t.dispatch (p); @@ -233,7 +235,7 @@ namespace CXX t.prefixes_.begin ().base (), t.prefixes_.end ().base ()); - if (p.context ().get ("effective-min") != 0) + if (p.context ().get ("effective-min") != 0) min = 1; } } @@ -266,11 +268,11 @@ namespace CXX private: Particles prefixes_; - UnsignedLong& all_; - UnsignedLong& choice_; - UnsignedLong& sequence_; + size_t& all_; + size_t& choice_; + size_t& sequence_; - UnsignedLong& depth_; + size_t& depth_; }; @@ -278,12 +280,12 @@ namespace CXX // struct Complex: Traversal::Complex { - virtual Void + virtual void traverse (Type& c) { if (c.contains_compositor_p ()) { - UnsignedLong all (0), choice (0), sequence (0), depth (0); + size_t all (0), choice (0), sequence (0), depth (0); Particle t (all, choice, sequence, depth); t.dispatch (c.contains_compositor ().compositor ()); @@ -296,11 +298,11 @@ namespace CXX }; } - Void StateProcessor:: + void StateProcessor:: process (SemanticGraph::Schema& tu, SemanticGraph::Path const&) { Traversal::Schema schema; - Traversal::Sources sources; + Sources sources; Traversal::Names schema_names; Traversal::Namespace ns; Traversal::Names ns_names; diff --git a/xsd/xsd/cxx/parser/state-processor.hxx b/xsd/xsd/cxx/parser/state-processor.hxx index 630ac13..de5af69 100644 --- a/xsd/xsd/cxx/parser/state-processor.hxx +++ b/xsd/xsd/cxx/parser/state-processor.hxx @@ -1,24 +1,22 @@ // file : xsd/cxx/parser/state-processor.hxx -// author : Boris Kolpackov -// copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2006-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file #ifndef CXX_PARSER_STATE_PROCESSOR_HXX #define CXX_PARSER_STATE_PROCESSOR_HXX -#include #include +#include + namespace CXX { namespace Parser { - using namespace Cult::Types; - class StateProcessor { public: - Void + void process (XSDFrontend::SemanticGraph::Schema&, XSDFrontend::SemanticGraph::Path const& file); }; diff --git a/xsd/xsd/cxx/parser/type-processor.cxx b/xsd/xsd/cxx/parser/type-processor.cxx index 4744c0a..2f1132c 100644 --- a/xsd/xsd/cxx/parser/type-processor.cxx +++ b/xsd/xsd/cxx/parser/type-processor.cxx @@ -1,9 +1,8 @@ // file : xsd/cxx/parser/type-processor.cxx -// author : Boris Kolpackov -// copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2006-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file -#include +#include #include #include @@ -11,16 +10,12 @@ #include #include +using namespace std; + namespace CXX { namespace Parser { - TypeProcessor:: - TypeProcessor () - { - // Dummy ctor, helps with long symbols on HP-UX. - } - namespace { // @@ -29,14 +24,14 @@ namespace CXX { Type (SemanticGraph::Schema& schema, TypeMap::Namespaces& type_map, - Boolean add_includes) + bool add_includes) : schema_ (schema), type_map_ (type_map), add_includes_ (add_includes) { } - virtual Void + virtual void traverse (SemanticGraph::Type& type) { using TypeMap::Namespace; @@ -54,7 +49,7 @@ namespace CXX // match the type in order to add include directives to the // new root schema. // - Boolean set (true); + bool set (true); if (tc.count ("ret-type")) { @@ -73,14 +68,14 @@ namespace CXX String ns_name (ns.name ()); String t_name (type.name ()); - // std::wcerr << "traversing: " << ns_name << "#" << t_name << endl; + //std::wcerr << "traversing: " << ns_name << "#" << t_name << endl; - for (Namespaces::ConstIterator n (type_map_.begin ()); + for (Namespaces::const_iterator n (type_map_.begin ()); n != type_map_.end (); ++n) { // Check if the namespace matches. // - Boolean ns_match; + bool ns_match; if (!n->xsd_name ().empty ()) { @@ -89,7 +84,9 @@ namespace CXX else ns_match = ns_name.empty (); - // std::wcerr << "considering ns expr: " << n->xsd_name () << endl; + //std::wcerr << "considering ns expr: " << n->xsd_name () + // << " for " << ns_name + // << ": " << (ns_match ? "+" : "-") << endl; if (ns_match) { @@ -111,8 +108,8 @@ namespace CXX { if (!n->xsd_name ().empty ()) { - cxx_ns = n->xsd_name ().merge ( - n->cxx_name (), ns_name, true); + cxx_ns = n->xsd_name ().replace ( + ns_name, n->cxx_name (), true); } else cxx_ns = n->cxx_name (); @@ -124,16 +121,16 @@ namespace CXX // String ret_type (cxx_ns); - ret_type += t->xsd_name ().merge ( - t->cxx_ret_name (), t_name, true); + ret_type += t->xsd_name ().replace ( + t_name, t->cxx_ret_name (), true); String arg_type; if (t->cxx_arg_name ()) { arg_type = cxx_ns; - arg_type += t->xsd_name ().merge ( - t->cxx_arg_name (), t_name, true); + arg_type += t->xsd_name ().replace ( + t_name, t->cxx_arg_name (), true); } else { @@ -141,7 +138,7 @@ namespace CXX arg_type = ret_type; else { - WideChar last (ret_type[ret_type.size () - 1]); + wchar_t last (ret_type[ret_type.size () - 1]); // If it is already a pointer or reference then use // it as is. @@ -155,12 +152,12 @@ namespace CXX tc.set ("ret-type", ret_type); tc.set ("arg-type", arg_type); + + //std::wcerr << t_name << " -> " << ret_type << endl; } tc.set ("root-schema", &schema_); - //std::wcerr << t_name << " -> " << ret_type << endl; - // See of we need to add any includes to the translations // unit. // @@ -168,7 +165,7 @@ namespace CXX { if (n->includes_begin () != n->includes_end ()) { - typedef Cult::Containers::Set Includes; + typedef std::set Includes; if (!schema_.context ().count ("includes")) schema_.context ().set ("includes", Includes ()); @@ -194,7 +191,7 @@ namespace CXX private: SemanticGraph::Schema& schema_; TypeMap::Namespaces& type_map_; - Boolean add_includes_; + bool add_includes_; }; @@ -207,7 +204,7 @@ namespace CXX { GlobalType (SemanticGraph::Schema& schema, TypeMap::Namespaces& type_map, - Boolean add_includes) + bool add_includes) : type_ (schema, type_map, add_includes) { inherits_ >> type_; @@ -215,20 +212,20 @@ namespace CXX argumented_ >> type_; } - virtual Void + virtual void traverse (SemanticGraph::Type& t) { type_.traverse (t); } - virtual Void + virtual void traverse (SemanticGraph::List& l) { type_.traverse (l); Traversal::List::argumented (l, argumented_); } - virtual Void + virtual void traverse (SemanticGraph::Complex& c) { type_.traverse (c); @@ -236,7 +233,7 @@ namespace CXX Complex::names (c, names_); } - virtual Void + virtual void traverse (SemanticGraph::Enumeration& e) { type_.traverse (e); @@ -252,10 +249,10 @@ namespace CXX Traversal::Argumented argumented_; }; - Void - process_impl (CLI::Options const& options, + void + process_impl (options const& ops, XSDFrontend::SemanticGraph::Schema& tu, - Boolean gen_driver, + bool gen_driver, TypeMap::Namespaces& type_map) { if (tu.names_begin ()->named ().name () == @@ -279,14 +276,13 @@ namespace CXX // If --extern-xml-schema is specified, then we don't want // includes from the XML Schema type map. // - Boolean extern_xml_schema ( - options.value ()); + bool extern_xml_schema (ops.extern_xml_schema ()); // // Traversal::Schema schema; Traversal::Schema xs_schema; - Traversal::Sources sources; + Sources sources; Traversal::Implies implies; schema >> sources >> schema; @@ -312,7 +308,7 @@ namespace CXX // If we are generating the test driver, make sure the root // element type is processed. // - if (gen_driver && options.value ()) + if (gen_driver && ops.generate_test_driver ()) { // Figure out the root element. Validator should have made sure // it is unique. @@ -320,14 +316,14 @@ namespace CXX SemanticGraph::Element* root (0); { Traversal::Schema schema; - Traversal::Sources sources; + Sources sources; schema >> sources >> schema; Traversal::Names schema_names; Traversal::Namespace ns; Traversal::Names ns_names; - RootElement root_element (options, root); + RootElement root_element (ops, root); schema >> schema_names >> ns >> ns_names >> root_element; @@ -340,13 +336,13 @@ namespace CXX } } - Void TypeProcessor:: - process (CLI::Options const& options, + void TypeProcessor:: + process (options const& ops, XSDFrontend::SemanticGraph::Schema& s, - Boolean gen_driver, + bool gen_driver, TypeMap::Namespaces& tm) { - process_impl (options, s, gen_driver, tm); + process_impl (ops, s, gen_driver, tm); } } } diff --git a/xsd/xsd/cxx/parser/type-processor.hxx b/xsd/xsd/cxx/parser/type-processor.hxx index 02a090f..634bc14 100644 --- a/xsd/xsd/cxx/parser/type-processor.hxx +++ b/xsd/xsd/cxx/parser/type-processor.hxx @@ -1,34 +1,29 @@ // file : xsd/cxx/parser/type-processor.hxx -// author : Boris Kolpackov -// copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2006-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file #ifndef CXX_PARSER_TYPE_PROCESSOR_HXX #define CXX_PARSER_TYPE_PROCESSOR_HXX -#include - #include +#include + #include -#include +#include namespace CXX { namespace Parser { - using namespace Cult::Types; - class TypeProcessor { public: - TypeProcessor (); // Dummy ctor, helps with long symbols on HP-UX. - - Void - process (CLI::Options const& options, + void + process (options const&, XSDFrontend::SemanticGraph::Schema&, - Boolean gen_driver, + bool gen_driver, TypeMap::Namespaces&); }; } diff --git a/xsd/xsd/cxx/parser/validator.cxx b/xsd/xsd/cxx/parser/validator.cxx index 19b15c6..da9f8b0 100644 --- a/xsd/xsd/cxx/parser/validator.cxx +++ b/xsd/xsd/cxx/parser/validator.cxx @@ -1,8 +1,10 @@ // file : xsd/cxx/parser/validator.cxx -// author : Boris Kolpackov -// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file +#include +#include + #include #include @@ -10,9 +12,7 @@ #include -#include - -using std::wcerr; +using namespace std; namespace CXX { @@ -25,10 +25,10 @@ namespace CXX public: ValidationContext (SemanticGraph::Schema& root, SemanticGraph::Path const& path, - CLI::Options const& options, + Parser::options const& ops, const WarningSet& disabled_warnings, - Boolean& valid_) - : Context (std::wcerr, root, path, options, 0, 0, 0, 0), + bool& valid_) + : Context (std::wcerr, root, path, ops, 0, 0, 0, 0), disabled_warnings_ (disabled_warnings), disabled_warnings_all_ (false), valid (valid_), @@ -38,8 +38,8 @@ namespace CXX } public: - Boolean - is_disabled (Char const* w) + bool + is_disabled (char const* w) { return disabled_warnings_all_ || disabled_warnings_.find (w) != disabled_warnings_.end (); @@ -74,10 +74,10 @@ namespace CXX protected: const WarningSet& disabled_warnings_; - Boolean disabled_warnings_all_; - Boolean& valid; - Boolean& subst_group_warning_issued; - Boolean subst_group_warning_issued_; + bool disabled_warnings_all_; + bool& valid; + bool& subst_group_warning_issued; + bool subst_group_warning_issued_; }; // @@ -98,20 +98,20 @@ namespace CXX { } - virtual Void + virtual void traverse (SemanticGraph::Element& e) { if (skip (e)) return; using SemanticGraph::Any; - Boolean q (e.qualified_p ()); + bool q (e.qualified_p ()); String ns (q ? e.namespace_ ().name () : ""); for (Any::NamespaceIterator i (any_.namespace_begin ()); i != any_.namespace_end (); ++i) { - Boolean failed (false); + bool failed (false); if (*i == L"##any") { @@ -184,14 +184,14 @@ namespace CXX { } - virtual Void + virtual void post (Type& c) { // Go down the inheritance hierarchy. // if (down_) { - Boolean up = up_; + bool up = up_; up_ = false; if (c.inherits_p ()) @@ -204,7 +204,7 @@ namespace CXX // if (up_) { - Boolean down = down_; + bool down = down_; down_ = false; for (Type::BegetsIterator i (c.begets_begin ()); @@ -218,10 +218,10 @@ namespace CXX } private: - Boolean up_, down_; + bool up_, down_; }; - virtual Void + virtual void traverse (SemanticGraph::Any& a) { using SemanticGraph::Compositor; @@ -273,7 +273,7 @@ namespace CXX } } - virtual Void + virtual void traverse (SemanticGraph::Complex& c) { using SemanticGraph::Schema; @@ -319,7 +319,7 @@ namespace CXX Complex::traverse (c); } - virtual Void + virtual void traverse (SemanticGraph::Type& t) { if (t.named_p ()) @@ -328,14 +328,14 @@ namespace CXX } } - virtual Void + virtual void traverse (SemanticGraph::Element& e) { if (is_disabled ("P002")) return; if (e.substitutes_p () && - !options.value () && + !options.generate_polymorphic () && !subst_group_warning_issued) { subst_group_warning_issued = true; @@ -352,7 +352,7 @@ namespace CXX // Return true if root sources s. // - Boolean + bool sources_p (SemanticGraph::Schema& root, SemanticGraph::Schema& s) { using SemanticGraph::Schema; @@ -372,9 +372,9 @@ namespace CXX } private: - Containers::Set types_; + set types_; - Traversal::Sources sources_; + Sources sources_; Traversal::Names schema_names_; Traversal::Namespace ns_; @@ -405,7 +405,7 @@ namespace CXX *this >> names_; } - Boolean + bool traverse_common (SemanticGraph::Member& m) { SemanticGraph::Type& t (m.type ()); @@ -434,7 +434,7 @@ namespace CXX << "automatically name them" << endl; - if (!options.value ()) + if (!options.show_anonymous ()) wcerr << t.file () << ": info: use --show-anonymous option to see these " << "types" << endl; @@ -446,14 +446,14 @@ namespace CXX return false; } - virtual Void + virtual void traverse (SemanticGraph::Element& e) { if (skip (e)) return; if (traverse_common (e)) { - if (options.value ()) + if (options.show_anonymous ()) { wcerr << e.file () << ":" << e.line () << ":" << e.column () << ": error: element '" << xpath (e) << "' " @@ -464,12 +464,12 @@ namespace CXX Traversal::Element::traverse (e); } - virtual Void + virtual void traverse (SemanticGraph::Attribute& a) { if (traverse_common (a)) { - if (options.value ()) + if (options.show_anonymous ()) { wcerr << a.file () << ":" << a.line () << ":" << a.column () << ": error: attribute '" << xpath (a) << "' " @@ -481,11 +481,11 @@ namespace CXX } private: - Boolean anonymous_error_issued_; + bool anonymous_error_issued_; - Containers::Set types_; + set types_; - Traversal::Sources sources_; + Sources sources_; Traversal::Names schema_names_; Traversal::Namespace ns_; @@ -500,22 +500,22 @@ namespace CXX { } - virtual Void + virtual void traverse (Type& e) { if (!valid) return; - if (options.value ()) + if (options.root_element_first ()) { if (element_ == 0) element_ = &e; } - else if (options.value ()) + else if (options.root_element_last ()) { element_ = &e; } - else if (String name = options.value ()) + else if (String name = options.root_element ()) { if (e.name () == name) element_ = &e; @@ -544,46 +544,40 @@ namespace CXX } - Validator:: - Validator () - { - // Dummy ctor, helps with long symbols on HP-UX. - } - - Boolean Validator:: - validate (CLI::Options const& options, + bool Validator:: + validate (options const& ops, SemanticGraph::Schema& root, SemanticGraph::Path const& path, - Boolean gen_driver, + bool gen_driver, const WarningSet& disabled_warnings) { - Boolean valid (true); - ValidationContext ctx (root, path, options, disabled_warnings, valid); + bool valid (true); + ValidationContext ctx (root, path, ops, disabled_warnings, valid); // // - if (options.value () != "char" && - options.value () != "wchar_t" && + if (ops.char_type () != "char" && + ops.char_type () != "wchar_t" && !ctx.is_disabled ("P003")) { wcerr << "warning P003: unknown base character type '" << - options.value ().c_str () << "'" << endl; + ops.char_type ().c_str () << "'" << endl; } // // - if (options.value () != "xerces" && - options.value () != "expat" && + if (ops.xml_parser () != "xerces" && + ops.xml_parser () != "expat" && !ctx.is_disabled ("P004")) { wcerr << "warning P004: unknown underlying XML parser '" << - options.value ().c_str () << "'" << endl; + ops.xml_parser ().c_str () << "'" << endl; } // // - if (options.value () == "expat" && - options.value () == "wchar_t") + if (ops.xml_parser () == "expat" && + ops.char_type () == "wchar_t") { wcerr << "error: using expat with wchar_t is not supported" << endl; @@ -593,9 +587,9 @@ namespace CXX // // - if (options.value () == "expat" && - !options.value ().empty () && - options.value () != "utf8") + if (ops.xml_parser () == "expat" && + !ops.char_encoding ().empty () && + ops.char_encoding () != "utf8") { wcerr << "error: using expat with character encoding other than " << "utf8 is not supported" @@ -606,8 +600,7 @@ namespace CXX // // - if (options.value () && - options.value ()) + if (ops.generate_validation () && ops.suppress_validation ()) { wcerr << "error: mutually exclusive options specified: " << "--generate-validation and --suppress-validation" @@ -618,8 +611,7 @@ namespace CXX // // - if (options.value () && - options.value ()) + if (ops.generate_noop_impl () && ops.generate_print_impl ()) { wcerr << "error: mutually exclusive options specified: " << "--generate-noop-impl and --generate-print-impl" @@ -631,9 +623,9 @@ namespace CXX // // { - Boolean ref (options.value ()); - Boolean rel (options.value ()); - Boolean re (options.value ()); + bool ref (ops.root_element_first ()); + bool rel (ops.root_element_last ()); + bool re (ops.root_element ()); if ((ref && rel) || (ref && re) || (rel && re)) { @@ -648,8 +640,8 @@ namespace CXX // // - Boolean import_maps (options.value ()); - Boolean export_maps (options.value ()); + bool import_maps (ops.import_maps ()); + bool export_maps (ops.export_maps ()); if (import_maps && export_maps) { @@ -698,7 +690,7 @@ namespace CXX SemanticGraph::Element* element (0); Traversal::Schema schema; - Traversal::Sources sources; + Sources sources; schema >> sources >> schema; diff --git a/xsd/xsd/cxx/parser/validator.hxx b/xsd/xsd/cxx/parser/validator.hxx index f519b05..c67cced 100644 --- a/xsd/xsd/cxx/parser/validator.hxx +++ b/xsd/xsd/cxx/parser/validator.hxx @@ -1,32 +1,28 @@ // file : xsd/cxx/parser/validator.hxx -// author : Boris Kolpackov -// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file #ifndef CXX_PARSER_VALIDATOR_HXX #define CXX_PARSER_VALIDATOR_HXX -#include -#include - #include +#include + +#include +#include namespace CXX { namespace Parser { - using namespace Cult::Types; - class Validator { public: - Validator (); // Dummy ctor, helps with long symbols on HP-UX. - - Boolean - validate (CLI::Options const& options, + bool + validate (options const&, SemanticGraph::Schema&, SemanticGraph::Path const& tu, - Boolean gen_driver, + bool gen_driver, const WarningSet& disabled_warnings); }; } diff --git a/xsd/xsd/cxx/tree/cli.hxx b/xsd/xsd/cxx/tree/cli.hxx deleted file mode 100644 index 171711d..0000000 --- a/xsd/xsd/cxx/tree/cli.hxx +++ /dev/null @@ -1,228 +0,0 @@ -// file : xsd/cxx/tree/cli.hxx -// author : Boris Kolpackov -// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC -// license : GNU GPL v2 + exceptions; see accompanying LICENSE file - -#ifndef CXX_TREE_CLI_HXX -#define CXX_TREE_CLI_HXX - -#include - -#include - -#include -#include - -namespace CXX -{ - namespace Tree - { - namespace CLI - { - using namespace Cult::Types; - - typedef Char const Key[]; - - extern Key char_type; - extern Key char_encoding; - extern Key output_dir; - extern Key generate_polymorphic; - extern Key polymorphic_type; - extern Key polymorphic_type_all; - extern Key generate_serialization; - extern Key generate_inline; - extern Key generate_ostream; - extern Key generate_doxygen; - extern Key generate_comparison; - extern Key generate_default_ctor; - extern Key generate_from_base_ctor; - extern Key generate_detach; - extern Key generate_wildcard; - extern Key generate_insertion; - extern Key generate_extraction; - extern Key generate_forward; - extern Key generate_xml_schema; - extern Key extern_xml_schema; - extern Key suppress_parsing; - extern Key generate_element_type; - extern Key generate_element_map; - extern Key generate_intellisense; - extern Key omit_default_attributes; - extern Key namespace_map; - extern Key namespace_regex; - extern Key namespace_regex_trace; - extern Key reserved_name; - extern Key type_naming; - extern Key function_naming; - extern Key type_regex; - extern Key accessor_regex; - extern Key one_accessor_regex; - extern Key opt_accessor_regex; - extern Key seq_accessor_regex; - extern Key modifier_regex; - extern Key one_modifier_regex; - extern Key opt_modifier_regex; - extern Key seq_modifier_regex; - extern Key parser_regex; - extern Key serializer_regex; - extern Key enumerator_regex; - extern Key element_type_regex; - extern Key name_regex_trace; - extern Key include_with_brackets; - extern Key include_prefix; - extern Key include_regex; - extern Key include_regex_trace; - extern Key guard_prefix; - extern Key root_element_first; - extern Key root_element_last; - extern Key root_element_all; - extern Key root_element_none; - extern Key root_element; - extern Key custom_type; - extern Key custom_type_regex; - extern Key hxx_suffix; - extern Key ixx_suffix; - extern Key cxx_suffix; - extern Key fwd_suffix; - extern Key hxx_regex; - extern Key ixx_regex; - extern Key cxx_regex; - extern Key fwd_regex; - extern Key hxx_prologue; - extern Key ixx_prologue; - extern Key cxx_prologue; - extern Key fwd_prologue; - extern Key prologue; - extern Key hxx_epilogue; - extern Key ixx_epilogue; - extern Key cxx_epilogue; - extern Key fwd_epilogue; - extern Key epilogue; - extern Key hxx_prologue_file; - extern Key ixx_prologue_file; - extern Key cxx_prologue_file; - extern Key fwd_prologue_file; - extern Key prologue_file; - extern Key hxx_epilogue_file; - extern Key ixx_epilogue_file; - extern Key cxx_epilogue_file; - extern Key fwd_epilogue_file; - extern Key epilogue_file; - extern Key parts; - extern Key parts_suffix; - extern Key export_symbol; - extern Key export_xml_schema; - extern Key export_maps; - extern Key import_maps; - extern Key show_anonymous; - extern Key show_sloc; - extern Key proprietary_license; - extern Key disable_multi_import; // Undocumented. - - - typedef Cult::CLI::Options< - - char_type, NarrowString, - char_encoding, NarrowString, - output_dir, NarrowString, - generate_polymorphic, Boolean, - polymorphic_type, Cult::Containers::Vector, - polymorphic_type_all, Boolean, - generate_serialization, Boolean, - generate_inline, Boolean, - generate_ostream, Boolean, - generate_doxygen, Boolean, - generate_comparison, Boolean, - generate_default_ctor, Boolean, - generate_from_base_ctor, Boolean, - generate_detach, Boolean, - generate_wildcard, Boolean, - generate_insertion, Cult::Containers::Vector, - generate_extraction, Cult::Containers::Vector, - generate_forward, Boolean, - generate_xml_schema, Boolean, - extern_xml_schema, NarrowString, - suppress_parsing, Boolean, - generate_element_type, Boolean, - generate_element_map, Boolean, - generate_intellisense, Boolean, - omit_default_attributes, Boolean, - namespace_map, Cult::Containers::Vector, - namespace_regex, Cult::Containers::Vector, - namespace_regex_trace, Boolean, - reserved_name, Cult::Containers::Vector, - type_naming, NarrowString, - function_naming, NarrowString, - type_regex, Cult::Containers::Vector, - accessor_regex, Cult::Containers::Vector, - one_accessor_regex, Cult::Containers::Vector, - opt_accessor_regex, Cult::Containers::Vector, - seq_accessor_regex, Cult::Containers::Vector, - modifier_regex, Cult::Containers::Vector, - one_modifier_regex, Cult::Containers::Vector, - opt_modifier_regex, Cult::Containers::Vector, - seq_modifier_regex, Cult::Containers::Vector, - parser_regex, Cult::Containers::Vector, - serializer_regex, Cult::Containers::Vector, - enumerator_regex, Cult::Containers::Vector, - element_type_regex, Cult::Containers::Vector, - name_regex_trace, Boolean, - include_with_brackets, Boolean, - include_prefix, NarrowString, - include_regex, Cult::Containers::Vector, - include_regex_trace, Boolean, - guard_prefix, NarrowString, - root_element_first, Boolean, - root_element_last, Boolean, - root_element_all, Boolean, - root_element_none, Boolean, - root_element, Cult::Containers::Vector, - custom_type, Cult::Containers::Vector, - custom_type_regex, Cult::Containers::Vector, - hxx_suffix, NarrowString, - ixx_suffix, NarrowString, - cxx_suffix, NarrowString, - fwd_suffix, NarrowString, - hxx_regex, NarrowString, - ixx_regex, NarrowString, - cxx_regex, NarrowString, - fwd_regex, NarrowString, - hxx_prologue, Cult::Containers::Vector, - ixx_prologue, Cult::Containers::Vector, - cxx_prologue, Cult::Containers::Vector, - fwd_prologue, Cult::Containers::Vector, - prologue, Cult::Containers::Vector, - hxx_epilogue, Cult::Containers::Vector, - ixx_epilogue, Cult::Containers::Vector, - cxx_epilogue, Cult::Containers::Vector, - fwd_epilogue, Cult::Containers::Vector, - epilogue, Cult::Containers::Vector, - hxx_prologue_file, NarrowString, - ixx_prologue_file, NarrowString, - cxx_prologue_file, NarrowString, - fwd_prologue_file, NarrowString, - prologue_file, NarrowString, - hxx_epilogue_file, NarrowString, - ixx_epilogue_file, NarrowString, - cxx_epilogue_file, NarrowString, - fwd_epilogue_file, NarrowString, - epilogue_file, NarrowString, - parts, UnsignedLong, - parts_suffix, NarrowString, - export_symbol, NarrowString, - export_xml_schema, Boolean, - export_maps, Boolean, - import_maps, Boolean, - show_anonymous, Boolean, - show_sloc, Boolean, - proprietary_license, Boolean, - disable_multi_import, Boolean - - > Options; - - struct OptionsSpec: Cult::CLI::OptionsSpec {}; - } - } -} - -#endif // CXX_TREE_CLI_HXX diff --git a/xsd/xsd/cxx/tree/counter.cxx b/xsd/xsd/cxx/tree/counter.cxx index 9254226..23fc221 100644 --- a/xsd/xsd/cxx/tree/counter.cxx +++ b/xsd/xsd/cxx/tree/counter.cxx @@ -1,6 +1,5 @@ // file : xsd/cxx/tree/counter.cxx -// author : Boris Kolpackov -// copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2006-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file #include @@ -15,40 +14,40 @@ namespace CXX { struct Member: Traversal::Member { - Member (UnsignedLong& complexity) + Member (size_t& complexity) : complexity_ (complexity) { } - virtual Void + virtual void traverse (Type&) { complexity_++; } - UnsignedLong& complexity_; + size_t& complexity_; }; struct Any: Traversal::Any, Traversal::AnyAttribute { - Any (UnsignedLong& complexity) + Any (size_t& complexity) : complexity_ (complexity) { } - virtual Void + virtual void traverse (SemanticGraph::Any&) { complexity_++; } - virtual Void + virtual void traverse (SemanticGraph::AnyAttribute&) { complexity_++; } - UnsignedLong& complexity_; + size_t& complexity_; }; struct TypeBase: Traversal::List, @@ -57,27 +56,27 @@ namespace CXX Traversal::Complex, Context { - TypeBase (Context& c, UnsignedLong& complexity) + TypeBase (Context& c, size_t& complexity) : Context (c), complexity_ (complexity) { } - virtual Void + virtual void traverse (SemanticGraph::List&) { complexity_++; } - virtual Void + virtual void traverse (SemanticGraph::Union&) { complexity_++; } - virtual Void + virtual void traverse (SemanticGraph::Enumeration& e) { - Boolean string_based (false); + bool string_based (false); { IsStringBasedType t (string_based); t.dispatch (e); @@ -86,7 +85,7 @@ namespace CXX complexity_ += (string_based ? 1 : 2); } - virtual Void + virtual void traverse (SemanticGraph::Complex& c) { complexity_++; // One for the type itself. @@ -99,14 +98,14 @@ namespace CXX names >> member; - if (options.value ()) + if (options.generate_wildcard ()) names >> any; Complex::names (c, names); } private: - UnsignedLong& complexity_; + size_t& complexity_; }; @@ -120,12 +119,12 @@ namespace CXX { } - virtual Void + virtual void traverse (SemanticGraph::Type& t) { counts_.global_types++; - UnsignedLong complexity (0); + size_t complexity (0); TypeBase type (*this, complexity); type.dispatch (t); @@ -160,7 +159,7 @@ namespace CXX } } - virtual Void + virtual void traverse (Type& e) { // Check if the previous element we saw needs to be generated. @@ -177,33 +176,33 @@ namespace CXX } private: - Void + void count_last () { if (generate_p (*last_)) { counts_.generated_global_elements++; - UnsignedLong complexity (0); + size_t complexity (0); if (doc_root_p (*last_)) { - if (options.value ()) + if (options.generate_element_type ()) { complexity += 1; // For c-tors and d-tor. - if (!options.value ()) + if (!options.suppress_parsing ()) complexity += 1; - if (options.value ()) + if (options.generate_serialization ()) complexity += 1; } else { - if (!options.value ()) + if (!options.suppress_parsing ()) complexity += 6; // 13 parsing functions. - if (options.value ()) + if (options.generate_serialization ()) complexity += 4; // 8 serialization functions. } } @@ -230,21 +229,16 @@ namespace CXX }; } - Counter:: - Counter () - { - } - Counts Counter:: - count (CLI::Options const& options, + count (options const& ops, SemanticGraph::Schema& tu, SemanticGraph::Path const& path) { Counts counts; - Context ctx (std::wcerr, tu, path, options, counts, false, 0, 0, 0, 0); + Context ctx (std::wcerr, tu, path, ops, counts, false, 0, 0, 0, 0); Traversal::Schema schema; - Traversal::Sources sources; + Sources sources; schema >> sources >> schema; diff --git a/xsd/xsd/cxx/tree/counter.hxx b/xsd/xsd/cxx/tree/counter.hxx index 726de47..ea1a3c3 100644 --- a/xsd/xsd/cxx/tree/counter.hxx +++ b/xsd/xsd/cxx/tree/counter.hxx @@ -1,13 +1,12 @@ // file : xsd/cxx/tree/counter.hxx -// author : Boris Kolpackov -// copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2006-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file #ifndef CXX_TREE_COUNTER_HXX #define CXX_TREE_COUNTER_HXX #include -#include +#include namespace CXX { @@ -16,10 +15,8 @@ namespace CXX class Counter { public: - Counter (); // Dummy ctor, helps with long symbols on HP-UX. - Counts - count (CLI::Options const&, + count (options const&, SemanticGraph::Schema&, SemanticGraph::Path const&); }; diff --git a/xsd/xsd/cxx/tree/default-value.cxx b/xsd/xsd/cxx/tree/default-value.cxx index ff964d3..4f27d7f 100644 --- a/xsd/xsd/cxx/tree/default-value.cxx +++ b/xsd/xsd/cxx/tree/default-value.cxx @@ -1,11 +1,11 @@ // file : xsd/cxx/tree/default-value.cxx -// author : Boris Kolpackov -// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file #include using std::hex; +using std::dec; namespace CXX { @@ -13,14 +13,14 @@ namespace CXX { namespace { - Void + void normalize (String& s) { - Size n (s.size ()); + size_t n (s.size ()); - for (Size i (0); i < n; ++i) + for (size_t i (0); i < n; ++i) { - WideChar& c (s[i]); + wchar_t& c (s[i]); if (c == 0x0D || // carriage return c == 0x09 || // tab @@ -29,15 +29,15 @@ namespace CXX } } - Void + void collapse (String& s) { - Size n (s.size ()), j (0); - Boolean subs (false), trim (true); + size_t n (s.size ()), j (0); + bool subs (false), trim (true); - for (Size i (0); i < n; ++i) + for (size_t i (0); i < n; ++i) { - WideChar c (s[i]); + wchar_t c (s[i]); if (c == 0x20 || c == 0x09 || c == 0x0A) subs = true; @@ -61,21 +61,21 @@ namespace CXX s.resize (j); } - Void + void strip_zeros (String& s) { - Size n (s.size ()), i (0); + size_t n (s.size ()), i (0); if (n > 0 && (s[i] == '-' || s[i] == '+')) i++; - Size j (i); + size_t j (i); - Boolean strip (true); + bool strip (true); for (; i < n; ++i) { - WideChar c (s[i]); + wchar_t c (s[i]); if (c == '0') { @@ -97,7 +97,7 @@ namespace CXX s.resize (j); } - Void + void make_float (String& s) { if (s.find ('.') == String::npos && @@ -112,13 +112,13 @@ namespace CXX // IsLiteralValue:: - IsLiteralValue (Boolean& r) + IsLiteralValue (bool& r) : IsFundamentalType (r) { *this >> inherits_ >> *this; } - Void IsLiteralValue:: + void IsLiteralValue:: traverse (SemanticGraph::Complex& c) { inherits (c); @@ -144,7 +144,7 @@ namespace CXX return literal_; } - Void LiteralValue:: + void LiteralValue:: traverse (SemanticGraph::Complex& c) { inherits (c); @@ -152,7 +152,7 @@ namespace CXX // Boolean. // - Void LiteralValue:: + void LiteralValue:: traverse (SemanticGraph::Fundamental::Boolean&) { collapse (value_); @@ -161,7 +161,7 @@ namespace CXX // Integral types. // - Void LiteralValue:: + void LiteralValue:: traverse (SemanticGraph::Fundamental::Byte&) { collapse (value_); @@ -169,15 +169,15 @@ namespace CXX literal_ = value_; } - Void LiteralValue:: + void LiteralValue:: traverse (SemanticGraph::Fundamental::UnsignedByte&) { collapse (value_); strip_zeros (value_); - literal_ = value_; + literal_ = value_ + L"U"; } - Void LiteralValue:: + void LiteralValue:: traverse (SemanticGraph::Fundamental::Short&) { collapse (value_); @@ -185,15 +185,15 @@ namespace CXX literal_ = value_; } - Void LiteralValue:: + void LiteralValue:: traverse (SemanticGraph::Fundamental::UnsignedShort&) { collapse (value_); strip_zeros (value_); - literal_ = value_; + literal_ = value_ + L"U"; } - Void LiteralValue:: + void LiteralValue:: traverse (SemanticGraph::Fundamental::Int&) { collapse (value_); @@ -201,15 +201,15 @@ namespace CXX literal_ = value_; } - Void LiteralValue:: + void LiteralValue:: traverse (SemanticGraph::Fundamental::UnsignedInt&) { collapse (value_); strip_zeros (value_); - literal_ = value_; + literal_ = value_ + L"U"; } - Void LiteralValue:: + void LiteralValue:: traverse (SemanticGraph::Fundamental::Long&) { collapse (value_); @@ -218,7 +218,7 @@ namespace CXX literal_ += L"LL"; } - Void LiteralValue:: + void LiteralValue:: traverse (SemanticGraph::Fundamental::UnsignedLong&) { collapse (value_); @@ -227,7 +227,7 @@ namespace CXX literal_ += L"ULL"; } - Void LiteralValue:: + void LiteralValue:: traverse (SemanticGraph::Fundamental::Integer&) { collapse (value_); @@ -235,7 +235,7 @@ namespace CXX literal_ = value_ + L"LL"; } - Void LiteralValue:: + void LiteralValue:: traverse (SemanticGraph::Fundamental::NonPositiveInteger&) { collapse (value_); @@ -243,7 +243,7 @@ namespace CXX literal_ = value_ + L"LL"; } - Void LiteralValue:: + void LiteralValue:: traverse (SemanticGraph::Fundamental::NonNegativeInteger&) { collapse (value_); @@ -251,7 +251,7 @@ namespace CXX literal_ = value_ + L"ULL"; } - Void LiteralValue:: + void LiteralValue:: traverse (SemanticGraph::Fundamental::PositiveInteger&) { collapse (value_); @@ -259,7 +259,7 @@ namespace CXX literal_ = value_ + L"ULL"; } - Void LiteralValue:: + void LiteralValue:: traverse (SemanticGraph::Fundamental::NegativeInteger&) { collapse (value_); @@ -269,7 +269,7 @@ namespace CXX // Floats. // - Void LiteralValue:: + void LiteralValue:: traverse (SemanticGraph::Fundamental::Float& t) { collapse (value_); @@ -297,7 +297,7 @@ namespace CXX } } - Void LiteralValue:: + void LiteralValue:: traverse (SemanticGraph::Fundamental::Double& t) { collapse (value_); @@ -325,7 +325,7 @@ namespace CXX } } - Void LiteralValue:: + void LiteralValue:: traverse (SemanticGraph::Fundamental::Decimal&) { collapse (value_); @@ -345,43 +345,43 @@ namespace CXX *this >> inherits_ >> *this; } - Void InitKind:: + void InitKind:: traverse (SemanticGraph::List&) { r_ = function; } - Void InitKind:: + void InitKind:: traverse (SemanticGraph::Complex& c) { inherits (c); } - Void InitKind:: + void InitKind:: traverse (SemanticGraph::Fundamental::Base64Binary&) { r_ = data; } - Void InitKind:: + void InitKind:: traverse (SemanticGraph::Fundamental::HexBinary&) { r_ = data; } - Void InitKind:: + void InitKind:: traverse (SemanticGraph::Fundamental::NameTokens&) { r_ = function; } - Void InitKind:: + void InitKind:: traverse (SemanticGraph::Fundamental::IdRefs&) { r_ = function; } - Void InitKind:: + void InitKind:: traverse (SemanticGraph::Fundamental::Entities&) { r_ = function; @@ -397,14 +397,14 @@ namespace CXX { } - Void InitValue:: + void InitValue:: dispatch (SemanticGraph::Node& type, String const& value) { value_ = value; Traversal::NodeBase::dispatch (type); } - Void InitValue:: + void InitValue:: traverse (SemanticGraph::List& l) { collapse (value_); @@ -415,9 +415,9 @@ namespace CXX SemanticGraph::Type& t (l.argumented ().type ()); String ov (value_); - Size b (0); + size_t b (0); - for (Size e (ov.find (' ')); ; e = ov.find (' ', b)) + for (size_t e (ov.find (' ')); ; e = ov.find (' ', b)) { String v (ov, b, e != String::npos ? e - b : e); @@ -448,21 +448,27 @@ namespace CXX value_ = ov; } - Void InitValue:: + void InitValue:: traverse (SemanticGraph::Union&) { os << strlit (value_); } - Void InitValue:: + void InitValue:: traverse (SemanticGraph::Complex& c) { Traversal::NodeBase::dispatch (ultimate_base (c)); } - // anySimpleType. + // anyType & anySimpleType. // - Void InitValue:: + void InitValue:: + traverse (SemanticGraph::AnyType& t) + { + os << fq_name (t) << " (" << strlit (value_) << ")"; + } + + void InitValue:: traverse (SemanticGraph::AnySimpleType& t) { os << fq_name (t) << " (" << strlit (value_) << ")"; @@ -470,34 +476,34 @@ namespace CXX // Strings. // - Void InitValue:: + void InitValue:: traverse (SemanticGraph::Fundamental::String&) { os << strlit (value_); } - Void InitValue:: + void InitValue:: traverse (SemanticGraph::Fundamental::NormalizedString&) { normalize (value_); os << strlit (value_); } - Void InitValue:: + void InitValue:: traverse (SemanticGraph::Fundamental::Token&) { collapse (value_); os << strlit (value_); } - Void InitValue:: + void InitValue:: traverse (SemanticGraph::Fundamental::NameToken&) { collapse (value_); os << strlit (value_); } - Void InitValue:: + void InitValue:: traverse (SemanticGraph::Fundamental::NameTokens&) { string_sequence_type ( @@ -505,21 +511,21 @@ namespace CXX xs_ns ().find ("NMTOKEN").first->named ())); } - Void InitValue:: + void InitValue:: traverse (SemanticGraph::Fundamental::Name&) { collapse (value_); os << strlit (value_); } - Void InitValue:: + void InitValue:: traverse (SemanticGraph::Fundamental::NCName&) { collapse (value_); os << strlit (value_); } - Void InitValue:: + void InitValue:: traverse (SemanticGraph::Fundamental::Language&) { collapse (value_); @@ -528,10 +534,10 @@ namespace CXX // Qualified name. // - Void InitValue:: + void InitValue:: traverse (SemanticGraph::Fundamental::QName& t) { - Size p (value_.rfind ('#')); + size_t p (value_.rfind ('#')); if (p != String::npos) { @@ -563,21 +569,21 @@ namespace CXX // ID/IDREF. // - Void InitValue:: + void InitValue:: traverse (SemanticGraph::Fundamental::Id&) { collapse (value_); os << strlit (value_); } - Void InitValue:: + void InitValue:: traverse (SemanticGraph::Fundamental::IdRef&) { collapse (value_); os << strlit (value_); } - Void InitValue:: + void InitValue:: traverse (SemanticGraph::Fundamental::IdRefs&) { string_sequence_type ( @@ -587,7 +593,7 @@ namespace CXX // URI. // - Void InitValue:: + void InitValue:: traverse (SemanticGraph::Fundamental::AnyURI&) { collapse (value_); @@ -615,7 +621,7 @@ namespace CXX return r; } - Void InitValue:: + void InitValue:: traverse (SemanticGraph::Fundamental::Base64Binary& t) { collapse (value_); @@ -628,17 +634,17 @@ namespace CXX // Decode. // - Size size (value_.size ()); + size_t size (value_.size ()); // Remove all whitespaces. // { - Size j (0); - Boolean subs (false); + size_t j (0); + bool subs (false); - for (Size i (0); i < size; ++i) + for (size_t i (0); i < size; ++i) { - WideChar c (value_[i]); + wchar_t c (value_[i]); if (c == 0x20 || c == 0x0A || c == 0x0D || c == 0x09) subs = true; @@ -657,20 +663,20 @@ namespace CXX // Our length should be a multiple of four. // - Size quad_count (size / 4); + size_t quad_count (size / 4); // Source and destination indexes. // - Size si (0), di (0); + size_t si (0), di (0); // Process all quads except the last one. // unsigned short v; unsigned char b1, b2, b3, b4; - WideChar prev_fill (os.fill ('0')); + wchar_t prev_fill (os.fill ('0')); - for (Size q (0); q < quad_count - 1; ++q) + for (size_t q (0); q < quad_count - 1; ++q) { b1 = base64_decode (value_[si++]); b2 = base64_decode (value_[si++]); @@ -683,17 +689,21 @@ namespace CXX if (di % 9 == 0) os << endl; + os << hex; + v = static_cast ((b1 << 2) | (b2 >> 4)); os.width (2); - os << "0x" << hex << v; + os << "0x" << v; v = static_cast ((b2 << 4) | (b3 >> 2)); os.width (2); - os << ", 0x" << hex << v; + os << ", 0x" << v; v = static_cast ((b3 << 6) | b4); os.width (2); - os << ", 0x" << hex << v; + os << ", 0x" << v; + + os << dec; di += 3; } @@ -703,7 +713,7 @@ namespace CXX b1 = base64_decode (value_[si++]); b2 = base64_decode (value_[si++]); - WideChar e3 (value_[si++]), e4 (value_[si++]); + wchar_t e3 (value_[si++]), e4 (value_[si++]); if (quad_count != 1) os << ", "; @@ -718,7 +728,7 @@ namespace CXX // Two pads. Last 4 bits in b2 should be zero. // v = static_cast ((b1 << 2) | (b2 >> 4)); - os << "0x" << hex << v; + os << "0x" << hex << v << dec; di++; } else @@ -727,13 +737,17 @@ namespace CXX // b3 = base64_decode (e3); + os << hex; + v = static_cast ((b1 << 2) | (b2 >> 4)); os.width (2); - os << "0x" << hex << v; + os << "0x" << v; v = static_cast ((b2 << 4) | (b3 >> 2)); os.width (2); - os << ", 0x" << hex << v; + os << ", 0x" << v; + + os << dec; di += 2; } @@ -745,17 +759,21 @@ namespace CXX b3 = base64_decode (e3); b4 = base64_decode (e4); + os << hex; + v = static_cast ((b1 << 2) | (b2 >> 4)); os.width (2); - os << "0x" << hex << v; + os << "0x" << v; v = static_cast ((b2 << 4) | (b3 >> 2)); os.width (2); - os << ", 0x" << hex << v; + os << ", 0x" << v; v = static_cast ((b3 << 6) | b4); os.width (2); - os << ", 0x" << hex << v; + os << ", 0x" << v; + + os << dec; di += 3; } @@ -797,7 +815,7 @@ namespace CXX return r; } - Void InitValue:: + void InitValue:: traverse (SemanticGraph::Fundamental::HexBinary& t) { collapse (value_); @@ -810,10 +828,10 @@ namespace CXX // Decode. // - Size n (value_.size () / 2); - WideChar prev_fill (os.fill ('0')); + size_t n (value_.size () / 2); + wchar_t prev_fill (os.fill ('0')); - for (Size i (0); i < n; ++i) + for (size_t i (0); i < n; ++i) { unsigned char h (hex_decode (value_[2 * i])); unsigned char l (hex_decode (value_[2 * i + 1])); @@ -829,7 +847,7 @@ namespace CXX unsigned short v = static_cast ((h << 4) | l); os.width (2); - os << "0x" << hex << v; + os << "0x" << hex << v << dec; } os.fill (prev_fill); @@ -856,15 +874,15 @@ namespace CXX // Date/time. // - Void InitValue:: + void InitValue:: traverse (SemanticGraph::Fundamental::Date& t) { // date := [-]CCYY[N]*-MM-DD[Z|(+|-)HH:MM] // collapse (value_); - Size b (0); - Size e (value_.find ('-', value_[0] == '-' ? 5 : 4)); + size_t b (0); + size_t e (value_.find ('-', value_[0] == '-' ? 5 : 4)); String year (value_, 0, e); b = e + 1; @@ -882,15 +900,15 @@ namespace CXX os << ")"; } - Void InitValue:: + void InitValue:: traverse (SemanticGraph::Fundamental::DateTime& t) { // date_time := [-]CCYY[N]*-MM-DDTHH:MM:SS[.S+][Z|(+|-)HH:MM] // collapse (value_); - Size b (0); - Size e (value_.find ('-', value_[0] == '-' ? 5 : 4)); + size_t b (0); + size_t e (value_.find ('-', value_[0] == '-' ? 5 : 4)); String year (value_, 0, e); b = e + 1; @@ -909,7 +927,7 @@ namespace CXX e = b + 2; for (; e < value_.size (); ++e) { - WideChar c (value_[e]); + wchar_t c (value_[e]); if (c == 'Z' || c == '+' || c == '-') break; @@ -934,12 +952,12 @@ namespace CXX namespace { - Size - find_delim (String const& s, Size pos) + size_t + find_delim (String const& s, size_t pos) { for (; pos < s.size (); ++pos) { - WideChar c (s[pos]); + wchar_t c (s[pos]); if (c == 'Y' || c == 'D' || c == 'M' || c == 'H' || c == 'M' || c == 'S' || c == 'T') @@ -950,14 +968,14 @@ namespace CXX } } - Void InitValue:: + void InitValue:: traverse (SemanticGraph::Fundamental::Duration& t) { // duration := [-]P[nY][nM][nD][TnHnMn[.n+]S] // collapse (value_); - Size b (1), e, n (value_.size ()); + size_t b (1), e, n (value_.size ()); os << fq_name (t) << " ("; @@ -1053,7 +1071,7 @@ namespace CXX os << ")"; } - Void InitValue:: + void InitValue:: traverse (SemanticGraph::Fundamental::Day& t) { // gday := ---DD[Z|(+|-)HH:MM] @@ -1068,7 +1086,7 @@ namespace CXX os << ")"; } - Void InitValue:: + void InitValue:: traverse (SemanticGraph::Fundamental::Month& t) { // gmonth := --MM[Z|(+|-)HH:MM] @@ -1083,7 +1101,7 @@ namespace CXX os << ")"; } - Void InitValue:: + void InitValue:: traverse (SemanticGraph::Fundamental::MonthDay& t) { // gmonth_day := --MM-DD[Z|(+|-)HH:MM] @@ -1101,17 +1119,17 @@ namespace CXX os << ")"; } - Void InitValue:: + void InitValue:: traverse (SemanticGraph::Fundamental::Year& t) { // gyear := [-]CCYY[N]*[Z|(+|-)HH:MM] // collapse (value_); - Size pos (value_[0] == '-' ? 5 : 4); + size_t pos (value_[0] == '-' ? 5 : 4); for (; pos < value_.size (); ++pos) { - WideChar c (value_[pos]); + wchar_t c (value_[pos]); if (c == 'Z' || c == '+' || c == '-') break; @@ -1125,14 +1143,14 @@ namespace CXX os << ")"; } - Void InitValue:: + void InitValue:: traverse (SemanticGraph::Fundamental::YearMonth& t) { // gyear_month := [-]CCYY[N]*-MM[Z|(+|-)HH:MM] // collapse (value_); - Size pos (value_.find ('-', value_[0] == '-' ? 5 : 4)); + size_t pos (value_.find ('-', value_[0] == '-' ? 5 : 4)); String year (value_, 0, pos); String month (value_, pos + 1, 2); @@ -1145,7 +1163,7 @@ namespace CXX os << ")"; } - Void InitValue:: + void InitValue:: traverse (SemanticGraph::Fundamental::Time& t) { // time := HH:MM:SS[.S+][Z|(+|-)HH:MM] @@ -1155,10 +1173,10 @@ namespace CXX String hours (value_, 0, 2); String minutes (value_, 3, 2); - Size e (8); + size_t e (8); for (; e < value_.size (); ++e) { - WideChar c (value_[e]); + wchar_t c (value_[e]); if (c == 'Z' || c == '+' || c == '-') break; @@ -1176,8 +1194,8 @@ namespace CXX os << ")"; } - Void InitValue:: - time_zone (Size pos) + void InitValue:: + time_zone (size_t pos) { // time_zone := Z|(+|-)HH:MM // @@ -1211,14 +1229,14 @@ namespace CXX // Entity. // - Void InitValue:: + void InitValue:: traverse (SemanticGraph::Fundamental::Entity&) { collapse (value_); os << strlit (value_); } - Void InitValue:: + void InitValue:: traverse (SemanticGraph::Fundamental::Entities&) { string_sequence_type ( @@ -1226,7 +1244,7 @@ namespace CXX xs_ns ().find ("ENTITY").first->named ())); } - Void InitValue:: + void InitValue:: string_sequence_type (SemanticGraph::Type& t) { collapse (value_); @@ -1234,9 +1252,9 @@ namespace CXX if (!value_) return; - Size b (0); + size_t b (0); - for (Size e (value_.find (' ')); ; e = value_.find (' ', b)) + for (size_t e (value_.find (' ')); ; e = value_.find (' ', b)) { String v (value_, b, e != String::npos ? e - b : e); diff --git a/xsd/xsd/cxx/tree/default-value.hxx b/xsd/xsd/cxx/tree/default-value.hxx index c80132e..eb91a8c 100644 --- a/xsd/xsd/cxx/tree/default-value.hxx +++ b/xsd/xsd/cxx/tree/default-value.hxx @@ -1,6 +1,5 @@ // file : xsd/cxx/tree/default-value.hxx -// author : Boris Kolpackov -// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file #ifndef CXX_TREE_DEFAULT_VALUE_HXX @@ -17,9 +16,9 @@ namespace CXX { struct IsLiteralValue: IsFundamentalType, Traversal::Complex { - IsLiteralValue (Boolean& r); + IsLiteralValue (bool& r); - virtual Void + virtual void traverse (SemanticGraph::Complex&); private: @@ -57,64 +56,64 @@ namespace CXX // Handle inheritance. // - virtual Void + virtual void traverse (SemanticGraph::Complex&); // Boolean. // - virtual Void + virtual void traverse (SemanticGraph::Fundamental::Boolean&); // Integral types. // - virtual Void + virtual void traverse (SemanticGraph::Fundamental::Byte&); - virtual Void + virtual void traverse (SemanticGraph::Fundamental::UnsignedByte&); - virtual Void + virtual void traverse (SemanticGraph::Fundamental::Short&); - virtual Void + virtual void traverse (SemanticGraph::Fundamental::UnsignedShort&); - virtual Void + virtual void traverse (SemanticGraph::Fundamental::Int&); - virtual Void + virtual void traverse (SemanticGraph::Fundamental::UnsignedInt&); - virtual Void + virtual void traverse (SemanticGraph::Fundamental::Long&); - virtual Void + virtual void traverse (SemanticGraph::Fundamental::UnsignedLong&); - virtual Void + virtual void traverse (SemanticGraph::Fundamental::Integer&); - virtual Void + virtual void traverse (SemanticGraph::Fundamental::NonPositiveInteger&); - virtual Void + virtual void traverse (SemanticGraph::Fundamental::NonNegativeInteger&); - virtual Void + virtual void traverse (SemanticGraph::Fundamental::PositiveInteger&); - virtual Void + virtual void traverse (SemanticGraph::Fundamental::NegativeInteger&); // Floats. // - virtual Void + virtual void traverse (SemanticGraph::Fundamental::Float&); - virtual Void + virtual void traverse (SemanticGraph::Fundamental::Double&); - virtual Void + virtual void traverse (SemanticGraph::Fundamental::Decimal&); private: @@ -148,25 +147,25 @@ namespace CXX // InitKind (Kind& r); - virtual Void + virtual void traverse (SemanticGraph::List&); - virtual Void + virtual void traverse (SemanticGraph::Complex&); - virtual Void + virtual void traverse (SemanticGraph::Fundamental::Base64Binary&); - virtual Void + virtual void traverse (SemanticGraph::Fundamental::HexBinary&); - virtual Void + virtual void traverse (SemanticGraph::Fundamental::NameTokens&); - virtual Void + virtual void traverse (SemanticGraph::Fundamental::IdRefs&); - virtual Void + virtual void traverse (SemanticGraph::Fundamental::Entities&); private: @@ -178,6 +177,7 @@ namespace CXX Traversal::Union, Traversal::Complex, + Traversal::AnyType, Traversal::AnySimpleType, Traversal::Fundamental::String, @@ -217,133 +217,136 @@ namespace CXX { InitValue (Context&); - Void + void data (String const& data) { data_ = data; dispatch_count_ = 0; } - Void + void dispatch (SemanticGraph::Node& type, String const& value); - virtual Void + virtual void traverse (SemanticGraph::List&); - virtual Void + virtual void traverse (SemanticGraph::Union&); - virtual Void + virtual void traverse (SemanticGraph::Complex&); - // anySimpleType. + // anyType & anySimpleType. // - virtual Void + virtual void + traverse (SemanticGraph::AnyType&); + + virtual void traverse (SemanticGraph::AnySimpleType&); // Strings. // - virtual Void + virtual void traverse (SemanticGraph::Fundamental::String&); - virtual Void + virtual void traverse (SemanticGraph::Fundamental::NormalizedString&); - virtual Void + virtual void traverse (SemanticGraph::Fundamental::Token&); - virtual Void + virtual void traverse (SemanticGraph::Fundamental::NameToken&); - virtual Void + virtual void traverse (SemanticGraph::Fundamental::NameTokens&); - virtual Void + virtual void traverse (SemanticGraph::Fundamental::Name&); - virtual Void + virtual void traverse (SemanticGraph::Fundamental::NCName&); - virtual Void + virtual void traverse (SemanticGraph::Fundamental::Language&); // Qualified name. // - virtual Void + virtual void traverse (SemanticGraph::Fundamental::QName&); // ID/IDREF. // - virtual Void + virtual void traverse (SemanticGraph::Fundamental::Id&); - virtual Void + virtual void traverse (SemanticGraph::Fundamental::IdRef&); - virtual Void + virtual void traverse (SemanticGraph::Fundamental::IdRefs&); // URI. // - virtual Void + virtual void traverse (SemanticGraph::Fundamental::AnyURI&); // Binary. // - virtual Void + virtual void traverse (SemanticGraph::Fundamental::Base64Binary&); - virtual Void + virtual void traverse (SemanticGraph::Fundamental::HexBinary&); // Date/time. // - virtual Void + virtual void traverse (SemanticGraph::Fundamental::Date&); - virtual Void + virtual void traverse (SemanticGraph::Fundamental::DateTime&); - virtual Void + virtual void traverse (SemanticGraph::Fundamental::Duration&); - virtual Void + virtual void traverse (SemanticGraph::Fundamental::Day&); - virtual Void + virtual void traverse (SemanticGraph::Fundamental::Month&); - virtual Void + virtual void traverse (SemanticGraph::Fundamental::MonthDay&); - virtual Void + virtual void traverse (SemanticGraph::Fundamental::Year&); - virtual Void + virtual void traverse (SemanticGraph::Fundamental::YearMonth&); - virtual Void + virtual void traverse (SemanticGraph::Fundamental::Time&); // Entity. // - virtual Void + virtual void traverse (SemanticGraph::Fundamental::Entity&); - virtual Void + virtual void traverse (SemanticGraph::Fundamental::Entities&); private: - Void + void string_sequence_type (SemanticGraph::Type& element_type); - Void - time_zone (Size pos); + void + time_zone (size_t pos); private: String value_; String data_; - Size dispatch_count_; + size_t dispatch_count_; MemberTypeName type_name_; LiteralValue literal_value_; }; diff --git a/xsd/xsd/cxx/tree/elements.cxx b/xsd/xsd/cxx/tree/elements.cxx index cad5a33..202ab62 100644 --- a/xsd/xsd/cxx/tree/elements.cxx +++ b/xsd/xsd/cxx/tree/elements.cxx @@ -1,6 +1,5 @@ // file : xsd/cxx/tree/elements.cxx -// author : Boris Kolpackov -// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file #include @@ -11,55 +10,18 @@ namespace CXX { // Context // - Void Context:: - update_ns_scope () // Keeping this function first helps HP-UX - { // (long symbols). - ns_scope.clear (); - - Boolean first (true); - - for (NamespaceStack::Iterator i (ns_scope_stack.begin ()); - i != ns_scope_stack.end (); - ++i) - { - // We only qualify names until the namespace level. - // - if (first) - first = false; - else - ns_scope += L"::"; - - ns_scope += *i; - } - } - Context:: Context (std::wostream& o, SemanticGraph::Schema& root, SemanticGraph::Path const& path, - CLI::Options const& ops, + options_type const& ops, Counts const& counts_, - Boolean generate_xml_schema__, + bool generate_xml_schema__, StringLiteralMap const* map, Regex const* fe, Regex const* he, Regex const* ie) - : CXX::Context (o, - root, - path, - map, - ops.value (), - ops.value (), - ops.value (), - ops.value (), - ops.value (), - ops.value (), - ops.value (), - ops.value (), - ops.value (), - ops.value (), - ops.value (), - ops.value ()), + : CXX::Context (o, root, path, ops, map), options (ops), counts (counts_), any_type (any_type_), @@ -84,9 +46,10 @@ namespace CXX as_decimal_type (as_decimal_type_), generate_xml_schema (generate_xml_schema_), doxygen (doxygen_), - polymorphic (ops.value ()), - polymorphic_all (ops.value ()), - detach (ops.value ()), + polymorphic (ops.generate_polymorphic ()), + polymorphic_all (ops.polymorphic_type_all ()), + poly_plate (ops.polymorphic_plate ()), + detach (ops.generate_detach ()), fwd_expr (fe), hxx_expr (he), ixx_expr (ie), @@ -96,7 +59,7 @@ namespace CXX qname_type_ (L"::xsd::cxx::xml::qualified_name< " + char_type + L" >"), parser_type_ (L"::xsd::cxx::xml::dom::parser< " + char_type + L" >"), generate_xml_schema_ (generate_xml_schema__), - doxygen_ (ops.value ()), + doxygen_ (ops.generate_doxygen ()), ns_scope_stack (ns_scope_stack_), cxx_uq_id_expr_ (L"^[a-zA-Z_]\\w*$"), cxx_uq_id_expr (cxx_uq_id_expr_) @@ -118,23 +81,25 @@ namespace CXX container = xs_name + L"::" + xsc.get ("container"); flags_type = xs_name + L"::" + xsc.get ("flags"); - if (ops.value ()) + if (ops.generate_element_type ()) element_type = xs_name + L"::" + xsc.get ("element-type"); properties_type = xs_name + L"::" + xsc.get ("properties"); - if (!ops.value () || - ops.value ()) + if (!ops.suppress_parsing () || ops.generate_serialization ()) { error_handler_type = xs_name + L"::" + xsc.get ("error-handler"); } - dom_auto_ptr_ = xs_name + L"::dom::auto_ptr"; + dom_auto_ptr_ = xs_name + (std >= cxx_version::cxx11 + ? L"::dom::unique_ptr" + : L"::dom::auto_ptr"); + dom_node_key_ = xs_name + L"::dom::" + xsc.get ("tree-node-key"); - if (ops.value ()) + if (ops.generate_serialization ()) { as_double_type_ = xs_name + L"::" + xsc.get ("as-double"); @@ -152,17 +117,17 @@ namespace CXX // istream and ostream are templates and for now use the same // names regardless of the naming convention. // - if (!ops.value ().empty ()) + if (!ops.generate_extraction ().empty ()) istream_type = xs_name + L"::istream"; - if (!ops.value ().empty ()) + if (!ops.generate_insertion ().empty ()) ostream_type = xs_name + L"::ostream"; } // Xerces-C++ namespace. IntelliSense for some reason does not like // it fully-qualified (maybe because it's a namespace alias). // - if (ops.value ()) + if (ops.generate_intellisense ()) xerces_ns = "xercesc"; else xerces_ns = "::xercesc"; @@ -178,14 +143,14 @@ namespace CXX // Custom type mapping. // - typedef Containers::Vector Vector; // Direct custom type mapping. // { - Vector const& v (ops.value ()); + NarrowStrings const& v (ops.custom_type ()); - for (Vector::ConstIterator i (v.begin ()), e (v.end ()); i != e; ++i) + for (NarrowStrings::const_iterator i (v.begin ()), + e (v.end ()); i != e; ++i) { String s (*i); @@ -194,7 +159,7 @@ namespace CXX // Split the string in two parts at the last '='. // - Size pos (s.rfind ('=')); + size_t pos (s.rfind ('=')); // If no delimiter found then both type and base are empty. // @@ -237,20 +202,21 @@ namespace CXX // Regex custom type mapping. // { - Vector const& v (ops.value ()); + NarrowStrings const& v (ops.custom_type_regex ()); - for (Vector::ConstIterator i (v.begin ()), e (v.end ()); i != e; ++i) + for (NarrowStrings::const_iterator i (v.begin ()), + e (v.end ()); i != e; ++i) { String s (*i); if (s.empty ()) throw InvalidCustomTypeMapping (s, "mapping string is empty"); - WideChar delimiter (s[0]); + wchar_t delimiter (s[0]); // First get pattern. // - Size pos (s.find (delimiter, 1)); + size_t pos (s.find (delimiter, 1)); if (pos == String::npos) throw InvalidCustomTypeMapping ( @@ -291,7 +257,7 @@ namespace CXX } regex_custom_type_map.push_back ( - RegexCustomTypeMapInfo (pat, type, base)); + RegexCustomTypeMapInfo (WideRegexPat (pat), type, base)); } } } @@ -325,6 +291,7 @@ namespace CXX doxygen (c.doxygen), polymorphic (c.polymorphic), polymorphic_all (c.polymorphic_all), + poly_plate (c.poly_plate), detach (c.detach), fwd_expr (c.fwd_expr), hxx_expr (c.hxx_expr), @@ -366,6 +333,7 @@ namespace CXX doxygen (c.doxygen), polymorphic (c.polymorphic), polymorphic_all (c.polymorphic_all), + poly_plate (c.poly_plate), detach (c.detach), fwd_expr (c.fwd_expr), hxx_expr (c.hxx_expr), @@ -378,7 +346,29 @@ namespace CXX { } - Boolean Context:: + void Context:: + update_ns_scope () + { + ns_scope.clear (); + + bool first (true); + + for (NamespaceStack::iterator i (ns_scope_stack.begin ()); + i != ns_scope_stack.end (); + ++i) + { + // We only qualify names until the namespace level. + // + if (first) + first = false; + else + ns_scope += L"::"; + + ns_scope += *i; + } + } + + bool Context:: custom_type (SemanticGraph::Type const& t, String& r) const { String const& name (t.name ()); @@ -386,7 +376,7 @@ namespace CXX // First search the direct mapping. // { - DirectCustomTypeMap::ConstIterator i ( + DirectCustomTypeMap::const_iterator i ( direct_custom_type_map.find (name)); if (i != direct_custom_type_map.end ()) @@ -399,7 +389,7 @@ namespace CXX // Second search the regex mapping. // - for (RegexCustomTypeMap::ConstIterator + for (RegexCustomTypeMap::const_iterator i (regex_custom_type_map.begin ()), e (regex_custom_type_map.end ()); i != e; ++i) @@ -414,7 +404,7 @@ namespace CXX return true; } - r = i->pat.merge (i->type_sub, name); + r = i->pat.replace (name, i->type_sub); return true; } } @@ -437,7 +427,7 @@ namespace CXX return r; } - Boolean Context:: + bool Context:: renamed_type (SemanticGraph::Type const& t, String& r) const { String const& name (t.name ()); @@ -445,7 +435,7 @@ namespace CXX // First search the direct mapping. // { - DirectCustomTypeMap::ConstIterator i ( + DirectCustomTypeMap::const_iterator i ( direct_custom_type_map.find (name)); if (i != direct_custom_type_map.end ()) @@ -458,7 +448,7 @@ namespace CXX // Second search the regex mapping. // - for (RegexCustomTypeMap::ConstIterator + for (RegexCustomTypeMap::const_iterator i (regex_custom_type_map.begin ()), e (regex_custom_type_map.end ()); i != e; ++i) @@ -467,7 +457,7 @@ namespace CXX { if (!i->base_sub.empty ()) { - r = i->pat.merge (i->base_sub, name); + r = i->pat.replace (name, i->base_sub); } else r.clear (); @@ -479,17 +469,17 @@ namespace CXX return false; } - Void Context:: + void Context:: write_annotation (SemanticGraph::Annotation& a) { String const& doc (a.documentation ()); - WideChar const* s (doc.c_str ()); - Size size (doc.size ()); + wchar_t const* s (doc.c_str ()); + size_t size (doc.size ()); // Remove leading and trailing whitespaces. // - while (*s == WideChar (0x20) || *s == WideChar (0x0A) || - *s == WideChar (0x0D) || *s == WideChar (0x09)) + while (*s == wchar_t (0x20) || *s == wchar_t (0x0A) || + *s == wchar_t (0x0D) || *s == wchar_t (0x09)) { s++; size--; @@ -497,11 +487,11 @@ namespace CXX if (size != 0) { - WideChar const* e (s + size - 1); + wchar_t const* e (s + size - 1); while (e > s && - (*e == WideChar (0x20) || *e == WideChar (0x0A) || - *e == WideChar (0x0D) || *e == WideChar (0x09))) + (*e == wchar_t (0x20) || *e == wchar_t (0x0A) || + *e == wchar_t (0x0D) || *e == wchar_t (0x09))) --e; size = s <= e ? e - s + 1 : 0; @@ -514,15 +504,15 @@ namespace CXX // Go over the data, forcing newline after 80 chars and adding // ' * ' after each new line. // - WideChar const* last_space (0); - WideChar const* b (s); - WideChar const* e (s); - Boolean after_newline (false); - Boolean rogue (false); + wchar_t const* last_space (0); + wchar_t const* b (s); + wchar_t const* e (s); + bool after_newline (false); + bool rogue (false); for (; e < s + size; ++e) { - UnsignedLong u (unicode_char (e)); // May advance e. + unsigned int u (unicode_char (e)); // May advance e. // We are going to treat \v and \f as rogue here even though // they can be present in C++ source code. @@ -579,16 +569,16 @@ namespace CXX } } - Void Context:: - write_rogue_text (WideChar const* s, Size size, Boolean rogue) + void Context:: + write_rogue_text (wchar_t const* s, size_t size, bool rogue) { if (!rogue) os.write (s, size); else { - for (WideChar const* p (s); p < s + size; ++p) + for (wchar_t const* p (s); p < s + size; ++p) { - UnsignedLong u (unicode_char (p)); // May advance p. + unsigned int u (unicode_char (p)); // May advance p. // We are going to treat \v and \f as rogue here even though // they can be present in C++ source code. @@ -596,36 +586,69 @@ namespace CXX if (u > 127 || (u < 32 && u != '\t' && u != '\n')) os.put ('?'); else - os.put (static_cast (u)); + os.put (static_cast (u)); } } } - Boolean Context:: + bool Context:: polymorphic_p (SemanticGraph::Type& t) { + // IDREF templates cannot be polymorphic. + // + if (!t.named_p () && + (t.is_a () || + t.is_a ())) + return false; + if (polymorphic_all) { - Boolean fund (false); + bool fund (false); IsFundamentalType test (fund); test.dispatch (t); return !fund; } else - return t.context ().get ("polymorphic"); + return t.context ().get ("polymorphic"); + } + + bool Context:: + anonymous_substitutes_p (SemanticGraph::Type& t) + { + // IDREF templates cannot match. + // + if (!t.named_p () && + (t.is_a () || + t.is_a ())) + return false; + + // See which elements this type classifies. + // + for (SemanticGraph::Type::ClassifiesIterator i (t.classifies_begin ()), + e (t.classifies_end ()); i != e; ++i) + { + if (SemanticGraph::Element* e = + dynamic_cast (&i->instance ())) + { + if (e->substitutes_p ()) + return true; + } + } + + return false; } // GenerateDefautCtor // GenerateDefaultCtor:: - GenerateDefaultCtor (Context& c, Boolean& generate, Boolean no_base) + GenerateDefaultCtor (Context& c, bool& generate, bool no_base) : Context (c), generate_ (generate), no_base_ (no_base) { *this >> inherits_ >> *this; *this >> names_ >> *this; } - Void GenerateDefaultCtor:: + void GenerateDefaultCtor:: traverse (SemanticGraph::Complex& c) { // Make sure we figure out if we have any required members before @@ -637,38 +660,38 @@ namespace CXX Complex::inherits (c, inherits_); } - Void GenerateDefaultCtor:: + void GenerateDefaultCtor:: traverse (SemanticGraph::Type&) { if (!no_base_) generate_ = true; } - Void GenerateDefaultCtor:: + void GenerateDefaultCtor:: traverse (SemanticGraph::Enumeration&) { if (!no_base_) generate_ = true; } - Void GenerateDefaultCtor:: + void GenerateDefaultCtor:: traverse (SemanticGraph::Element& e) { if (!skip (e) && min (e) == 1 && max (e) == 1) generate_ = true; } - Void GenerateDefaultCtor:: + void GenerateDefaultCtor:: traverse (SemanticGraph::Attribute& a) { if (min (a) == 1 && !a.fixed_p ()) generate_ = true; } - Void GenerateDefaultCtor:: + void GenerateDefaultCtor:: traverse (SemanticGraph::Any& a) { - if (options.value () && + if (options.generate_wildcard () && min (a) == 1 && max (a) == 1) generate_ = true; } @@ -677,7 +700,7 @@ namespace CXX // GenerateFromBaseCtor // GenerateFromBaseCtor:: - GenerateFromBaseCtor (Context& c, Boolean& generate) + GenerateFromBaseCtor (Context& c, bool& generate) : generate_ (generate), custom_ (false), traverser_ (c, generate, custom_) @@ -685,7 +708,7 @@ namespace CXX inherits_ >> traverser_; } - Void GenerateFromBaseCtor:: + void GenerateFromBaseCtor:: traverse (SemanticGraph::Complex& c) { inherits (c, inherits_); @@ -703,14 +726,14 @@ namespace CXX } GenerateFromBaseCtor::Traverser:: - Traverser (Context& c, Boolean& generate, Boolean& custom) + Traverser (Context& c, bool& generate, bool& custom) : Context (c), generate_ (generate), custom_ (custom) { *this >> inherits_ >> *this; *this >> names_ >> *this; } - Void GenerateFromBaseCtor::Traverser:: + void GenerateFromBaseCtor::Traverser:: traverse (SemanticGraph::Type& t) { if (!custom_) @@ -720,7 +743,7 @@ namespace CXX } } - Void GenerateFromBaseCtor::Traverser:: + void GenerateFromBaseCtor::Traverser:: traverse (SemanticGraph::Complex& c) { names (c, names_); @@ -732,24 +755,24 @@ namespace CXX traverse (static_cast (c)); } - Void GenerateFromBaseCtor::Traverser:: + void GenerateFromBaseCtor::Traverser:: traverse (SemanticGraph::Element& e) { if (!skip (e) && min (e) == 1 && max (e) == 1) generate_ = true; } - Void GenerateFromBaseCtor::Traverser:: + void GenerateFromBaseCtor::Traverser:: traverse (SemanticGraph::Attribute& a) { if (min (a) == 1 && !a.fixed_p ()) generate_ = true; } - Void GenerateFromBaseCtor::Traverser:: + void GenerateFromBaseCtor::Traverser:: traverse (SemanticGraph::Any& a) { - if (options.value () && + if (options.generate_wildcard () && min (a) == 1 && max (a) == 1) generate_ = true; } @@ -758,10 +781,10 @@ namespace CXX // HasComplexPolyNonOptArgs:: HasComplexPolyNonOptArgs (Context& c, - Boolean base, - Boolean& complex, - Boolean& poly, - Boolean& clash) + bool base, + bool& complex, + bool& poly, + bool& clash) : Context (c), complex_ (complex), poly_ (poly), @@ -773,7 +796,7 @@ namespace CXX *this >> names_ >> *this; } - Void HasComplexPolyNonOptArgs:: + void HasComplexPolyNonOptArgs:: traverse (SemanticGraph::Complex& c) { // No optimizations: need to check every arg for clashes. @@ -782,14 +805,14 @@ namespace CXX names (c, names_); } - Void HasComplexPolyNonOptArgs:: + void HasComplexPolyNonOptArgs:: traverse (SemanticGraph::Element& e) { if (!skip (e) && min (e) == 1 && max (e) == 1) { - Boolean poly (polymorphic && polymorphic_p (e.type ())); + bool poly (polymorphic && polymorphic_p (e.type ())); - Boolean simple (true); + bool simple (true); IsSimpleType t (simple); t.dispatch (e.type ()); @@ -807,15 +830,15 @@ namespace CXX // FromBaseCtorArg // FromBaseCtorArg:: - FromBaseCtorArg (Context& c, ArgType at, Boolean arg) + FromBaseCtorArg (Context& c, CtorArgType at, bool arg) : Context (c), arg_type_ (at), arg_ (arg) { } - Void FromBaseCtorArg:: + void FromBaseCtorArg:: traverse (SemanticGraph::Any& a) { - if (!options.value ()) + if (!options.generate_wildcard ()) return; if (min (a) == 1 && max (a) == 1) @@ -830,7 +853,7 @@ namespace CXX } } - Void FromBaseCtorArg:: + void FromBaseCtorArg:: traverse (SemanticGraph::Element& e) { if (skip (e)) @@ -842,29 +865,29 @@ namespace CXX os << "," << endl; - Boolean auto_ptr (false); + bool ptr (false); switch (arg_type_) { - case arg_complex_auto_ptr: + case CtorArgType::complex_auto_ptr: { - Boolean simple (true); + bool simple (true); IsSimpleType t (simple); t.dispatch (e.type ()); - auto_ptr = !simple; + ptr = !simple; break; } - case arg_poly_auto_ptr: + case CtorArgType::poly_auto_ptr: { - auto_ptr = polymorphic && polymorphic_p (e.type ()); + ptr = polymorphic && polymorphic_p (e.type ()); break; } - case arg_type: + case CtorArgType::type: break; } - if (auto_ptr) - os << "::std::auto_ptr< " << etype (e) << " >&"; + if (ptr) + os << auto_ptr << "< " << etype (e) << " >"; else os << "const " << etype (e) << "&"; @@ -873,7 +896,7 @@ namespace CXX } } - Void FromBaseCtorArg:: + void FromBaseCtorArg:: traverse (SemanticGraph::Attribute& a) { // Note that we are not going to include attributes with @@ -895,7 +918,7 @@ namespace CXX // CtorArgs // CtorArgs:: - CtorArgs (Context& c, ArgType at) + CtorArgs (Context& c, CtorArgType at) : Context (c), arg_type_ (at), base_arg_ (0), @@ -907,7 +930,7 @@ namespace CXX } CtorArgs:: - CtorArgs (Context& c, ArgType at, String& base_arg) + CtorArgs (Context& c, CtorArgType at, String& base_arg) : Context (c), arg_type_ (at), base_arg_ (&base_arg), @@ -918,7 +941,7 @@ namespace CXX *this >> names_ >> *this; } - Void CtorArgs:: + void CtorArgs:: traverse (SemanticGraph::Type& t) { os << comma () << "const "; @@ -929,13 +952,17 @@ namespace CXX if (base_arg_ != 0) { - *base_arg_ = L"_xsd_" + ename (t) + L"_base"; + // IDREF templates don't have a name. + // + *base_arg_ = t.named_p () + ? (L"_xsd_" + ename (t) + L"_base") + : L"_xsd_base"; os << " " << *base_arg_; } } - Void CtorArgs:: + void CtorArgs:: traverse (SemanticGraph::Enumeration& e) { os << comma () << "const "; @@ -952,10 +979,10 @@ namespace CXX } } - Void CtorArgs:: + void CtorArgs:: traverse (SemanticGraph::Any& a) { - if (!options.value ()) + if (!options.generate_wildcard ()) return; if (min (a) == 1 && max (a) == 1) @@ -967,7 +994,7 @@ namespace CXX } } - Void CtorArgs:: + void CtorArgs:: traverse (SemanticGraph::Element& e) { if (skip (e)) @@ -975,29 +1002,29 @@ namespace CXX if (min (e) == 1 && max (e) == 1) { - Boolean auto_ptr (false); + bool ptr (false); switch (arg_type_) { - case arg_complex_auto_ptr: + case CtorArgType::complex_auto_ptr: { - Boolean simple (true); + bool simple (true); IsSimpleType t (simple); t.dispatch (e.type ()); - auto_ptr = !simple; + ptr = !simple; break; } - case arg_poly_auto_ptr: + case CtorArgType::poly_auto_ptr: { - auto_ptr = polymorphic && polymorphic_p (e.type ()); + ptr = polymorphic && polymorphic_p (e.type ()); break; } - case arg_type: + case CtorArgType::type: break; } - if (auto_ptr) - os << comma () << "::std::auto_ptr< " << etype (e) << " >&"; + if (ptr) + os << comma () << auto_ptr << "< " << etype (e) << " >"; else os << comma () << "const " << etype (e) << "&"; @@ -1006,7 +1033,7 @@ namespace CXX } } - Void CtorArgs:: + void CtorArgs:: traverse (SemanticGraph::Attribute& a) { // Note that we are not going to include attributes with @@ -1025,7 +1052,7 @@ namespace CXX String CtorArgs:: comma () { - Boolean tmp (first_); + bool tmp (first_); first_ = false; return tmp ? "" : ",\n"; } @@ -1034,17 +1061,17 @@ namespace CXX // CtorArgsWithoutBase // CtorArgsWithoutBase:: - CtorArgsWithoutBase (Context& c, ArgType at, Boolean arg, Boolean first) + CtorArgsWithoutBase (Context& c, CtorArgType at, bool arg, bool first) : Context (c), arg_type_ (at), arg_ (arg), first_ (first) { *this >> inherits_ >> *this; *this >> names_ >> *this; } - Void CtorArgsWithoutBase:: + void CtorArgsWithoutBase:: traverse (SemanticGraph::Any& a) { - if (!options.value ()) + if (!options.generate_wildcard ()) return; if (min (a) == 1 && max (a) == 1) @@ -1056,7 +1083,7 @@ namespace CXX } } - Void CtorArgsWithoutBase:: + void CtorArgsWithoutBase:: traverse (SemanticGraph::Element& e) { if (skip (e)) @@ -1064,29 +1091,29 @@ namespace CXX if (min (e) == 1 && max (e) == 1) { - Boolean auto_ptr (false); + bool ptr (false); switch (arg_type_) { - case arg_complex_auto_ptr: + case CtorArgType::complex_auto_ptr: { - Boolean simple (true); + bool simple (true); IsSimpleType t (simple); t.dispatch (e.type ()); - auto_ptr = !simple; + ptr = !simple; break; } - case arg_poly_auto_ptr: + case CtorArgType::poly_auto_ptr: { - auto_ptr = polymorphic && polymorphic_p (e.type ()); + ptr = polymorphic && polymorphic_p (e.type ()); break; } - case arg_type: + case CtorArgType::type: break; } - if (auto_ptr) - os << comma () << "::std::auto_ptr< " << etype (e) << " >&"; + if (ptr) + os << comma () << auto_ptr << "< " << etype (e) << " >"; else os << comma () << "const " << etype (e) << "&"; @@ -1095,7 +1122,7 @@ namespace CXX } } - Void CtorArgsWithoutBase:: + void CtorArgsWithoutBase:: traverse (SemanticGraph::Attribute& a) { // Note that we are not going to include attributes with @@ -1114,14 +1141,14 @@ namespace CXX String CtorArgsWithoutBase:: comma () { - Boolean tmp (first_); + bool tmp (first_); first_ = false; return tmp ? "" : ",\n"; } // GlobalElementBase // - Boolean GlobalElementBase:: + bool GlobalElementBase:: generate_p (SemanticGraph::Element& e) { if (e.substitutes_p () && ctx_.polymorphic) @@ -1133,44 +1160,44 @@ namespace CXX // If we are not generating element types nor parsing/serialization // code then we won't generate anything from it. // - if (!ctx_.options.value () && - ctx_.options.value () && - !ctx_.options.value ()) + if (!ctx_.options.generate_element_type () && + ctx_.options.suppress_parsing () && + !ctx_.options.generate_serialization ()) return false; return true; } - Boolean GlobalElementBase:: + bool GlobalElementBase:: doc_root_p (SemanticGraph::Element& e) { - if (!ctx_.options.value () && - !ctx_.options.value () && - !ctx_.options.value () && - !ctx_.options.value () && - ctx_.options.value ().empty ()) + if (!ctx_.options.root_element_first () && + !ctx_.options.root_element_last () && + !ctx_.options.root_element_all () && + !ctx_.options.root_element_none () && + ctx_.options.root_element ().empty ()) return true; // By default treat them all. - if (ctx_.options.value ()) + if (ctx_.options.root_element_none ()) return false; - if (ctx_.options.value ()) + if (ctx_.options.root_element_all ()) return true; - if (ctx_.options.value () && + if (ctx_.options.root_element_first () && e.context ().count ("first") != 0) return true; - if (ctx_.options.value () && + if (ctx_.options.root_element_last () && e.context ().count ("last") != 0) return true; - typedef Cult::Containers::Vector Names; - Names const& names (ctx_.options.value ()); + NarrowStrings const& names (ctx_.options.root_element ()); // Hopefully nobody will specify more than a handful of names ;-). // - for (Names::ConstIterator i (names.begin ()); i != names.end (); ++i) + for (NarrowStrings::const_iterator i (names.begin ()); + i != names.end (); ++i) { String name (*i); @@ -1185,8 +1212,8 @@ namespace CXX // Namespace:: Namespace (Context& c, - UnsignedLong first, - UnsignedLong last) + size_t first, + size_t last) : CXX::Namespace (c, *this), GlobalElementBase (c), ctx_ (c), @@ -1196,7 +1223,7 @@ namespace CXX { } - Void Namespace:: + void Namespace:: traverse (Type& ns) { using SemanticGraph::Element; @@ -1205,7 +1232,7 @@ namespace CXX CXX::Namespace::traverse (ns); else { - Boolean opened (false); + bool opened (false); for (Type::NamesIterator i (ns.names_begin ()); i != ns.names_end (); ++i) @@ -1235,13 +1262,13 @@ namespace CXX } } - Void Namespace:: - enter (Type&, String const& name, Boolean) + void Namespace:: + enter (Type&, String const& name, bool) { ctx_.enter_ns_scope (name); } - Void Namespace:: + void Namespace:: leave () { ctx_.leave_ns_scope (); @@ -1249,7 +1276,7 @@ namespace CXX // Includes // - Void TypeForward:: + void TypeForward:: traverse (SemanticGraph::Type& t) { String const& name (ename (t)); @@ -1271,14 +1298,14 @@ namespace CXX os << "class " << name << ";"; } - Void Includes:: + void Includes:: traverse_ (SemanticGraph::Uses& u) { // Support for weak (forward) inclusion used in the file-per-type // compilation model. // Type t (type_); - Boolean weak (u.context ().count ("weak")); + bool weak (u.context ().count ("weak")); SemanticGraph::Schema& s (u.schema ()); if (weak && t == header) @@ -1301,6 +1328,7 @@ namespace CXX s.context ().count ("renamed") ? s.context ().get ("renamed") : u.path ()); + path.normalize (); // Try to use the portable representation of the path. If that // fails, fall back to the native representation. @@ -1308,15 +1336,11 @@ namespace CXX NarrowString path_str; try { - path_str = path.string (); + path_str = path.posix_string (); } catch (SemanticGraph::InvalidPath const&) { -#if !defined(BOOST_FILESYSTEM_VERSION) || BOOST_FILESYSTEM_VERSION == 2 - path_str = path.native_file_string (); -#else path_str = path.string (); -#endif } String inc_path; @@ -1325,25 +1349,25 @@ namespace CXX { case forward: { - inc_path = ctx_.fwd_expr->merge (path_str); + inc_path = ctx_.fwd_expr->replace (path_str); break; } case header: case source: { - inc_path = ctx_.hxx_expr->merge (path_str); + inc_path = ctx_.hxx_expr->replace (path_str); break; } case inline_: { if (weak) { - inc_path = ctx_.hxx_expr->merge (path_str); + inc_path = ctx_.hxx_expr->replace (path_str); ctx_.os << "#include " << ctx_.process_include_path (inc_path) << endl; } - inc_path = ctx_.ixx_expr->merge (path_str); + inc_path = ctx_.ixx_expr->replace (path_str); break; } } diff --git a/xsd/xsd/cxx/tree/elements.hxx b/xsd/xsd/cxx/tree/elements.hxx index afe3951..6874e6a 100644 --- a/xsd/xsd/cxx/tree/elements.hxx +++ b/xsd/xsd/cxx/tree/elements.hxx @@ -1,23 +1,23 @@ // file : xsd/cxx/tree/elements.hxx -// author : Boris Kolpackov -// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file #ifndef CXX_TREE_ELEMENTS_HXX #define CXX_TREE_ELEMENTS_HXX +#include +#include +#include +#include #include -#include -#include -#include +#include -#include +#include #include -#include - +#include namespace CXX { @@ -33,15 +33,15 @@ namespace CXX { } - UnsignedLong global_types; - UnsignedLong global_elements; - UnsignedLong generated_global_elements; + size_t global_types; + size_t global_elements; + size_t generated_global_elements; // Complexity value for each global type and generated global // element, in order. // - Cult::Containers::Vector complexity; - UnsignedLong complexity_total; + std::vector complexity; + size_t complexity_total; }; struct InvalidCustomTypeMapping @@ -69,13 +69,63 @@ namespace CXX String reason_; }; + // A set of potentially qualified XML Schema type names. + // + struct TypeNameSet + { + template + TypeNameSet (I begin, I end) + { + for (; begin != end; ++begin) + insert (*begin); + } + + void + insert (String const& name) + { + size_t p (name.rfind ('#')); + + if (p == String::npos) + unames_.insert (name); + else + qnames_.insert (name); + } + + bool + find (SemanticGraph::Type& t) + { + if (!unames_.empty ()) + { + if (unames_.find (t.name ()) != unames_.end ()) + return true; + } + + if (!qnames_.empty ()) + { + if (qnames_.find (t.scope ().name () + L"#" + t.name ()) != + qnames_.end ()) + return true; + } + + return false; + } + + private: + typedef std::set StringSet; + + StringSet unames_; + StringSet qnames_; + }; + // // class Context: public CXX::Context { public: - typedef BackendElements::Regex::Expression Regex; - typedef BackendElements::Regex::Pattern WideRegexPat; + typedef cutl::re::regexsub Regex; + typedef cutl::re::wregex WideRegexPat; + + typedef Tree::options options_type; struct DirectCustomTypeMapInfo { @@ -103,21 +153,16 @@ namespace CXX String base_sub; }; - typedef - Cult::Containers::Vector - RegexCustomTypeMap; - - typedef - Cult::Containers::Map - DirectCustomTypeMap; + typedef std::vector RegexCustomTypeMap; + typedef std::map DirectCustomTypeMap; public: Context (std::wostream& o, SemanticGraph::Schema& root, SemanticGraph::Path const& path, - CLI::Options const& ops, + options_type const& ops, Counts const& counts_, - Boolean generate_xml_schema, + bool generate_xml_schema, StringLiteralMap const*, Regex const* fwd_expr, Regex const* hxx_expr, @@ -139,7 +184,7 @@ namespace CXX // populated with the custom type name or empty if the // original name should be used. // - Boolean + bool custom_type (SemanticGraph::Type const&, String& name) const; // Returns true if this type has been renamed as part of the @@ -147,7 +192,7 @@ namespace CXX // name string is populated with the new name or empty if // the type should not be generated at all. // - Boolean + bool renamed_type (SemanticGraph::Type const&, String& name) const; public: @@ -155,21 +200,43 @@ namespace CXX // line after 80 characters as well as "commentizing" the text by // adding '* ' after each newline. // - Void + void write_annotation (SemanticGraph::Annotation&); // // public: - Boolean + static bool + ordered_p (SemanticGraph::Type const& t) + { + return t.context ().count ("ordered") && + t.context ().get ("ordered"); + } + + // Check if we are generating mixed support for this type. We only + // do it for ordered types. + // + static bool + mixed_p (SemanticGraph::Complex const& c) + { + return c.mixed_p () && ordered_p (c); + } + + bool polymorphic_p (SemanticGraph::Type&); - Boolean + bool anonymous_p (SemanticGraph::Type const& t) { return t.context ().count ("anonymous"); } + // Return true if this anonymous type is defined in an element + // that belongs to a substitution group. + // + bool + anonymous_substitutes_p (SemanticGraph::Type&); + // Escaped names. // public: @@ -329,7 +396,7 @@ namespace CXX // dom_document // - static Boolean + static bool edom_document_p (SemanticGraph::Complex const& c) { return c.context ().count ("dom-document"); @@ -341,7 +408,7 @@ namespace CXX return c.context ().get ("dom-document"); } - static Boolean + static bool edom_document_member_p (SemanticGraph::Complex const& c) { return c.context ().count ("dom-document-member"); @@ -368,14 +435,14 @@ namespace CXX } public: - Void + void enter_ns_scope (String const& name) { ns_scope_stack.push_back (name); update_ns_scope (); } - Void + void leave_ns_scope () { ns_scope_stack.pop_back (); @@ -383,18 +450,18 @@ namespace CXX } private: - Void + void update_ns_scope (); private: // Write text that may contain characters that we will have // to escape (indicated by the rogue flag). // - Void - write_rogue_text (WideChar const* s, Size size, Boolean rogue); + void + write_rogue_text (wchar_t const* s, size_t size, bool rogue); public: - CLI::Options const& options; + options_type const& options; Counts const& counts; String& any_type; String& any_simple_type; @@ -417,11 +484,12 @@ namespace CXX String& as_double_type; String& as_decimal_type; - Boolean& generate_xml_schema; - Boolean& doxygen; - Boolean polymorphic; - Boolean polymorphic_all; - Boolean detach; + bool& generate_xml_schema; + bool& doxygen; + bool polymorphic; + bool polymorphic_all; + unsigned long poly_plate; + bool detach; Regex const* fwd_expr; Regex const* hxx_expr; @@ -454,16 +522,11 @@ namespace CXX String as_double_type_; String as_decimal_type_; - Boolean generate_xml_schema_; - Boolean doxygen_; + bool generate_xml_schema_; + bool doxygen_; - typedef - Cult::Containers::Deque - NamespaceStack; - - typedef - Cult::Containers::Deque - ScopeStack; + typedef std::deque NamespaceStack; + typedef std::deque ScopeStack; String ns_scope_; @@ -501,86 +564,86 @@ namespace CXX Traversal::Fundamental::Decimal { - IsFundamentalType (Boolean& r) + IsFundamentalType (bool& r) : r_ (r) { } // Integral types. // - virtual Void + virtual void traverse (SemanticGraph::Fundamental::Byte&) { r_ = true; } - virtual Void + virtual void traverse (SemanticGraph::Fundamental::UnsignedByte&) { r_ = true; } - virtual Void + virtual void traverse (SemanticGraph::Fundamental::Short&) { r_ = true; } - virtual Void + virtual void traverse (SemanticGraph::Fundamental::UnsignedShort&) { r_ = true; } - virtual Void + virtual void traverse (SemanticGraph::Fundamental::Int&) { r_ = true; } - virtual Void + virtual void traverse (SemanticGraph::Fundamental::UnsignedInt&) { r_ = true; } - virtual Void + virtual void traverse (SemanticGraph::Fundamental::Long&) { r_ = true; } - virtual Void + virtual void traverse (SemanticGraph::Fundamental::UnsignedLong&) { r_ = true; } - virtual Void + virtual void traverse (SemanticGraph::Fundamental::Integer&) { r_ = true; } - virtual Void + virtual void traverse (SemanticGraph::Fundamental::NonPositiveInteger&) { r_ = true; } - virtual Void + virtual void traverse (SemanticGraph::Fundamental::NonNegativeInteger&) { r_ = true; } - virtual Void + virtual void traverse (SemanticGraph::Fundamental::PositiveInteger&) { r_ = true; } - virtual Void + virtual void traverse (SemanticGraph::Fundamental::NegativeInteger&) { r_ = true; @@ -588,7 +651,7 @@ namespace CXX // Boolean. // - virtual Void + virtual void traverse (SemanticGraph::Fundamental::Boolean&) { r_ = true; @@ -596,26 +659,26 @@ namespace CXX // Floats. // - virtual Void + virtual void traverse (SemanticGraph::Fundamental::Float&) { r_ = true; } - virtual Void + virtual void traverse (SemanticGraph::Fundamental::Double&) { r_ = true; } - virtual Void + virtual void traverse (SemanticGraph::Fundamental::Decimal&) { r_ = true; } private: - Boolean& r_; + bool& r_; }; // Check whether this is a string-based type. @@ -630,19 +693,19 @@ namespace CXX Traversal::Fundamental::NCName, Traversal::Fundamental::Language { - IsStringBasedType (Boolean& r) + IsStringBasedType (bool& r) : r_ (r) { *this >> inherits_ >> *this; } - virtual Void + virtual void traverse (SemanticGraph::Complex& c) { inherits (c, inherits_); } - virtual Void + virtual void traverse (SemanticGraph::Union&) { // Current mapping of union is string-based. @@ -652,50 +715,50 @@ namespace CXX // Strings. // - virtual Void + virtual void traverse (SemanticGraph::Fundamental::String&) { r_ = true; } - virtual Void + virtual void traverse (SemanticGraph::Fundamental::NormalizedString&) { r_ = true; } - virtual Void + virtual void traverse (SemanticGraph::Fundamental::Token&) { r_ = true; } - virtual Void + virtual void traverse (SemanticGraph::Fundamental::NameToken&) { r_ = true; } - virtual Void + virtual void traverse (SemanticGraph::Fundamental::Name&) { r_ = true; } - virtual Void + virtual void traverse (SemanticGraph::Fundamental::NCName&) { r_ = true; } - virtual Void + virtual void traverse (SemanticGraph::Fundamental::Language&) { r_ = true; } private: - Boolean& r_; + bool& r_; Traversal::Inherits inherits_; }; @@ -713,7 +776,7 @@ namespace CXX inherits_ >> enum_; } - virtual Void + virtual void traverse (SemanticGraph::Complex& c) { inherits (c, inherits_); @@ -727,7 +790,7 @@ namespace CXX { } - virtual Void + virtual void traverse (Type& e) { if (e_ == 0) @@ -820,25 +883,25 @@ namespace CXX { } - virtual Void + virtual void traverse (SemanticGraph::Type&) { abort (); } - virtual Void + virtual void traverse (SemanticGraph::List& l) { os << fq_name (l); } - virtual Void + virtual void traverse (SemanticGraph::Union& u) { os << fq_name (u); } - virtual Void + virtual void traverse (SemanticGraph::Complex& c) { os << fq_name (c); @@ -846,13 +909,13 @@ namespace CXX // anyType & anySimpleType. // - virtual Void + virtual void traverse (SemanticGraph::AnyType& t) { os << fq_name (t); } - virtual Void + virtual void traverse (SemanticGraph::AnySimpleType& t) { os << fq_name (t); @@ -860,79 +923,79 @@ namespace CXX // Integral types. // - virtual Void + virtual void traverse (SemanticGraph::Fundamental::Byte& t) { os << fq_name (t); } - virtual Void + virtual void traverse (SemanticGraph::Fundamental::UnsignedByte& t) { os << fq_name (t); } - virtual Void + virtual void traverse (SemanticGraph::Fundamental::Short& t) { os << fq_name (t); } - virtual Void + virtual void traverse (SemanticGraph::Fundamental::UnsignedShort& t) { os << fq_name (t); } - virtual Void + virtual void traverse (SemanticGraph::Fundamental::Int& t) { os << fq_name (t); } - virtual Void + virtual void traverse (SemanticGraph::Fundamental::UnsignedInt& t) { os << fq_name (t); } - virtual Void + virtual void traverse (SemanticGraph::Fundamental::Long& t) { os << fq_name (t); } - virtual Void + virtual void traverse (SemanticGraph::Fundamental::UnsignedLong& t) { os << fq_name (t); } - virtual Void + virtual void traverse (SemanticGraph::Fundamental::Integer& t) { os << fq_name (t); } - virtual Void + virtual void traverse (SemanticGraph::Fundamental::NonPositiveInteger& t) { os << fq_name (t); } - virtual Void + virtual void traverse (SemanticGraph::Fundamental::NonNegativeInteger& t) { os << fq_name (t); } - virtual Void + virtual void traverse (SemanticGraph::Fundamental::PositiveInteger& t) { os << fq_name (t); } - virtual Void + virtual void traverse (SemanticGraph::Fundamental::NegativeInteger& t) { os << fq_name (t); @@ -940,7 +1003,7 @@ namespace CXX // Boolean. // - virtual Void + virtual void traverse (SemanticGraph::Fundamental::Boolean& t) { os << fq_name (t); @@ -948,19 +1011,19 @@ namespace CXX // Floats. // - virtual Void + virtual void traverse (SemanticGraph::Fundamental::Float& t) { os << fq_name (t); } - virtual Void + virtual void traverse (SemanticGraph::Fundamental::Double& t) { os << fq_name (t); } - virtual Void + virtual void traverse (SemanticGraph::Fundamental::Decimal& t) { os << fq_name (t); @@ -968,49 +1031,49 @@ namespace CXX // Strings. // - virtual Void + virtual void traverse (SemanticGraph::Fundamental::String& t) { os << fq_name (t); } - virtual Void + virtual void traverse (SemanticGraph::Fundamental::NormalizedString& t) { os << fq_name (t); } - virtual Void + virtual void traverse (SemanticGraph::Fundamental::Token& t) { os << fq_name (t); } - virtual Void + virtual void traverse (SemanticGraph::Fundamental::NameToken& t) { os << fq_name (t); } - virtual Void + virtual void traverse (SemanticGraph::Fundamental::NameTokens& t) { os << fq_name (t); } - virtual Void + virtual void traverse (SemanticGraph::Fundamental::Name& t) { os << fq_name (t); } - virtual Void + virtual void traverse (SemanticGraph::Fundamental::NCName& t) { os << fq_name (t); } - virtual Void + virtual void traverse (SemanticGraph::Fundamental::Language& t) { os << fq_name (t); @@ -1019,7 +1082,7 @@ namespace CXX // Qualified name. // - virtual Void + virtual void traverse (SemanticGraph::Fundamental::QName& t) { os << fq_name (t); @@ -1028,13 +1091,13 @@ namespace CXX // ID/IDREF. // - virtual Void + virtual void traverse (SemanticGraph::Fundamental::Id& t) { os << fq_name (t); } - virtual Void + virtual void traverse (SemanticGraph::Fundamental::IdRef& t) { if (t.named_p ()) @@ -1054,7 +1117,7 @@ namespace CXX } } - virtual Void + virtual void traverse (SemanticGraph::Fundamental::IdRefs& t) { if (t.named_p ()) @@ -1077,7 +1140,7 @@ namespace CXX // URI. // - virtual Void + virtual void traverse (SemanticGraph::Fundamental::AnyURI& t) { os << fq_name (t); @@ -1085,13 +1148,13 @@ namespace CXX // Binary. // - virtual Void + virtual void traverse (SemanticGraph::Fundamental::Base64Binary& t) { os << fq_name (t); } - virtual Void + virtual void traverse (SemanticGraph::Fundamental::HexBinary& t) { os << fq_name (t); @@ -1100,55 +1163,55 @@ namespace CXX // Date/time. // - virtual Void + virtual void traverse (SemanticGraph::Fundamental::Date& t) { os << fq_name (t); } - virtual Void + virtual void traverse (SemanticGraph::Fundamental::DateTime& t) { os << fq_name (t); } - virtual Void + virtual void traverse (SemanticGraph::Fundamental::Duration& t) { os << fq_name (t); } - virtual Void + virtual void traverse (SemanticGraph::Fundamental::Day& t) { os << fq_name (t); } - virtual Void + virtual void traverse (SemanticGraph::Fundamental::Month& t) { os << fq_name (t); } - virtual Void + virtual void traverse (SemanticGraph::Fundamental::MonthDay& t) { os << fq_name (t); } - virtual Void + virtual void traverse (SemanticGraph::Fundamental::Year& t) { os << fq_name (t); } - virtual Void + virtual void traverse (SemanticGraph::Fundamental::YearMonth& t) { os << fq_name (t); } - virtual Void + virtual void traverse (SemanticGraph::Fundamental::Time& t) { os << fq_name (t); @@ -1156,13 +1219,13 @@ namespace CXX // Entity. // - virtual Void + virtual void traverse (SemanticGraph::Fundamental::Entity& t) { os << fq_name (t); } - virtual Void + virtual void traverse (SemanticGraph::Fundamental::Entities& t) { os << fq_name (t); @@ -1200,7 +1263,7 @@ namespace CXX { } - virtual Void + virtual void fundamental_base (SemanticGraph::Type& t) { os << "::xsd::cxx::tree::fundamental_base< " << @@ -1210,79 +1273,79 @@ namespace CXX // Integrals. // - virtual Void + virtual void traverse (SemanticGraph::Fundamental::Byte& t) { fundamental_base (t); } - virtual Void + virtual void traverse (SemanticGraph::Fundamental::UnsignedByte& t) { fundamental_base (t); } - virtual Void + virtual void traverse (SemanticGraph::Fundamental::Short& t) { fundamental_base (t); } - virtual Void + virtual void traverse (SemanticGraph::Fundamental::UnsignedShort& t) { fundamental_base (t); } - virtual Void + virtual void traverse (SemanticGraph::Fundamental::Int& t) { fundamental_base (t); } - virtual Void + virtual void traverse (SemanticGraph::Fundamental::UnsignedInt& t) { fundamental_base (t); } - virtual Void + virtual void traverse (SemanticGraph::Fundamental::Long& t) { fundamental_base (t); } - virtual Void + virtual void traverse (SemanticGraph::Fundamental::UnsignedLong& t) { fundamental_base (t); } - virtual Void + virtual void traverse (SemanticGraph::Fundamental::Integer& t) { fundamental_base (t); } - virtual Void + virtual void traverse (SemanticGraph::Fundamental::NonPositiveInteger& t) { fundamental_base (t); } - virtual Void + virtual void traverse (SemanticGraph::Fundamental::NonNegativeInteger& t) { fundamental_base (t); } - virtual Void + virtual void traverse (SemanticGraph::Fundamental::PositiveInteger& t) { fundamental_base (t); } - virtual Void + virtual void traverse (SemanticGraph::Fundamental::NegativeInteger& t) { fundamental_base (t); @@ -1290,7 +1353,7 @@ namespace CXX // Boolean. // - virtual Void + virtual void traverse (SemanticGraph::Fundamental::Boolean& t) { fundamental_base (t); @@ -1298,13 +1361,13 @@ namespace CXX // Floats. // - virtual Void + virtual void traverse (SemanticGraph::Fundamental::Float& t) { fundamental_base (t); } - virtual Void + virtual void traverse (SemanticGraph::Fundamental::Double& t) { os << "::xsd::cxx::tree::fundamental_base< " << @@ -1313,7 +1376,7 @@ namespace CXX "::xsd::cxx::tree::schema_type::double_ >"; } - virtual Void + virtual void traverse (SemanticGraph::Fundamental::Decimal& t) { os << "::xsd::cxx::tree::fundamental_base< " << @@ -1330,42 +1393,46 @@ namespace CXX Traversal::Any, Traversal::AnyAttribute { - IsSimpleType (Boolean& v) + IsSimpleType (bool& v) : v_ (v) { *this >> names_ >> *this; *this >> inherits_ >> *this; } - virtual Void + virtual void traverse (SemanticGraph::Complex& c) { - names (c, names_); + if (c.mixed_p ()) + v_ = false; + + if (v_) + names (c, names_); if (v_) inherits (c, inherits_); } - virtual Void + virtual void traverse (SemanticGraph::Member&) { v_ = false; } - virtual Void + virtual void traverse (SemanticGraph::Any&) { v_ = false; } - virtual Void + virtual void traverse (SemanticGraph::AnyAttribute&) { v_ = false; } private: - Boolean& v_; + bool& v_; Traversal::Names names_; Traversal::Inherits inherits_; }; @@ -1383,29 +1450,29 @@ namespace CXX { // generate should initially be false. // - GenerateDefaultCtor (Context&, Boolean& generate, Boolean no_base); + GenerateDefaultCtor (Context&, bool& generate, bool no_base); - virtual Void + virtual void traverse (SemanticGraph::Complex&); - virtual Void + virtual void traverse (SemanticGraph::Type&); - virtual Void + virtual void traverse (SemanticGraph::Enumeration&); - virtual Void + virtual void traverse (SemanticGraph::Element&); - virtual Void + virtual void traverse (SemanticGraph::Attribute&); - virtual Void + virtual void traverse (SemanticGraph::Any&); private: - Boolean& generate_; - Boolean no_base_; + bool& generate_; + bool no_base_; private: Traversal::Inherits inherits_; @@ -1418,14 +1485,14 @@ namespace CXX { // generate should initially be false. // - GenerateFromBaseCtor (Context& c, Boolean& generate); + GenerateFromBaseCtor (Context& c, bool& generate); - virtual Void + virtual void traverse (SemanticGraph::Complex& c); private: - Boolean& generate_; - Boolean custom_; + bool& generate_; + bool custom_; // Note that we are not interested in anyAttribute since it is always // mapped to a sequence. @@ -1437,26 +1504,26 @@ namespace CXX Traversal::Any, Context { - Traverser (Context& c, Boolean& generate, Boolean& custom); + Traverser (Context& c, bool& generate, bool& custom); - virtual Void + virtual void traverse (SemanticGraph::Type&); - virtual Void + virtual void traverse (SemanticGraph::Complex&); - virtual Void + virtual void traverse (SemanticGraph::Attribute&); - virtual Void + virtual void traverse (SemanticGraph::Element&); - virtual Void + virtual void traverse (SemanticGraph::Any&); private: - Boolean& generate_; - Boolean& custom_; + bool& generate_; + bool& custom_; private: Traversal::Inherits inherits_; @@ -1477,26 +1544,44 @@ namespace CXX // should initially be true. // HasComplexPolyNonOptArgs (Context& c, - Boolean including_base, - Boolean& complex, - Boolean& poly, - Boolean& clash); + bool including_base, + bool& complex, + bool& poly, + bool& clash); - virtual Void + virtual void traverse (SemanticGraph::Complex&); - virtual Void + virtual void traverse (SemanticGraph::Element&); private: - Boolean& complex_; - Boolean& poly_; - Boolean& clash_; + bool& complex_; + bool& poly_; + bool& clash_; Traversal::Inherits inherits_; Traversal::Names names_; }; + // Contructor argument types. + // + struct CtorArgType + { + enum Value + { + type, + complex_auto_ptr, + poly_auto_ptr + }; + + CtorArgType (Value v = Value (0)) : v_ (v) {} + operator Value () const {return v_;} + + private: + Value v_; + }; + // Immediate non-optional member. Note that AnyAttribute is always // mapped to a sequence. // @@ -1505,27 +1590,20 @@ namespace CXX Traversal::Attribute, Context { - enum ArgType - { - arg_type, - arg_complex_auto_ptr, - arg_poly_auto_ptr - }; + FromBaseCtorArg (Context& c, CtorArgType, bool arg); - FromBaseCtorArg (Context& c, ArgType, Boolean arg); - - virtual Void + virtual void traverse (SemanticGraph::Any&); - virtual Void + virtual void traverse (SemanticGraph::Attribute&); - virtual Void + virtual void traverse (SemanticGraph::Element&); private: - ArgType arg_type_; - Boolean arg_; + CtorArgType arg_type_; + bool arg_; }; // List of all non-optional members and a simple base. Note that @@ -1539,32 +1617,25 @@ namespace CXX Traversal::Attribute, Context { - enum ArgType - { - arg_type, - arg_complex_auto_ptr, - arg_poly_auto_ptr - }; - // The second version outputs the argument name and stores // in in the base_arg string. // - CtorArgs (Context&, ArgType); - CtorArgs (Context&, ArgType, String& base_arg); + CtorArgs (Context&, CtorArgType); + CtorArgs (Context&, CtorArgType, String& base_arg); - virtual Void + virtual void traverse (SemanticGraph::Type&); - virtual Void + virtual void traverse (SemanticGraph::Enumeration&); - virtual Void + virtual void traverse (SemanticGraph::Any&); - virtual Void + virtual void traverse (SemanticGraph::Attribute&); - virtual Void + virtual void traverse (SemanticGraph::Element&); private: @@ -1572,10 +1643,10 @@ namespace CXX comma (); private: - ArgType arg_type_; + CtorArgType arg_type_; String base_; String* base_arg_; - Boolean first_; + bool first_; private: Traversal::Inherits inherits_; @@ -1607,92 +1678,92 @@ namespace CXX { // generate should initially be false. // - GenerateWithoutBaseCtor (Boolean& generate) + GenerateWithoutBaseCtor (bool& generate) : generate_ (generate) { *this >> inherits_ >> *this; } - virtual Void + virtual void traverse (SemanticGraph::List&) { generate_ = true; } - virtual Void + virtual void traverse (SemanticGraph::Union&) { // No default initialization. } - virtual Void + virtual void traverse (SemanticGraph::Complex& c) { Complex::inherits (c); } - virtual Void + virtual void traverse (SemanticGraph::Enumeration&) { // No default initialization. } - virtual Void + virtual void traverse (SemanticGraph::AnyType&) { generate_ = true; } - virtual Void + virtual void traverse (SemanticGraph::AnySimpleType&) { generate_ = true; } - virtual Void + virtual void traverse (SemanticGraph::Fundamental::String&) { generate_ = true; } - virtual Void + virtual void traverse (SemanticGraph::Fundamental::NormalizedString&) { generate_ = true; } - virtual Void + virtual void traverse (SemanticGraph::Fundamental::Token&) { generate_ = true; } - virtual Void + virtual void traverse (SemanticGraph::Fundamental::NameTokens&) { generate_ = true; } - virtual Void + virtual void traverse (SemanticGraph::Fundamental::IdRefs&) { generate_ = true; } - virtual Void + virtual void traverse (SemanticGraph::Fundamental::Base64Binary&) { generate_ = true; } - virtual Void + virtual void traverse (SemanticGraph::Fundamental::HexBinary&) { generate_ = true; } private: - Boolean& generate_; + bool& generate_; Traversal::Inherits inherits_; }; @@ -1706,22 +1777,15 @@ namespace CXX Traversal::Attribute, Context { - enum ArgType - { - arg_type, - arg_complex_auto_ptr, - arg_poly_auto_ptr - }; - - CtorArgsWithoutBase (Context& c, ArgType, Boolean arg, Boolean first); + CtorArgsWithoutBase (Context& c, CtorArgType, bool arg, bool first); - virtual Void + virtual void traverse (SemanticGraph::Any&); - virtual Void + virtual void traverse (SemanticGraph::Element&); - virtual Void + virtual void traverse (SemanticGraph::Attribute&); private: @@ -1729,9 +1793,9 @@ namespace CXX comma (); private: - ArgType arg_type_; - Boolean arg_; - Boolean first_; + CtorArgType arg_type_; + bool arg_; + bool first_; private: Traversal::Inherits inherits_; @@ -1747,10 +1811,10 @@ namespace CXX { } - Boolean + bool generate_p (SemanticGraph::Element&); - Boolean + bool doc_root_p (SemanticGraph::Element&); private: @@ -1765,26 +1829,26 @@ namespace CXX CXX::Namespace::ScopeTracker { Namespace (Context&, - UnsignedLong first = 1, - UnsignedLong last = 0); + size_t first = 1, + size_t last = 0); - virtual Void + virtual void traverse (Type&); protected: - virtual Void - enter (Type&, String const& name, Boolean last); + virtual void + enter (Type&, String const& name, bool last); - virtual Void + virtual void leave (); protected: Context& ctx_; private: - UnsignedLong first_; - UnsignedLong last_; - UnsignedLong count_; + size_t first_; + size_t last_; + size_t count_; }; // @@ -1796,8 +1860,8 @@ namespace CXX { } - virtual Void - enter (Type& ns, String const& name, Boolean last) + virtual void + enter (Type& ns, String const& name, bool last) { Namespace::enter (ns, name, last); @@ -1823,7 +1887,7 @@ namespace CXX { } - virtual Void + virtual void traverse (SemanticGraph::Type& t); }; @@ -1841,33 +1905,33 @@ namespace CXX Includes (Context& c, Type type) : ctx_ (c), type_ (type), - forward_ (c.options.value ()), + forward_ (c.options.generate_forward ()), namespace_ (c), type_forward_ (c) { schema_ >> schema_names_ >> namespace_ >> names_ >> type_forward_; } - virtual Void + virtual void traverse (SemanticGraph::Imports& i) { traverse_ (i); } - virtual Void + virtual void traverse (SemanticGraph::Includes& i) { traverse_ (i); } private: - Void + void traverse_ (SemanticGraph::Uses&); private: Context& ctx_; Type type_; - Boolean forward_; + bool forward_; Traversal::Schema schema_; Traversal::Names schema_names_; @@ -1907,85 +1971,85 @@ namespace CXX // Integral types. // - virtual Void + virtual void traverse (SemanticGraph::Fundamental::Byte& t) { gen_include (t, "byte.hxx"); } - virtual Void + virtual void traverse (SemanticGraph::Fundamental::UnsignedByte& t) { gen_include (t, "unsigned-byte.hxx"); } - virtual Void + virtual void traverse (SemanticGraph::Fundamental::Short& t) { gen_include (t, "short.hxx"); } - virtual Void + virtual void traverse (SemanticGraph::Fundamental::UnsignedShort& t) { gen_include (t, "unsigned-short.hxx"); } - virtual Void + virtual void traverse (SemanticGraph::Fundamental::Int& t) { gen_include (t, "int.hxx"); } - virtual Void + virtual void traverse (SemanticGraph::Fundamental::UnsignedInt& t) { gen_include (t, "unsigned-int.hxx"); } - virtual Void + virtual void traverse (SemanticGraph::Fundamental::Long& t) { if (!long_) long_ = gen_include (t, "long.hxx"); } - virtual Void + virtual void traverse (SemanticGraph::Fundamental::UnsignedLong& t) { if (!unsigned_long_) unsigned_long_ = gen_include (t, "unsigned-long.hxx"); } - virtual Void + virtual void traverse (SemanticGraph::Fundamental::Integer& t) { if (!long_) long_ = gen_include (t, "long.hxx"); } - virtual Void + virtual void traverse (SemanticGraph::Fundamental::NonPositiveInteger& t) { if (!long_) long_ = gen_include (t, "long.hxx"); } - virtual Void + virtual void traverse (SemanticGraph::Fundamental::NonNegativeInteger& t) { if (!unsigned_long_) unsigned_long_ = gen_include (t, "unsigned-long.hxx"); } - virtual Void + virtual void traverse (SemanticGraph::Fundamental::PositiveInteger& t) { if (!unsigned_long_) unsigned_long_ = gen_include (t, "unsigned-long.hxx"); } - virtual Void + virtual void traverse (SemanticGraph::Fundamental::NegativeInteger& t) { if (!long_) @@ -1994,7 +2058,7 @@ namespace CXX // Boolean. // - virtual Void + virtual void traverse (SemanticGraph::Fundamental::Boolean& t) { gen_include (t, "boolean.hxx"); @@ -2002,26 +2066,26 @@ namespace CXX // Floats. // - virtual Void + virtual void traverse (SemanticGraph::Fundamental::Float& t) { gen_include (t, "float.hxx"); } - virtual Void + virtual void traverse (SemanticGraph::Fundamental::Double& t) { gen_include (t, "double.hxx"); } - virtual Void + virtual void traverse (SemanticGraph::Fundamental::Decimal& t) { gen_include (t, "decimal.hxx"); } private: - Boolean + bool gen_include (SemanticGraph::Type& t, String const& file) { String custom; @@ -2046,8 +2110,8 @@ namespace CXX private: String prefix_; - Boolean long_; - Boolean unsigned_long_; + bool long_; + bool unsigned_long_; }; } } diff --git a/xsd/xsd/cxx/tree/fundamental-header.hxx b/xsd/xsd/cxx/tree/fundamental-header.hxx index 71cfbea..925d65e 100644 --- a/xsd/xsd/cxx/tree/fundamental-header.hxx +++ b/xsd/xsd/cxx/tree/fundamental-header.hxx @@ -1,13 +1,13 @@ // file : xsd/cxx/tree/fundamental-header.hxx -// author : Boris Kolpackov -// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file #ifndef CXX_TREE_FUNDAMENTAL_HEADER_HXX #define CXX_TREE_FUNDAMENTAL_HEADER_HXX -#include -#include +#include +#include +#include #include #include @@ -80,7 +80,7 @@ namespace CXX FundamentalNamespace (Context& c) : DocumentedNamespace (c), Context (c), - export_ (c.options.value () && type_exp) + export_ (c.options.export_xml_schema () && type_exp) { *this >> names_ >> *this; @@ -88,13 +88,13 @@ namespace CXX xs_ns_ = ns_name (xs_ns ()); } - Void + void gen_typedef (String const& name, String const& type, String const& arg1 = L"", String const& arg2 = L"", String const& arg3 = L"", - Boolean export_type = true) + bool export_type = true) { os << "typedef " << type; @@ -225,7 +225,7 @@ namespace CXX // anyType and anySimpleType // - virtual Void + virtual void traverse (SemanticGraph::AnyType& t) { os << "// anyType and anySimpleType." << endl @@ -237,11 +237,11 @@ namespace CXX type_ = built_in_type (t, "::xsd::cxx::tree::type"); } - virtual Void + virtual void traverse (SemanticGraph::AnySimpleType& t) { simple_type_ = built_in_type ( - t, L"::xsd::cxx::tree::simple_type< ", type_); + t, L"::xsd::cxx::tree::simple_type< " + char_type + L", ", type_); if (doxygen) os << "/**" << endl @@ -259,7 +259,7 @@ namespace CXX // Integrals. // - virtual Void + virtual void traverse (SemanticGraph::Fundamental::Byte& t) { os << "// 8-bit" << endl @@ -271,14 +271,14 @@ namespace CXX built_in_type (t, "signed char"); } - virtual Void + virtual void traverse (SemanticGraph::Fundamental::UnsignedByte& t) { built_in_type (t, "unsigned char"); os << endl; } - virtual Void + virtual void traverse (SemanticGraph::Fundamental::Short& t) { os << "// 16-bit" << endl @@ -290,14 +290,14 @@ namespace CXX built_in_type (t, "short"); } - virtual Void + virtual void traverse (SemanticGraph::Fundamental::UnsignedShort& t) { built_in_type (t, "unsigned short"); os << endl; } - virtual Void + virtual void traverse (SemanticGraph::Fundamental::Int& t) { os << "// 32-bit" << endl @@ -309,14 +309,14 @@ namespace CXX built_in_type (t, "int"); } - virtual Void + virtual void traverse (SemanticGraph::Fundamental::UnsignedInt& t) { built_in_type (t, "unsigned int"); os << endl; } - virtual Void + virtual void traverse (SemanticGraph::Fundamental::Long& t) { os << "// 64-bit" << endl @@ -328,14 +328,14 @@ namespace CXX built_in_type (t, "long long"); } - virtual Void + virtual void traverse (SemanticGraph::Fundamental::UnsignedLong& t) { built_in_type (t, "unsigned long long"); os << endl; } - virtual Void + virtual void traverse (SemanticGraph::Fundamental::Integer& t) { os << "// Supposed to be arbitrary-length integral types." << endl @@ -347,25 +347,25 @@ namespace CXX built_in_type (t, "long long"); } - virtual Void + virtual void traverse (SemanticGraph::Fundamental::NonPositiveInteger& t) { built_in_type (t, "long long"); } - virtual Void + virtual void traverse (SemanticGraph::Fundamental::NonNegativeInteger& t) { built_in_type (t, "unsigned long long"); } - virtual Void + virtual void traverse (SemanticGraph::Fundamental::PositiveInteger& t) { built_in_type (t, "unsigned long long"); } - virtual Void + virtual void traverse (SemanticGraph::Fundamental::NegativeInteger& t) { built_in_type (t, "long long"); @@ -374,7 +374,7 @@ namespace CXX // Boolean. // - virtual Void + virtual void traverse (SemanticGraph::Fundamental::Boolean& t) { os << "// Boolean." << endl @@ -390,7 +390,7 @@ namespace CXX // Floats. // - virtual Void + virtual void traverse (SemanticGraph::Fundamental::Float& t) { os << "// Floating-point types." << endl @@ -402,13 +402,13 @@ namespace CXX built_in_type (t, "float"); } - virtual Void + virtual void traverse (SemanticGraph::Fundamental::Double& t) { double_ = built_in_type (t, "double"); } - virtual Void + virtual void traverse (SemanticGraph::Fundamental::Decimal& t) { decimal_ = built_in_type (t, "double"); @@ -418,7 +418,7 @@ namespace CXX // Strings. // - virtual Void + virtual void traverse (SemanticGraph::Fundamental::String& t) { os << "// String types." << endl @@ -431,7 +431,7 @@ namespace CXX t, L"::xsd::cxx::tree::string< " + char_type + L", ", simple_type_); } - virtual Void + virtual void traverse (SemanticGraph::Fundamental::NormalizedString& t) { norm_string_ = built_in_type ( @@ -440,21 +440,21 @@ namespace CXX string_); } - virtual Void + virtual void traverse (SemanticGraph::Fundamental::Token& t) { token_ = built_in_type ( t, L"::xsd::cxx::tree::token< " + char_type + L", ", norm_string_); } - virtual Void + virtual void traverse (SemanticGraph::Fundamental::NameToken& t) { nmtoken_ = built_in_type ( t, L"::xsd::cxx::tree::nmtoken< " + char_type + L", ", token_); } - virtual Void + virtual void traverse (SemanticGraph::Fundamental::NameTokens& t) { built_in_type ( @@ -464,21 +464,21 @@ namespace CXX nmtoken_); } - virtual Void + virtual void traverse (SemanticGraph::Fundamental::Name& t) { name_ = built_in_type ( t, L"::xsd::cxx::tree::name< " + char_type + L", ", token_); } - virtual Void + virtual void traverse (SemanticGraph::Fundamental::NCName& t) { ncname_ = built_in_type ( t, L"::xsd::cxx::tree::ncname< " + char_type + L", ", name_); } - virtual Void + virtual void traverse (SemanticGraph::Fundamental::Language& t) { built_in_type ( @@ -489,7 +489,7 @@ namespace CXX // ID/IDREF. // - virtual Void + virtual void traverse (SemanticGraph::Fundamental::Id& t) { os << "// ID/IDREF." << endl @@ -502,14 +502,14 @@ namespace CXX t, L"::xsd::cxx::tree::id< " + char_type + L", ", ncname_); } - virtual Void + virtual void traverse (SemanticGraph::Fundamental::IdRef& t) { idref_ = built_in_type ( t, L"::xsd::cxx::tree::idref< " + char_type + L", ", ncname_, type_); } - virtual Void + virtual void traverse (SemanticGraph::Fundamental::IdRefs& t) { built_in_type ( @@ -524,7 +524,7 @@ namespace CXX // URI. // - virtual Void + virtual void traverse (SemanticGraph::Fundamental::AnyURI& t) { os << "// URI." << endl @@ -541,7 +541,7 @@ namespace CXX // Qualified name. // - virtual Void + virtual void traverse (SemanticGraph::Fundamental::QName& t) { os << "// Qualified name." << endl @@ -562,7 +562,7 @@ namespace CXX // Binary. // - virtual Void + virtual void traverse (SemanticGraph::Fundamental::Base64Binary& t) { os << "// Binary." << endl @@ -586,7 +586,7 @@ namespace CXX simple_type_); } - virtual Void + virtual void traverse (SemanticGraph::Fundamental::HexBinary& t) { built_in_type ( @@ -600,7 +600,7 @@ namespace CXX // Date/time. // - virtual Void + virtual void traverse (SemanticGraph::Fundamental::Date& t) { os << "// Date/time." << endl @@ -622,7 +622,7 @@ namespace CXX t, L"::xsd::cxx::tree::date< " + char_type + L", ", simple_type_); } - virtual Void + virtual void traverse (SemanticGraph::Fundamental::DateTime& t) { built_in_type ( @@ -631,7 +631,7 @@ namespace CXX simple_type_); } - virtual Void + virtual void traverse (SemanticGraph::Fundamental::Duration& t) { built_in_type ( @@ -640,21 +640,21 @@ namespace CXX simple_type_); } - virtual Void + virtual void traverse (SemanticGraph::Fundamental::Day& t) { built_in_type ( t, L"::xsd::cxx::tree::gday< " + char_type + L", ", simple_type_); } - virtual Void + virtual void traverse (SemanticGraph::Fundamental::Month& t) { built_in_type ( t, L"::xsd::cxx::tree::gmonth< " + char_type + L", ", simple_type_); } - virtual Void + virtual void traverse (SemanticGraph::Fundamental::MonthDay& t) { built_in_type ( @@ -663,14 +663,14 @@ namespace CXX simple_type_); } - virtual Void + virtual void traverse (SemanticGraph::Fundamental::Year& t) { built_in_type ( t, L"::xsd::cxx::tree::gyear< " + char_type + L", ", simple_type_); } - virtual Void + virtual void traverse (SemanticGraph::Fundamental::YearMonth& t) { built_in_type ( @@ -679,7 +679,7 @@ namespace CXX simple_type_); } - virtual Void + virtual void traverse (SemanticGraph::Fundamental::Time& t) { built_in_type ( @@ -690,7 +690,7 @@ namespace CXX // Entity. // - virtual Void + virtual void traverse (SemanticGraph::Fundamental::Entity& t) { os << "// Entity." << endl @@ -703,7 +703,7 @@ namespace CXX t, L"::xsd::cxx::tree::entity< " + char_type + L", ", ncname_); } - virtual Void + virtual void traverse (SemanticGraph::Fundamental::Entities& t) { built_in_type ( @@ -715,16 +715,27 @@ namespace CXX os << endl; } - virtual Void + virtual void post (SemanticGraph::Namespace& n) { SemanticGraph::Context& c (xs_ns ().context()); - Boolean parsing (!options.value ()); - Boolean serialization (options.value ()); - Boolean element_map (options.value ()); + bool parsing (!options.suppress_parsing ()); + bool serialization (options.generate_serialization ()); + bool element_map (options.generate_element_map ()); - if (options.value ()) + { + if (doxygen) + os << endl + << "/**" << endl + << " * @brief Content order sequence entry." << endl + << " */" << endl; + + gen_typedef (c.get ("content-order"), + "::xsd::cxx::tree::content_order"); + } + + if (options.generate_element_type ()) { if (doxygen) os << "/**" << endl @@ -838,7 +849,7 @@ namespace CXX //@@ Can't change names of ostream/istream since they are // templates. // - if (!options.value ().empty ()) + if (!options.generate_insertion ().empty ()) { if (doxygen) os << "/**" << endl @@ -852,7 +863,7 @@ namespace CXX << endl; } - if (!options.value ().empty ()) + if (!options.generate_extraction ().empty ()) { if (doxygen) os << "/**" << endl @@ -1050,7 +1061,7 @@ namespace CXX L"::xsd::cxx::tree::no_prefix_mapping< " + char_type + L" >"); } - if (options.value ()) + if (options.generate_polymorphic ()) { if (parsing || serialization) { @@ -1145,7 +1156,8 @@ namespace CXX << "{"; // @@ Disregarding current naming convention by using the - // fixed name (no template typedef). + // fixed name (even in C++11, template alias is not yet + // widely supported). // if (doxygen) os << "/**" << endl @@ -1155,8 +1167,12 @@ namespace CXX os << "// Automatic pointer for DOMDocument." << endl << "//" << endl; - os << "using ::xsd::cxx::xml::dom::auto_ptr;" - << endl; + if (std >= cxx_version::cxx11) + os << "using ::xsd::cxx::xml::dom::unique_ptr;"; + else + os << "using ::xsd::cxx::xml::dom::auto_ptr;"; + + os << endl; if (parsing) { @@ -1228,7 +1244,7 @@ namespace CXX { StringSet ns_set; - for (StringList::ConstIterator i (exports_.begin ()); + for (StringList::const_iterator i (exports_.begin ()); i != exports_.end (); ++i) { String const& e (*i); @@ -1245,14 +1261,14 @@ namespace CXX << "namespace cxx" << "{"; - for (StringSet::ConstIterator i (ns_set.begin ()); + for (StringSet::const_iterator i (ns_set.begin ()); i != ns_set.end (); ++i) { String const& ns (*i); String prefix (L"::xsd::cxx::" + ns); - Size n (1); - for (Size b (0), e (ns.find (':')); ; n++) + size_t n (1); + for (size_t b (0), e (ns.find (':')); ; n++) { os << "namespace " << String (ns, b, e) << "{"; @@ -1264,7 +1280,7 @@ namespace CXX e = ns.find (':', b); } - for (StringList::ConstIterator i (exports_.begin ()); + for (StringList::const_iterator i (exports_.begin ()); i != exports_.end (); ++i) { String const& e (*i); @@ -1289,10 +1305,10 @@ namespace CXX } private: - typedef Cult::Containers::Set StringSet; - typedef Cult::Containers::Vector StringList; + typedef std::set StringSet; + typedef std::vector StringList; - Boolean export_; + bool export_; StringList exports_; StringSet exports_set_; String xs_ns_; diff --git a/xsd/xsd/cxx/tree/generator.cxx b/xsd/xsd/cxx/tree/generator.cxx index fe5286a..7a413bd 100644 --- a/xsd/xsd/cxx/tree/generator.cxx +++ b/xsd/xsd/cxx/tree/generator.cxx @@ -1,8 +1,22 @@ // file : xsd/cxx/tree/generator.cxx -// author : Boris Kolpackov -// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file +#include +#include +#include +#include + +#include +#include + +#include +#include +#include + +#include +#include + #include #include @@ -10,6 +24,7 @@ #include #include #include +#include #include #include @@ -30,45 +45,25 @@ #include #include -#include - -#include -#include -#include -#include - -#include -#include - -#include - -#include - -#include +#include #include "../../../libxsd/xsd/cxx/version.hxx" -using std::endl; -using std::wcerr; - +using namespace std; +using namespace cutl; using namespace XSDFrontend::SemanticGraph; // // -typedef -boost::filesystem::wifstream -WideInputFileStream; - -typedef -boost::filesystem::wofstream -WideOutputFileStream; +typedef std::wifstream WideInputFileStream; +typedef std::wofstream WideOutputFileStream; namespace CXX { namespace { - Char const copyright_gpl[] = - "// Copyright (C) 2005-2010 Code Synthesis Tools CC\n" + char const copyright_gpl[] = + "// Copyright (c) 2005-2014 Code Synthesis Tools CC\n" "//\n" "// This program was generated by CodeSynthesis XSD, an XML Schema to\n" "// C++ data binding compiler.\n" @@ -101,8 +96,8 @@ namespace CXX "// in the accompanying FLOSSE file.\n" "//\n\n"; - Char const copyright_proprietary[] = - "// Copyright (C) 2005-2010 Code Synthesis Tools CC\n" + char const copyright_proprietary[] = + "// Copyright (c) 2005-2014 Code Synthesis Tools CC\n" "//\n" "// This program was generated by CodeSynthesis XSD, an XML Schema\n" "// to C++ data binding compiler, in the Proprietary License mode.\n" @@ -112,673 +107,23 @@ namespace CXX "//\n\n"; } - namespace Tree - { - namespace CLI - { - extern Key char_type = "char-type"; - extern Key char_encoding = "char-encoding"; - extern Key output_dir = "output-dir"; - extern Key generate_polymorphic = "generate-polymorphic"; - extern Key polymorphic_type = "polymorphic-type"; - extern Key polymorphic_type_all = "polymorphic-type-all"; - extern Key generate_serialization = "generate-serialization"; - extern Key generate_inline = "generate-inline"; - extern Key generate_ostream = "generate-ostream"; - extern Key generate_doxygen = "generate-doxygen"; - extern Key generate_comparison = "generate-comparison"; - extern Key generate_default_ctor = "generate-default-ctor"; - extern Key generate_from_base_ctor = "generate-from-base-ctor"; - extern Key generate_detach = "generate-detach"; - extern Key generate_wildcard = "generate-wildcard"; - extern Key generate_insertion = "generate-insertion"; - extern Key generate_extraction = "generate-extraction"; - extern Key generate_forward = "generate-forward"; - extern Key generate_xml_schema = "generate-xml-schema"; - extern Key extern_xml_schema = "extern-xml-schema"; - extern Key suppress_parsing = "suppress-parsing"; - extern Key generate_element_type = "generate-element-type"; - extern Key generate_element_map = "generate-element-map"; - extern Key generate_intellisense = "generate-intellisense"; - extern Key omit_default_attributes = "omit-default-attributes"; - extern Key namespace_map = "namespace-map"; - extern Key namespace_regex = "namespace-regex"; - extern Key namespace_regex_trace = "namespace-regex-trace"; - extern Key reserved_name = "reserved-name"; - extern Key type_naming = "type-naming"; - extern Key function_naming = "function-naming"; - extern Key type_regex = "type-regex"; - extern Key accessor_regex = "accessor-regex"; - extern Key one_accessor_regex = "one-accessor-regex"; - extern Key opt_accessor_regex = "opt-accessor-regex"; - extern Key seq_accessor_regex = "seq-accessor-regex"; - extern Key modifier_regex = "modifier-regex"; - extern Key one_modifier_regex = "one-modifier-regex"; - extern Key opt_modifier_regex = "opt-modifier-regex"; - extern Key seq_modifier_regex = "seq-modifier-regex"; - extern Key parser_regex = "parser-regex"; - extern Key serializer_regex = "serializer-regex"; - extern Key enumerator_regex = "enumerator-regex"; - extern Key element_type_regex = "element-type-regex"; - extern Key name_regex_trace = "name-regex-trace"; - extern Key include_with_brackets = "include-with-brackets"; - extern Key include_prefix = "include-prefix"; - extern Key include_regex = "include-regex"; - extern Key include_regex_trace = "include-regex-trace"; - extern Key guard_prefix = "guard-prefix"; - extern Key root_element_first = "root-element-first"; - extern Key root_element_last = "root-element-last"; - extern Key root_element_all = "root-element-all"; - extern Key root_element_none = "root-element-none"; - extern Key root_element = "root-element"; - extern Key custom_type = "custom-type"; - extern Key custom_type_regex = "custom-type-regex"; - extern Key hxx_suffix = "hxx-suffix"; - extern Key ixx_suffix = "ixx-suffix"; - extern Key cxx_suffix = "cxx-suffix"; - extern Key fwd_suffix = "fwd-suffix"; - extern Key hxx_regex = "hxx-regex"; - extern Key ixx_regex = "ixx-regex"; - extern Key cxx_regex = "cxx-regex"; - extern Key fwd_regex = "fwd-regex"; - extern Key hxx_prologue = "hxx-prologue"; - extern Key ixx_prologue = "ixx-prologue"; - extern Key cxx_prologue = "cxx-prologue"; - extern Key fwd_prologue = "fwd-prologue"; - extern Key prologue = "prologue"; - extern Key hxx_epilogue = "hxx-epilogue"; - extern Key ixx_epilogue = "ixx-epilogue"; - extern Key cxx_epilogue = "cxx-epilogue"; - extern Key fwd_epilogue = "fwd-epilogue"; - extern Key epilogue = "epilogue"; - extern Key hxx_prologue_file = "hxx-prologue-file"; - extern Key ixx_prologue_file = "ixx-prologue-file"; - extern Key cxx_prologue_file = "cxx-prologue-file"; - extern Key fwd_prologue_file = "fwd-prologue-file"; - extern Key prologue_file = "prologue-file"; - extern Key hxx_epilogue_file = "hxx-epilogue-file"; - extern Key ixx_epilogue_file = "ixx-epilogue-file"; - extern Key cxx_epilogue_file = "cxx-epilogue-file"; - extern Key fwd_epilogue_file = "fwd-epilogue-file"; - extern Key epilogue_file = "epilogue-file"; - extern Key parts = "parts"; - extern Key parts_suffix = "parts-suffix"; - extern Key export_symbol = "export-symbol"; - extern Key export_xml_schema = "export-xml-schema"; - extern Key export_maps = "export-maps"; - extern Key import_maps = "import-maps"; - extern Key show_anonymous = "show-anonymous"; - extern Key show_sloc = "show-sloc"; - extern Key proprietary_license = "proprietary-license"; - extern Key disable_multi_import = "disable-multi-import"; - } - } - - Void Tree::Generator:: + void Tree::Generator:: usage () { - std::wostream& e (wcerr); - ::CLI::Indent::Clip< ::CLI::OptionsUsage, WideChar> clip (e); - - e << "--char-type " << endl - << " Use as the base character type. Valid\n" - << " values are 'char' (default) and 'wchar_t'." - << endl; - - e << "--char-encoding " << endl - << " Specify the character encoding that should be used\n" - << " in the object model. Valid values for the 'char'\n" - << " character type are 'utf8' (default), 'iso8859-1',\n" - << " 'lcp', and 'custom'. For the 'wchar_t' character\n" - << " type the only valid value is 'auto'." - << endl; - - e << "--output-dir " << endl - << " Write generated files to instead of current\n" - << " directory." - << endl; - - e << "--generate-polymorphic" << endl - << " Generate polymorphism-aware code. Specify this\n" - << " option if you use substitution groups or xsi:type." - << endl; - - e << "--polymorphic-type " << endl - << " Indicate that is a root of a polymorphic\n" - << " type hierarchy." - << endl; - - e << "--polymorphic-type-all" << endl - << " Indicate that all types should be treated as\n" - << " polymorphic." - << endl; - - e << "--generate-serialization" << endl - << " Generate serialization functions. They convert an\n" - << " in-memory representation back to XML." - << endl; - - e << "--generate-inline" << endl - << " Generate certain functions inline." - << endl; - - e << "--generate-ostream" << endl - << " Generate ostream insertion operators." - << endl; - - e << "--generate-doxygen" << endl - << " Generate documentation comments in the Doxygen\n" - << " format." - << endl; - - e << "--generate-comparison" << endl - << " Generate comparison operators." - << endl; - - e << "--generate-default-ctor" << endl - << " Generate default constructors even for types that\n" - << " have required members." - << endl; - - e << "--generate-from-base-ctor" << endl - << " Generate from-base constructors." - << endl; - - e << "--generate-detach" << endl - << " Generate detach functions for required members." - << endl; - - e << "--generate-wildcard" << endl - << " Generate accessors/modifiers as well as parsing\n" - << " and serialization code for XML Schema wildcards." - << endl; - - e << "--generate-insertion " << endl - << " Generate data representation stream insertion\n" - << " operators for the output stream type." - << endl; - - e << "--generate-extraction " << endl - << " Generate data representation stream extraction\n" - << " constructors for the input stream type." - << endl; - - e << "--generate-forward" << endl - << " Generate forward declaration file." - << endl; - - e << "--generate-xml-schema" << endl - << " Generate a C++ header file as if the schema being\n" - << " compiled defines the XML Schema namespace." - << endl; - - e << "--extern-xml-schema " << endl - << " Generate code as if the XML Schema namespace was\n" - << " defined in and xsd:included in the schema\n" - << " being compiled." - << endl; - - e << "--suppress-parsing" << endl - << " Suppress the generation of parsing functions." - << endl; - - e << "--generate-element-type" << endl - << " Generate types instead of parsing/serialization\n" - << " functions for root elements." - << endl; - - e << "--generate-element-map" << endl - << " Generate a root element map that allows uniform\n" - << " parsing/serialization of multiple root elements.\n" - << endl; - - e << "--generate-intellisense" << endl - << " Generate workarounds for IntelliSense bugs in\n" - << " Visual Studio 2005 (8.0)." - << endl; - - e << "--omit-default-attributes" << endl - << " Omit attributes with default and fixed values\n" - << " from serialized XML documents." - << endl; - - e << "--namespace-map =" << endl - << " Map XML Schema namespace to C++ namespace\n" - << " . Repeat this option to specify mapping for\n" - << " more than one XML Schema namespace." - << endl; - - e << "--namespace-regex " << endl - << " Add to the list of regular expressions\n" - << " used to translate XML Schema namespace names to\n" - << " C++ namespace names." - << endl; - - e << "--namespace-regex-trace" << endl - << " Trace the process of applying regular expressions\n" - << " specified with the --namespace-regex option." - << endl; - - e << "--reserved-name " << endl - << " Add to the list of names that should not\n" - << " be used as identifiers. The name can optionally\n" - << " be followed by '=' and the replacement name that\n" - << " should be used instead." - << endl; - - e << "--type-naming