[Mapserver-users] OGC-compliant WMS-server delivering dynamic layers with MS?

Debbie Pagurek pagurekd at agr.gc.ca
Mon Sep 29 14:36:48 EDT 2003


This is a MIME message. If you are reading this text, you may want to 
consider changing to a mail reader or gateway that understands how to 
properly handle MIME multipart messages.

--=_82DCC8D6.E485E258
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: quoted-printable
Content-Disposition: inline


OK everybody,
I've attached the PHP code that I wrote for handling the WMS requests
to our Integrated Taxonomic Information System internet mapping
application.

I have removed most of the code that shows that transfer of the point
information via XML to the application, because the points can come from
anywhere:  XML, a direct database connection, or a shapefile. =20

The point of interest here is how the WMS request name/value pairs are
handled in PHP and how the corresponding results are returned (an image
for a getmap request,  an xml stream for the getcapabilities request, a
pop up window with a new URL for a getfeatureinfo request).

I tried to include all possible name/value pairs that can come in via a
WMS request but I think I missed some e.g. EXCEPTIONS=3D

I am no programming guru so please forgive any weird programming
foibles in here.  All I know is that the application does WORK!=20
Hopefully some of you will find this useful in some way.  Please let me
know if you have found it helpful or if you see any problems.

Keep in mind that the GetCapabilities for this application was a
problem because we are mapping over 100,000 taxa, and it is ridiculous
to include that many layers in a getcapabilities document.  In the
getcapabilities section I included a default (no layer name is specified
in the request) as well as a dynamic response that writes out a new
mapfile if a layername is specified (e.g.
request=3Dgetcapabilites&layers=3DAbudefduf)

An example of the type of requests that are handled by this script:
Getmap:
http://wms1.agr.gc.ca/mapdata/itis/testscript.php?VERSION=3D1.1.0&REQUEST=
=3DGetMap&Layers=3DCyanocitta%20cristata&SRS=3DEPSG:42304&BBOX=3D-2750560,-=
936638,3583870,4673120&WIDTH=3D339&HEIGHT=3D300

GetFeatureInfo:
http://wms1.agr.gc.ca/mapdata/itis/testscript.php?VERSION=3D1.1.0&REQUEST=
=3DGetFeatureInfo&QUERY_LAYERS=3DAbudefduf+abdominalis&Layer=3DAbudefduf+ab=
dominalis&X=3D250&Y=3D150

GetCapabilities:
http://wms1.agr.gc.ca/mapdata/itis/testscript.php?VERSION=3D1.0.0&REQUEST=
=3DGetCapabilities

I am no programming guru so please forgive any weird programming
idiosyncrasies in here.  All I know is that the application does WORK!=20
Hopefully some of you will find this useful in some way.  Please let me
know if you have found it helpful or if you see any problems.

Debbie Pagurek
=20

Debbie Pagurek, M.Sc.
GIS and Remote Sensing Analyst / T=E9l=E9d=E9tection, SIG
Research Branch / D.G. Recherche
Agriculture and Agri-Food Canada / Agriculture et Agroalimentaire
Canada
Telephone / T=E9l=E9phone: 613-759-1543
Facsimile / T=E9l=E9copieur: 613-759-1937
960 Carling Avenue
Ottawa, Ontario
K1A 0C6
pagurekd at agr.gc.ca

>>> "Frieso ter Haseborg" <ter-haseborg at sf-datentechnik.de> 09/17/03
11:56AM >>>
Hi,

I'm searching for possibilities to use MS for building an
OGC-compliant
WMS-service which creates and serves dynamic layers from data out of
RDBMS. These RDBMS do NOT have any spatial-extensions it's just the
"x,y-coordinate & label-data"-thing.=20

So what I want to do: retrieve the coordinates from my databases and
create one or more dynamic layers. I did some experiments with
PHP/MapScript, no major problems so far, that seems to be the easier
part.

The problem comes here: I don't want to create these layers in any
client-app, I want to have these layers served by the mapserver, since
I
have to incorporate other servers e.g. ArcIMS which have to use and
process this layers through OGC-requests. Any ideas?

Are there any possibilities to create dynamic layers from RDBMS e.g.
Sybase ASA, MS SQL Server, Oracle without spatial-extensions I
overlooked, besides doing this in PHP/MapScript?

Are there any hooks or entry-points in the mapserv-cgi to process
customized-operations like creating the mentioned dynamic layers?

Any comment and hint would be appreciated!

TIA,
=20
Frieso ter Haseborg
- Software Development -=20
=20
--

--------------------------------------------------=20
S&F Datentechnik GmbH&Co.KG=20
Reimersstr
. 41b=20
26789 Leer, Germany

_______________________________________________
Mapserver-users mailing list
Mapserver-users at lists.gis.umn.edu=20
http://lists.gis.umn.edu/mailman/listinfo/mapserver-users

--=_82DCC8D6.E485E258
Content-Type: application/octet-stream; name="scriptname.php"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="scriptname.php"

PD9waHAKZGwgKCdwaHBfbWFwc2NyaXB0LnNvJyk7CgovL0F1dGhvcjogRGViYmllIFBhZ3VyZWsg
YW5kIERlcmVrIE11bnJvLCBBZ3JpY3VsdHVyZSBhbmQgQWdyaS1Gb29kIENhbmFkYQoKLyogKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKiAqLwovKiBGdW5jdGlvbiB0byByZXRyaWV2ZSBwb2ludHMgZnJvbSBYTUwgYW5k
IGNyZWF0ZSBhICd0cmFja2luZ2xheWVyJyAgICAgICovCi8qIGluIE1hcHNlcnZlciBieSBhZGRp
bmcgZmVhdHVyZXMgdG8gYSBkdW1teSBsYXllciB0aGF0IGlzIGxpc3RlZCBpbiB0aGUgKi8KLyog
bWFwZmlsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAqLwovKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCmZ1bmN0aW9uIHhtbDJtYXAoKQp7
CgovL3RoaXMgaXMgdGhlIGZ1bmN0aW9uIHdoZXJlIEkgYWRkZWQgcG9pbnRzIHRvIHRoZSBtYXAg
CgovL2luIHRoaXMgY2FzZSwgdGhlIHBvaW50IGRhdGEgY2FtZSB2aWEgYW4gWE1MIHN0cmVhbS4g
IFRoZSBYTUwgd2FzIHBhcnNlZCBhbmQgdGhlIHBvaW50IGxhdC9sb25nIAovL2Nvb3JkaW5hdGVz
IHdlcmUgcGxhY2VkIGludG8gYXJyYXlzLiAgCi8vVGhlIHNvdXJjZSBvZiB5b3VyIHBvaW50IGRh
dGEgbWlnaHQgYmUgZnJvbSBYTUwsIGEgZGF0YWJhc2UgY29ubmVjdGlvbiwgb3IgYSBzaGFwZWZp
bGUgLSBwdXQgeW91ciBvd24gY29kZSBoZXJlCgpnbG9iYWwgJG1hcF9maWxlOwpnbG9iYWwgJG1h
cDsKZ2xvYmFsICRsb25nOwpnbG9iYWwgJGxhdDsKZ2xvYmFsICRsYXllcm5hbWU7Cmdsb2JhbCAk
bGFuZzsKZ2xvYmFsICRpZng7CgokbWFwID0gbXNfbmV3TWFwT2JqKCRtYXBfZmlsZSk7CgokZHVt
bXlsYXllcj0kbWFwLT5nZXRMYXllckJ5TmFtZSgkbGF5ZXJuYW1lKTsKCi8vIGxvb3AgdGhyb3Vn
aCByZWNvcmRzIGFuZCBkaXNwbGF5IChhZGRmZWF0dXJlKSBlYWNoIHBvaW50Cmdsb2JhbCAkbnVt
cm93czsKJG51bXJvd3MgPSBjb3VudCgkbG9uZyk7Cgpmb3IgKCRpID0gMCA7ICRpIDwgJG51bXJv
d3M7ICsrJGkpCiAgewogICAkb1NocD1tc19uZXdTaGFwZU9iaihNU19TSFBfUE9JTlQpOwogICAk
b0xpbmU9bXNfbmV3TGluZU9iaigpOwogICAkb0xpbmUtPmFkZFhZKCRsb25nWyRpXSwkbGF0WyRp
XSk7CgogICAkb1NocC0+YWRkKCRvTGluZSk7CiAgICRkdW1teWxheWVyLT5hZGRmZWF0dXJlKCRv
U2hwKTsKICB9IC8vIGVuZCB0aGUgd2hpbGUgbG9vcCB0aHJvdWdoIHRoZSB0YXhvbiBwb2ludHMK
Cn0gLy8gZW5kIG9mIHhtbDJtYXAgZnVuY3Rpb24KCgovKiAqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICAgICovCi8qIGZ1
bmN0aW9uIEdNYXBQaXgyR2VvKCRuUGl4UG9zLCAkZGZQaXhNaW4sICRkZlBpeE1heCwgJGRmR2Vv
TWluLCBkZkdlb01heCwgKi8KLyogJG5JbnZlcnNlUGl4KSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi8qICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAqLwovKiAgVGhpcyBmdW5jdGlvbiB3YXMgb2J0YWluZWQgZnJvbSBETVNvbHV0aW9ucyBHTUFQ
IGFwcGxpY2F0aW9uICAgICAgICAgICAgKi8KLyogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi8qIFV0aWxp
dHkgZnVuY3Rpb24gdG8gY29udmVydCBhIHBpeGVsIHBvc2l0aW9uIHRvIGdlb2NvZGVkIHBvc2l0
aW9uLiAgICAgICAqLwovKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLyogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICov
Ci8qIFRoZSBwYXJhbWV0ZXIgJG5JbnZlcnNlUGl4IGNvdWxkIGJlIHNldCB0byAxIGZvciBZIHBp
eGVsICAgICAgICAgICAgICAgICAqLwovKiBjb29yZGluYXRlcyB3aGVyZSB0aGUgVUwgPiBMUi4g
RWxzZSBzZXQgdG8gMC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLyogKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqICAgICovCmZ1bmN0aW9uIEdNYXBQaXgyR2VvKCRuUGl4UG9zLCAkZGZQaXhNaW4sICRkZlBp
eE1heCwgJGRmR2VvTWluLCAkZGZHZW9NYXgsICRuSW52ZXJzZVBpeCkKewogLy8gJG5QaXhQb3Mg
OiBwaXhlbCBwb3NpdGlvbiAoWCBvciBZKQogLy8gJGRmUGl4TWluLCAkZGZQaXhNYXggOiBQaXhl
bCBtaW5pbXVtIGFuZCBtYXhpbXVtIChYIG9yIFkpIG9mIHlvdXIgbWFwIG9uIHRoZSBzY3JlZW4g
KHNob3VsZCBiZSAwIHRvIHh4eCkKIC8vICRkZkdlb01pbiwgJGRmR2VvTWF4IDogR2VvZ3JhcGhp
YyBjb29yZGluYXRlIG1pbiBtYXggKFggb3IgWSkgb2YgeW91ciBtYXAgb24gdGhlIHNjcmVlbgog
JGRmV2lkdGhHZW8gPSAkZGZHZW9NYXggLSAkZGZHZW9NaW47CiAkZGZXaWR0aFBpeCA9ICRkZlBp
eE1heCAtICRkZlBpeE1pbjsKICRkZlBpeFRvR2VvID0gJGRmV2lkdGhHZW8gLyAkZGZXaWR0aFBp
eDsKICAgaWYgKCEkbkludmVyc2VQaXgpCiAgIHsKICAgICAkZGZEZWx0YVBpeCA9ICRuUGl4UG9z
IC0gJGRmUGl4TWluOwogICB9IGVsc2UgewogICAgICRkZkRlbHRhUGl4ID0gJGRmUGl4TWF4IC0g
JG5QaXhQb3M7CiAgIH0KICRkZkRlbHRhR2VvID0gJGRmRGVsdGFQaXggKiAkZGZQaXhUb0dlbzsK
ICRkZlBvc0dlbyA9ICRkZkdlb01pbiArICRkZkRlbHRhR2VvOwogcmV0dXJuICgkZGZQb3NHZW8p
Owp9IC8vZW5kIG9mIEdNYXBQaXgyR2VvIGZ1bmN0aW9uCgoKLyogKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLwov
KiBYTUwgRlVOQ1RJT05TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICovCi8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KCi8vY29kZSBoYXMgYmVlbiBy
ZW1vdmVkIGZyb20gdGhpcyBzZWN0aW9uIGZvciBzaW1wbGljaXR5LiAgCi8vWE1MIHBhcnNpbmcg
ZnVuY3Rpb25zIHdlcmUgaW5jbHVkZWQgaGVyZSB0byBleHRyYWN0IHRoZSBwb2ludCBkaXN0cmli
dXRpb24gbGF0L2xvbmcKLy9jb29yZGluYXRlcyBhbmQgcHV0IHRoZW0gaW4gYXJyYXlzLgoKLy8u
Li5zdHVmZiByZW1vdmVkCnN3aXRjaCAoc3RydG9sb3dlcigka2V5KSkgCnsKCS8vLi4uc3R1ZmYg
cmVtb3ZlZAogICAgIGNhc2UgImxhdGl0dWRlIiA6CiAgICAgICAkbGF0W10gPSAkZWxbMV07CiAg
ICAgICBicmVhazsKICAgICBjYXNlICJsb25naXR1ZGUiIDoKICAgICAgICRjb3VudCsrOwogICAg
ICAgJGxvbmdbXSA9ICRlbFsxXTsKICAgICAgIGJyZWFrOwp9Ci8qICoqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8K
CgoKCi8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKiogKi8KLyogU1RBUlQgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwovKiAqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqICovCgovL3NldCBkZWZhdWx0IHZhbHVlcwokbGF5ZXJuYW1lPSIiOwokdGhlaGVpZ2h0ID0g
MzAwOwokdGhld2lkdGggPSA2MDA7CiR0aGVleHRlbnQ9Ii0xODAgLTkwIDE4MCA5MCI7CiR0aGVz
cnM9ImVwc2c6NDMyNiI7CiR0aGVmb3JtYXQ9InBuZyI7CiR0aGVyZXF1ZXN0ID0gIkdldENhcGFi
aWxpdGllcyI7CiR0aGViY29sb3IgPSAiMHhGRkZGRkYiOwokdGhldHJhbnNwYXJlbmN5ID0gInRy
dWUiOwokdGhlc3R5bGUgPSAiMHhGRjAwMDAiOyAvL2RlZmF1bHQgcG9pbnQgY29sb3VyIGlzIHJl
ZAoKZnVuY3Rpb24gcHJvY2VzcygkYXIpewpnbG9iYWwgJGxheWVybmFtZTsKZ2xvYmFsICR0aGVo
ZWlnaHQ7Cmdsb2JhbCAkdGhld2lkdGg7Cmdsb2JhbCAkdGhlZXh0ZW50OwpnbG9iYWwgJHRoZXNy
czsKZ2xvYmFsICR0aGVmb3JtYXQ7Cmdsb2JhbCAkdGhlcmVxdWVzdDsKZ2xvYmFsICR0aGViY29s
b3I7Cmdsb2JhbCAkdGhldHJhbnNwYXJlbmN5OwpnbG9iYWwgJHRoZXN0eWxlOwoKIHdoaWxlKGxp
c3QoJGtleSwkdmFsKT1lYWNoKCRhcikpewogICBzd2l0Y2ggKHN0cnRvbG93ZXIoJGtleSkpIHsK
ICAgICBjYXNlICJsYXllciI6CiAgICAgICAkbGF5ZXJuYW1lID0gc3RydG9sb3dlcigkdmFsKTsK
ICAgICAgIGJyZWFrOwogICAgIGNhc2UgImxheWVycyI6CiAgICAgICAkbGF5ZXJuYW1lID0gc3Ry
dG9sb3dlcigkdmFsKTsKICAgICAgIGJyZWFrOwogICAgIGNhc2UgInF1ZXJ5X2xheWVycyI6CiAg
ICAgICAkbGF5ZXJuYW1lID0gc3RydG9sb3dlcigkdmFsKTsKICAgICAgIGJyZWFrOwogICAgIGNh
c2UgImhlaWdodCI6CiAgICAgICAkdGhlaGVpZ2h0ID0gJHZhbDsKICAgICAgIGJyZWFrOwogICAg
IGNhc2UgIndpZHRoIjoKICAgICAgICR0aGV3aWR0aCA9ICR2YWw7CiAgICAgICBicmVhazsKICAg
ICBjYXNlICJiYm94IjoKICAgICAgICR0aGVleHRlbnQgPSAkdmFsOwogICAgICAgJHRoZWV4dGVu
dCA9IHN0cl9yZXBsYWNlKCIsIiwiICIsJHRoZWV4dGVudCk7CiAgICAgICBicmVhazsKICAgICBj
YXNlICJzcnMiOgogICAgICAgJHRoZXNycyA9IHN0cnRvbG93ZXIoJHZhbCk7CiAgICAgICBicmVh
azsKICAgICBjYXNlICJmb3JtYXQiOgogICAgICAgJHRoZWZvcm1hdCA9IHN0cnRvbG93ZXIoJHZh
bCk7CiAgICAgICBicmVhazsKICAgICBjYXNlICJyZXF1ZXN0IjoKICAgICAgICR0aGVyZXF1ZXN0
ID0gc3RydG9sb3dlcigkdmFsKTsKICAgICAgIGJyZWFrOwogICAgIGNhc2UgImJnY29sb3IiOgog
ICAgICAgJHRoZWJjb2xvciA9IHN0cnRvbG93ZXIoJHZhbCk7CiAgICAgICBicmVhazsKICAgICBj
YXNlICJ0cmFuc3BhcmVudCI6CiAgICAgICAkdGhldHJhbnNwYXJlbmN5ID0gc3RydG9sb3dlcigk
dmFsKTsKICAgICAgIGJyZWFrOwogICAgIGNhc2UgInN0eWxlcyI6CiAgICAgICAkdGhlc3R5bGUg
PSAkdmFsOwogICAgICAgYnJlYWs7CiAgIH0gLy9lbmQgY2FzZQogfSAvL2VuZCB3aGlsZQp9IC8v
ZW5kIHByb2Nlc3MgZnVuY3Rpb24KCgpwcm9jZXNzKCRIVFRQX0dFVF9WQVJTKTsKCgovL2FkanVz
dG1lbnRzCiRsYXllcm5hbWUgPSBzdHJ0b3VwcGVyKHN1YnN0cigkbGF5ZXJuYW1lLDAsMSkpLnN1
YnN0cigkbGF5ZXJuYW1lLDEsc3RybGVuKCRsYXllcm5hbWUpKTsKCmlmICgkdGhldHJhbnNwYXJl
bmN5ID09ICJ0cnVlIikgewogICR0aGV0cmFuc3BhcmVuY3kgPSAiT04iOwp9IGVsc2UgewogICR0
aGV0cmFuc3BhcmVuY3kgPSAiT0ZGIjsKfQoKLy9YTUwgUEFSU0lORwovL3RoaXMgcGFydCBvZiB0
aGUgY29kZSBpcyB3aGVyZSB0aGUgcG9pbnQgZGF0YSB3YXMgcHJvY2Vzc2VkLiAgCi8vaW4gdGhp
cyBjYXNlLCB0aGUgcG9pbnQgZGF0YSBjYW1lIHZpYSBhbiBYTUwgc3RyZWFtLiAgVGhlIFhNTCB3
YXMgcGFyc2VkIGFuZCB0aGUgcG9pbnQgbGF0L2xvbmcgCi8vY29vcmRpbmF0ZXMgd2VyZSBwbGFj
ZWQgaW50byBhcnJheXMuICBDb2RlIGhhcyBiZWVuIHJlbW92ZWQgaGVyZSB0byBzaW1wbGlmeSB0
aGluZ3MsIAovL2FuZCBiZWNhdXNlIHRoZSBzb3VyY2Ugb2YgeW91ciBwb2ludCBkYXRhIG1pZ2h0
IGJlIGZyb20gWE1MLCBhIGRhdGFiYXNlIGNvbm5lY3Rpb24sIG9yIGEgc2hhcGVmaWxlLgoKLy8g
Li4uIHN0dWZmIHJlbW92ZWQuLi4KLy8gICRsYXQgPSBhcnJheSgpOwovLyAgJGxvbmcgPSBhcnJh
eSgpOwoKaWYgKCRsYXllcm5hbWUgPD4gIiIpIHsgLy9taWdodCBiZSBkb2luZyBHZXRDYXBhYmls
aXRlcywgdGhlcmVmb3JlIG5vIGxheWVybmFtZSBpcyBwYXNzZWQuCiAgCiAgLy8gLi4uIHN0dWZm
IHJlbW92ZWQuLi4geG1sIHBhcnNpbmcKCiAgLy9zZXQgbWFwIGZpbGUgYW5kIG1hcCBvYmplY3QK
ICAkbWFwX3BhdGggPSAiIjsKICAkbWFwX2ZpbGUgPSAid21zdGVzdG1hcCIudW5pcWlkKCIiKS4i
Lm1hcCI7CgogIC8vbWFwIGZpbGUgaXMgd3JpdHRlbiBvdXQgZHluYW1pY2FsbHkKICAkZnAgPSBm
b3BlbigkbWFwX2ZpbGUsICJhIiApIG9yIGRpZSAoIkNvdWxkbid0IG9wZW4gJGZpbGVuYW1lIik7
CiAgZnB1dHMoJGZwLCIiLiJOQU1FIElUSVNXTVMiLiAiXG4iICk7CiAgZnB1dHMoJGZwLCIiLiJT
VEFUVVMgT04iLiAiXG4iICk7CiAgZnB1dHMoJGZwLCIiLiJTSVpFICIuICR0aGV3aWR0aC4gIiAi
IC4kdGhlaGVpZ2h0LiAiXG4iICk7CgogIGZwdXRzKCRmcCwiIi4iVU5JVFMgREQiLiAiXG4iICk7
CiAgZnB1dHMoJGZwLCIiLiJUUkFOU1BBUkVOVCAiLiR0aGV0cmFuc3BhcmVuY3kuICJcbiIgKTsK
CiAgJHIgPSBoZXhkZWMoc3Vic3RyKCR0aGViY29sb3IsIDIsIDIpKTsgCiAgJGcgPSBoZXhkZWMo
c3Vic3RyKCR0aGViY29sb3IsIDQsIDIpKTsgCiAgJGIgPSBoZXhkZWMoc3Vic3RyKCR0aGViY29s
b3IsIDYsIDIpKTsgCgogICRwdHNfciA9ICBoZXhkZWMoc3Vic3RyKCR0aGVzdHlsZSwgMiwgMikp
OwogICRwdHNfYiA9ICBoZXhkZWMoc3Vic3RyKCR0aGVzdHlsZSwgNCwgMikpOwogICRwdHNfZyA9
ICBoZXhkZWMoc3Vic3RyKCR0aGVzdHlsZSwgNiwgMikpOwoKICBmcHV0cygkZnAsIiIuIklNQUdF
Q09MT1IgIi4kci4iICIuJGcuIiAiLiRiLiAiXG4iICk7CiAgZnB1dHMoJGZwLCIiLiJTWU1CT0xT
RVQgc3ltc2V0LnN5bSIuICJcbiIgKTsKICBmcHV0cygkZnAsIiIuIkVYVEVOVCAiLiR0aGVleHRl
bnQuICJcbiIgKTsKCiAgZnB1dHMoJGZwLCIiLiJQUk9KRUNUSU9OIi4gIlxuIiApOwogIGZwdXRz
KCRmcCwiIi4iXCJpbml0PSIuJHRoZXNycy4iXCIiLiJcbiIgKTsKICBmcHV0cygkZnAsIiIuIkVO
RCIuICJcbiIgKTsKICBmcHV0cygkZnAsIiIuIldFQiIuICJcbiIgKTsKICBmcHV0cygkZnAsIiIu
IklNQUdFUEFUSCAvdXNyL3d3dy9odHRwZC9odGRvY3MvbWFwZGF0YS90bXAvIi4gIlxuIiApOwog
IGZwdXRzKCRmcCwiIi4iSU1BR0VVUkwgL21hcGRhdGEvdG1wLyIuICJcbiIgKTsKICBmcHV0cygk
ZnAsIiIuIk1FVEFEQVRBIi4gIlxuIiApOwogIGZwdXRzKCRmcCwiIi4iXCJ3bXNfdGl0bGVcIiBc
IldNUyBJVElTXCIiLiAiXG4iICk7CiAgZnB1dHMoJGZwLCIiLiJcIndtc19vbmxpbmVyZXNvdXJj
ZVwiIFwiaHR0cDovL3RoZWhvc3QvbWFwZGF0YS9pdGlzL3NjcmlwdG5hbWUucGhwP1wiIi4gIlxu
IiApOwogIGZwdXRzKCRmcCwiIi4iXCJ3bXNfc3JzXCIgXCJFUFNHOjQzMjYgRVBTRzo0MjMwNCBF
UFNHOjQyMTAxXCIiLiAiXG4iICk7CiAgZnB1dHMoJGZwLCIiLiJcIndtc19hYnN0cmFjdFwiIFwi
dGVzdGluZyBpdGlzIHdtc1wiIi4gIlxuIiApOwogIGZwdXRzKCRmcCwiIi4iXCJhY2Nlc3Njb25z
dHJhaW50c1wiIFwibm9uZVwiIi4gIlxuIiApOwogIGZwdXRzKCRmcCwiIi4iXCJ3bXNfYWRkcmVz
c3R5cGVcIiBcInBvc3RhbFwiIi4gIlxuIiApOwogIGZwdXRzKCRmcCwiIi4iXCJ3bXNfYWRkcmVz
c1wiIFwiOTYwIENhcmxpbmcgQXZlIFwiIi4gIlxuIiApOwogIGZwdXRzKCRmcCwiIi4iXCJ3bXNf
Y2l0eVwiIFwiT3R0YXdhXCIiLiAiXG4iICk7CiAgZnB1dHMoJGZwLCIiLiJcIndtc19zdGF0ZW9y
cHJvdmluY2VcIiBcIk9udGFyaW9cIiIuICJcbiIgKTsKICBmcHV0cygkZnAsIiIuIlwid21zX3Bv
c3Rjb2RlXCIgXCJLMUEgMEM2XCIiLiAiXG4iICk7CiAgZnB1dHMoJGZwLCIiLiJcIndtc19jb3Vu
dHJ5XCIgXCJDYW5hZGFcIiIuICJcbiIgKTsKICBmcHV0cygkZnAsIiIuIlwid21zX2NvbnRhY3Rl
bGVjdHJvbmljbWFpbGFkZHJlc3NcIiBcIm11bnJvZGJAYWdyLmdjLmNhLHBhZ3VyZWtkQGFnci5n
Yy5jYVwiIi4gIlxuIiApOwogIGZwdXRzKCRmcCwiIi4iXCJ3bXNfY29udGFjdGZhY3NpbWlsZXRl
bGVwaG9uZVwiIFwiNjEzLTc1OS0xOTM3XCIiLiAiXG4iICk7CiAgZnB1dHMoJGZwLCIiLiJcIndt
c19jb250YWN0b3JnYW5pemF0aW9uXCIgXCJBZ3JpY3VsdHVyZSBhbmQgQWdyaS1Gb29kIENhbmFk
YVwiIi4gIlxuIiApOwogIAogIGZwdXRzKCRmcCwiIi4iRU5EIi4gIlxuIiApOwogIGZwdXRzKCRm
cCwiIi4iRU5EIi4gIlxuIiApOwogIGZwdXRzKCRmcCwiIi4iTEFZRVIiLiAiXG4iICk7CiAgZnB1
dHMoJGZwLCIiLiJOQU1FIFwiIi4gJGxheWVybmFtZSAuIlwiIi4gIlxuIiApOwogIGZwdXRzKCRm
cCwiIi4iVFlQRSBQT0lOVCIuICJcbiIgKTsKICBmcHV0cygkZnAsIiIuIlNUQVRVUyBERUZBVUxU
Ii4gIlxuIiApOwogIGZwdXRzKCRmcCwiIi4iQ0xBU1MiLiAiXG4iICk7CiAgZnB1dHMoJGZwLCIi
LiJTWU1CT0wgXCJjaXJjbGVcIiIuICJcbiIgKTsKICBmcHV0cygkZnAsIiIuIlNJWkUgNSIuICJc
biIgKTsKICBmcHV0cygkZnAsIiIuIkNPTE9SICIuJHB0c19yLiIgIi4kcHRzX2cuIiAiLiRwdHNf
Yi4gIlxuIiApOwogIGZwdXRzKCRmcCwiIi4iRU5EIi4gIlxuIiApOwogIGZwdXRzKCRmcCwiIi4i
IFBST0pFQ1RJT04iLiAiXG4iICk7CiAgZnB1dHMoJGZwLCIiLiIgXCJpbml0PWVwc2c6NDMyNlwi
Ii4gIlxuIiApOwogIGZwdXRzKCRmcCwiIi4iIEVORCIuICJcbiIgKTsKICBmcHV0cygkZnAsIiIu
Ik1FVEFEQVRBIi4gIlxuIiApOwogIGZwdXRzKCRmcCwiIi4iIFwid21zX3RpdGxlXCIgXCJJdGlz
IHdtcyB0ZXN0IGxheWVyXCIiLiAiXG4iICk7CiAgZnB1dHMoJGZwLCIiLiIgXCJ3bXNfc3JzXCIg
XCJFUFNHOjQzMjZcIiIuICJcbiIgKTsKICBmcHV0cygkZnAsIiIuIiBcIndtc19hYnN0cmFjdFwi
IFwidGVzdGluZyBpdGlzIHdtcyBsYXllclwiIi4gIlxuIiApOwogIGZwdXRzKCRmcCwiIi4iIFwi
d21zX2V4dGVudFwiIFwiLTE4MCAtOTAgMTgwIDkwXCIiLiAiXG4iICk7CiAgZnB1dHMoJGZwLCIi
LiIgXCJ3bXNfb3BhcXVlXCIgXCIxXCIiLiAiXG4iICk7CiAgZnB1dHMoJGZwLCIiLiJFTkQiLiAi
XG4iICk7CiAgZnB1dHMoJGZwLCIiLiJFTkQiLiAiXG4iICk7CiAgZnB1dHMoJGZwLCIiLiJFTkQi
LiAiXG4iICk7CiAgZmNsb3NlKCAkZnApOwp9CgoKLy9oYW5kbGluZyBvZiBXTVMgVVJMIG5hbWUv
dmFsdWUgcGFpcnMgZm9yIEdFVE1BUCwgR0VUQ0FQQUJJTElUSUVTIG9yIEdFVEZFQVRVUkVJTkZP
CmlmICgkdGhlcmVxdWVzdCA9PSAiZ2V0bWFwIikKewogICAgLy8gKioqKioqKkdFVE1BUCoqKioq
KioKICAgIHhtbDJtYXAoKTsgLy9mdW5jdGlvbiB0byBhZGQgcG9pbnRzIHRvIHRoZSBtYXAKCiAg
ICAkaW1hZ2U9JG1hcC0+ZHJhdygpOwoKICAgIC8vY2FuIGNoYW5nZSBpbWFnZSBmb3JtYXQgaGVy
ZSBiYXNlZCBvbiByZXF1ZXN0CiAgICBpZiAoKCR0aGVmb3JtYXQgPT0gInBuZyIpIG9yICgkdGhl
Zm9ybWF0ID09ICJpbWFnZS9wbmciKSkgewogICAgICAkaW1hZ2VfdXJsPSRpbWFnZS0+c2F2ZVdl
YkltYWdlKE1TX1BORywxLDEsMCk7IC8vdGhpcyBpcyBmb3IgbWFwc2VydmVyIDMuNgogICAgfSBl
bHNlaWYgKCgkdGhlZm9ybWF0ID09ICJnaWYiKSBvciAoJHRoZWZvcm1hdCA9PSAiaW1hZ2UvZ2lm
IikpICB7CiAgICAgICRpbWFnZV91cmw9JGltYWdlLT5zYXZlV2ViSW1hZ2UoTVNfR0lGLDEsMSww
KTsgLy90aGlzIGlzIGZvciBtYXBzZXJ2ZXIgMy42CiAgICB9CgogICAgJHRoZWhlYWRlcj0iTG9j
YXRpb246IGh0dHA6Ly90aGVob3N0Ii4kaW1hZ2VfdXJsOwoKICAgIEhlYWRlcigkdGhlaGVhZGVy
KTsKCn0gZWxzZWlmICgkdGhlcmVxdWVzdCA9PSAiZ2V0Y2FwYWJpbGl0aWVzIikgewogICAgLy8g
KioqKioqKkdFVENBUEFCSUxJVElFUyoqKioqKioKCiAgaWYgKCRsYXllcm5hbWUgPD4gIiIpIAog
IHsKICAgICAgLy93cml0ZSBvdXQgYSBuZXcgbWFwZmlsZQogICAgICAvL3NldCBtYXAgZmlsZSBh
bmQgbWFwIG9iamVjdAogICAgICAkbWFwX3BhdGggPSAiIjsKICAgICAgJG1hcF9maWxlID0gIndt
c2dldGNhcCIudW5pcWlkKCIiKS4iLm1hcCI7CiAgICAKICAgICAgJGZwID0gZm9wZW4oJG1hcF9m
aWxlLCAiYSIgKSBvciBkaWUgKCJDb3VsZG4ndCBvcGVuICRmaWxlbmFtZSIpOwogICAgICBmcHV0
cygkZnAsIiIuIk5BTUUgSVRJU1dNUyIuICJcbiIgKTsKICAgICAgZnB1dHMoJGZwLCIiLiJTVEFU
VVMgT04iLiAiXG4iICk7CiAgICAgIGZwdXRzKCRmcCwiIi4iU0laRSA2MDAgMzAwIi4gIlxuIiAp
OwogICAgICBmcHV0cygkZnAsIiIuIlVOSVRTIEREIi4gIlxuIiApOwogICAgICBmcHV0cygkZnAs
IiIuIlRSQU5TUEFSRU5UIE9OIi4gIlxuIiApOwogICAgICBmcHV0cygkZnAsIiIuIklNQUdFQ09M
T1IgMjU1IDI1NSAyNTUiLiAiXG4iICk7CiAgICAgIGZwdXRzKCRmcCwiIi4iU1lNQk9MU0VUIHN5
bXNldC5zeW0iLiAiXG4iICk7CiAgICAgIGZwdXRzKCRmcCwiIi4iRVhURU5UIC0xODAgLTkwIDE4
MCA5MCAiLiAiXG4iICk7CiAgICAgIGZwdXRzKCRmcCwiIi4iUFJPSkVDVElPTiIuICJcbiIgKTsK
ICAgICAgZnB1dHMoJGZwLCIiLiJcImluaXQ9ZXBzZzo0MzI2XCIiLiJcbiIgKTsKICAgICAgZnB1
dHMoJGZwLCIiLiJFTkQiLiAiXG4iICk7CiAgICAgIGZwdXRzKCRmcCwiIi4iV0VCIi4gIlxuIiAp
OwogICAgICBmcHV0cygkZnAsIiIuIklNQUdFUEFUSCAvdXNyL3d3dy9odHRwZC9odGRvY3MvbWFw
ZGF0YS90bXAvIi4gIlxuIiApOwogICAgICBmcHV0cygkZnAsIiIuIklNQUdFVVJMIC9tYXBkYXRh
L3RtcC8iLiAiXG4iICk7CiAgICAgIGZwdXRzKCRmcCwiIi4iTUVUQURBVEEiLiAiXG4iICk7CiAg
ICAgIGZwdXRzKCRmcCwiIi4iXCJ3bXNfdGl0bGVcIiBcIldNUyBJVElTXCIiLiAiXG4iICk7CiAg
ICAgIGZwdXRzKCRmcCwiIi4iXCJ3bXNfb25saW5lcmVzb3VyY2VcIiBcImh0dHA6Ly90aGVob3N0
L21hcGRhdGEvaXRpcy9zY3JpcHRuYW1lLnBocD9cIiIuICJcbiIgKTsKICAgICAgZnB1dHMoJGZw
LCIiLiJcIndtc19zcnNcIiBcIkVQU0c6NDMyNiBFUFNHOjQyMzA0IEVQU0c6NDIxMDFcIiIuICJc
biIgKTsKICAgICAgZnB1dHMoJGZwLCIiLiJcIndtc19hYnN0cmFjdFwiIFwidGVzdGluZyBpdGlz
IHdtc1wiIi4gIlxuIiApOwogICAgICBmcHV0cygkZnAsIiIuIlwiYWNjZXNzY29uc3RyYWludHNc
IiBcIm5vbmVcIiIuICJcbiIgKTsKICAgICAgZnB1dHMoJGZwLCIiLiJcIndtc19hZGRyZXNzdHlw
ZVwiIFwicG9zdGFsXCIiLiAiXG4iICk7CiAgICAgIGZwdXRzKCRmcCwiIi4iXCJ3bXNfYWRkcmVz
c1wiIFwiOTYwIENhcmxpbmcgQXZlIFwiIi4gIlxuIiApOwogICAgICBmcHV0cygkZnAsIiIuIlwi
d21zX2NpdHlcIiBcIk90dGF3YVwiIi4gIlxuIiApOwogICAgICBmcHV0cygkZnAsIiIuIlwid21z
X3N0YXRlb3Jwcm92aW5jZVwiIFwiT250YXJpb1wiIi4gIlxuIiApOwogICAgICBmcHV0cygkZnAs
IiIuIlwid21zX3Bvc3Rjb2RlXCIgXCJLMUEgMEM2XCIiLiAiXG4iICk7CiAgICAgIGZwdXRzKCRm
cCwiIi4iXCJ3bXNfY291bnRyeVwiIFwiQ2FuYWRhXCIiLiAiXG4iICk7CiAgICAgIGZwdXRzKCRm
cCwiIi4iXCJ3bXNfY29udGFjdGVsZWN0cm9uaWNtYWlsYWRkcmVzc1wiIFwibXVucm9kYkBhZ3Iu
Z2MuY2EscGFndXJla2RAYWdyLmdjLmNhXCIiLiAiXG4iICk7CiAgICAgIGZwdXRzKCRmcCwiIi4i
XCJ3bXNfY29udGFjdGZhY3NpbWlsZXRlbGVwaG9uZVwiIFwiNjEzLTc1OS0xOTM3XCIiLiAiXG4i
ICk7CiAgICAgIGZwdXRzKCRmcCwiIi4iXCJ3bXNfY29udGFjdG9yZ2FuaXphdGlvblwiIFwiQWdy
aWN1bHR1cmUgYW5kIEFncmktRm9vZCBDYW5hZGFcIiIuICJcbiIgKTsKICAgICAgZnB1dHMoJGZw
LCIiLiJFTkQiLiAiXG4iICk7CiAgICAgIGZwdXRzKCRmcCwiIi4iRU5EIi4gIlxuIiApOwogICAg
ICBmcHV0cygkZnAsIiIuIkxBWUVSIi4gIlxuIiApOwogICAgICBmcHV0cygkZnAsIiIuIk5BTUUg
XCIiLiAkbGF5ZXJuYW1lIC4iXCIiLiAiXG4iICk7CiAgICAgIGZwdXRzKCRmcCwiIi4iVFlQRSBQ
T0lOVCIuICJcbiIgKTsKICAgICAgZnB1dHMoJGZwLCIiLiJTVEFUVVMgREVGQVVMVCIuICJcbiIg
KTsKICAgICAgZnB1dHMoJGZwLCIiLiJDTEFTUyIuICJcbiIgKTsKICAgICAgZnB1dHMoJGZwLCIi
LiJTWU1CT0wgXCJjaXJjbGVcIiIuICJcbiIgKTsKICAgICAgZnB1dHMoJGZwLCIiLiJTSVpFIDUi
LiAiXG4iICk7CiAgICAgIGZwdXRzKCRmcCwiIi4iQ09MT1IgMjU1IDAgMCIuICJcbiIgKTsKICAg
ICAgZnB1dHMoJGZwLCIiLiJFTkQiLiAiXG4iICk7CiAgICAgIGZwdXRzKCRmcCwiIi4iIFBST0pF
Q1RJT04iLiAiXG4iICk7CiAgICAgIGZwdXRzKCRmcCwiIi4iIFwiaW5pdD1lcHNnOjQzMjZcIiIu
ICJcbiIgKTsKICAgICAgZnB1dHMoJGZwLCIiLiIgRU5EIi4gIlxuIiApOwogICAgICBmcHV0cygk
ZnAsIiIuIk1FVEFEQVRBIi4gIlxuIiApOwogICAgICBmcHV0cygkZnAsIiIuIiBcIndtc190aXRs
ZVwiIFwiSXRpcyB3bXMgdGVzdCBsYXllclwiIi4gIlxuIiApOwogICAgICBmcHV0cygkZnAsIiIu
IiBcIndtc19zcnNcIiBcIkVQU0c6NDMyNlwiIi4gIlxuIiApOwogICAgICBmcHV0cygkZnAsIiIu
IiBcIndtc19hYnN0cmFjdFwiIFwidGVzdGluZyBpdGlzIHdtcyBsYXllclwiIi4gIlxuIiApOwog
ICAgICBmcHV0cygkZnAsIiIuIiBcIndtc19leHRlbnRcIiBcIi0xODAgLTkwIDE4MCA5MFwiIi4g
IlxuIiApOwogICAgICBmcHV0cygkZnAsIiIuIiBcIndtc19vcGFxdWVcIiBcIjFcIiIuICJcbiIg
KTsKICAgICAgZnB1dHMoJGZwLCIiLiJFTkQiLiAiXG4iICk7CiAgICAgIGZwdXRzKCRmcCwiIi4i
RU5EIi4gIlxuIiApOwogICAgICBmcHV0cygkZnAsIiIuIkVORCIuICJcbiIgKTsKICAgICAgZmNs
b3NlKCAkZnApOwogICAgCiAgICAgICRjYXBfaGVhZGVyID0gIkxvY2F0aW9uOiBodHRwOi8vdGhl
aG9zdC9jZ2ktYmluL21hcHNlcnZlci9tYXBzZXJ2P1ZFUlNJT049MS4xLjAmUkVRVUVTVD1HZXRD
YXBhYmlsaXRpZXMmbWFwPS91c3Ivd3d3L2h0dHBkL2h0ZG9jcy9tYXBkYXRhL2l0aXMvIiAuICRt
YXBfZmlsZTsKICAgICAKICAgICAgSGVhZGVyKCRjYXBfaGVhZGVyKTsKICB9CgogIGVsc2UgCiAg
eyAvL25vIGxheWVyIHdhcyBzcGVjaWZpZWQgc28gdXNlIG1vY2sgdXAgb2YgbWFwZmlsZQogICAg
JHRoZV93bXNtYXAgPSB1cmxlbmNvZGUoIi91c3Ivd3d3L2h0dHBkL2h0ZG9jcy9tYXBkYXRhL2l0
aXMvaXRpc3dtcy5tYXAiKTsgCiAgICAkY2FwX2hlYWRlciA9ICJMb2NhdGlvbjogaHR0cDovL3Ro
ZWhvc3QvY2dpLWJpbi9tYXBzZXJ2ZXIvbWFwc2Vydj9WRVJTSU9OPTEuMS4wJlJFUVVFU1Q9R2V0
Q2FwYWJpbGl0aWVzJm1hcD0iIC4gJHRoZV93bXNtYXA7CiAgIAogICAgSGVhZGVyKCRjYXBfaGVh
ZGVyKTsKICB9Cgp9IGVsc2VpZiAoJHRoZXJlcXVlc3QgPT0gImdldGZlYXR1cmVpbmZvIikgewog
ICAgLy8gKioqKioqKkdFVEZFQVRVUkVJTkZPKioqKioqKgogICAgLy8gdGhlIHVzZXIgaXMgcXVl
cnlpbmcKICAgIHhtbDJtYXAoKTsgLy9mdW5jdGlvbiB0byBhZGQgcG9pbnRzIHRvIHRoZSBtYXAK
ICAgIAogICAgLy93aGVyZSB0aGUgdXNlciBjbGlja2VkCiAgICAkdGhlX3g9KCRIVFRQX0dFVF9W
QVJTWyJYIl0pOwogICAgJHRoZV95PSgkSFRUUF9HRVRfVkFSU1siWSJdKTsgICAgIAoKICAgIC8v
IHpvb20gaW4gbW9yZSBmb3IgbW9yZSBhY2N1cmFjeQogICAgJG15X3BvaW50ID0gbXNfbmV3cG9p
bnRPYmooKTsgLy8gdGhpcyBpcyB0aGUgcG9pbnQgdGhlIHVzZXIgY2xpY2tlZAogICAgJG15X3Bv
aW50LT5zZXRYWSgkdGhlX3gsJHRoZV95KTsKICAgICR6b29tX2ZhY3Rvcj02MDsKICAgICRteV9l
eHRlbnQgPSBtc19uZXdSZWN0T2JqKCk7CiAgICAkZXh0ZW50X3RvX3NldCA9IGV4cGxvZGUoIiAi
LCR0aGVleHRlbnQpOwogICAgJG1hcC0+c2V0ZXh0ZW50KCRleHRlbnRfdG9fc2V0WzBdLCRleHRl
bnRfdG9fc2V0WzFdLCRleHRlbnRfdG9fc2V0WzJdLCRleHRlbnRfdG9fc2V0WzNdKTsKICAgICRt
eV9leHRlbnQtPnNldGV4dGVudCgkZXh0ZW50X3RvX3NldFswXSwkZXh0ZW50X3RvX3NldFsxXSwk
ZXh0ZW50X3RvX3NldFsyXSwkZXh0ZW50X3RvX3NldFszXSk7CgogICAgJG1hcC0+em9vbXBvaW50
KCR6b29tX2ZhY3RvciwkbXlfcG9pbnQsNjAwLDMwMCwkbXlfZXh0ZW50KTsKCiAgICAvLyBjb252
ZXJ0IGZyb20gcGl4ZWxzIHRvIG1hcCBjb29yZGluYXRlcwogICAgJHRlc3R4ID0gR01hcFBpeDJH
ZW8oJHRoZV94LDAsNjAwLCRtYXAtPmV4dGVudC0+bWlueCwkbWFwLT5leHRlbnQtPm1heHgsMCk7
CiAgICAkdGVzdHkgPSBHTWFwUGl4MkdlbygkdGhlX3ksMCwzMDAsJG1hcC0+ZXh0ZW50LT5taW55
LCRtYXAtPmV4dGVudC0+bWF4eSwwKTsKCiAgICAvLyBzZXQgbmV3IHBvaW50IHRvIHVzZSBmb3Ig
Y2hlY2tpbmcgZGlzdGFuY2UgZnJvbSBjbGljayB0byBhY3R1YWwgcG9pbnRzCiAgICAkbXlwb2lu
dDI9bXNfbmV3cG9pbnRPYmooKTsKICAgICRteXBvaW50Mi0+c2V0WFkoJHRlc3R4LCR0ZXN0eSk7
CiAgICAkY2xvc2VzdCA9IDE1MDAwMDAwOyAvL3RoaXMgaXMgaW4gbWV0ZXJzLiBTZXQgdG8gYSBs
YXJnZSBudW1iZXIsIGluIG1hcCB1bml0cy4KCiAgICAkbnVtcm93cyA9IGNvdW50KCRsb25nKTsK
ICAgIGZvciAoJGkgPSAwIDsgJGkgPCAkbnVtcm93czsgKyskaSkKICAgIHsKICAgICAgJHRyYWNr
aW5nbGF5ZXJwdD1tc19uZXdwb2ludE9iaigpOwogICAgICAkdHJhY2tpbmdsYXllcnB0LT5zZXRY
WSgkbG9uZ1skaV0sJGxhdFskaV0pOwogICAgICAKICAgICAgLy9kZXRlcm1pbmUgd2hpY2ggcG9p
bnQgdGhlIHVzZXIgaXMgY2xpY2tpbmcgb24KICAgICAgJGRpc3QgPSAkbXlwb2ludDItPmRpc3Rh
bmNldG9wb2ludCgkdHJhY2tpbmdsYXllcnB0KTsKICAgICAgaWYgKCRkaXN0IDw9ICRjbG9zZXN0
KQogICAgICB7IC8vIGNvbXBhcmluZyBlYWNoIGRpc3QgY2FsYyB0byBwcmV2aW91cyBvbmVzIHRv
IGdldCB0aGUgY2xvc2VzdAogICAgICAgICAkY2xvc2VzdCA9ICRkaXN0OwogICAgICAgICAvLyB0
aGlzIGlzIHRoZSBjbG9zZXN0IHBvaW50IHNvIGZhciBzbyBzZXQgdGhlIFVSTCB0byBwdXQgaW4g
dGhlIHF1ZXJ5IHJlc3VsdCBwb3AgdXAgd2luZG93CiAgICAgICAgICR0aGV1cmwgPSAiaHR0cDov
L3RoZWhvc3QvaXRpc3Rlc3RkZXYvYmNpbiU1RnNwZUNzJTJFY29vcmQ/cCU1RmxhdD0iLiR0cmFj
a2luZ2xheWVycHQtPnkuIiZwJTVGbG9uZz0iLiR0cmFja2luZ2xheWVycHQtPnguIiZwJTVGdGF4
b249Ii4kbGF5ZXJuYW1lOwogICAgICB9CiAgICAgfSAvLyBlbmQgdGhlIHdoaWxlIGxvb3AgdGhy
b3VnaCB0aGUgdGF4b24gcG9pbnRzCgogICAgIGVjaG8gIjxodG1sPjxib2R5PiI7CgogICAgIGVj
aG8gIjxhIGhyZWY9XCIiIC4gJHRoZXVybCAuICJcIj4iIC4gJHRoZXVybCAuICI8L2E+IjsKICAg
ICBlY2hvICI8L2JvZHk+PC9odG1sPiI7CiAgICB9Cgo/PgoKCg==

--=_82DCC8D6.E485E258--



More information about the mapserver-users mailing list